1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-07 04:20:05 +00:00

Merge branch 'api-execution' of https://github.com/sasjs/adapter into api-execution

This commit is contained in:
Krishna Acondy
2020-07-22 06:42:53 +01:00
3 changed files with 34 additions and 17 deletions

View File

@@ -20,6 +20,7 @@ export class SASViyaApiClient {
private serverUrl: string, private serverUrl: string,
private rootFolderName: string, private rootFolderName: string,
private contextName: string, private contextName: string,
private setCsrfToken: (csrfToken: CsrfToken) => void,
private rootFolderMap = new Map<string, Job[]>() private rootFolderMap = new Map<string, Job[]>()
) { ) {
if (!rootFolderName) { if (!rootFolderName) {
@@ -28,7 +29,7 @@ export class SASViyaApiClient {
} }
private csrfToken: CsrfToken | null = null; private csrfToken: CsrfToken | null = null;
private rootFolder: Folder | null = null; private rootFolder: Folder | null = null;
private sessionManager = new SessionManager(this.serverUrl, this.contextName); private sessionManager = new SessionManager(this.serverUrl, this.contextName, this.setCsrfToken);
/** /**
* Returns a map containing the directory structure in the currently set root folder. * Returns a map containing the directory structure in the currently set root folder.
@@ -1025,8 +1026,9 @@ export class SASViyaApiClient {
return `/folders/folders/${folder.id}`; return `/folders/folders/${folder.id}`;
} }
setCsrfToken = (csrfToken: CsrfToken) => { setCsrfTokenLocal = (csrfToken: CsrfToken) => {
this.csrfToken = csrfToken; this.csrfToken = csrfToken;
this.setCsrfToken(csrfToken);
}; };
private async request<T>( private async request<T>(
@@ -1040,6 +1042,6 @@ export class SASViyaApiClient {
[this.csrfToken.headerName]: this.csrfToken.value, [this.csrfToken.headerName]: this.csrfToken.value,
}; };
} }
return await makeRequest<T>(url, options, this.setCsrfToken, contentType); return await makeRequest<T>(url, options, this.setCsrfTokenLocal, contentType);
} }
} }

View File

@@ -20,6 +20,7 @@ import {
SASjsRequest, SASjsRequest,
SASjsWaitingRequest, SASjsWaitingRequest,
ServerType, ServerType,
CsrfToken,
} from "./types"; } from "./types";
import { SASViyaApiClient } from "./SASViyaApiClient"; import { SASViyaApiClient } from "./SASViyaApiClient";
import { SAS9ApiClient } from "./SAS9ApiClient"; import { SAS9ApiClient } from "./SAS9ApiClient";
@@ -46,8 +47,7 @@ export default class SASjs {
private jobsPath: string = ""; private jobsPath: string = "";
private logoutUrl: string = ""; private logoutUrl: string = "";
private loginUrl: string = ""; private loginUrl: string = "";
private _csrf: string | null = null; private csrfToken: CsrfToken | null = null;
private _csrfHeader: string | null = null;
private retryCount: number = 0; private retryCount: number = 0;
private sasjsRequests: SASjsRequest[] = []; private sasjsRequests: SASjsRequest[] = [];
private sasjsWaitingRequests: SASjsWaitingRequest[] = []; private sasjsWaitingRequests: SASjsWaitingRequest[] = [];
@@ -239,7 +239,7 @@ export default class SASjs {
* *
*/ */
public getCsrf() { public getCsrf() {
return this._csrf; return this.csrfToken?.value;
} }
/** /**
@@ -452,7 +452,8 @@ export default class SASjs {
sasApiClient = new SASViyaApiClient( sasApiClient = new SASViyaApiClient(
serverUrl, serverUrl,
appLoc, appLoc,
this.sasjsConfig.contextName this.sasjsConfig.contextName,
this.setCsrfToken
); );
} else if (this.sasjsConfig.serverType === ServerType.SAS9) { } else if (this.sasjsConfig.serverType === ServerType.SAS9) {
sasApiClient = new SAS9ApiClient(serverUrl); sasApiClient = new SAS9ApiClient(serverUrl);
@@ -517,7 +518,7 @@ export default class SASjs {
return JSON.parse(response!.result); return JSON.parse(response!.result);
}) })
.catch((e) => { .catch((e) => {
if (e && e.includes(401)) { if (e && e.status === 401) {
if (loginRequiredCallback) loginRequiredCallback(true); if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve; sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.reject = reject; sasjsWaitingRequest.requestPromise.reject = reject;
@@ -698,8 +699,8 @@ export default class SASjs {
reject({ MESSAGE: errorMsg }); reject({ MESSAGE: errorMsg });
} }
const headers: any = {}; const headers: any = {};
if (this._csrfHeader && this._csrf) { if (this.csrfToken) {
headers[this._csrfHeader] = this._csrf; headers[this.csrfToken.headerName] = this.csrfToken.value;
} }
fetch(apiUrl, { fetch(apiUrl, {
method: "POST", method: "POST",
@@ -714,8 +715,10 @@ export default class SASjs {
if (tokenHeader) { if (tokenHeader) {
const token = response.headers.get(tokenHeader); const token = response.headers.get(tokenHeader);
this._csrfHeader = tokenHeader; this.csrfToken = {
this._csrf = token; headerName: tokenHeader,
value: token || ''
}
} }
} }
} }
@@ -810,6 +813,10 @@ export default class SASjs {
return sasjsWaitingRequest.requestPromise.promise; return sasjsWaitingRequest.requestPromise.promise;
} }
private setCsrfToken = (csrfToken: CsrfToken) => {
this.csrfToken = csrfToken;
};
private async resendWaitingRequests() { private async resendWaitingRequests() {
for (const sasjsWaitingRequest of this.sasjsWaitingRequests) { for (const sasjsWaitingRequest of this.sasjsWaitingRequests) {
this.request( this.request(
@@ -832,8 +839,8 @@ export default class SASjs {
private getRequestParams(): any { private getRequestParams(): any {
const requestParams: any = {}; const requestParams: any = {};
if (this._csrf) { if (this.csrfToken) {
requestParams["_csrf"] = this._csrf; requestParams["_csrf"] = this.csrfToken.value;
} }
if (this.sasjsConfig.debug) { if (this.sasjsConfig.debug) {
@@ -1070,7 +1077,8 @@ export default class SASjs {
this.sasViyaApiClient = new SASViyaApiClient( this.sasViyaApiClient = new SASViyaApiClient(
this.sasjsConfig.serverUrl, this.sasjsConfig.serverUrl,
this.sasjsConfig.appLoc, this.sasjsConfig.appLoc,
this.sasjsConfig.contextName this.sasjsConfig.contextName,
this.setCsrfToken
); );
} }
if (this.sasjsConfig.serverType === ServerType.SAS9) { if (this.sasjsConfig.serverType === ServerType.SAS9) {

View File

@@ -4,7 +4,11 @@ import { asyncForEach, makeRequest } from "./utils";
const MAX_SESSION_COUNT = 1; const MAX_SESSION_COUNT = 1;
export class SessionManager { export class SessionManager {
constructor(private serverUrl: string, private contextName: string) {} constructor(
private serverUrl: string,
private contextName: string,
private setCsrfToken: (csrfToken: CsrfToken) => void
) {}
private sessions: Session[] = []; private sessions: Session[] = [];
private currentContext: Context | null = null; private currentContext: Context | null = null;
private csrfToken: CsrfToken | null = null; private csrfToken: CsrfToken | null = null;
@@ -132,7 +136,10 @@ export class SessionManager {
return await makeRequest<T>( return await makeRequest<T>(
url, url,
options, options,
(token) => (this.csrfToken = token), (token) => {
this.csrfToken = token;
this.setCsrfToken(token);
},
contentType contentType
); );
} }