mirror of
https://github.com/sasjs/server.git
synced 2026-01-07 06:30:06 +00:00
feat: add api for getting server info
This commit is contained in:
@@ -6,3 +6,4 @@ export * from './group'
|
||||
export * from './session'
|
||||
export * from './stp'
|
||||
export * from './user'
|
||||
export * from './info'
|
||||
|
||||
37
api/src/controllers/info.ts
Normal file
37
api/src/controllers/info.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import express from 'express'
|
||||
import { Request, Security, Route, Tags, Example, Get } from 'tsoa'
|
||||
|
||||
export interface InfoResponse {
|
||||
mode: string
|
||||
cors: string
|
||||
whiteList: string[]
|
||||
protocol: string
|
||||
}
|
||||
|
||||
@Route('SASjsApi/info')
|
||||
@Tags('Info')
|
||||
export class InfoController {
|
||||
/**
|
||||
* @summary Get server info (mode, cors, whiteList, protocol).
|
||||
*
|
||||
*/
|
||||
@Example<InfoResponse>({
|
||||
mode: 'desktop',
|
||||
cors: 'enable',
|
||||
whiteList: ['http://example.com', 'http://example2.com'],
|
||||
protocol: 'http'
|
||||
})
|
||||
@Get('/')
|
||||
public info(): InfoResponse {
|
||||
const response = {
|
||||
mode: process.env.MODE ?? 'desktop',
|
||||
cors:
|
||||
process.env.CORS ?? process.env.MODE === 'server'
|
||||
? 'disable'
|
||||
: 'enable',
|
||||
whiteList: process.env.WHITELIST?.split(' ') ?? [],
|
||||
protocol: process.env.PROTOCOL ?? 'http'
|
||||
}
|
||||
return response
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
verifyAdmin
|
||||
} from '../../middlewares'
|
||||
|
||||
import infoRouter from './info'
|
||||
import driveRouter from './drive'
|
||||
import stpRouter from './stp'
|
||||
import codeRouter from './code'
|
||||
@@ -20,6 +21,7 @@ import sessionRouter from './session'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
router.use('/info', infoRouter)
|
||||
router.use('/session', desktopUsername, authenticateAccessToken, sessionRouter)
|
||||
router.use('/auth', desktopRestrict, authRouter)
|
||||
router.use(
|
||||
|
||||
16
api/src/routes/api/info.ts
Normal file
16
api/src/routes/api/info.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import express from 'express'
|
||||
import { InfoController } from '../../controllers'
|
||||
|
||||
const infoRouter = express.Router()
|
||||
|
||||
infoRouter.get('/', async (req, res) => {
|
||||
const controller = new InfoController()
|
||||
try {
|
||||
const response = controller.info()
|
||||
res.send(response)
|
||||
} catch (err: any) {
|
||||
res.status(403).send(err.toString())
|
||||
}
|
||||
})
|
||||
|
||||
export default infoRouter
|
||||
14
api/src/routes/api/spec/info.spec.ts
Normal file
14
api/src/routes/api/spec/info.spec.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Express } from 'express'
|
||||
import request from 'supertest'
|
||||
import appPromise from '../../../app'
|
||||
|
||||
let app: Express
|
||||
|
||||
describe('Info', () => {
|
||||
it('should should return configured information of the server instance', async () => {
|
||||
await appPromise.then((_app) => {
|
||||
app = _app
|
||||
})
|
||||
request(app).get('/SASjsApi/info').expect(200)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user