diff options
Diffstat (limited to 'web/src/reducers/auth.js')
-rw-r--r-- | web/src/reducers/auth.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/web/src/reducers/auth.js b/web/src/reducers/auth.js new file mode 100644 index 000000000..a06bf5412 --- /dev/null +++ b/web/src/reducers/auth.js @@ -0,0 +1,76 @@ +// Copyright 2020 Red Hat, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { + AUTH_CONFIG_REQUEST, + AUTH_CONFIG_SUCCESS, + AUTH_CONFIG_FAIL, +} from '../actions/auth' + +// Load the defaults from local storage if it exists so that we +// construct the same AuthProvider we had before we navigated to the +// IDP redirect. +const stored_params = localStorage.getItem('zuul_auth_params') +let auth_params = { + authority: '', + clientId: '', + scope: '', +} +if (stored_params !== null) { + auth_params = JSON.parse(stored_params) +} + +export default (state = { + isFetching: false, + info: null, + auth_params: auth_params, +}, action) => { + const json_params = JSON.stringify(action.auth_params) + switch (action.type) { + case AUTH_CONFIG_REQUEST: + return { + ...state, + isFetching: true, + info: null, + } + case AUTH_CONFIG_SUCCESS: + // Make sure we only update the auth_params object if something actually + // changes. Otherwise, it will re-create the AuthProvider which + // may cause errors with auth state if it happens concurrently with + // a login. + if (json_params === JSON.stringify(state.auth_params)) { + return { + ...state, + isFetching: false, + info: action.info, + } + } else { + localStorage.setItem('zuul_auth_params', json_params) + return { + ...state, + isFetching: false, + info: action.info, + auth_params: action.auth_params, + } + } + case AUTH_CONFIG_FAIL: + return { + ...state, + isFetching: false, + info: null, + } + default: + return state + } +} |