1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-10 19:34:34 +00:00

Compare commits

...

6 Commits

Author SHA1 Message Date
semantic-release-bot
24966e695a chore(release): 0.21.3 [skip ci]
## [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](330c020933))
2022-09-21 17:49:49 +00:00
Allan Bowe
5c40d8a342 Merge pull request #286 from sasjs/issue-279
fix: return same tokens if not expired
2022-09-21 18:46:07 +01:00
6f5566dabb chore: lint fix 2022-09-21 22:29:50 +05:00
d93470d183 chore: improve code 2022-09-21 22:27:27 +05:00
330c020933 fix: return same tokens if not expired 2022-09-21 22:12:03 +05:00
munja
a810f6c7cf chore(docs): updating swagger definitions 2022-09-21 11:08:12 +01:00
8 changed files with 59 additions and 7 deletions

View File

@@ -1,3 +1,10 @@
## [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) ## [0.21.2](https://github.com/sasjs/server/compare/v0.21.1...v0.21.2) (2022-09-20)

View File

@@ -660,8 +660,8 @@ paths:
anyOf: anyOf:
- {type: string} - {type: string}
- {type: string, format: byte} - {type: string, format: byte}
description: 'Execute SAS code.' description: 'Execute Code on the Specified Runtime'
summary: 'Run SAS Code and returns log' summary: 'Run Code and Return Webout Content and Log'
tags: tags:
- Code - Code
security: security:
@@ -1686,7 +1686,7 @@ paths:
- {type: string} - {type: string}
- {type: string, format: byte} - {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" 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: tags:
- STP - STP
security: security:

View File

@@ -4,6 +4,7 @@ import { InfoJWT } from '../types'
import { import {
generateAccessToken, generateAccessToken,
generateRefreshToken, generateRefreshToken,
getTokensFromDB,
removeTokensInDB, removeTokensInDB,
saveTokensInDB saveTokensInDB
} from '../utils' } from '../utils'
@@ -73,6 +74,15 @@ const token = async (data: any): Promise<TokenResponse> => {
AuthController.deleteCode(userInfo.userId, clientId) 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 accessToken = generateAccessToken(userInfo)
const refreshToken = generateRefreshToken(userInfo) const refreshToken = generateRefreshToken(userInfo)

View File

@@ -27,8 +27,8 @@ interface ExecuteCodePayload {
@Tags('Code') @Tags('Code')
export class CodeController { export class CodeController {
/** /**
* Execute SAS code. * Execute Code on the Specified Runtime
* @summary Run SAS Code and returns log * @summary Run Code and Return Webout Content and Log
*/ */
@Post('/execute') @Post('/execute')
public async executeCode( public async executeCode(

View File

@@ -50,7 +50,7 @@ export class STPController {
* https://server.sasjs.io/storedprograms * 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 * @param _program Location of code in SASjs Drive
* @example _program "/Projects/myApp/some/program" * @example _program "/Projects/myApp/some/program"
*/ */

View File

@@ -7,7 +7,7 @@ import {
authenticateRefreshToken authenticateRefreshToken
} from '../../middlewares' } from '../../middlewares'
import { authorizeValidation, tokenValidation } from '../../utils' import { tokenValidation } from '../../utils'
import { InfoJWT } from '../../types' import { InfoJWT } from '../../types'
const authRouter = express.Router() const authRouter = express.Router()

View 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 }
}
}

View File

@@ -14,6 +14,7 @@ export * from './getDesktopFields'
export * from './getPreProgramVariables' export * from './getPreProgramVariables'
export * from './getRunTimeAndFilePath' export * from './getRunTimeAndFilePath'
export * from './getServerUrl' export * from './getServerUrl'
export * from './getTokensFromDB'
export * from './instantiateLogger' export * from './instantiateLogger'
export * from './isDebugOn' export * from './isDebugOn'
export * from './isPublicRoute' export * from './isPublicRoute'