@twreporter/universal-header
Version:
Universal header of TWReporter sites
98 lines (95 loc) • 2.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = auth;
var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
var _jwt = _interopRequireDefault(require("../utils/jwt"));
var _get = _interopRequireDefault(require("lodash/get"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// lodash
var _ = {
get: _get["default"]
};
var initState = {
accessToken: '',
actionType: '',
lastAction: null,
isAuthed: false,
isRequesting: false,
userInfo: null
};
/**
* @param {Object} state - redux state
* @param {bool} state.isRequesting - requst is in progress
* @param {bool} state.isAuthed - indicates if authorization succeeds
* @param {Object} state.lastAction - last redux action for debugging
* @param {string} state.lastAction.actionType
* @param {Object} state.lastAction.actionPayload
* @param {Object} state.userInfo - user information
* @param {number} state.userInfo.user_id - id of user
* @param {string} state.userInfo.jwt - access_token granted for the user
* @param {string} state.userInfo.email - email of the user
* @param {Object} action - redux action
* @param {string} action.type
* @param {Object} action.payload - response of API server
* @param {string} action.payload.url - request endpoint
* @param {Object} action.payload.options - request options
* @param {string} action.payload.message - error message
*/
function auth() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initState;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case _actionTypes["default"].AUTH_CLEAR:
{
// return empty state
return initState;
}
case _actionTypes["default"].REQUEST_AUTH:
{
return {
accessToken: initState.accessToken,
lastAction: {
type: action.type,
payload: action.payload
},
isAuthed: false,
isRequesting: true,
userInfo: initState.userInfo
};
}
case _actionTypes["default"].AUTH_FAILURE:
{
return {
accessToken: initState.accessToken,
lastAction: {
type: action.type,
payload: action.payload
},
isAuthed: false,
isRequesting: false,
userInfo: initState.userInfo
};
}
case _actionTypes["default"].AUTH_SUCCESS:
{
var jwt = _.get(action, 'payload.data.jwt', '');
var userInfo = _jwt["default"].decodePayload(jwt);
return {
accessToken: jwt,
lastAction: {
type: action.type,
payload: action.payload
},
isAuthed: true,
isRequesting: false,
userInfo: userInfo
};
}
default:
{
return state;
}
}
}