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

fix: adde validation + code improvement

This commit is contained in:
Saad Jutt
2022-03-16 04:53:07 +05:00
parent d6fa877941
commit 1ff6965dd2
8 changed files with 271 additions and 69 deletions

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
v16.14.0

290
api/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -57,8 +57,7 @@
"mongoose-sequence": "^5.3.1",
"morgan": "^1.10.0",
"multer": "^1.4.3",
"swagger-ui-express": "^4.1.6",
"tsoa": "3.14.1"
"swagger-ui-express": "^4.1.6"
},
"devDependencies": {
"@types/bcryptjs": "^2.4.2",
@@ -84,6 +83,7 @@
"supertest": "^6.1.3",
"ts-jest": "^27.0.3",
"ts-node": "^10.0.0",
"tsoa": "3.14.1",
"typescript": "^4.3.2"
},
"configuration": {

View File

@@ -172,12 +172,20 @@ components:
enum:
- service
type: string
MemberType.file:
enum:
- file
type: string
ServiceMember:
properties:
name:
type: string
type:
$ref: '#/components/schemas/MemberType.service'
anyOf:
-
$ref: '#/components/schemas/MemberType.service'
-
$ref: '#/components/schemas/MemberType.file'
code:
type: string
required:
@@ -220,6 +228,7 @@ components:
fileTree:
$ref: '#/components/schemas/FileTree'
required:
- appLoc
- fileTree
type: object
additionalProperties: false

View File

@@ -28,7 +28,7 @@ import { FileTree, isFileTree, TreeNode } from '../types'
import { getTmpFilesFolderPath } from '../utils'
interface DeployPayload {
appLoc?: string
appLoc: string
fileTree: FileTree
}
@@ -196,7 +196,7 @@ const deploy = async (data: DeployPayload) => {
await createFileTree(
data.fileTree.members,
data.appLoc ? data.appLoc.replace(/^\//, '').split('/') : []
data.appLoc.replace(/^\//, '').split('/')
).catch((err) => {
throw { code: 500, ...execDeployErrorResponse, ...err }
})

View File

@@ -5,18 +5,24 @@ import { publishAppStream } from '../appStream'
import { multerSingle } from '../../middlewares/multer'
import { DriveController } from '../../controllers/'
import { fileBodyValidation, fileParamValidation } from '../../utils'
import {
deployValidation,
fileBodyValidation,
fileParamValidation
} from '../../utils'
const controller = new DriveController()
const driveRouter = express.Router()
driveRouter.post('/deploy', async (req, res) => {
try {
const response = await controller.deploy(req.body)
const { error, value: body } = deployValidation(req.body)
if (error) return res.status(400).send(error.details[0].message)
const data = req.body
const appLoc = data.appLoc ? data.appLoc.replace(/^\//, '').split('/') : []
try {
const response = await controller.deploy(body)
const appLoc = body.appLoc.replace(/^\//, '')?.split('/')
publishAppStream(appLoc)

View File

@@ -1,11 +1,12 @@
import path from 'path'
import express from 'express'
import { folderExists } from '@sasjs/utils'
import { getTmpFilesFolderPath } from '../../utils'
const router = express.Router()
export const publishAppStream = (appLoc: string[]) => {
export const publishAppStream = async (appLoc: string[]) => {
const appLocUrl = encodeURI(appLoc.join('/'))
const appLocPath = appLoc.join(path.sep)
@@ -16,7 +17,10 @@ export const publishAppStream = (appLoc: string[]) => {
'webv'
)
router.use(`/${appLocUrl}`, express.static(pathToDeployment))
if (await folderExists(pathToDeployment)) {
router.use(`/${appLocUrl}`, express.static(pathToDeployment))
console.log('Serving Stream App: ', appLocUrl)
}
}
export default router

View File

@@ -66,6 +66,12 @@ export const registerClientValidation = (data: any): Joi.ValidationResult =>
clientSecret: Joi.string().required()
}).validate(data)
export const deployValidation = (data: any): Joi.ValidationResult =>
Joi.object({
appLoc: Joi.string().pattern(/^\//).required().min(2),
fileTree: Joi.any().required()
}).validate(data)
export const fileBodyValidation = (data: any): Joi.ValidationResult =>
Joi.object({
filePath: Joi.string().pattern(/.sas$/).required().messages({