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

chore: restructured controllers

This commit is contained in:
Saad Jutt
2021-11-11 03:40:57 +05:00
parent 7a8123eb52
commit 1814c3a1f4
27 changed files with 84 additions and 66 deletions

View File

@@ -2,11 +2,17 @@ import { Security, Route, Tags, Example, Post, Body, Query, Hidden } from 'tsoa'
import jwt from 'jsonwebtoken' import jwt from 'jsonwebtoken'
import User from '../model/User' import User from '../model/User'
import { InfoJWT } from '../types' import { InfoJWT } from '../types'
import { removeTokensInDB, saveTokensInDB } from '../utils' import {
generateAccessToken,
generateAuthCode,
generateRefreshToken,
removeTokensInDB,
saveTokensInDB
} from '../utils'
@Route('SASjsApi/auth') @Route('SASjsApi/auth')
@Tags('Auth') @Tags('Auth')
export default class AuthController { export class AuthController {
static authCodes: { [key: string]: { [key: string]: string } } = {} static authCodes: { [key: string]: { [key: string]: string } } = {}
static saveCode = (userId: number, clientId: string, code: string) => { static saveCode = (userId: number, clientId: string, code: string) => {
if (AuthController.authCodes[userId]) if (AuthController.authCodes[userId])
@@ -185,21 +191,6 @@ interface TokenResponse {
refreshToken: string refreshToken: string
} }
export const generateAuthCode = (data: InfoJWT) =>
jwt.sign(data, process.env.AUTH_CODE_SECRET as string, {
expiresIn: '30s'
})
export const generateAccessToken = (data: InfoJWT) =>
jwt.sign(data, process.env.ACCESS_TOKEN_SECRET as string, {
expiresIn: '1h'
})
export const generateRefreshToken = (data: InfoJWT) =>
jwt.sign(data, process.env.REFRESH_TOKEN_SECRET as string, {
expiresIn: '1day'
})
const verifyAuthCode = async ( const verifyAuthCode = async (
clientId: string, clientId: string,
code: string code: string

View File

@@ -5,7 +5,7 @@ import Client, { ClientPayload } from '../model/Client'
@Security('bearerAuth') @Security('bearerAuth')
@Route('SASjsApi/client') @Route('SASjsApi/client')
@Tags('Client') @Tags('Client')
export default class ClientController { export class ClientController {
/** /**
* @summary Create client with the following attributes: ClientId, ClientSecret. Admin only task. * @summary Create client with the following attributes: ClientId, ClientSecret. Admin only task.
* *

View File

@@ -11,7 +11,7 @@ import {
Patch Patch
} from 'tsoa' } from 'tsoa'
import { fileExists, readFile, createFile } from '@sasjs/utils' import { fileExists, readFile, createFile } from '@sasjs/utils'
import { createFileTree, ExecutionController, getTreeExample } from '.' import { createFileTree, ExecutionController, getTreeExample } from './internal'
import { FileTree, isFileTree, TreeNode } from '../types' import { FileTree, isFileTree, TreeNode } from '../types'
import path from 'path' import path from 'path'

View File

@@ -31,7 +31,7 @@ interface GroupDetailsResponse {
@Security('bearerAuth') @Security('bearerAuth')
@Route('SASjsApi/group') @Route('SASjsApi/group')
@Tags('Group') @Tags('Group')
export default class GroupController { export class GroupController {
/** /**
* @summary Get list of all groups (groupName and groupDescription). All users can request this. * @summary Get list of all groups (groupName and groupDescription). All users can request this.
* *

View File

@@ -1,4 +1,6 @@
export * from './deploy' export * from './auth'
export * from './Session' export * from './client'
export * from './Execution' export * from './drive'
export * from './FileUploadController' export * from './group'
export * from './stp'
export * from './user'

View File

@@ -2,11 +2,11 @@ import path from 'path'
import fs from 'fs' import fs from 'fs'
import { getSessionController } from './' import { getSessionController } from './'
import { readFile, fileExists, createFile } from '@sasjs/utils' import { readFile, fileExists, createFile } from '@sasjs/utils'
import { configuration } from '../../package.json' import { configuration } from '../../../package.json'
import { promisify } from 'util' import { promisify } from 'util'
import { execFile } from 'child_process' import { execFile } from 'child_process'
import { PreProgramVars, Session, TreeNode } from '../types' import { PreProgramVars, Session, TreeNode } from '../../types'
import { generateFileUploadSasCode, getTmpFilesFolderPath } from '../utils' import { generateFileUploadSasCode, getTmpFilesFolderPath } from '../../utils'
const execFilePromise = promisify(execFile) const execFilePromise = promisify(execFile)

View File

@@ -1,5 +1,5 @@
import { Session } from '../types' import { Session } from '../../types'
import { getTmpSessionsFolderPath, generateUniqueFileName } from '../utils' import { getTmpSessionsFolderPath, generateUniqueFileName } from '../../utils'
import { import {
deleteFolder, deleteFolder,
createFile, createFile,
@@ -120,7 +120,7 @@ export class SessionController {
} }
} }
export const getSessionController = () => { export const getSessionController = (): SessionController => {
if (process.sessionController) return process.sessionController if (process.sessionController) return process.sessionController
process.sessionController = new SessionController() process.sessionController = new SessionController()

View File

@@ -1,5 +1,5 @@
import { MemberType, FolderMember, ServiceMember, FileTree } from '../types' import { MemberType, FolderMember, ServiceMember, FileTree } from '../../types'
import { getTmpFilesFolderPath } from '../utils/file' import { getTmpFilesFolderPath } from '../../utils/file'
import { createFolder, createFile, asyncForEach } from '@sasjs/utils' import { createFolder, createFile, asyncForEach } from '@sasjs/utils'
import path from 'path' import path from 'path'

View File

@@ -0,0 +1,4 @@
export * from './deploy'
export * from './Session'
export * from './Execution'
export * from './FileUploadController'

View File

@@ -11,7 +11,7 @@ import {
Get, Get,
Query Query
} from 'tsoa' } from 'tsoa'
import { ExecutionController } from '.' import { ExecutionController } from './internal'
import { PreProgramVars } from '../types' import { PreProgramVars } from '../types'
import { getTmpFilesFolderPath, makeFilesNamesMap } from '../utils' import { getTmpFilesFolderPath, makeFilesNamesMap } from '../utils'
@@ -32,7 +32,7 @@ interface ExecuteReturnJsonResponse {
@Security('bearerAuth') @Security('bearerAuth')
@Route('SASjsApi/client') @Route('SASjsApi/client')
@Tags('STP') @Tags('STP')
export default class STPController { export class STPController {
/** /**
* Trigger a SAS program using it's location in the _program parameter. * Trigger a SAS program using it's location in the _program parameter.
* Enable debugging using the _debug parameter. * Enable debugging using the _debug parameter.

View File

@@ -32,7 +32,7 @@ interface UserDetailsResponse {
@Security('bearerAuth') @Security('bearerAuth')
@Route('SASjsApi/user') @Route('SASjsApi/user')
@Tags('User') @Tags('User')
export default class UserController { export class UserController {
/** /**
* @summary Get list of all users (username, displayname). All users can request this. * @summary Get list of all users (username, displayname). All users can request this.
* *

View File

@@ -1,7 +1,7 @@
import express from 'express' import express from 'express'
import mongoose from 'mongoose' import mongoose from 'mongoose'
import AuthController from '../../controllers/auth' import { AuthController } from '../../controllers/'
import Client from '../../model/Client' import Client from '../../model/Client'
import { import {

View File

@@ -1,5 +1,5 @@
import express from 'express' import express from 'express'
import ClientController from '../../controllers/client' import { ClientController } from '../../controllers'
import { registerClientValidation } from '../../utils' import { registerClientValidation } from '../../utils'
const clientRouter = express.Router() const clientRouter = express.Router()

View File

@@ -1,5 +1,5 @@
import express from 'express' import express from 'express'
import { DriveController } from '../../controllers/drive' import { DriveController } from '../../controllers/'
import { getFileDriveValidation, updateFileDriveValidation } from '../../utils' import { getFileDriveValidation, updateFileDriveValidation } from '../../utils'
const driveRouter = express.Router() const driveRouter = express.Router()

View File

@@ -1,8 +1,7 @@
import express from 'express' import express from 'express'
import GroupController from '../../controllers/group' import { GroupController } from '../../controllers/'
import { authenticateAccessToken, verifyAdmin } from '../../middlewares' import { authenticateAccessToken, verifyAdmin } from '../../middlewares'
import { registerGroupValidation } from '../../utils' import { registerGroupValidation } from '../../utils'
import userRouter from './user'
const groupRouter = express.Router() const groupRouter = express.Router()

View File

@@ -2,16 +2,20 @@ import mongoose, { Mongoose } from 'mongoose'
import { MongoMemoryServer } from 'mongodb-memory-server' import { MongoMemoryServer } from 'mongodb-memory-server'
import request from 'supertest' import request from 'supertest'
import app from '../../../app' import app from '../../../app'
import UserController from '../../../controllers/user' import {
import ClientController from '../../../controllers/client' UserController,
import AuthController, { ClientController,
generateAccessToken, AuthController
generateAuthCode, } from '../../../controllers/'
generateRefreshToken
} from '../../../controllers/auth'
import { populateClients } from '../auth' import { populateClients } from '../auth'
import { InfoJWT } from '../../../types' import { InfoJWT } from '../../../types'
import { saveTokensInDB, verifyTokenInDB } from '../../../utils' import {
generateAccessToken,
generateAuthCode,
generateRefreshToken,
saveTokensInDB,
verifyTokenInDB
} from '../../../utils'
const clientId = 'someclientID' const clientId = 'someclientID'
const clientSecret = 'someclientSecret' const clientSecret = 'someclientSecret'

View File

@@ -2,10 +2,8 @@ import mongoose, { Mongoose } from 'mongoose'
import { MongoMemoryServer } from 'mongodb-memory-server' import { MongoMemoryServer } from 'mongodb-memory-server'
import request from 'supertest' import request from 'supertest'
import app from '../../../app' import app from '../../../app'
import UserController from '../../../controllers/user' import { UserController, ClientController } from '../../../controllers/'
import ClientController from '../../../controllers/client' import { generateAccessToken, saveTokensInDB } from '../../../utils'
import { generateAccessToken } from '../../../controllers/auth'
import { saveTokensInDB } from '../../../utils'
const client = { const client = {
clientId: 'someclientID', clientId: 'someclientID',

View File

@@ -2,13 +2,12 @@ import mongoose, { Mongoose } from 'mongoose'
import { MongoMemoryServer } from 'mongodb-memory-server' import { MongoMemoryServer } from 'mongodb-memory-server'
import request from 'supertest' import request from 'supertest'
import app from '../../../app' import app from '../../../app'
import { getTreeExample } from '../../../controllers/deploy' import { UserController } from '../../../controllers/'
import UserController from '../../../controllers/user' import { getTreeExample } from '../../../controllers/internal'
import { getTmpFilesFolderPath } from '../../../utils/file' import { getTmpFilesFolderPath } from '../../../utils/file'
import { folderExists, fileExists, readFile, deleteFolder } from '@sasjs/utils' import { folderExists, fileExists, readFile, deleteFolder } from '@sasjs/utils'
import path from 'path' import path from 'path'
import { generateAccessToken } from '../../../controllers/auth' import { generateAccessToken, saveTokensInDB } from '../../../utils'
import { saveTokensInDB } from '../../../utils'
import { FolderMember, ServiceMember } from '../../../types' import { FolderMember, ServiceMember } from '../../../types'
const clientId = 'someclientID' const clientId = 'someclientID'

View File

@@ -2,10 +2,8 @@ import mongoose, { Mongoose } from 'mongoose'
import { MongoMemoryServer } from 'mongodb-memory-server' import { MongoMemoryServer } from 'mongodb-memory-server'
import request from 'supertest' import request from 'supertest'
import app from '../../../app' import app from '../../../app'
import UserController from '../../../controllers/user' import { UserController, GroupController } from '../../../controllers/'
import GroupController from '../../../controllers/group' import { generateAccessToken, saveTokensInDB } from '../../../utils'
import { generateAccessToken } from '../../../controllers/auth'
import { saveTokensInDB } from '../../../utils'
const clientId = 'someclientID' const clientId = 'someclientID'
const adminUser = { const adminUser = {

View File

@@ -2,9 +2,8 @@ import mongoose, { Mongoose } from 'mongoose'
import { MongoMemoryServer } from 'mongodb-memory-server' import { MongoMemoryServer } from 'mongodb-memory-server'
import request from 'supertest' import request from 'supertest'
import app from '../../../app' import app from '../../../app'
import UserController from '../../../controllers/user' import { UserController } from '../../../controllers/'
import { generateAccessToken } from '../../../controllers/auth' import { generateAccessToken, saveTokensInDB } from '../../../utils'
import { saveTokensInDB } from '../../../utils'
const clientId = 'someclientID' const clientId = 'someclientID'
const adminUser = { const adminUser = {

View File

@@ -1,7 +1,7 @@
import express from 'express' import express from 'express'
import { executeProgramRawValidation } from '../../utils' import { executeProgramRawValidation } from '../../utils'
import STPController from '../../controllers/stp' import { STPController } from '../../controllers/'
import { FileUploadController } from '../../controllers' import { FileUploadController } from '../../controllers/internal'
const stpRouter = express.Router() const stpRouter = express.Router()

View File

@@ -1,5 +1,5 @@
import express from 'express' import express from 'express'
import UserController from '../../controllers/user' import { UserController } from '../../controllers/'
import { import {
authenticateAccessToken, authenticateAccessToken,
verifyAdmin, verifyAdmin,

View File

@@ -0,0 +1,7 @@
import jwt from 'jsonwebtoken'
import { InfoJWT } from '../types'
export const generateAccessToken = (data: InfoJWT) =>
jwt.sign(data, process.env.ACCESS_TOKEN_SECRET as string, {
expiresIn: '1h'
})

View File

@@ -0,0 +1,7 @@
import jwt from 'jsonwebtoken'
import { InfoJWT } from '../types'
export const generateAuthCode = (data: InfoJWT) =>
jwt.sign(data, process.env.AUTH_CODE_SECRET as string, {
expiresIn: '30s'
})

View File

@@ -0,0 +1,7 @@
import jwt from 'jsonwebtoken'
import { InfoJWT } from '../types'
export const generateRefreshToken = (data: InfoJWT) =>
jwt.sign(data, process.env.REFRESH_TOKEN_SECRET as string, {
expiresIn: '1day'
})

View File

@@ -1,4 +1,7 @@
export * from './file' export * from './file'
export * from './generateAccessToken'
export * from './generateAuthCode'
export * from './generateRefreshToken'
export * from './removeTokensInDB' export * from './removeTokensInDB'
export * from './saveTokensInDB' export * from './saveTokensInDB'
export * from './sleep' export * from './sleep'