diff --git a/api/src/controllers/auth.ts b/api/src/controllers/auth.ts index 559c5f1..9cc05e3 100644 --- a/api/src/controllers/auth.ts +++ b/api/src/controllers/auth.ts @@ -2,11 +2,17 @@ import { Security, Route, Tags, Example, Post, Body, Query, Hidden } from 'tsoa' import jwt from 'jsonwebtoken' import User from '../model/User' import { InfoJWT } from '../types' -import { removeTokensInDB, saveTokensInDB } from '../utils' +import { + generateAccessToken, + generateAuthCode, + generateRefreshToken, + removeTokensInDB, + saveTokensInDB +} from '../utils' @Route('SASjsApi/auth') @Tags('Auth') -export default class AuthController { +export class AuthController { static authCodes: { [key: string]: { [key: string]: string } } = {} static saveCode = (userId: number, clientId: string, code: string) => { if (AuthController.authCodes[userId]) @@ -185,21 +191,6 @@ interface TokenResponse { 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 ( clientId: string, code: string diff --git a/api/src/controllers/client.ts b/api/src/controllers/client.ts index cfc5c0a..c65f52a 100644 --- a/api/src/controllers/client.ts +++ b/api/src/controllers/client.ts @@ -5,7 +5,7 @@ import Client, { ClientPayload } from '../model/Client' @Security('bearerAuth') @Route('SASjsApi/client') @Tags('Client') -export default class ClientController { +export class ClientController { /** * @summary Create client with the following attributes: ClientId, ClientSecret. Admin only task. * diff --git a/api/src/controllers/drive.ts b/api/src/controllers/drive.ts index 733a110..f7a17cb 100644 --- a/api/src/controllers/drive.ts +++ b/api/src/controllers/drive.ts @@ -11,7 +11,7 @@ import { Patch } from 'tsoa' 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 path from 'path' diff --git a/api/src/controllers/group.ts b/api/src/controllers/group.ts index 1e98dd0..44adef2 100644 --- a/api/src/controllers/group.ts +++ b/api/src/controllers/group.ts @@ -31,7 +31,7 @@ interface GroupDetailsResponse { @Security('bearerAuth') @Route('SASjsApi/group') @Tags('Group') -export default class GroupController { +export class GroupController { /** * @summary Get list of all groups (groupName and groupDescription). All users can request this. * diff --git a/api/src/controllers/index.ts b/api/src/controllers/index.ts index 86939a2..0a1e74b 100644 --- a/api/src/controllers/index.ts +++ b/api/src/controllers/index.ts @@ -1,4 +1,6 @@ -export * from './deploy' -export * from './Session' -export * from './Execution' -export * from './FileUploadController' +export * from './auth' +export * from './client' +export * from './drive' +export * from './group' +export * from './stp' +export * from './user' diff --git a/api/src/controllers/Execution.ts b/api/src/controllers/internal/Execution.ts similarity index 97% rename from api/src/controllers/Execution.ts rename to api/src/controllers/internal/Execution.ts index 5169ca3..f03ed64 100644 --- a/api/src/controllers/Execution.ts +++ b/api/src/controllers/internal/Execution.ts @@ -2,11 +2,11 @@ import path from 'path' import fs from 'fs' import { getSessionController } from './' import { readFile, fileExists, createFile } from '@sasjs/utils' -import { configuration } from '../../package.json' +import { configuration } from '../../../package.json' import { promisify } from 'util' import { execFile } from 'child_process' -import { PreProgramVars, Session, TreeNode } from '../types' -import { generateFileUploadSasCode, getTmpFilesFolderPath } from '../utils' +import { PreProgramVars, Session, TreeNode } from '../../types' +import { generateFileUploadSasCode, getTmpFilesFolderPath } from '../../utils' const execFilePromise = promisify(execFile) diff --git a/api/src/controllers/FileUploadController.ts b/api/src/controllers/internal/FileUploadController.ts similarity index 100% rename from api/src/controllers/FileUploadController.ts rename to api/src/controllers/internal/FileUploadController.ts diff --git a/api/src/controllers/Session.ts b/api/src/controllers/internal/Session.ts similarity index 96% rename from api/src/controllers/Session.ts rename to api/src/controllers/internal/Session.ts index abdf014..2796cd6 100644 --- a/api/src/controllers/Session.ts +++ b/api/src/controllers/internal/Session.ts @@ -1,5 +1,5 @@ -import { Session } from '../types' -import { getTmpSessionsFolderPath, generateUniqueFileName } from '../utils' +import { Session } from '../../types' +import { getTmpSessionsFolderPath, generateUniqueFileName } from '../../utils' import { deleteFolder, createFile, @@ -120,7 +120,7 @@ export class SessionController { } } -export const getSessionController = () => { +export const getSessionController = (): SessionController => { if (process.sessionController) return process.sessionController process.sessionController = new SessionController() diff --git a/api/src/controllers/deploy.ts b/api/src/controllers/internal/deploy.ts similarity index 95% rename from api/src/controllers/deploy.ts rename to api/src/controllers/internal/deploy.ts index 2852bc8..1c78d2f 100644 --- a/api/src/controllers/deploy.ts +++ b/api/src/controllers/internal/deploy.ts @@ -1,5 +1,5 @@ -import { MemberType, FolderMember, ServiceMember, FileTree } from '../types' -import { getTmpFilesFolderPath } from '../utils/file' +import { MemberType, FolderMember, ServiceMember, FileTree } from '../../types' +import { getTmpFilesFolderPath } from '../../utils/file' import { createFolder, createFile, asyncForEach } from '@sasjs/utils' import path from 'path' diff --git a/api/src/controllers/internal/index.ts b/api/src/controllers/internal/index.ts new file mode 100644 index 0000000..86939a2 --- /dev/null +++ b/api/src/controllers/internal/index.ts @@ -0,0 +1,4 @@ +export * from './deploy' +export * from './Session' +export * from './Execution' +export * from './FileUploadController' diff --git a/api/src/controllers/stp.ts b/api/src/controllers/stp.ts index 20e495e..e6cd9c8 100644 --- a/api/src/controllers/stp.ts +++ b/api/src/controllers/stp.ts @@ -11,7 +11,7 @@ import { Get, Query } from 'tsoa' -import { ExecutionController } from '.' +import { ExecutionController } from './internal' import { PreProgramVars } from '../types' import { getTmpFilesFolderPath, makeFilesNamesMap } from '../utils' @@ -32,7 +32,7 @@ interface ExecuteReturnJsonResponse { @Security('bearerAuth') @Route('SASjsApi/client') @Tags('STP') -export default class STPController { +export class STPController { /** * Trigger a SAS program using it's location in the _program parameter. * Enable debugging using the _debug parameter. diff --git a/api/src/controllers/user.ts b/api/src/controllers/user.ts index 4f56a1d..9aa66b9 100644 --- a/api/src/controllers/user.ts +++ b/api/src/controllers/user.ts @@ -32,7 +32,7 @@ interface UserDetailsResponse { @Security('bearerAuth') @Route('SASjsApi/user') @Tags('User') -export default class UserController { +export class UserController { /** * @summary Get list of all users (username, displayname). All users can request this. * diff --git a/api/src/routes/api/auth.ts b/api/src/routes/api/auth.ts index b16e302..c9fd789 100644 --- a/api/src/routes/api/auth.ts +++ b/api/src/routes/api/auth.ts @@ -1,7 +1,7 @@ import express from 'express' import mongoose from 'mongoose' -import AuthController from '../../controllers/auth' +import { AuthController } from '../../controllers/' import Client from '../../model/Client' import { diff --git a/api/src/routes/api/client.ts b/api/src/routes/api/client.ts index 0672e02..ae9f4d7 100644 --- a/api/src/routes/api/client.ts +++ b/api/src/routes/api/client.ts @@ -1,5 +1,5 @@ import express from 'express' -import ClientController from '../../controllers/client' +import { ClientController } from '../../controllers' import { registerClientValidation } from '../../utils' const clientRouter = express.Router() diff --git a/api/src/routes/api/drive.ts b/api/src/routes/api/drive.ts index eddf773..d1fd6b1 100644 --- a/api/src/routes/api/drive.ts +++ b/api/src/routes/api/drive.ts @@ -1,5 +1,5 @@ import express from 'express' -import { DriveController } from '../../controllers/drive' +import { DriveController } from '../../controllers/' import { getFileDriveValidation, updateFileDriveValidation } from '../../utils' const driveRouter = express.Router() diff --git a/api/src/routes/api/group.ts b/api/src/routes/api/group.ts index 6ae4fdc..fc02289 100644 --- a/api/src/routes/api/group.ts +++ b/api/src/routes/api/group.ts @@ -1,8 +1,7 @@ import express from 'express' -import GroupController from '../../controllers/group' +import { GroupController } from '../../controllers/' import { authenticateAccessToken, verifyAdmin } from '../../middlewares' import { registerGroupValidation } from '../../utils' -import userRouter from './user' const groupRouter = express.Router() diff --git a/api/src/routes/api/spec/auth.spec.ts b/api/src/routes/api/spec/auth.spec.ts index 80a2bca..2054559 100644 --- a/api/src/routes/api/spec/auth.spec.ts +++ b/api/src/routes/api/spec/auth.spec.ts @@ -2,16 +2,20 @@ import mongoose, { Mongoose } from 'mongoose' import { MongoMemoryServer } from 'mongodb-memory-server' import request from 'supertest' import app from '../../../app' -import UserController from '../../../controllers/user' -import ClientController from '../../../controllers/client' -import AuthController, { - generateAccessToken, - generateAuthCode, - generateRefreshToken -} from '../../../controllers/auth' +import { + UserController, + ClientController, + AuthController +} from '../../../controllers/' import { populateClients } from '../auth' import { InfoJWT } from '../../../types' -import { saveTokensInDB, verifyTokenInDB } from '../../../utils' +import { + generateAccessToken, + generateAuthCode, + generateRefreshToken, + saveTokensInDB, + verifyTokenInDB +} from '../../../utils' const clientId = 'someclientID' const clientSecret = 'someclientSecret' diff --git a/api/src/routes/api/spec/client.spec.ts b/api/src/routes/api/spec/client.spec.ts index e57a84c..14f5767 100644 --- a/api/src/routes/api/spec/client.spec.ts +++ b/api/src/routes/api/spec/client.spec.ts @@ -2,10 +2,8 @@ import mongoose, { Mongoose } from 'mongoose' import { MongoMemoryServer } from 'mongodb-memory-server' import request from 'supertest' import app from '../../../app' -import UserController from '../../../controllers/user' -import ClientController from '../../../controllers/client' -import { generateAccessToken } from '../../../controllers/auth' -import { saveTokensInDB } from '../../../utils' +import { UserController, ClientController } from '../../../controllers/' +import { generateAccessToken, saveTokensInDB } from '../../../utils' const client = { clientId: 'someclientID', diff --git a/api/src/routes/api/spec/drive.spec.ts b/api/src/routes/api/spec/drive.spec.ts index 4432284..3a6bc52 100644 --- a/api/src/routes/api/spec/drive.spec.ts +++ b/api/src/routes/api/spec/drive.spec.ts @@ -2,13 +2,12 @@ import mongoose, { Mongoose } from 'mongoose' import { MongoMemoryServer } from 'mongodb-memory-server' import request from 'supertest' import app from '../../../app' -import { getTreeExample } from '../../../controllers/deploy' -import UserController from '../../../controllers/user' +import { UserController } from '../../../controllers/' +import { getTreeExample } from '../../../controllers/internal' import { getTmpFilesFolderPath } from '../../../utils/file' import { folderExists, fileExists, readFile, deleteFolder } from '@sasjs/utils' import path from 'path' -import { generateAccessToken } from '../../../controllers/auth' -import { saveTokensInDB } from '../../../utils' +import { generateAccessToken, saveTokensInDB } from '../../../utils' import { FolderMember, ServiceMember } from '../../../types' const clientId = 'someclientID' diff --git a/api/src/routes/api/spec/group.spec.ts b/api/src/routes/api/spec/group.spec.ts index c941cb8..4ec1fb3 100644 --- a/api/src/routes/api/spec/group.spec.ts +++ b/api/src/routes/api/spec/group.spec.ts @@ -2,10 +2,8 @@ import mongoose, { Mongoose } from 'mongoose' import { MongoMemoryServer } from 'mongodb-memory-server' import request from 'supertest' import app from '../../../app' -import UserController from '../../../controllers/user' -import GroupController from '../../../controllers/group' -import { generateAccessToken } from '../../../controllers/auth' -import { saveTokensInDB } from '../../../utils' +import { UserController, GroupController } from '../../../controllers/' +import { generateAccessToken, saveTokensInDB } from '../../../utils' const clientId = 'someclientID' const adminUser = { diff --git a/api/src/routes/api/spec/user.spec.ts b/api/src/routes/api/spec/user.spec.ts index c15b7ec..73c98bc 100644 --- a/api/src/routes/api/spec/user.spec.ts +++ b/api/src/routes/api/spec/user.spec.ts @@ -2,9 +2,8 @@ import mongoose, { Mongoose } from 'mongoose' import { MongoMemoryServer } from 'mongodb-memory-server' import request from 'supertest' import app from '../../../app' -import UserController from '../../../controllers/user' -import { generateAccessToken } from '../../../controllers/auth' -import { saveTokensInDB } from '../../../utils' +import { UserController } from '../../../controllers/' +import { generateAccessToken, saveTokensInDB } from '../../../utils' const clientId = 'someclientID' const adminUser = { diff --git a/api/src/routes/api/stp.ts b/api/src/routes/api/stp.ts index 33ea8da..7f03bca 100644 --- a/api/src/routes/api/stp.ts +++ b/api/src/routes/api/stp.ts @@ -1,7 +1,7 @@ import express from 'express' import { executeProgramRawValidation } from '../../utils' -import STPController from '../../controllers/stp' -import { FileUploadController } from '../../controllers' +import { STPController } from '../../controllers/' +import { FileUploadController } from '../../controllers/internal' const stpRouter = express.Router() diff --git a/api/src/routes/api/user.ts b/api/src/routes/api/user.ts index 924eec2..e4d8e9a 100644 --- a/api/src/routes/api/user.ts +++ b/api/src/routes/api/user.ts @@ -1,5 +1,5 @@ import express from 'express' -import UserController from '../../controllers/user' +import { UserController } from '../../controllers/' import { authenticateAccessToken, verifyAdmin, diff --git a/api/src/utils/generateAccessToken.ts b/api/src/utils/generateAccessToken.ts new file mode 100644 index 0000000..b43c658 --- /dev/null +++ b/api/src/utils/generateAccessToken.ts @@ -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' + }) diff --git a/api/src/utils/generateAuthCode.ts b/api/src/utils/generateAuthCode.ts new file mode 100644 index 0000000..bfacb79 --- /dev/null +++ b/api/src/utils/generateAuthCode.ts @@ -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' + }) diff --git a/api/src/utils/generateRefreshToken.ts b/api/src/utils/generateRefreshToken.ts new file mode 100644 index 0000000..f85d8d5 --- /dev/null +++ b/api/src/utils/generateRefreshToken.ts @@ -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' + }) diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index b503a6a..f2f14bd 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -1,4 +1,7 @@ export * from './file' +export * from './generateAccessToken' +export * from './generateAuthCode' +export * from './generateRefreshToken' export * from './removeTokensInDB' export * from './saveTokensInDB' export * from './sleep'