-
Notifications
You must be signed in to change notification settings - Fork 4
/
authorization_code.ts
73 lines (71 loc) · 2.33 KB
/
authorization_code.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
68
69
70
71
72
73
import { ScopeInterface } from "../models/scope.ts";
import { ClientInterface } from "../models/client.ts";
import { AuthorizationCode } from "../models/authorization_code.ts";
export interface AuthorizationCodeServiceInterface<
Client extends ClientInterface,
User,
Scope extends ScopeInterface,
> {
/** Lifetime of authorization codes in second. */
lifetime: number;
/** Generates an authorization code. */
generateCode(
client: Client,
user: User,
scope?: Scope | null,
): Promise<string>;
/** Gets the date that a new authorization code would expire at. */
expiresAt(
client: Client,
user: User,
scope?: Scope | null,
): Promise<Date>;
/** Retrieves an existing authorization code. */
get(code: string): Promise<AuthorizationCode<Client, User, Scope> | void>;
/** Saves an authorization code. */
save(
authorizationCode: AuthorizationCode<Client, User, Scope>,
): Promise<AuthorizationCode<Client, User, Scope>>;
/** Revokes an authorization code. */
revoke(
authorizationCode: AuthorizationCode<Client, User, Scope> | string,
): Promise<boolean>;
}
export abstract class AbstractAuthorizationCodeService<
Client extends ClientInterface,
User,
Scope extends ScopeInterface,
> implements AuthorizationCodeServiceInterface<Client, User, Scope> {
/** Lifetime of authorization codes in second. Defaults to 5 minutes. */
lifetime = 5 * 60;
/** Generates an authorization code. */
async generateCode(
_client: Client,
_user: User,
_scope?: Scope | null,
): Promise<string> {
return await Promise.resolve(crypto.randomUUID());
}
/** Gets the date that a new authorization code would expire at. */
async expiresAt(
_client: Client,
_user: User,
_scope?: Scope | null,
): Promise<Date> {
return await Promise.resolve(
new Date(Date.now() + this.lifetime * 1000),
);
}
/** Retrieves an existing authorization code. */
abstract get(
code: string,
): Promise<AuthorizationCode<Client, User, Scope> | undefined>;
/** Saves an authorization code. */
abstract save(
authorizationCode: AuthorizationCode<Client, User, Scope>,
): Promise<AuthorizationCode<Client, User, Scope>>;
/** Revokes an authorization code. */
abstract revoke(
authorizationCode: AuthorizationCode<Client, User, Scope> | string,
): Promise<boolean>;
}