diff --git a/public/init-swagger-ui.js b/public/init-swagger-ui.js index bb06f3f26..8f4ee3c8a 100644 --- a/public/init-swagger-ui.js +++ b/public/init-swagger-ui.js @@ -25,26 +25,52 @@ function loadSwaggerUI(userOptions = {}) { const storageKey = 'nelmio_api_auth'; - // if we have auth in storage use it - if (sessionStorage.getItem(storageKey)) { - try { - ui.authActions.authorize(JSON.parse(sessionStorage.getItem(storageKey))); - } catch (ignored) { - // catch any errors here so it does not stop script execution + function getAuthorizationsFromStorage() { + if (sessionStorage.getItem(storageKey)) { + try { + return JSON.parse(sessionStorage.getItem(storageKey)); + } catch (ignored) { + // catch any errors here so it does not stop script execution + } } + + return {}; + } + + // if we have auth in storage use it + try { + const currentAuthorizations = getAuthorizationsFromStorage(); + Object.keys(currentAuthorizations).forEach(k => ui.authActions.authorize({[k]: currentAuthorizations[k]})); + } catch (ignored) { + // catch any errors here so it does not stop script execution } // hook into authorize to store the auth in local storage when user performs authorization const currentAuthorize = ui.authActions.authorize; ui.authActions.authorize = function (payload) { - sessionStorage.setItem(storageKey, JSON.stringify(payload)); + try { + sessionStorage.setItem(storageKey, JSON.stringify(Object.assign( + getAuthorizationsFromStorage(), + payload + ))); + } catch (ignored) { + // catch any errors here so it does not stop script execution + } + return currentAuthorize(payload); }; // hook into logout to clear auth from storage if user logs out const currentLogout = ui.authActions.logout; ui.authActions.logout = function (payload) { - sessionStorage.removeItem(storageKey); + try { + let currentAuth = getAuthorizationsFromStorage(); + payload.forEach(k => delete currentAuth[k]); + sessionStorage.setItem(storageKey, JSON.stringify(currentAuth)); + } catch (ignored) { + // catch any errors here so it does not stop script execution + } + return currentLogout(payload); };