ampache_react/app/reducers/auth.js

90 lines
2.4 KiB
JavaScript

import Cookies from "js-cookie";
import { LOGIN_USER_REQUEST, LOGIN_USER_SUCCESS, LOGIN_USER_FAILURE, LOGIN_USER_EXPIRED, LOGOUT_USER } from "../actions";
import { createReducer } from "../utils";
import { i18nRecord } from "../models/i18n";
import { tokenRecord, stateRecord } from "../models/auth";
/**
* Initial state
*/
var initialState = new stateRecord();
const initialToken = Cookies.getJSON("token");
if (initialToken) {
initialToken.expires = new Date(initialToken.expires);
initialState = initialState.set(
"token",
new tokenRecord({ token: initialToken.token, expires: new Date(initialToken.expires) })
);
}
const initialUsername = Cookies.get("username");
if (initialUsername) {
initialState = initialState.set(
"username",
initialUsername
);
}
const initialEndpoint = Cookies.get("endpoint");
if (initialEndpoint) {
initialState = initialState.set(
"endpoint",
initialEndpoint
);
}
if (initialUsername && initialEndpoint) {
initialState = initialState.set(
"rememberMe",
true
);
}
/**
* Reducers
*/
export default createReducer(initialState, {
[LOGIN_USER_REQUEST]: () => {
return new stateRecord({
isAuthenticating: true,
info: new i18nRecord({
id: "app.login.connecting",
values: {}
})
});
},
[LOGIN_USER_SUCCESS]: (state, payload) => {
return new stateRecord({
"isAuthenticated": true,
"token": new tokenRecord(payload.token),
"username": payload.username,
"endpoint": payload.endpoint,
"rememberMe": payload.rememberMe,
"info": new i18nRecord({
id: "app.login.success",
values: {username: payload.username}
}),
"timerID": payload.timerID
});
},
[LOGIN_USER_FAILURE]: (state, payload) => {
return new stateRecord({
"error": payload.error
});
},
[LOGIN_USER_EXPIRED]: (state, payload) => {
return new stateRecord({
"isAuthenticated": false,
"error": payload.error
});
},
[LOGOUT_USER]: () => {
return new stateRecord({
info: new i18nRecord({
id: "app.login.byebye",
values: {}
})
});
}
});