From eeba2328c0eeaf7bf5b7a73ecce2e2a82f973708 Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Fri, 26 Aug 2022 17:59:07 +0200 Subject: [PATCH] chore: added login, logout endpoints --- .gitignore | 2 +- api/src/routes/api/mock-sas9.ts | 94 +++++++++++++++++++++++++++++---- api/src/routes/web/web.ts | 26 +++++---- 3 files changed, 102 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 7a79a4a..896d7ee 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,8 @@ node_modules/ .env* sas/ sasjs_root/ +api/mocks/ tmp/ -api/mocks/* build/ sasjsbuild/ sasjscore/ diff --git a/api/src/routes/api/mock-sas9.ts b/api/src/routes/api/mock-sas9.ts index f06d85b..7799dfc 100644 --- a/api/src/routes/api/mock-sas9.ts +++ b/api/src/routes/api/mock-sas9.ts @@ -1,16 +1,21 @@ import { readFile } from '@sasjs/utils' -import express, { Request } from 'express' +import express from 'express' import path from 'path' const mockSas9Router = express.Router() const { MOCK_SERVERTYPE } = process.env -mockSas9Router.post('/SASStoredProcess/do/', async (req, res) => { - let program = req.query._program?.toString() || '' - program = program.replace('/', '') - const filePath = path.join(process.cwd(), 'mocks', program) - +let loggedIn: boolean = false + +mockSas9Router.get('/SASStoredProcess', async (req, res) => { + if (!loggedIn) { + res.redirect('/SASLogon/login') + return + } + + const filePath = path.join(process.cwd(), 'mocks', "generic", "sas9", "sas-stored-process") + let file try { @@ -19,12 +24,44 @@ mockSas9Router.post('/SASStoredProcess/do/', async (req, res) => { ) } catch (err: any) { console.error(`Mocked file on path: ${filePath} is not found.`) + res.status(403).send(err.toString()) + return + } + try { + res.send(file) + } catch (err: any) { + res.status(403).send(err.toString()) + } +}) + +mockSas9Router.post('/SASStoredProcess/do/', async (req, res) => { + let program = req.query._program?.toString() || '' + program = program.replace('/', '') + const filePath = path.join(process.cwd(), 'mocks', ...program.split('/')) + + let file + + try { + file = await readFile( + filePath + ) + } catch (err: any) { + let err = `Mocked file on path: ${filePath} is not found.` + console.error(err) + res.status(403).send(err) return } if (!file) { - console.error(`Mocked file on path: ${filePath} is not found.`) + let err = `Mocked file on path: ${filePath} is not found.` + console.error(err) + res.status(403).send(err) + return + } + + if (!loggedIn) { + res.redirect('/SASLogon/login') return } @@ -43,15 +80,52 @@ mockSas9Router.post('/SASStoredProcess/do/', async (req, res) => { } }) -if (MOCK_SERVERTYPE === undefined) { - mockSas9Router.post('/SASLogon/login', async (req, res) => { +if (MOCK_SERVERTYPE !== undefined) { + mockSas9Router.get('/SASLogon/login', async (req, res) => { + const filePath = path.join(process.cwd(), 'mocks', 'generic', 'sas9', 'login') + try { - res.send({ msg: 'Login' }) + const file = await readFile( + filePath + ) + + res.send(file) } catch (err: any) { res.status(403).send(err.toString()) } }) + mockSas9Router.post('/SASLogon/login', async (req, res) => { + loggedIn = true + + const filePath = path.join(process.cwd(), 'mocks', 'generic', 'sas9', 'logged-in') + + try { + const file = await readFile( + filePath + ) + + res.send(file) + } catch (err: any) { + res.status(403).send(err.toString()) + } + }) + + mockSas9Router.get('/SASLogon/logout', async (req, res) => { + loggedIn = false + + const filePath = path.join(process.cwd(), 'mocks', 'generic', 'sas9', 'logged-out') + + try { + const file = await readFile( + filePath + ) + + res.send(file) + } catch (err: any) { + res.status(403).send(err.toString()) + } + }) } export default mockSas9Router diff --git a/api/src/routes/web/web.ts b/api/src/routes/web/web.ts index 8acc092..956056d 100644 --- a/api/src/routes/web/web.ts +++ b/api/src/routes/web/web.ts @@ -26,7 +26,10 @@ webRouter.get('/', async (req, res) => { } }) -if (MOCK_SERVERTYPE !== undefined) { +/** + * If any type of mock is enabled, we won't use regular working logon endpoints + */ +if (MOCK_SERVERTYPE === undefined) { webRouter.post('/SASLogon/login', desktopRestrict, async (req, res) => { const { error, value: body } = loginWebValidation(req.body) if (error) return res.status(400).send(error.details[0].message) @@ -57,14 +60,19 @@ webRouter.post( } ) -webRouter.get('/SASLogon/logout', desktopRestrict, async (req, res) => { - try { - await controller.logout(req) - res.status(200).send('OK!') - } catch (err: any) { - res.status(403).send(err.toString()) - } -}) +/** + * If any type of mock is enabled, we won't use regular working logon endpoints + */ +if (MOCK_SERVERTYPE === undefined) { + webRouter.get('/SASLogon/logout', desktopRestrict, async (req, res) => { + try { + await controller.logout(req) + res.status(200).send('OK!') + } catch (err: any) { + res.status(403).send(err.toString()) + } + }) +} webRouter.use('/', mockSas9Router) // disabled for now