Add model serializer and coreid login provider
This commit is contained in:
@@ -9,6 +9,10 @@ import {GuestRequiredMiddleware} from './middleware/GuestRequiredMiddleware'
|
||||
import {SessionAuthMiddleware} from './middleware/SessionAuthMiddleware'
|
||||
import {ViewEngine} from '../views/ViewEngine'
|
||||
import {SecurityContext} from './context/SecurityContext'
|
||||
import {LoginProvider, LoginProviderConfig} from './provider/LoginProvider'
|
||||
import {Config} from '../service/Config'
|
||||
import {ErrorWithContext, hasOwnProperty} from '../util'
|
||||
import {Route} from '../http/routing/Route'
|
||||
|
||||
@Injectable()
|
||||
export class Authentication extends Unit {
|
||||
@@ -18,6 +22,11 @@ export class Authentication extends Unit {
|
||||
@Inject()
|
||||
protected readonly middleware!: Middlewares
|
||||
|
||||
@Inject()
|
||||
protected readonly config!: Config
|
||||
|
||||
protected providers: {[name: string]: LoginProvider<LoginProviderConfig>} = {}
|
||||
|
||||
async up(): Promise<void> {
|
||||
this.middleware.registerNamespace('@auth', this.getMiddlewareResolver())
|
||||
|
||||
@@ -27,6 +36,33 @@ export class Authentication extends Unit {
|
||||
return () => req?.make<SecurityContext>(SecurityContext)?.getUser()
|
||||
})
|
||||
})
|
||||
|
||||
const config = this.config.get('auth.providers', {})
|
||||
const middleware = this.config.get('auth.middleware', SessionAuthMiddleware)
|
||||
|
||||
if ( !(middleware?.prototype instanceof Middleware) ) {
|
||||
throw new ErrorWithContext('Auth middleware must extend Middleware base class', {
|
||||
providedValue: middleware,
|
||||
configKey: 'auth.middleware',
|
||||
})
|
||||
}
|
||||
|
||||
for ( const name in config ) {
|
||||
if ( !hasOwnProperty(config, name) ) {
|
||||
continue
|
||||
}
|
||||
|
||||
if ( this.providers[name] ) {
|
||||
this.logging.warn(`Registering duplicate authentication provider: ${name}`)
|
||||
}
|
||||
|
||||
this.logging.verbose(`Registered authentication provider: ${name}`)
|
||||
this.providers[name] = this.make(config[name].driver, name, config[name].config)
|
||||
|
||||
Route.group(`/auth/${name}`, () => {
|
||||
this.providers[name].routes()
|
||||
}).pre(request => request.make<Middleware>(middleware, request).apply())
|
||||
}
|
||||
}
|
||||
|
||||
protected getMiddlewareResolver(): CanonicalResolver<StaticInstantiable<Middleware>> {
|
||||
|
||||
Reference in New Issue
Block a user