UNPKG

vue-adal

Version:

Vue plugin for using Azure Active Directory

97 lines (89 loc) 2.81 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.AxiosAuthHttp = undefined; var _ = require('./'); const getToken = (resource, http, cb) => { _.AuthenticationContext.acquireToken(resource, (err, token) => { if (err) { let errCode = err.split(':')[0]; switch (errCode) { case 'AADSTS50058': // Need to prompt for user sign in _.AuthenticationContext.login(); break; case 'AADSTS65001': // Token is invalid; grab a new one _.AuthenticationContext.acquireTokenRedirect(resource); break; case 'AADSTS16000': // No Access default: // Need a pop-up forcing a login _.AuthenticationContext.login(); break; } cb(); return; } http.defaults.headers['Authorization'] = `BEARER ${token}`; cb(); }); }; class AxiosAuthHttp { static createNewClient(options) { if (options == null) { throw new Error('Provided options for auth-http are null!'); } if (options.axios == null) { throw new Error('options.axios is required to generate a new http client'); } if (options.resourceId == null) { throw new Error('options.resourceId is required to acquire an auth token'); } let axios = options.axios; let http = axios.create({ baseURL: options.baseUrl, headers: { Authorization: null } }); http.interceptors.response.use(response => { return response; }, error => { if (error.response.status === 401) { _.AuthenticationContext.adalContext.clearCacheForResource(options.resourceId); return new Promise((resolve, reject) => getToken(options.resourceId, http, () => { let config = error.response.config; config.headers.Authorization = http.defaults.headers['Authorization']; http({ method: config.method, url: config.url, data: config.data, headers: { 'Accept': config.headers['Accept'], 'Authorization': config.headers['Authorization'], 'Content-Type': config.headers['Content-Type'] } }).then(res => resolve(res), err => reject(err)); })); } else { return Promise.reject(error); } }); if (options.router == null) { return http; } // Set up the router hooks for this resource options.router.beforeEach((to, from, next) => { getToken(options.resourceId, http, () => { if (options.onTokenSuccess instanceof Function) { options.onTokenSuccess(http, _.AuthenticationContext); } next(); }); }); return http; } } exports.AxiosAuthHttp = AxiosAuthHttp;