| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /* eslint-disable complexity */
- var util = require('./util');
- var cookies = require('./cookies');
- var storageUtil = require('./storageUtil');
- var Q = require('q');
- var AuthApiError = require('./errors/AuthApiError');
- var config = require('./config');
-
- function httpRequest(sdk, options) {
- options = options || {};
- var url = options.url,
- method = options.method,
- args = options.args,
- saveAuthnState = options.saveAuthnState,
- accessToken = options.accessToken,
- httpCache = storageUtil.getHttpCache();
-
- if (options.cacheResponse) {
- var cacheContents = httpCache.getStorage();
- var cachedResponse = cacheContents[url];
- if (cachedResponse && Date.now()/1000 < cachedResponse.expiresAt) {
- return Q.resolve(cachedResponse.response);
- }
- }
-
- var headers = {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- 'X-Okta-User-Agent-Extended': sdk.userAgent
- };
- util.extend(headers, sdk.options.headers, options.headers);
-
- if (accessToken && util.isString(accessToken)) {
- headers['Authorization'] = 'Bearer ' + accessToken;
- }
-
- var ajaxOptions = {
- headers: headers,
- data: args || undefined
- };
-
- var err, res;
- return new Q(sdk.options.ajaxRequest(method, url, ajaxOptions))
- .then(function(resp) {
- res = resp.responseText;
- if (res && util.isString(res)) {
- res = JSON.parse(res);
- }
-
- if (saveAuthnState) {
- if (!res.stateToken) {
- cookies.deleteCookie(config.STATE_TOKEN_COOKIE_NAME);
- }
- }
-
- if (res && res.stateToken && res.expiresAt) {
- cookies.setCookie(config.STATE_TOKEN_COOKIE_NAME, res.stateToken, res.expiresAt);
- }
-
- if (res && options.cacheResponse) {
- httpCache.updateStorage(url, {
- expiresAt: Math.floor(Date.now()/1000) + config.DEFAULT_CACHE_DURATION,
- response: res
- });
- }
-
- return res;
- })
- .fail(function(resp) {
- var serverErr = resp.responseText || {};
- if (util.isString(serverErr)) {
- try {
- serverErr = JSON.parse(serverErr);
- } catch (e) {
- serverErr = {
- errorSummary: 'Unknown error'
- };
- }
- }
-
- if (resp.status >= 500) {
- serverErr.errorSummary = 'Unknown error';
- }
-
- if (sdk.options.transformErrorXHR) {
- resp = sdk.options.transformErrorXHR(util.clone(resp));
- }
-
- err = new AuthApiError(serverErr, resp);
-
- if (err.errorCode === 'E0000011') {
- cookies.deleteCookie(config.STATE_TOKEN_COOKIE_NAME);
- }
-
- throw err;
- });
- }
-
- function get(sdk, url, options) {
- url = util.isAbsoluteUrl(url) ? url : sdk.options.url + url;
- var getOptions = {
- url: url,
- method: 'GET'
- };
- util.extend(getOptions, options);
- return httpRequest(sdk, getOptions);
- }
-
- function post(sdk, url, args, options) {
- url = util.isAbsoluteUrl(url) ? url : sdk.options.url + url;
- var postOptions = {
- url: url,
- method: 'POST',
- args: args,
- saveAuthnState: true
- };
- util.extend(postOptions, options);
- return httpRequest(sdk, postOptions);
- }
-
- module.exports = {
- get: get,
- post: post,
- httpRequest: httpRequest
- };
|