diff --git a/api/src/controllers/code.ts b/api/src/controllers/code.ts index a2e7bd3..80d1837 100644 --- a/api/src/controllers/code.ts +++ b/api/src/controllers/code.ts @@ -3,7 +3,7 @@ import { Request, Security, Route, Tags, Post, Body } from 'tsoa' import { ExecuteReturnJson, ExecutionController } from './internal' import { PreProgramVars } from '../types' import { ExecuteReturnJsonResponse } from '.' -import { parseLogToArray } from '../utils' +import { getPreProgramVariables, parseLogToArray } from '../utils' interface ExecuteSASCodePayload { /** @@ -56,16 +56,3 @@ const executeSASCode = async (req: any, { code }: ExecuteSASCodePayload) => { } } } - -const getPreProgramVariables = (req: any): PreProgramVars => { - const host = req.get('host') - const protocol = req.protocol + '://' - const { user, accessToken } = req - return { - username: user.username, - userId: user.userId, - displayName: user.displayName, - serverUrl: protocol + host, - accessToken - } -} diff --git a/api/src/controllers/internal/Execution.ts b/api/src/controllers/internal/Execution.ts index f0a828d..c7fde8e 100644 --- a/api/src/controllers/internal/Execution.ts +++ b/api/src/controllers/internal/Execution.ts @@ -75,12 +75,12 @@ export class ExecutionController { const logPath = path.join(session.path, 'log.log') const headersPath = path.join(session.path, 'stpsrv_header.txt') const weboutPath = path.join(session.path, 'webout.txt') - const tokenFile = path.join(session.path, 'accessToken.txt') + const tokenFile = path.join(session.path, 'reqHeaders.txt') await createFile(weboutPath, '') await createFile( tokenFile, - preProgramVariables?.accessToken ?? 'accessToken' + preProgramVariables?.httpHeaders.join('\n') ?? '' ) const varStatments = Object.keys(vars).reduce( diff --git a/api/src/controllers/stp.ts b/api/src/controllers/stp.ts index 4a72c5d..0d25ff0 100644 --- a/api/src/controllers/stp.ts +++ b/api/src/controllers/stp.ts @@ -17,8 +17,8 @@ import { ExecutionController, ExecutionVars } from './internal' -import { PreProgramVars } from '../types' import { + getPreProgramVariables, getTmpFilesFolderPath, HTTPHeaders, isDebugOn, @@ -210,16 +210,3 @@ const executeReturnJson = async ( } } } - -const getPreProgramVariables = (req: any): PreProgramVars => { - const host = req.get('host') - const protocol = req.protocol + '://' - const { user, accessToken } = req - return { - username: user.username, - userId: user.userId, - displayName: user.displayName, - serverUrl: protocol + host, - accessToken - } -} diff --git a/api/src/types/PreProgramVars.ts b/api/src/types/PreProgramVars.ts index 2010432..1304aa9 100644 --- a/api/src/types/PreProgramVars.ts +++ b/api/src/types/PreProgramVars.ts @@ -3,5 +3,5 @@ export interface PreProgramVars { userId: number displayName: string serverUrl: string - accessToken: string + httpHeaders: string[] } diff --git a/api/src/utils/getPreProgramVariables.ts b/api/src/utils/getPreProgramVariables.ts new file mode 100644 index 0000000..e8a8fa8 --- /dev/null +++ b/api/src/utils/getPreProgramVariables.ts @@ -0,0 +1,23 @@ +import { PreProgramVars } from '../types' + +export const getPreProgramVariables = (req: any): PreProgramVars => { + const host = req.get('host') + const protocol = req.protocol + '://' + const { user, accessToken } = req + const csrfToken = req.headers['x-xsrf-token'] + const sessionId = req.cookies['connect.sid'] + + const httpHeaders: string[] = [] + + if (accessToken) httpHeaders.push(`Authorization: Bearer ${accessToken}`) + if (csrfToken) httpHeaders.push(`x-xsrf-token: ${csrfToken}`) + if (sessionId) httpHeaders.push(`cookie: connect.sid=${sessionId}`) + + return { + username: user.username, + userId: user.userId, + displayName: user.displayName, + serverUrl: protocol + host, + httpHeaders + } +} diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index 76a646e..77dfc05 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -8,6 +8,7 @@ export * from './generateAuthCode' export * from './generateRefreshToken' export * from './getCertificates' export * from './getDesktopFields' +export * from './getPreProgramVariables' export * from './isDebugOn' export * from './parseLogToArray' export * from './removeTokensInDB' diff --git a/restClient/session.rest b/restClient/session.rest index 31b96fc..d1bfed1 100644 --- a/restClient/session.rest +++ b/restClient/session.rest @@ -1,2 +1,3 @@ -### Get current user's info via access token +### Get current user's info via session ID GET http://localhost:5000/SASjsApi/session +cookie: connect.sid=s:G2DeFdKuWhnmTOsTHmTWrxAXPx2P6TLD.JyNLxfACC1w3NlFQFfL5chyxtrqbPYmS6iButRc1goE \ No newline at end of file