1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-10 13:50:05 +00:00

fix(*): handle login required state, fix session creation logic

This commit is contained in:
Krishna Acondy
2020-07-18 15:08:40 +01:00
parent a12244cf78
commit 8bf74d17e9
4 changed files with 47 additions and 33 deletions

View File

@@ -661,7 +661,7 @@ export class SASViyaApiClient {
contextName, contextName,
accessToken, accessToken,
"", "",
false, true,
data, data,
debug debug
); );
@@ -864,12 +864,19 @@ export class SASViyaApiClient {
if (accessToken) { if (accessToken) {
requestInfo.headers = { Authorization: `Bearer ${accessToken}` }; requestInfo.headers = { Authorization: `Bearer ${accessToken}` };
} }
let error;
const rootFolder = await this.request<Folder>( const rootFolder = await this.request<Folder>(
`${this.serverUrl}${url}`, `${this.serverUrl}${url}`,
requestInfo requestInfo
).catch(() => null); ).catch((e) => {
error = e;
return null;
});
this.rootFolder = rootFolder?.result || null; this.rootFolder = rootFolder?.result || null;
if (error) {
throw new Error(JSON.stringify(error));
}
} }
private async pollJobState( private async pollJobState(

View File

@@ -387,6 +387,7 @@ export default class SASjs {
loginRequiredCallback?: any, loginRequiredCallback?: any,
accessToken?: string accessToken?: string
) { ) {
sasJob = sasJob.startsWith("/") ? sasJob.replace("/", "") : sasJob;
if ( if (
this.sasjsConfig.serverType === ServerType.SASViya && this.sasjsConfig.serverType === ServerType.SASViya &&
this.sasjsConfig.contextName this.sasjsConfig.contextName
@@ -498,36 +499,34 @@ export default class SASjs {
sasjsWaitingRequest.requestPromise.promise = new Promise( sasjsWaitingRequest.requestPromise.promise = new Promise(
async (resolve, reject) => { async (resolve, reject) => {
const session = await this.checkSession(); resolve(
await this.sasViyaApiClient
if (!session.isLoggedIn) { ?.executeComputeJob(
if (loginRequiredCallback) loginRequiredCallback(true); sasJob,
sasjsWaitingRequest.requestPromise.resolve = resolve; this.sasjsConfig.contextName,
sasjsWaitingRequest.requestPromise.reject = reject; this.sasjsConfig.debug,
this.sasjsWaitingRequests.push(sasjsWaitingRequest); data,
} else { accessToken
resolve( )
await this.sasViyaApiClient .then((response) => {
?.executeComputeJob( if (!this.sasjsConfig.debug) {
sasJob, this.appendSasjsRequest(null, sasJob, null);
this.sasjsConfig.contextName, } else {
this.sasjsConfig.debug, this.appendSasjsRequest(response, sasJob, null);
data, }
accessToken return JSON.parse(response!.result);
) })
.then((response) => { .catch((e) => {
if (!this.sasjsConfig.debug) { if (e && e.includes(401)) {
this.appendSasjsRequest(null, sasJob, null); if (loginRequiredCallback) loginRequiredCallback(true);
} else { sasjsWaitingRequest.requestPromise.resolve = resolve;
this.appendSasjsRequest(response, sasJob, null); sasjsWaitingRequest.requestPromise.reject = reject;
} this.sasjsWaitingRequests.push(sasjsWaitingRequest);
return JSON.parse(response!.result); } else {
}) reject({ MESSAGE: e || "Job execution failed" });
.catch((e) => }
reject({ MESSAGE: (e && e.message) || "Job execution failed" }) })
) );
);
}
} }
); );
return sasjsWaitingRequest.requestPromise.promise; return sasjsWaitingRequest.requestPromise.promise;

View File

@@ -38,6 +38,7 @@ export class SessionManager {
); );
await this.waitForSession(createdSession, etag); await this.waitForSession(createdSession, etag);
this.sessions.push(createdSession);
return createdSession; return createdSession;
} }

View File

@@ -11,7 +11,7 @@ export async function makeRequest<T>(
? (res: Response) => res.json() ? (res: Response) => res.json()
: (res: Response) => res.text(); : (res: Response) => res.text();
let etag = null; let etag = null;
const result = await fetch(url, request).then((response) => { const result = await fetch(url, request).then(async (response) => {
if (!response.ok) { if (!response.ok) {
if (response.status === 403) { if (response.status === 403) {
const tokenHeader = response.headers.get("X-CSRF-HEADER"); const tokenHeader = response.headers.get("X-CSRF-HEADER");
@@ -32,8 +32,15 @@ export async function makeRequest<T>(
return responseTransform(res); return responseTransform(res);
}); });
} }
} else {
const body = await response.text();
return Promise.reject({ status: response.status, body });
} }
} else { } else {
if (response.redirected && response.url.includes("SASLogon/login")) {
const body = await response.text();
return Promise.reject({ status: 401, body });
}
etag = response.headers.get("ETag"); etag = response.headers.get("ETag");
return responseTransform(response); return responseTransform(response);
} }