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

chore: code refactored

This commit is contained in:
Saad Jutt
2021-10-13 21:47:23 +05:00
parent bbd7133f5c
commit 3806b4bbb1
8 changed files with 77 additions and 54 deletions

View File

@@ -45,6 +45,6 @@
},
"configuration": {
"sasPath": "/opt/sas/sas9/SASHome/SASFoundation/9.4/sasexe/sas",
"sasJsPort": 4000
"sasJsPort": 5000
}
}

View File

@@ -1,3 +1,3 @@
Unauthorized
<a href="/signin" role="button">Sign-in</a>
<a href="/signin-with-azure" role="button">Sign-in</a>

View File

@@ -1,54 +1,26 @@
import path from 'path'
import express from 'express'
import session from 'express-session'
// import msalWrapper from 'msal-express-wrapper'
const msalWrapper = require('msal-express-wrapper')
import indexRouter from './routes'
require('dotenv').config()
import { appSettings } from './appSettings'
import { AuthMechanism } from './types'
import { getAzureSubApp } from './authMechanisms'
const app = express()
app.use(express.json({ limit: '50mb' }))
app.use(express.static(path.join(__dirname, '..', 'public')))
/**
* Using express-session middleware. Be sure to familiarize yourself with available options
* and set them as desired. Visit: https://www.npmjs.com/package/express-session
*/
const sessionConfig = {
secret: appSettings.appCredentials.clientSecret,
resave: false,
saveUninitialized: false,
cookie: {
secure: false // set this to true on production
}
require('dotenv').config()
const authMechanisms = process.env.AUTH?.split(' ') ?? [
AuthMechanism.NoSecurity
]
if (authMechanisms.includes(AuthMechanism.Azure)) {
app.use(getAzureSubApp())
} else {
app.get('/', indexRouter)
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
sessionConfig.cookie.secure = true // serve secure cookies
}
app.use(session(sessionConfig))
// instantiate the wrapper
const authProvider = new msalWrapper.AuthProvider(appSettings)
// initialize the wrapper
app.use(authProvider.initialize())
// authentication routes
app.get('/signin', authProvider.signIn({ successRedirect: '/' }))
app.get('/signout', authProvider.signOut({ successRedirect: '/' }))
// secure routes
app.get('/', authProvider.isAuthenticated(), indexRouter)
app.get('/error', (req, res) => res.redirect('/500.html'))
app.get('/unauthorized', (req, res) => res.redirect('/401.html'))
app.get('*', (req, res) => res.status(404).redirect('/404.html'))

View File

@@ -1,12 +0,0 @@
export const appSettings = {
appCredentials: {
clientId: process.env.CLIENTID as string,
tenantId: process.env.TENANTID as string,
clientSecret: process.env.CLIENTSECRET as string
},
authRoutes: {
redirect: '/redirect',
error: '/error', // the wrapper will redirect to this route in case of any error.
unauthorized: '/unauthorized' // the wrapper will redirect to this route in case of unauthorized access attempt.
}
}

View File

@@ -0,0 +1,57 @@
import express from 'express'
import session from 'express-session'
import indexRouter from '../routes'
export const getAzureSubApp = () => {
console.log('Using Azure Authentication')
const app = express()
const msalWrapper = require('msal-express-wrapper')
const appSettings = {
appCredentials: {
clientId: process.env.CLIENTID ?? ' ',
tenantId: process.env.TENANTID ?? ' ',
clientSecret: process.env.CLIENTSECRET ?? ' '
},
authRoutes: {
redirect: '/redirect',
error: '/error', // the wrapper will redirect to this route in case of any error.
unauthorized: '/unauthorized' // the wrapper will redirect to this route in case of unauthorized access attempt.
}
}
/**
* Using express-session middleware. Be sure to familiarize yourself with available options
* and set them as desired. Visit: https://www.npmjs.com/package/express-session
*/
const sessionConfig = {
secret: appSettings.appCredentials.clientSecret,
resave: false,
saveUninitialized: false,
cookie: {
secure: false // set this to true on production
}
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
sessionConfig.cookie.secure = true // serve secure cookies
}
app.use(session(sessionConfig))
// instantiate the wrapper
const authProvider = new msalWrapper.AuthProvider(appSettings)
// initialize the wrapper
app.use(authProvider.initialize())
// authentication routes
app.get('/signin-with-azure', authProvider.signIn({ successRedirect: '/' }))
app.get('/signout-with-azure', authProvider.signOut({ successRedirect: '/' }))
// secure routes
app.get('/', authProvider.isAuthenticated(), indexRouter)
return app
}

View File

@@ -0,0 +1 @@
export * from './azure'

View File

@@ -0,0 +1,4 @@
export enum AuthMechanism {
Azure = 'azure',
NoSecurity = 'nosecurity'
}

View File

@@ -1,3 +1,4 @@
export * from './sas'
export * from './request'
export * from './fileTree'
export * from './authMechanism'