mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 11:24:35 +00:00
feat: bypass authentication when route is enabled for public group
This commit is contained in:
@@ -5,7 +5,9 @@ import {
|
||||
fetchLatestAutoExec,
|
||||
ModeType,
|
||||
verifyTokenInDB,
|
||||
isAuthorizingRoute
|
||||
isAuthorizingRoute,
|
||||
isPublicRoute,
|
||||
publicUser
|
||||
} from '../utils'
|
||||
import { desktopUser } from './desktop'
|
||||
import { authorize } from './authorize'
|
||||
@@ -21,6 +23,11 @@ export const authenticateAccessToken: RequestHandler = async (
|
||||
return next()
|
||||
}
|
||||
|
||||
if (await isPublicRoute(req)) {
|
||||
req.user = publicUser
|
||||
return next()
|
||||
}
|
||||
|
||||
const nextFunction = isAuthorizingRoute(req)
|
||||
? () => authorize(req, res, next)
|
||||
: next
|
||||
|
||||
@@ -16,6 +16,7 @@ export * from './getRunTimeAndFilePath'
|
||||
export * from './getServerUrl'
|
||||
export * from './instantiateLogger'
|
||||
export * from './isDebugOn'
|
||||
export * from './isPublicRoute'
|
||||
export * from './zipped'
|
||||
export * from './parseLogToArray'
|
||||
export * from './removeTokensInDB'
|
||||
|
||||
31
api/src/utils/isPublicRoute.ts
Normal file
31
api/src/utils/isPublicRoute.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { Request } from 'express'
|
||||
import { getPath } from './getAuthorizedRoutes'
|
||||
import Group, { PUBLIC_GROUP_NAME } from '../model/Group'
|
||||
import Permission from '../model/Permission'
|
||||
import { PermissionSettingForRoute } from '../controllers'
|
||||
import { RequestUser } from '../types'
|
||||
|
||||
export const isPublicRoute = async (req: Request): Promise<boolean> => {
|
||||
const group = await Group.findOne({ name: PUBLIC_GROUP_NAME })
|
||||
if (group) {
|
||||
const path = getPath(req)
|
||||
|
||||
const groupPermission = await Permission.findOne({
|
||||
path,
|
||||
group: group?._id
|
||||
})
|
||||
if (groupPermission?.setting === PermissionSettingForRoute.grant)
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
export const publicUser: RequestUser = {
|
||||
userId: 12345,
|
||||
clientId: 'public_app',
|
||||
username: 'publicUser',
|
||||
displayName: 'Public User',
|
||||
isAdmin: false,
|
||||
isActive: true
|
||||
}
|
||||
Reference in New Issue
Block a user