90 lines
2.4 KiB
JavaScript
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: {}
|
|
})
|
|
});
|
|
}
|
|
});
|