mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 19:34:34 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
056a436e10 | ||
|
|
06d59c618c | ||
|
|
a0e7875ae6 | ||
|
|
24966e695a | ||
|
|
5c40d8a342 | ||
| 6f5566dabb | |||
| d93470d183 | |||
| 330c020933 | |||
|
|
a810f6c7cf |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,3 +1,17 @@
|
||||
## [0.21.4](https://github.com/sasjs/server/compare/v0.21.3...v0.21.4) (2022-09-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* removing single quotes from _program value ([a0e7875](https://github.com/sasjs/server/commit/a0e7875ae61cbb6e7d3995d2e36e7300b0daec86))
|
||||
|
||||
## [0.21.3](https://github.com/sasjs/server/compare/v0.21.2...v0.21.3) (2022-09-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* return same tokens if not expired ([330c020](https://github.com/sasjs/server/commit/330c020933f1080261b38f07d6b627f6d7c62446))
|
||||
|
||||
## [0.21.2](https://github.com/sasjs/server/compare/v0.21.1...v0.21.2) (2022-09-20)
|
||||
|
||||
|
||||
|
||||
@@ -660,8 +660,8 @@ paths:
|
||||
anyOf:
|
||||
- {type: string}
|
||||
- {type: string, format: byte}
|
||||
description: 'Execute SAS code.'
|
||||
summary: 'Run SAS Code and returns log'
|
||||
description: 'Execute Code on the Specified Runtime'
|
||||
summary: 'Run Code and Return Webout Content and Log'
|
||||
tags:
|
||||
- Code
|
||||
security:
|
||||
@@ -1686,7 +1686,7 @@ paths:
|
||||
- {type: string}
|
||||
- {type: string, format: byte}
|
||||
description: "Trigger a Stored Program using the _program URL parameter.\n\nAccepts URL parameters and file uploads. For more details, see docs:\n\nhttps://server.sasjs.io/storedprograms"
|
||||
summary: 'Execute a Stored Program, return a JSON object'
|
||||
summary: 'Execute a Stored Program, returns _webout and (optionally) log.'
|
||||
tags:
|
||||
- STP
|
||||
security:
|
||||
|
||||
@@ -4,6 +4,7 @@ import { InfoJWT } from '../types'
|
||||
import {
|
||||
generateAccessToken,
|
||||
generateRefreshToken,
|
||||
getTokensFromDB,
|
||||
removeTokensInDB,
|
||||
saveTokensInDB
|
||||
} from '../utils'
|
||||
@@ -73,6 +74,15 @@ const token = async (data: any): Promise<TokenResponse> => {
|
||||
|
||||
AuthController.deleteCode(userInfo.userId, clientId)
|
||||
|
||||
// get tokens from DB
|
||||
const existingTokens = await getTokensFromDB(userInfo.userId, clientId)
|
||||
if (existingTokens) {
|
||||
return {
|
||||
accessToken: existingTokens.accessToken,
|
||||
refreshToken: existingTokens.refreshToken
|
||||
}
|
||||
}
|
||||
|
||||
const accessToken = generateAccessToken(userInfo)
|
||||
const refreshToken = generateRefreshToken(userInfo)
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ interface ExecuteCodePayload {
|
||||
@Tags('Code')
|
||||
export class CodeController {
|
||||
/**
|
||||
* Execute SAS code.
|
||||
* @summary Run SAS Code and returns log
|
||||
* Execute Code on the Specified Runtime
|
||||
* @summary Run Code and Return Webout Content and Log
|
||||
*/
|
||||
@Post('/execute')
|
||||
public async executeCode(
|
||||
|
||||
@@ -50,7 +50,7 @@ export class STPController {
|
||||
* https://server.sasjs.io/storedprograms
|
||||
*
|
||||
*
|
||||
* @summary Execute a Stored Program, return a JSON object
|
||||
* @summary Execute a Stored Program, returns _webout and (optionally) log.
|
||||
* @param _program Location of code in SASjs Drive
|
||||
* @example _program "/Projects/myApp/some/program"
|
||||
*/
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
authenticateRefreshToken
|
||||
} from '../../middlewares'
|
||||
|
||||
import { authorizeValidation, tokenValidation } from '../../utils'
|
||||
import { tokenValidation } from '../../utils'
|
||||
import { InfoJWT } from '../../types'
|
||||
|
||||
const authRouter = express.Router()
|
||||
|
||||
34
api/src/utils/getTokensFromDB.ts
Normal file
34
api/src/utils/getTokensFromDB.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import jwt from 'jsonwebtoken'
|
||||
import User from '../model/User'
|
||||
|
||||
export const getTokensFromDB = async (userId: number, clientId: string) => {
|
||||
const user = await User.findOne({ id: userId })
|
||||
if (!user) return
|
||||
|
||||
const currentTokenObj = user.tokens.find(
|
||||
(tokenObj: any) => tokenObj.clientId === clientId
|
||||
)
|
||||
|
||||
if (currentTokenObj) {
|
||||
const accessToken = currentTokenObj.accessToken
|
||||
const refreshToken = currentTokenObj.refreshToken
|
||||
|
||||
const verifiedAccessToken: any = jwt.verify(
|
||||
accessToken,
|
||||
process.secrets.ACCESS_TOKEN_SECRET
|
||||
)
|
||||
|
||||
const verifiedRefreshToken: any = jwt.verify(
|
||||
refreshToken,
|
||||
process.secrets.REFRESH_TOKEN_SECRET
|
||||
)
|
||||
|
||||
if (
|
||||
verifiedAccessToken?.userId === userId &&
|
||||
verifiedAccessToken?.clientId === clientId &&
|
||||
verifiedRefreshToken?.userId === userId &&
|
||||
verifiedRefreshToken?.clientId === clientId
|
||||
)
|
||||
return { accessToken, refreshToken }
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ export * from './getDesktopFields'
|
||||
export * from './getPreProgramVariables'
|
||||
export * from './getRunTimeAndFilePath'
|
||||
export * from './getServerUrl'
|
||||
export * from './getTokensFromDB'
|
||||
export * from './instantiateLogger'
|
||||
export * from './isDebugOn'
|
||||
export * from './isPublicRoute'
|
||||
|
||||
@@ -31,7 +31,7 @@ export const programPathInjection = (
|
||||
return `._PROGRAM = '${path}';\n${code}`
|
||||
}
|
||||
if (runtime === RunTimeType.SAS) {
|
||||
return `%let _program = '${path}';\n${code}`
|
||||
return `%let _program = ${path};\n${code}`
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user