ampache_react/app/reducers/auth.js

90 lines
2.4 KiB
JavaScript
Raw Normal View History

2016-07-07 23:23:18 +02:00
import Cookies from "js-cookie";
2016-08-06 17:20:02 +02:00
import { LOGIN_USER_REQUEST, LOGIN_USER_SUCCESS, LOGIN_USER_FAILURE, LOGIN_USER_EXPIRED, LOGOUT_USER } from "../actions";
2016-07-07 23:23:18 +02:00
import { createReducer } from "../utils";
import { i18nRecord } from "../models/i18n";
import { tokenRecord, stateRecord } from "../models/auth";
2016-07-07 23:23:18 +02:00
/**
* Initial state
*/
var initialState = new stateRecord();
const initialToken = Cookies.getJSON("token");
2016-07-07 23:23:18 +02:00
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
);
2016-07-07 23:23:18 +02:00
}
/**
* Reducers
*/
2016-07-07 23:23:18 +02:00
export default createReducer(initialState, {
[LOGIN_USER_REQUEST]: () => {
return new stateRecord({
2016-07-07 23:23:18 +02:00
isAuthenticating: true,
info: new i18nRecord({
2016-07-31 01:05:08 +02:00
id: "app.login.connecting",
values: {}
})
2016-07-07 23:23:18 +02:00
});
},
[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({
2016-07-31 01:05:08 +02:00
id: "app.login.success",
values: {username: payload.username}
}),
"timerID": payload.timerID
2016-07-07 23:23:18 +02:00
});
},
[LOGIN_USER_FAILURE]: (state, payload) => {
return new stateRecord({
"error": payload.error
2016-07-07 23:23:18 +02:00
});
},
2016-08-06 17:20:02 +02:00
[LOGIN_USER_EXPIRED]: (state, payload) => {
return new stateRecord({
"isAuthenticated": false,
"error": payload.error
});
},
[LOGOUT_USER]: () => {
return new stateRecord({
info: new i18nRecord({
2016-07-31 01:05:08 +02:00
id: "app.login.byebye",
values: {}
})
2016-07-07 23:23:18 +02:00
});
}
});