-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbroker-combined-auth.guard.ts
39 lines (34 loc) · 1.26 KB
/
broker-combined-auth.guard.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { ExecutionContext, Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { BrokerJwtAuthGuard } from './broker-jwt-auth.guard';
import { Request } from 'express';
import { BrokerOidcAuthGuard } from './broker-oidc-auth.guard';
/**
* This guard combines JWT and OIDC authentication. If the request has an authorization
* header it will be evaluated as a JWT.
*/
@Injectable()
export class BrokerCombinedAuthGuard extends AuthGuard(['jwt', 'oidc']) {
constructor(
private readonly oidcAuthGuard: BrokerOidcAuthGuard,
private readonly jwtAuthGuard: BrokerJwtAuthGuard,
) {
super();
}
canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest<Request>();
if (request.headers.authorization) {
return this.jwtAuthGuard.canActivate(context);
} else {
return this.oidcAuthGuard.canActivate(context);
}
}
handleRequest(err: any, user: any, info: any, context: any, status: any) {
const request = context.switchToHttp().getRequest();
if (request.headers.authorization) {
return this.jwtAuthGuard.handleRequest(err, user, info, context, status);
} else {
return this.oidcAuthGuard.handleRequest(err, user, info, context, status);
}
}
}