Skip to content

Commit

Permalink
Support multiple authorisations to be stored and restored
Browse files Browse the repository at this point in the history
  • Loading branch information
bobvandevijver authored Jul 9, 2024
1 parent 2f20162 commit 32df257
Showing 1 changed file with 34 additions and 8 deletions.
42 changes: 34 additions & 8 deletions public/init-swagger-ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};

Expand Down

0 comments on commit 32df257

Please sign in to comment.