2020-01-20 15:54:29 +01:00
|
|
|
import jwtDecode from 'jwt-decode'
|
|
|
|
|
|
|
|
const authProvider = {
|
|
|
|
login: ({ username, password }) => {
|
2020-01-25 23:10:16 +01:00
|
|
|
let url = '/app/login'
|
|
|
|
if (localStorage.getItem('initialAccountCreation')) {
|
|
|
|
url = '/app/createAdmin'
|
|
|
|
}
|
|
|
|
const request = new Request(url, {
|
2020-01-20 15:54:29 +01:00
|
|
|
method: 'POST',
|
|
|
|
body: JSON.stringify({ username, password }),
|
|
|
|
headers: new Headers({ 'Content-Type': 'application/json' })
|
|
|
|
})
|
|
|
|
return fetch(request)
|
|
|
|
.then((response) => {
|
|
|
|
if (response.status < 200 || response.status >= 300) {
|
|
|
|
throw new Error(response.statusText)
|
|
|
|
}
|
|
|
|
return response.json()
|
|
|
|
})
|
|
|
|
.then((response) => {
|
|
|
|
// Validate token
|
|
|
|
jwtDecode(response.token)
|
2020-01-25 23:10:16 +01:00
|
|
|
localStorage.removeItem('initialAccountCreation')
|
2020-01-20 15:54:29 +01:00
|
|
|
localStorage.setItem('token', response.token)
|
|
|
|
localStorage.setItem('name', response.name)
|
|
|
|
localStorage.setItem('username', response.username)
|
|
|
|
return response
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
if (
|
|
|
|
error.message === 'Failed to fetch' ||
|
|
|
|
error.stack === 'TypeError: Failed to fetch'
|
|
|
|
) {
|
|
|
|
throw new Error('errors.network_error')
|
|
|
|
}
|
|
|
|
|
|
|
|
throw new Error(error)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
logout: () => {
|
|
|
|
removeItems()
|
|
|
|
return Promise.resolve()
|
|
|
|
},
|
|
|
|
|
2020-01-25 23:10:16 +01:00
|
|
|
checkAuth: () =>
|
|
|
|
localStorage.getItem('token') ? Promise.resolve() : Promise.reject(),
|
2020-01-20 15:54:29 +01:00
|
|
|
|
|
|
|
checkError: (error) => {
|
2020-01-25 23:10:16 +01:00
|
|
|
const { status, message } = error
|
|
|
|
if (message === 'no users created') {
|
|
|
|
localStorage.setItem('initialAccountCreation', 'true')
|
|
|
|
}
|
2020-01-20 15:54:29 +01:00
|
|
|
if (status === 401 || status === 403) {
|
|
|
|
removeItems()
|
|
|
|
return Promise.reject()
|
|
|
|
}
|
|
|
|
return Promise.resolve()
|
|
|
|
},
|
|
|
|
|
|
|
|
getPermissions: (params) => Promise.resolve()
|
|
|
|
}
|
|
|
|
|
|
|
|
const removeItems = () => {
|
|
|
|
localStorage.removeItem('token')
|
|
|
|
localStorage.removeItem('name')
|
|
|
|
localStorage.removeItem('username')
|
|
|
|
}
|
|
|
|
|
|
|
|
export default authProvider
|