@arikajs/auth 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -53
- package/dist/AuthContext.d.ts +24 -0
- package/dist/AuthContext.d.ts.map +1 -0
- package/dist/AuthContext.js +65 -0
- package/dist/AuthContext.js.map +1 -0
- package/dist/AuthManager.d.ts +33 -8
- package/dist/AuthManager.d.ts.map +1 -1
- package/dist/AuthManager.js +194 -51
- package/dist/AuthManager.js.map +1 -1
- package/dist/Contracts/CanResetPassword.d.ts +11 -0
- package/dist/Contracts/CanResetPassword.d.ts.map +1 -0
- package/dist/Contracts/CanResetPassword.js +3 -0
- package/dist/Contracts/CanResetPassword.js.map +1 -0
- package/dist/Contracts/CanVerifyEmail.d.ts +19 -0
- package/dist/Contracts/CanVerifyEmail.d.ts.map +1 -0
- package/dist/Contracts/CanVerifyEmail.js +3 -0
- package/dist/Contracts/CanVerifyEmail.js.map +1 -0
- package/dist/Contracts/EventDispatcher.d.ts +7 -0
- package/dist/Contracts/EventDispatcher.d.ts.map +1 -0
- package/dist/Contracts/EventDispatcher.js +3 -0
- package/dist/Contracts/EventDispatcher.js.map +1 -0
- package/dist/Contracts/PasswordBroker.d.ts +18 -0
- package/dist/Contracts/PasswordBroker.d.ts.map +1 -0
- package/dist/Contracts/PasswordBroker.js +11 -0
- package/dist/Contracts/PasswordBroker.js.map +1 -0
- package/dist/Contracts/RateLimiter.d.ts +15 -0
- package/dist/Contracts/RateLimiter.d.ts.map +1 -0
- package/dist/Contracts/RateLimiter.js +3 -0
- package/dist/Contracts/RateLimiter.js.map +1 -0
- package/dist/Contracts/UserProvider.d.ts +4 -0
- package/dist/Contracts/UserProvider.d.ts.map +1 -1
- package/dist/Guards/BasicGuard.d.ts +17 -0
- package/dist/Guards/BasicGuard.d.ts.map +1 -0
- package/dist/Guards/BasicGuard.js +59 -0
- package/dist/Guards/BasicGuard.js.map +1 -0
- package/dist/Guards/JwtGuard.d.ts +36 -0
- package/dist/Guards/JwtGuard.d.ts.map +1 -0
- package/dist/Guards/JwtGuard.js +158 -0
- package/dist/Guards/JwtGuard.js.map +1 -0
- package/dist/Guards/SessionGuard.d.ts +7 -3
- package/dist/Guards/SessionGuard.d.ts.map +1 -1
- package/dist/Guards/SessionGuard.js +104 -10
- package/dist/Guards/SessionGuard.js.map +1 -1
- package/dist/Hasher.d.ts +4 -0
- package/dist/Hasher.d.ts.map +1 -1
- package/dist/Hasher.js +6 -0
- package/dist/Hasher.js.map +1 -1
- package/dist/Middleware/Authenticate.d.ts +11 -2
- package/dist/Middleware/Authenticate.d.ts.map +1 -1
- package/dist/Middleware/Authenticate.js +42 -14
- package/dist/Middleware/Authenticate.js.map +1 -1
- package/dist/Middleware/EnsureEmailIsVerified.d.ts +8 -0
- package/dist/Middleware/EnsureEmailIsVerified.d.ts.map +1 -0
- package/dist/Middleware/EnsureEmailIsVerified.js +27 -0
- package/dist/Middleware/EnsureEmailIsVerified.js.map +1 -0
- package/dist/Passwords/PasswordResetBroker.d.ts +37 -0
- package/dist/Passwords/PasswordResetBroker.d.ts.map +1 -0
- package/dist/Passwords/PasswordResetBroker.js +128 -0
- package/dist/Passwords/PasswordResetBroker.js.map +1 -0
- package/dist/Providers/EloquentUserProvider.d.ts +30 -0
- package/dist/Providers/EloquentUserProvider.d.ts.map +1 -0
- package/dist/Providers/EloquentUserProvider.js +63 -0
- package/dist/Providers/EloquentUserProvider.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/src/AuthContext.d.ts +24 -0
- package/dist/src/AuthContext.d.ts.map +1 -0
- package/dist/src/AuthContext.js +65 -0
- package/dist/src/AuthContext.js.map +1 -0
- package/dist/src/AuthManager.d.ts +52 -0
- package/dist/src/AuthManager.d.ts.map +1 -0
- package/dist/src/AuthManager.js +255 -0
- package/dist/src/AuthManager.js.map +1 -0
- package/dist/src/Contracts/CanResetPassword.d.ts +11 -0
- package/dist/src/Contracts/CanResetPassword.d.ts.map +1 -0
- package/dist/src/Contracts/CanResetPassword.js +3 -0
- package/dist/src/Contracts/CanResetPassword.js.map +1 -0
- package/dist/src/Contracts/CanVerifyEmail.d.ts +19 -0
- package/dist/src/Contracts/CanVerifyEmail.d.ts.map +1 -0
- package/dist/src/Contracts/CanVerifyEmail.js +3 -0
- package/dist/src/Contracts/CanVerifyEmail.js.map +1 -0
- package/dist/src/Contracts/EventDispatcher.d.ts +7 -0
- package/dist/src/Contracts/EventDispatcher.d.ts.map +1 -0
- package/dist/src/Contracts/EventDispatcher.js +3 -0
- package/dist/src/Contracts/EventDispatcher.js.map +1 -0
- package/dist/src/Contracts/PasswordBroker.d.ts +18 -0
- package/dist/src/Contracts/PasswordBroker.d.ts.map +1 -0
- package/dist/src/Contracts/PasswordBroker.js +11 -0
- package/dist/src/Contracts/PasswordBroker.js.map +1 -0
- package/dist/src/Contracts/RateLimiter.d.ts +15 -0
- package/dist/src/Contracts/RateLimiter.d.ts.map +1 -0
- package/dist/src/Contracts/RateLimiter.js +3 -0
- package/dist/src/Contracts/RateLimiter.js.map +1 -0
- package/dist/src/Contracts/UserProvider.d.ts +10 -0
- package/dist/src/Contracts/UserProvider.d.ts.map +1 -0
- package/dist/src/Contracts/UserProvider.js +3 -0
- package/dist/src/Contracts/UserProvider.js.map +1 -0
- package/dist/src/Guard.d.ts +10 -0
- package/dist/src/Guard.d.ts.map +1 -0
- package/dist/src/Guard.js +3 -0
- package/dist/src/Guard.js.map +1 -0
- package/dist/src/Guards/BasicGuard.d.ts +17 -0
- package/dist/src/Guards/BasicGuard.d.ts.map +1 -0
- package/dist/src/Guards/BasicGuard.js +59 -0
- package/dist/src/Guards/BasicGuard.js.map +1 -0
- package/dist/src/Guards/JwtGuard.d.ts +36 -0
- package/dist/src/Guards/JwtGuard.d.ts.map +1 -0
- package/dist/src/Guards/JwtGuard.js +158 -0
- package/dist/src/Guards/JwtGuard.js.map +1 -0
- package/dist/src/Guards/SessionGuard.d.ts +23 -0
- package/dist/src/Guards/SessionGuard.d.ts.map +1 -0
- package/dist/src/Guards/SessionGuard.js +162 -0
- package/dist/src/Guards/SessionGuard.js.map +1 -0
- package/dist/src/Guards/TokenGuard.d.ts +17 -0
- package/dist/src/Guards/TokenGuard.d.ts.map +1 -0
- package/dist/src/Guards/TokenGuard.js +60 -0
- package/dist/src/Guards/TokenGuard.js.map +1 -0
- package/dist/src/Hasher.d.ts +15 -0
- package/dist/src/Hasher.d.ts.map +1 -0
- package/dist/src/Hasher.js +59 -0
- package/dist/src/Hasher.js.map +1 -0
- package/dist/src/Middleware/Authenticate.d.ts +24 -0
- package/dist/src/Middleware/Authenticate.d.ts.map +1 -0
- package/dist/src/Middleware/Authenticate.js +66 -0
- package/dist/src/Middleware/Authenticate.js.map +1 -0
- package/dist/src/Middleware/EnsureEmailIsVerified.d.ts +8 -0
- package/dist/src/Middleware/EnsureEmailIsVerified.d.ts.map +1 -0
- package/dist/src/Middleware/EnsureEmailIsVerified.js +27 -0
- package/dist/src/Middleware/EnsureEmailIsVerified.js.map +1 -0
- package/dist/src/Passwords/PasswordResetBroker.d.ts +37 -0
- package/dist/src/Passwords/PasswordResetBroker.d.ts.map +1 -0
- package/dist/src/Passwords/PasswordResetBroker.js +128 -0
- package/dist/src/Passwords/PasswordResetBroker.js.map +1 -0
- package/dist/src/Providers/EloquentUserProvider.d.ts +30 -0
- package/dist/src/Providers/EloquentUserProvider.d.ts.map +1 -0
- package/dist/src/Providers/EloquentUserProvider.js +63 -0
- package/dist/src/Providers/EloquentUserProvider.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +35 -0
- package/dist/src/index.js.map +1 -0
- package/dist/tests/Auth.test.d.ts +2 -0
- package/dist/tests/Auth.test.d.ts.map +1 -0
- package/dist/tests/Auth.test.js +177 -0
- package/dist/tests/Auth.test.js.map +1 -0
- package/package.json +51 -47
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.JwtGuard = void 0;
|
|
37
|
+
const jwt = __importStar(require("jsonwebtoken"));
|
|
38
|
+
const crypto = __importStar(require("crypto"));
|
|
39
|
+
class JwtGuard {
|
|
40
|
+
constructor(provider, request, secret, options = {}) {
|
|
41
|
+
this.loggedUser = null;
|
|
42
|
+
this.provider = provider;
|
|
43
|
+
this.request = request;
|
|
44
|
+
this.secret = secret;
|
|
45
|
+
this.options = options;
|
|
46
|
+
}
|
|
47
|
+
async check() {
|
|
48
|
+
return !!(await this.user());
|
|
49
|
+
}
|
|
50
|
+
async guest() {
|
|
51
|
+
return !(await this.check());
|
|
52
|
+
}
|
|
53
|
+
async user() {
|
|
54
|
+
if (this.loggedUser)
|
|
55
|
+
return this.loggedUser;
|
|
56
|
+
const token = this.getTokenForRequest();
|
|
57
|
+
if (!token)
|
|
58
|
+
return null;
|
|
59
|
+
try {
|
|
60
|
+
const decoded = jwt.verify(token, this.secret, this.options);
|
|
61
|
+
if (decoded && decoded.sub) {
|
|
62
|
+
// If the provider supports retrieving by ID, use it for stateless verification payload validation
|
|
63
|
+
// In a purely stateless app, you might just return the decoded payload or a Model proxy instead
|
|
64
|
+
// of querying the DB. But to ensure user is active/exists, we retrieve it:
|
|
65
|
+
this.loggedUser = await this.provider.retrieveById(decoded.sub);
|
|
66
|
+
return this.loggedUser;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return null; // Invalid token
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
async id() {
|
|
75
|
+
if (this.loggedUser)
|
|
76
|
+
return this.loggedUser.id;
|
|
77
|
+
const token = this.getTokenForRequest();
|
|
78
|
+
if (!token)
|
|
79
|
+
return null;
|
|
80
|
+
try {
|
|
81
|
+
const decoded = jwt.verify(token, this.secret, this.options);
|
|
82
|
+
return decoded ? decoded.sub : null;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async validate(credentials) {
|
|
89
|
+
const user = await this.provider.retrieveByCredentials(credentials);
|
|
90
|
+
if (!user)
|
|
91
|
+
return false;
|
|
92
|
+
return await this.provider.validateCredentials(user, credentials);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Authenticate a user and return a JWT token and refresh token
|
|
96
|
+
*/
|
|
97
|
+
async attempt(credentials) {
|
|
98
|
+
const user = await this.provider.retrieveByCredentials(credentials);
|
|
99
|
+
if (user && await this.provider.validateCredentials(user, credentials)) {
|
|
100
|
+
this.login(user);
|
|
101
|
+
return await this.issueTokens(user);
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
async issueTokens(user, additionalPayload = {}) {
|
|
106
|
+
const payload = { sub: user.id, ...additionalPayload };
|
|
107
|
+
const access_token = jwt.sign(payload, this.secret, this.options);
|
|
108
|
+
const response = { access_token };
|
|
109
|
+
if (this.provider.updateRefreshToken) {
|
|
110
|
+
const refresh_token = crypto.randomBytes(40).toString('hex');
|
|
111
|
+
await this.provider.updateRefreshToken(user, refresh_token);
|
|
112
|
+
response.refresh_token = refresh_token;
|
|
113
|
+
}
|
|
114
|
+
return response;
|
|
115
|
+
}
|
|
116
|
+
async refresh(refreshToken) {
|
|
117
|
+
if (!this.provider.retrieveByRefreshToken) {
|
|
118
|
+
throw new Error('UserProvider does not support retrieveByRefreshToken');
|
|
119
|
+
}
|
|
120
|
+
const user = await this.provider.retrieveByRefreshToken(refreshToken);
|
|
121
|
+
if (!user) {
|
|
122
|
+
throw new Error('Invalid or expired refresh token');
|
|
123
|
+
}
|
|
124
|
+
return await this.issueTokens(user);
|
|
125
|
+
}
|
|
126
|
+
login(user) {
|
|
127
|
+
this.setUser(user);
|
|
128
|
+
}
|
|
129
|
+
logout() {
|
|
130
|
+
this.loggedUser = null;
|
|
131
|
+
}
|
|
132
|
+
setUser(user) {
|
|
133
|
+
this.loggedUser = user;
|
|
134
|
+
if (this.request) {
|
|
135
|
+
this.request.user = user;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
setRequest(request) {
|
|
139
|
+
this.request = request;
|
|
140
|
+
}
|
|
141
|
+
getTokenForRequest() {
|
|
142
|
+
let authHeader;
|
|
143
|
+
// Support ArikaJS Request with header() method
|
|
144
|
+
if (typeof this.request?.header === 'function') {
|
|
145
|
+
authHeader = this.request.header('authorization');
|
|
146
|
+
}
|
|
147
|
+
// Fallback to raw headers object
|
|
148
|
+
if (!authHeader && this.request?.headers?.['authorization']) {
|
|
149
|
+
authHeader = this.request.headers['authorization'];
|
|
150
|
+
}
|
|
151
|
+
if (authHeader && authHeader.startsWith('Bearer ')) {
|
|
152
|
+
return authHeader.substring(7);
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.JwtGuard = JwtGuard;
|
|
158
|
+
//# sourceMappingURL=JwtGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JwtGuard.js","sourceRoot":"","sources":["../../src/Guards/JwtGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,14 @@ export declare class SessionGuard implements Guard {
|
|
|
10
10
|
user(): Promise<any>;
|
|
11
11
|
id(): Promise<string | number | null>;
|
|
12
12
|
validate(credentials: Record<string, any>): Promise<boolean>;
|
|
13
|
-
attempt(credentials: Record<string, any
|
|
14
|
-
login(user: any): void
|
|
15
|
-
logout(): void
|
|
13
|
+
attempt(credentials: Record<string, any>, remember?: boolean): Promise<boolean>;
|
|
14
|
+
login(user: any, remember?: boolean): Promise<void>;
|
|
15
|
+
logout(): Promise<void>;
|
|
16
16
|
setUser(user: any): void;
|
|
17
|
+
private request;
|
|
17
18
|
setRequest(request: any): void;
|
|
19
|
+
private getRememberCookie;
|
|
20
|
+
private queueRememberCookie;
|
|
21
|
+
private clearRememberCookie;
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=SessionGuard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionGuard.d.ts","sourceRoot":"","sources":["../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,YAAa,YAAW,KAAK;IACtC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAa;gBAEnB,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"SessionGuard.d.ts","sourceRoot":"","sources":["../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,YAAa,YAAW,KAAK;IACtC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAa;gBAEnB,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG;IAiBnC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IA4BpB,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAKrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5D,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAI/B,OAAO,CAAC,OAAO,CAAM;IAEd,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAOrC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAK9B"}
|
|
@@ -1,11 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.SessionGuard = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
4
38
|
class SessionGuard {
|
|
5
39
|
constructor(provider, session) {
|
|
6
40
|
this.loggedUser = null;
|
|
7
41
|
this.provider = provider;
|
|
8
|
-
|
|
42
|
+
// Accept any session-like object (sync or async API).
|
|
43
|
+
// The @arikajs/session Session class has async get/put;
|
|
44
|
+
// the legacy fallback below is sync — both work because we await all calls.
|
|
45
|
+
if (session && (typeof session.get === 'function' || typeof session.put === 'function')) {
|
|
46
|
+
this.session = session;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const store = {};
|
|
50
|
+
this.session = {
|
|
51
|
+
get(key) { return store[key] ?? null; },
|
|
52
|
+
put(key, value) { store[key] = value; },
|
|
53
|
+
forget(key) { delete store[key]; },
|
|
54
|
+
};
|
|
55
|
+
}
|
|
9
56
|
}
|
|
10
57
|
async check() {
|
|
11
58
|
return !!(await this.user());
|
|
@@ -17,10 +64,25 @@ class SessionGuard {
|
|
|
17
64
|
if (this.loggedUser) {
|
|
18
65
|
return this.loggedUser;
|
|
19
66
|
}
|
|
20
|
-
|
|
67
|
+
// Await to support both sync (legacy) and async (Session class) APIs
|
|
68
|
+
const id = this.session.get ? await Promise.resolve(this.session.get('auth_user_id')) : null;
|
|
21
69
|
if (id) {
|
|
22
70
|
this.loggedUser = await this.provider.retrieveById(id);
|
|
23
71
|
}
|
|
72
|
+
else {
|
|
73
|
+
// Check for remember me cookie
|
|
74
|
+
const rememberTokenString = this.getRememberCookie();
|
|
75
|
+
if (rememberTokenString) {
|
|
76
|
+
const [userId, token] = rememberTokenString.split('|');
|
|
77
|
+
if (userId && token && this.provider.retrieveByToken) {
|
|
78
|
+
const user = await this.provider.retrieveByToken(userId, token);
|
|
79
|
+
if (user) {
|
|
80
|
+
this.login(user, true); // re-authenticate
|
|
81
|
+
this.loggedUser = user;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
24
86
|
return this.loggedUser;
|
|
25
87
|
}
|
|
26
88
|
async id() {
|
|
@@ -34,35 +96,67 @@ class SessionGuard {
|
|
|
34
96
|
}
|
|
35
97
|
return await this.provider.validateCredentials(user, credentials);
|
|
36
98
|
}
|
|
37
|
-
async attempt(credentials) {
|
|
99
|
+
async attempt(credentials, remember = false) {
|
|
38
100
|
if (await this.validate(credentials)) {
|
|
39
101
|
const user = await this.provider.retrieveByCredentials(credentials);
|
|
40
|
-
this.login(user);
|
|
102
|
+
await this.login(user, remember);
|
|
41
103
|
return true;
|
|
42
104
|
}
|
|
43
105
|
return false;
|
|
44
106
|
}
|
|
45
|
-
login(user) {
|
|
107
|
+
async login(user, remember = false) {
|
|
46
108
|
this.loggedUser = user;
|
|
47
109
|
if (this.session.put) {
|
|
48
|
-
|
|
110
|
+
// Await to support both sync and async session APIs
|
|
111
|
+
await Promise.resolve(this.session.put('auth_user_id', user.id));
|
|
112
|
+
}
|
|
113
|
+
if (remember) {
|
|
114
|
+
const token = crypto.randomBytes(32).toString('hex');
|
|
115
|
+
if (this.provider.updateRememberToken) {
|
|
116
|
+
await this.provider.updateRememberToken(user, token);
|
|
117
|
+
}
|
|
118
|
+
this.queueRememberCookie(user.id, token);
|
|
49
119
|
}
|
|
50
120
|
}
|
|
51
|
-
logout() {
|
|
121
|
+
async logout() {
|
|
122
|
+
const userId = this.loggedUser?.id;
|
|
52
123
|
this.loggedUser = null;
|
|
53
124
|
if (this.session.forget) {
|
|
54
|
-
this.session.forget('auth_user_id');
|
|
125
|
+
await Promise.resolve(this.session.forget('auth_user_id'));
|
|
126
|
+
}
|
|
127
|
+
this.clearRememberCookie();
|
|
128
|
+
if (userId && this.provider.updateRememberToken) {
|
|
129
|
+
// Invalidate token in provider asynchronously
|
|
130
|
+
this.provider.updateRememberToken({ id: userId }, null).catch(() => { });
|
|
55
131
|
}
|
|
56
132
|
}
|
|
57
133
|
setUser(user) {
|
|
58
134
|
this.loggedUser = user;
|
|
59
135
|
}
|
|
60
136
|
setRequest(request) {
|
|
61
|
-
|
|
62
|
-
if (request.session) {
|
|
137
|
+
this.request = request;
|
|
138
|
+
if (request && request.session) {
|
|
63
139
|
this.session = request.session;
|
|
64
140
|
}
|
|
65
141
|
}
|
|
142
|
+
getRememberCookie() {
|
|
143
|
+
if (this.request?.cookies && typeof this.request.cookies === 'function') {
|
|
144
|
+
return this.request.cookies('remember_web');
|
|
145
|
+
}
|
|
146
|
+
return this.request?.cookies?.['remember_web'] || null;
|
|
147
|
+
}
|
|
148
|
+
queueRememberCookie(userId, token) {
|
|
149
|
+
const val = `${userId}|${token}`;
|
|
150
|
+
if (this.request?.cookie && typeof this.request.cookie === 'function') {
|
|
151
|
+
// Expires in 5 years essentially "forever" in internet time
|
|
152
|
+
this.request.cookie('remember_web', val, { maxAge: 5 * 365 * 24 * 60 * 60 * 1000, httpOnly: true });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
clearRememberCookie() {
|
|
156
|
+
if (this.request?.clearCookie && typeof this.request.clearCookie === 'function') {
|
|
157
|
+
this.request.clearCookie('remember_web');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
66
160
|
}
|
|
67
161
|
exports.SessionGuard = SessionGuard;
|
|
68
162
|
//# sourceMappingURL=SessionGuard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionGuard.js","sourceRoot":"","sources":["../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionGuard.js","sourceRoot":"","sources":["../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"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"}
|
package/dist/Hasher.d.ts
CHANGED
|
@@ -7,5 +7,9 @@ export declare class Hasher {
|
|
|
7
7
|
* Check if a plain text value matches a hash.
|
|
8
8
|
*/
|
|
9
9
|
static check(value: string, hash: string): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Check if a hash needs to be rehashed.
|
|
12
|
+
*/
|
|
13
|
+
static needsRehash(hash: string): boolean;
|
|
10
14
|
}
|
|
11
15
|
//# sourceMappingURL=Hasher.d.ts.map
|
package/dist/Hasher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hasher.d.ts","sourceRoot":"","sources":["../src/Hasher.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACf;;OAEG;WACiB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7E;;OAEG;WACiB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Hasher.d.ts","sourceRoot":"","sources":["../src/Hasher.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACf;;OAEG;WACiB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7E;;OAEG;WACiB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxE;;OAEG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGnD"}
|
package/dist/Hasher.js
CHANGED
|
@@ -48,6 +48,12 @@ class Hasher {
|
|
|
48
48
|
static async check(value, hash) {
|
|
49
49
|
return await bcrypt.compare(value, hash);
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if a hash needs to be rehashed.
|
|
53
|
+
*/
|
|
54
|
+
static needsRehash(hash) {
|
|
55
|
+
return false; // Implement proper check later
|
|
56
|
+
}
|
|
51
57
|
}
|
|
52
58
|
exports.Hasher = Hasher;
|
|
53
59
|
//# sourceMappingURL=Hasher.js.map
|
package/dist/Hasher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hasher.js","sourceRoot":"","sources":["../src/Hasher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAEnC,MAAa,MAAM;IACf;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,SAAiB,EAAE;QACvD,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QACjD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"Hasher.js","sourceRoot":"","sources":["../src/Hasher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAEnC,MAAa,MAAM;IACf;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,SAAiB,EAAE;QACvD,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QACjD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,WAAW,CAAC,IAAY;QAClC,OAAO,KAAK,CAAC,CAAC,+BAA+B;IACjD,CAAC;CACJ;AArBD,wBAqBC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AuthManager } from '../AuthManager';
|
|
2
2
|
export declare class Authenticate {
|
|
3
|
-
private auth;
|
|
4
3
|
protected guards: string[];
|
|
4
|
+
private auth;
|
|
5
5
|
constructor(auth: AuthManager);
|
|
6
6
|
/**
|
|
7
7
|
* Set the guards that should be checked.
|
|
@@ -9,7 +9,16 @@ export declare class Authenticate {
|
|
|
9
9
|
using(...guards: string[]): this;
|
|
10
10
|
/**
|
|
11
11
|
* Handle the incoming request.
|
|
12
|
+
* Creates a per-request AuthContext and binds it to req.auth
|
|
13
|
+
*/
|
|
14
|
+
handle(request: any, next: (request: any) => Promise<any> | any, response?: any, ...guards: string[]): Promise<any>;
|
|
15
|
+
/**
|
|
16
|
+
* Handle an unauthenticated user.
|
|
17
|
+
*/
|
|
18
|
+
protected unauthenticated(request: any, guards: string[], response?: any): any;
|
|
19
|
+
/**
|
|
20
|
+
* Get the path the user should be redirected to when they are not authenticated.
|
|
12
21
|
*/
|
|
13
|
-
|
|
22
|
+
protected redirectTo(request: any): string | null;
|
|
14
23
|
}
|
|
15
24
|
//# sourceMappingURL=Authenticate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authenticate.d.ts","sourceRoot":"","sources":["../../src/Middleware/Authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"Authenticate.d.ts","sourceRoot":"","sources":["../../src/Middleware/Authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,YAAY;IACrB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAEhC,OAAO,CAAC,IAAI,CAAc;gBACd,IAAI,EAAE,WAAW;IAI7B;;OAEG;IACI,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC;;;OAGG;IACU,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IA4BhI;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG;IAa9E;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;CAGpD"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Authenticate = void 0;
|
|
4
|
+
const AuthManager_1 = require("../AuthManager");
|
|
4
5
|
class Authenticate {
|
|
5
6
|
constructor(auth) {
|
|
6
|
-
this.auth = auth;
|
|
7
7
|
this.guards = [];
|
|
8
|
+
this.auth = auth instanceof AuthManager_1.AuthManager ? auth : auth.resolve(AuthManager_1.AuthManager);
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Set the guards that should be checked.
|
|
@@ -15,24 +16,51 @@ class Authenticate {
|
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* Handle the incoming request.
|
|
19
|
+
* Creates a per-request AuthContext and binds it to req.auth
|
|
18
20
|
*/
|
|
19
|
-
async handle(request, next) {
|
|
20
|
-
// 1.
|
|
21
|
-
this.auth.
|
|
22
|
-
// 2.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
async handle(request, next, response, ...guards) {
|
|
22
|
+
// 1. Create an isolated AuthContext for this request (binds to req.auth)
|
|
23
|
+
const context = this.auth.createContext(request);
|
|
24
|
+
// 2. Run the rest of the request within this context (for global facade support)
|
|
25
|
+
return await this.auth.runWithContext(context, async () => {
|
|
26
|
+
// 3. Determine guards to check
|
|
27
|
+
// Priority:
|
|
28
|
+
// 1. Guards passed via middleware string (e.g., 'auth:web,admin')
|
|
29
|
+
// 2. Guards set via .using() in code
|
|
30
|
+
// 3. Default guard from config
|
|
31
|
+
const guardsToCheck = guards.length > 0
|
|
32
|
+
? guards
|
|
33
|
+
: (this.guards.length === 0 ? [this.auth.getDefaultGuard()] : this.guards);
|
|
34
|
+
// 4. Check each guard
|
|
35
|
+
for (const guard of guardsToCheck) {
|
|
36
|
+
if (await context.guard(guard).check()) {
|
|
37
|
+
this.auth.shouldUse(guard);
|
|
38
|
+
return next(request);
|
|
39
|
+
}
|
|
31
40
|
}
|
|
41
|
+
// 5. Fail if no guard authenticated
|
|
42
|
+
return this.unauthenticated(request, guardsToCheck, response);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Handle an unauthenticated user.
|
|
47
|
+
*/
|
|
48
|
+
unauthenticated(request, guards, response) {
|
|
49
|
+
if (request && typeof request.expectsJson === 'function' && request.expectsJson()) {
|
|
50
|
+
return response.json({ message: 'Unauthenticated.' }, 401);
|
|
51
|
+
}
|
|
52
|
+
const redirectTo = this.redirectTo(request);
|
|
53
|
+
if (redirectTo && response) {
|
|
54
|
+
return response.redirect(redirectTo);
|
|
32
55
|
}
|
|
33
|
-
// 4. Fail if no guard authenticated
|
|
34
56
|
throw new Error('Unauthenticated.');
|
|
35
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the path the user should be redirected to when they are not authenticated.
|
|
60
|
+
*/
|
|
61
|
+
redirectTo(request) {
|
|
62
|
+
return '/auth/login';
|
|
63
|
+
}
|
|
36
64
|
}
|
|
37
65
|
exports.Authenticate = Authenticate;
|
|
38
66
|
//# sourceMappingURL=Authenticate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authenticate.js","sourceRoot":"","sources":["../../src/Middleware/Authenticate.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Authenticate.js","sourceRoot":"","sources":["../../src/Middleware/Authenticate.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAE7C,MAAa,YAAY;IAIrB,YAAY,IAAiB;QAHnB,WAAM,GAAa,EAAE,CAAC;QAI5B,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,yBAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAY,CAAC,OAAO,CAAC,yBAAW,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,MAAgB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,OAAY,EAAE,IAA0C,EAAE,QAAc,EAAE,GAAG,MAAgB;QAC7G,yEAAyE;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEjD,iFAAiF;QACjF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACtD,+BAA+B;YAC/B,YAAY;YACZ,kEAAkE;YAClE,qCAAqC;YACrC,+BAA+B;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE/E,sBAAsB;YACtB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAChC,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACL,CAAC;YAED,oCAAoC;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,OAAY,EAAE,MAAgB,EAAE,QAAc;QACpE,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChF,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,OAAY;QAC7B,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AAtED,oCAsEC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware that ensures the authenticated user has verified their email.
|
|
3
|
+
* Use as: .middleware(['verified'])
|
|
4
|
+
*/
|
|
5
|
+
export declare class EnsureEmailIsVerified {
|
|
6
|
+
handle(request: any, next: (req: any) => Promise<any> | any, response?: any): Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=EnsureEmailIsVerified.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsureEmailIsVerified.d.ts","sourceRoot":"","sources":["../../src/Middleware/EnsureEmailIsVerified.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,qBAAqB;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAmB1G"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnsureEmailIsVerified = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Middleware that ensures the authenticated user has verified their email.
|
|
6
|
+
* Use as: .middleware(['verified'])
|
|
7
|
+
*/
|
|
8
|
+
class EnsureEmailIsVerified {
|
|
9
|
+
async handle(request, next, response) {
|
|
10
|
+
const user = request.auth ? await request.auth.user() : null;
|
|
11
|
+
if (!user) {
|
|
12
|
+
if (request.expectsJson && request.expectsJson()) {
|
|
13
|
+
return response.json({ message: 'Unauthenticated.' }, 401);
|
|
14
|
+
}
|
|
15
|
+
throw new Error('Unauthenticated.');
|
|
16
|
+
}
|
|
17
|
+
if (typeof user.hasVerifiedEmail === 'function' && !user.hasVerifiedEmail()) {
|
|
18
|
+
if (request.expectsJson && request.expectsJson()) {
|
|
19
|
+
return response.json({ message: 'Your email address is not verified.' }, 403);
|
|
20
|
+
}
|
|
21
|
+
throw new Error('Your email address is not verified.');
|
|
22
|
+
}
|
|
23
|
+
return next(request);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.EnsureEmailIsVerified = EnsureEmailIsVerified;
|
|
27
|
+
//# sourceMappingURL=EnsureEmailIsVerified.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsureEmailIsVerified.js","sourceRoot":"","sources":["../../src/Middleware/EnsureEmailIsVerified.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,qBAAqB;IACvB,KAAK,CAAC,MAAM,CAAC,OAAY,EAAE,IAAsC,EAAE,QAAc;QACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC1E,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;CACJ;AApBD,sDAoBC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { UserProvider } from '../Contracts/UserProvider';
|
|
2
|
+
export interface TokenRepository {
|
|
3
|
+
create(user: any): Promise<string>;
|
|
4
|
+
exists(user: any, token: string): Promise<boolean>;
|
|
5
|
+
delete(user: any): Promise<void>;
|
|
6
|
+
deleteExpired(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* In-memory token repository (production apps should use a database-backed one)
|
|
10
|
+
*/
|
|
11
|
+
export declare class InMemoryTokenRepository implements TokenRepository {
|
|
12
|
+
private tokens;
|
|
13
|
+
private expiryMinutes;
|
|
14
|
+
constructor(expiryMinutes?: number);
|
|
15
|
+
create(user: any): Promise<string>;
|
|
16
|
+
exists(user: any, token: string): Promise<boolean>;
|
|
17
|
+
delete(user: any): Promise<void>;
|
|
18
|
+
deleteExpired(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare class PasswordResetBroker {
|
|
21
|
+
private provider;
|
|
22
|
+
private tokens;
|
|
23
|
+
constructor(provider: UserProvider, tokens?: TokenRepository);
|
|
24
|
+
/**
|
|
25
|
+
* Send a password reset link to a user.
|
|
26
|
+
*/
|
|
27
|
+
sendResetLink(credentials: Record<string, any>): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Reset the password for the given token.
|
|
30
|
+
*/
|
|
31
|
+
reset(credentials: Record<string, any>, callback: (user: any, password: string) => Promise<void>): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Clean up expired tokens
|
|
34
|
+
*/
|
|
35
|
+
deleteExpiredTokens(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=PasswordResetBroker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordResetBroker.d.ts","sourceRoot":"","sources":["../../src/Passwords/PasswordResetBroker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC3D,OAAO,CAAC,MAAM,CAA8D;IAC5E,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,GAAE,MAAW;IAIzB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBlD,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAU9C;AAED,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,eAAe;IAK5D;;OAEG;IACU,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAe7E;;OAEG;IACU,KAAK,CACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC;IAgBlB;;OAEG;IACU,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpD"}
|