mirror of
https://github.com/sasjs/server.git
synced 2026-01-06 14:10:06 +00:00
feat: added get authorizedRoutes api endpoint
This commit is contained in:
@@ -548,6 +548,16 @@ components:
|
||||
- runTimes
|
||||
type: object
|
||||
additionalProperties: false
|
||||
AuthorizedRoutesResponse:
|
||||
properties:
|
||||
routes:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
required:
|
||||
- routes
|
||||
type: object
|
||||
additionalProperties: false
|
||||
ExecuteReturnJsonPayload:
|
||||
properties:
|
||||
_program:
|
||||
@@ -1593,6 +1603,24 @@ paths:
|
||||
- Info
|
||||
security: []
|
||||
parameters: []
|
||||
/SASjsApi/info/authorizedRoutes:
|
||||
get:
|
||||
operationId: AuthorizedRoutes
|
||||
responses:
|
||||
'200':
|
||||
description: Ok
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AuthorizedRoutesResponse'
|
||||
examples:
|
||||
'Example 1':
|
||||
value: {routes: [/AppStream, /SASjsApi/stp/execute]}
|
||||
summary: 'Get authorized routes.'
|
||||
tags:
|
||||
- Info
|
||||
security: []
|
||||
parameters: []
|
||||
/SASjsApi/session:
|
||||
get:
|
||||
operationId: Session
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { Route, Tags, Example, Get } from 'tsoa'
|
||||
import { getAuthorizedRoutes } from '../utils'
|
||||
export interface AuthorizedRoutesResponse {
|
||||
URIs: string[]
|
||||
}
|
||||
|
||||
export interface InfoResponse {
|
||||
mode: string
|
||||
@@ -36,4 +40,19 @@ export class InfoController {
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary Get authorized routes.
|
||||
*
|
||||
*/
|
||||
@Example<AuthorizedRoutesResponse>({
|
||||
URIs: ['/AppStream', '/SASjsApi/stp/execute']
|
||||
})
|
||||
@Get('/authorizedRoutes')
|
||||
public authorizedRoutes(): AuthorizedRoutesResponse {
|
||||
const response = {
|
||||
URIs: getAuthorizedRoutes()
|
||||
}
|
||||
return response
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,4 +13,14 @@ infoRouter.get('/', async (req, res) => {
|
||||
}
|
||||
})
|
||||
|
||||
infoRouter.get('/authorizedRoutes', async (req, res) => {
|
||||
const controller = new InfoController()
|
||||
try {
|
||||
const response = controller.authorizedRoutes()
|
||||
res.send(response)
|
||||
} catch (err: any) {
|
||||
res.status(403).send(err.toString())
|
||||
}
|
||||
})
|
||||
|
||||
export default infoRouter
|
||||
|
||||
17
api/src/utils/getAuthorizedRoutes.ts
Normal file
17
api/src/utils/getAuthorizedRoutes.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export const getAuthorizedRoutes = () => {
|
||||
const streamingApps = Object.keys(process.appStreamConfig)
|
||||
const streamingAppsRoutes = streamingApps.map((app) => `/AppStream/${app}`)
|
||||
return [...StaticAuthorizedRoutes, ...streamingAppsRoutes]
|
||||
}
|
||||
|
||||
const StaticAuthorizedRoutes = [
|
||||
'/AppStream',
|
||||
'/SASjsApi/code/execute',
|
||||
'/SASjsApi/stp/execute',
|
||||
'/SASjsApi/drive/deploy',
|
||||
'/SASjsApi/drive/upload',
|
||||
'/SASjsApi/drive/file',
|
||||
'/SASjsApi/drive/folder',
|
||||
'/SASjsApi/drive/fileTree',
|
||||
'/SASjsApi/permission'
|
||||
]
|
||||
@@ -8,6 +8,7 @@ export * from './file'
|
||||
export * from './generateAccessToken'
|
||||
export * from './generateAuthCode'
|
||||
export * from './generateRefreshToken'
|
||||
export * from './getAuthorizedRoutes'
|
||||
export * from './getCertificates'
|
||||
export * from './getDesktopFields'
|
||||
export * from './getPreProgramVariables'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import Joi from 'joi'
|
||||
import { PermissionSetting, PrincipalType } from '../controllers/permission'
|
||||
import { getAuthorizedRoutes } from './getAuthorizedRoutes'
|
||||
|
||||
const usernameSchema = Joi.string().lowercase().alphanum().min(3).max(16)
|
||||
const passwordSchema = Joi.string().min(6).max(1024)
|
||||
@@ -88,7 +89,9 @@ export const registerClientValidation = (data: any): Joi.ValidationResult =>
|
||||
|
||||
export const registerPermissionValidation = (data: any): Joi.ValidationResult =>
|
||||
Joi.object({
|
||||
uri: Joi.string().required(),
|
||||
uri: Joi.string()
|
||||
.required()
|
||||
.valid(...getAuthorizedRoutes()),
|
||||
setting: Joi.string()
|
||||
.required()
|
||||
.valid(...Object.values(PermissionSetting)),
|
||||
|
||||
Reference in New Issue
Block a user