-
Notifications
You must be signed in to change notification settings - Fork 70
/
component.ts
67 lines (61 loc) · 2.58 KB
/
component.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright (c) 2023 Sourcefuse Technologies
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
import {Binding, Component, inject, ProviderMap} from '@loopback/core';
import {Class, Model, Repository} from '@loopback/repository';
import {Strategies} from 'loopback4-authentication';
import {ILogger, LOGGER} from '../logger-extension';
import {
BearerVerifierBindings,
BearerVerifierConfig,
BearerVerifierType,
} from './keys';
import {RevokedToken} from './models';
import {FacadesBearerAsymmetricTokenVerifyProvider} from './providers/facades-bearer-asym-token-verify.provider';
import {FacadesBearerTokenVerifyProvider} from './providers/facades-bearer-token-verify.provider';
import {ServicesBearerAsymmetricTokenVerifyProvider} from './providers/services-bearer-asym-token-verifier';
import {ServicesBearerTokenVerifyProvider} from './providers/services-bearer-token-verify.provider';
import {RevokedTokenRepository} from './repositories';
export class BearerVerifierComponent implements Component {
constructor(
@inject(BearerVerifierBindings.Config)
private readonly config: BearerVerifierConfig,
@inject(LOGGER.LOGGER_INJECT) public logger: ILogger,
) {
this.providers = {};
this.repositories = [RevokedTokenRepository];
this.models = [RevokedToken];
if (this.config && this.config.type === BearerVerifierType.service) {
if (process.env.JWT_PUBLIC_KEY && process.env.JWT_PUBLIC_KEY !== '') {
this.providers[Strategies.Passport.BEARER_TOKEN_VERIFIER.key] =
ServicesBearerAsymmetricTokenVerifyProvider;
} else {
this.providers[Strategies.Passport.BEARER_TOKEN_VERIFIER.key] =
ServicesBearerTokenVerifyProvider;
}
} else if (this.config && this.config.type === BearerVerifierType.facade) {
if (process.env.JWT_PUBLIC_KEY && process.env.JWT_PUBLIC_KEY !== '') {
this.providers[Strategies.Passport.BEARER_TOKEN_VERIFIER.key] =
FacadesBearerAsymmetricTokenVerifyProvider;
} else {
this.providers[Strategies.Passport.BEARER_TOKEN_VERIFIER.key] =
FacadesBearerTokenVerifyProvider;
}
} else {
this.logger.error('Invalid BearerVerifierType specified !');
}
}
providers?: ProviderMap;
bindings: Binding[] = [];
/**
* An optional list of Repository classes to bind for dependency injection
* via `app.repository()` API.
*/
repositories?: Class<Repository<Model>>[];
/**
* An optional list of Model classes to bind for dependency injection
* via `app.model()` API.
*/
models?: Class<Model>[];
}