fiber-firebase-functions 1.0.4 → 1.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.
|
@@ -66,7 +66,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
66
66
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
67
67
|
};
|
|
68
68
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
69
|
-
exports.ResetPassword = exports.VerifyRequestResetPasswordOTP = exports.RequestResetPassword = exports.RequestResetPasswordByEmailStatus = exports.RequestResetPasswordByIdStatus = exports.ResetPasswordByIdStatus = exports.ResetPasswordByEmailStatus = void 0;
|
|
69
|
+
exports.ResetPassword = exports.VerifyRequestResetPasswordOTP = exports.RequestResetPassword = exports.VerifyResetPasswordOtpStatus = exports.RequestResetPasswordByEmailStatus = exports.RequestResetPasswordByIdStatus = exports.ResetPasswordByIdStatus = exports.ResetPasswordByEmailStatus = void 0;
|
|
70
70
|
const admin = __importStar(require("firebase-admin"));
|
|
71
71
|
const validator_1 = __importDefault(require("validator"));
|
|
72
72
|
const config_1 = require("../common/config");
|
|
@@ -140,14 +140,26 @@ var RequestResetPasswordByEmailStatus;
|
|
|
140
140
|
RequestResetPasswordByEmailStatus["SUCCESS"] = "SUCCESS";
|
|
141
141
|
RequestResetPasswordByEmailStatus["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
142
142
|
})(RequestResetPasswordByEmailStatus || (exports.RequestResetPasswordByEmailStatus = RequestResetPasswordByEmailStatus = {}));
|
|
143
|
+
var VerifyResetPasswordOtpStatus;
|
|
144
|
+
(function (VerifyResetPasswordOtpStatus) {
|
|
145
|
+
VerifyResetPasswordOtpStatus["MISSING_OTP_CONFIG"] = "MISSING_OTP_CONFIG";
|
|
146
|
+
VerifyResetPasswordOtpStatus["MISSING_DATABASE_CONFIG"] = "MISSING_DATABASE_CONFIG";
|
|
147
|
+
VerifyResetPasswordOtpStatus["MISSING_USER_EMAIL"] = "MISSING_USER_EMAIL";
|
|
148
|
+
VerifyResetPasswordOtpStatus["TOO_MANY_REQUEST"] = "TOO_MANY_REQUEST";
|
|
149
|
+
VerifyResetPasswordOtpStatus["USER_NOT_FOUND"] = "USER_NOT_FOUND";
|
|
150
|
+
VerifyResetPasswordOtpStatus["USER_DISABLED"] = "USER_DISABLED";
|
|
151
|
+
VerifyResetPasswordOtpStatus["INVALID_EMAIL_FORMAT"] = "INVALID_EMAIL_FORMAT";
|
|
152
|
+
VerifyResetPasswordOtpStatus["SUCCESS"] = "SUCCESS";
|
|
153
|
+
VerifyResetPasswordOtpStatus["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
154
|
+
})(VerifyResetPasswordOtpStatus || (exports.VerifyResetPasswordOtpStatus = VerifyResetPasswordOtpStatus = {}));
|
|
143
155
|
class RequestResetPassword {
|
|
144
156
|
static async withId(userId) {
|
|
145
157
|
const config = (0, config_1.appInitialize)();
|
|
146
158
|
const otp = config.otp;
|
|
147
159
|
const rateLimiter = config.rateLimiter;
|
|
148
|
-
if (otp.collection === undefined)
|
|
160
|
+
if (!otp || otp.collection === undefined)
|
|
149
161
|
return RequestResetPasswordByIdStatus.MISSING_OTP_CONFIG;
|
|
150
|
-
if (rateLimiter.appName === undefined || rateLimiter.url === undefined) {
|
|
162
|
+
if (!rateLimiter || rateLimiter.appName === undefined || rateLimiter.url === undefined) {
|
|
151
163
|
return RequestResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
152
164
|
}
|
|
153
165
|
userId = userId.trim();
|
|
@@ -179,14 +191,17 @@ class RequestResetPassword {
|
|
|
179
191
|
if (userDisabled === is_user_disabled_1.UserDisabledByIdStatus.USER_NOT_FOUND) {
|
|
180
192
|
return RequestResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
181
193
|
}
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
const rateLimited = await (0, rate_limiter_1.isRateLimited)(identifier, rule);
|
|
195
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_DATABASE_CONFIG ||
|
|
196
|
+
rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_IDENTIFIER_ID ||
|
|
197
|
+
rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_IDENTIFIER_TARGET) {
|
|
198
|
+
return RequestResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
184
199
|
}
|
|
200
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.INTERNAL_ERROR)
|
|
201
|
+
return RequestResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
202
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.LIMIT_EXISTS)
|
|
203
|
+
return RequestResetPasswordByIdStatus.TOO_MANY_REQUEST;
|
|
185
204
|
await (0, rate_limiter_1.recordRateLimitHit)(identifier, rule);
|
|
186
|
-
if (await is_user_exists_1.IsUserExists.withId(userId))
|
|
187
|
-
return RequestResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
188
|
-
if (await is_user_disabled_1.IsUserDisabled.withId(userId))
|
|
189
|
-
return RequestResetPasswordByIdStatus.USER_DISABLED;
|
|
190
205
|
await otp_1.Otp.generate(userId, "request_reset_password");
|
|
191
206
|
return RequestResetPasswordByIdStatus.SUCCESS;
|
|
192
207
|
}
|
|
@@ -223,6 +238,10 @@ class RequestResetPassword {
|
|
|
223
238
|
}
|
|
224
239
|
exports.RequestResetPassword = RequestResetPassword;
|
|
225
240
|
class VerifyRequestResetPasswordOTP {
|
|
241
|
+
static async withId(userId, otp) {
|
|
242
|
+
}
|
|
243
|
+
static async withEmail(email, otp) {
|
|
244
|
+
}
|
|
226
245
|
}
|
|
227
246
|
exports.VerifyRequestResetPasswordOTP = VerifyRequestResetPasswordOTP;
|
|
228
247
|
class ResetPassword {
|
|
@@ -253,14 +272,34 @@ class ResetPassword {
|
|
|
253
272
|
windowMs: 3 * 60 * 1000,
|
|
254
273
|
maxHits: 5,
|
|
255
274
|
};
|
|
256
|
-
|
|
257
|
-
|
|
275
|
+
const rateLimited = await (0, rate_limiter_1.isRateLimited)(identifier, rule);
|
|
276
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_DATABASE_CONFIG ||
|
|
277
|
+
rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_IDENTIFIER_ID ||
|
|
278
|
+
rateLimited === rate_limiter_1.RateLimitCheckStatus.MISSING_IDENTIFIER_TARGET) {
|
|
279
|
+
return ResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
258
280
|
}
|
|
281
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.INTERNAL_ERROR)
|
|
282
|
+
return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
283
|
+
if (rateLimited === rate_limiter_1.RateLimitCheckStatus.LIMIT_EXISTS)
|
|
284
|
+
return ResetPasswordByIdStatus.TOO_MANY_REQUEST;
|
|
259
285
|
await (0, rate_limiter_1.recordRateLimitHit)(identifier, rule);
|
|
260
|
-
|
|
286
|
+
const userExists = await is_user_exists_1.IsUserExists.withId(userId);
|
|
287
|
+
if (userExists === is_user_exists_1.UserExistsByIdStatus.MISSING_USER_ID)
|
|
288
|
+
return ResetPasswordByIdStatus.MISSING_USER_ID;
|
|
289
|
+
if (userExists === is_user_exists_1.UserExistsByIdStatus.INTERNAL_ERROR)
|
|
290
|
+
return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
291
|
+
if (userExists === is_user_exists_1.UserExistsByIdStatus.USER_NOT_FOUND)
|
|
292
|
+
return ResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
293
|
+
const userDisabled = await is_user_disabled_1.IsUserDisabled.withId(userId);
|
|
294
|
+
if (userDisabled === is_user_disabled_1.UserDisabledByIdStatus.MISSING_USER_ID) {
|
|
295
|
+
return ResetPasswordByIdStatus.MISSING_USER_ID;
|
|
296
|
+
}
|
|
297
|
+
if (userDisabled === is_user_disabled_1.UserDisabledByIdStatus.INTERNAL_ERROR) {
|
|
298
|
+
return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
299
|
+
}
|
|
300
|
+
if (userDisabled === is_user_disabled_1.UserDisabledByIdStatus.USER_NOT_FOUND) {
|
|
261
301
|
return ResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
262
|
-
|
|
263
|
-
return ResetPasswordByIdStatus.USER_DISABLED;
|
|
302
|
+
}
|
|
264
303
|
if (newPassword !== confirmNewPassword)
|
|
265
304
|
return ResetPasswordByIdStatus.NOT_IDENTICAL_CONFIRM_PASSWORD;
|
|
266
305
|
const requiredMin = Math.max(6, passwordPolicy.minLength);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset_password.js","sourceRoot":"","sources":["../../src/auth/reset_password.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sDAAwC;AACxC,0DAAkC;AAClC,6CAAiD;AACjD,6DAAyI;AACzI,yDAA4E;AAC5E,qDAAsE;AACtE,+BAA4B;AAC5B,iCAAiD;AAEjD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC1B,KAAK,CAAC,aAAa,EAAE,CAAC;AAC1B,CAAC;AAED,IAAY,0BAkBX;AAlBD,WAAY,0BAA0B;IAClC,iFAAmD,CAAA;IACnD,uEAAyC,CAAA;IACzC,2EAA6C,CAAA;IAC7C,2FAA6D,CAAA;IAC7D,iFAAmD,CAAA;IACnD,+FAAiE,CAAA;IACjE,+DAAiC,CAAA;IACjC,6DAA+B,CAAA;IAC/B,qEAAuC,CAAA;IACvC,uFAAyD,CAAA;IACzD,uFAAyD,CAAA;IACzD,+EAAiD,CAAA;IACjD,6FAA+D,CAAA;IAC/D,mEAAqC,CAAA;IACrC,2EAA6C,CAAA;IAC7C,iDAAmB,CAAA;IACnB,+DAAiC,CAAA;AACrC,CAAC,EAlBW,0BAA0B,0CAA1B,0BAA0B,QAkBrC;AAED,IAAY,uBAiBX;AAjBD,WAAY,uBAAuB;IAC/B,8EAAmD,CAAA;IACnD,8DAAmC,CAAA;IACnC,wEAA6C,CAAA;IAC7C,wFAA6D,CAAA;IAC7D,8EAAmD,CAAA;IACnD,4FAAiE,CAAA;IACjE,4DAAiC,CAAA;IACjC,0DAA+B,CAAA;IAC/B,kEAAuC,CAAA;IACvC,oFAAyD,CAAA;IACzD,oFAAyD,CAAA;IACzD,4EAAiD,CAAA;IACjD,0FAA+D,CAAA;IAC/D,gEAAqC,CAAA;IACrC,8CAAmB,CAAA;IACnB,4DAAiC,CAAA;AACrC,CAAC,EAjBW,uBAAuB,uCAAvB,uBAAuB,QAiBlC;AAED,IAAY,8BASX;AATD,WAAY,8BAA8B;IACtC,2EAAyC,CAAA;IACzC,qFAAmD,CAAA;IACnD,qEAAmC,CAAA;IACnC,uEAAqC,CAAA;IACrC,mEAAiC,CAAA;IACjC,iEAA+B,CAAA;IAC/B,qDAAmB,CAAA;IACnB,mEAAiC,CAAA;AACrC,CAAC,EATW,8BAA8B,8CAA9B,8BAA8B,QASzC;AAED,IAAY,iCAUX;AAVD,WAAY,iCAAiC;IACzC,8EAAyC,CAAA;IACzC,wFAAmD,CAAA;IACnD,8EAAyC,CAAA;IACzC,0EAAqC,CAAA;IACrC,sEAAiC,CAAA;IACjC,oEAA+B,CAAA;IAC/B,kFAA6C,CAAA;IAC7C,wDAAmB,CAAA;IACnB,sEAAiC,CAAA;AACrC,CAAC,EAVW,iCAAiC,iDAAjC,iCAAiC,QAU5C;AAgBD,MAAa,oBAAoB;IAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAc;QAC9B,MAAM,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEvC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,8BAA8B,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"reset_password.js","sourceRoot":"","sources":["../../src/auth/reset_password.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fiber-firebase-functions",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "A collection of ready-to-use Firebase Cloud Functions utilities and wrappers designed for any application built by Fiber. Provides reusable helpers, common patterns, and production-grade modules to streamline backend development across all Fiber projects.",
|
|
5
5
|
"author": "Fiber",
|
|
6
6
|
"license": "FIBER-PROPRIETARY",
|
|
@@ -28,4 +28,4 @@
|
|
|
28
28
|
"ts-node": "^10.9.2",
|
|
29
29
|
"typescript": "^5.9.3"
|
|
30
30
|
}
|
|
31
|
-
}
|
|
31
|
+
}
|
|
@@ -104,6 +104,18 @@ export enum RequestResetPasswordByEmailStatus {
|
|
|
104
104
|
INTERNAL_ERROR = "INTERNAL_ERROR",
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
export enum VerifyResetPasswordOtpStatus {
|
|
108
|
+
MISSING_OTP_CONFIG = "MISSING_OTP_CONFIG",
|
|
109
|
+
MISSING_DATABASE_CONFIG = "MISSING_DATABASE_CONFIG",
|
|
110
|
+
MISSING_USER_EMAIL = "MISSING_USER_EMAIL",
|
|
111
|
+
TOO_MANY_REQUEST = "TOO_MANY_REQUEST",
|
|
112
|
+
USER_NOT_FOUND = "USER_NOT_FOUND",
|
|
113
|
+
USER_DISABLED = "USER_DISABLED",
|
|
114
|
+
INVALID_EMAIL_FORMAT = "INVALID_EMAIL_FORMAT",
|
|
115
|
+
SUCCESS = "SUCCESS",
|
|
116
|
+
INTERNAL_ERROR = "INTERNAL_ERROR",
|
|
117
|
+
}
|
|
118
|
+
|
|
107
119
|
export interface PasswordPolicy {
|
|
108
120
|
minLength: number;
|
|
109
121
|
requireUppercase: boolean;
|
|
@@ -124,8 +136,8 @@ export class RequestResetPassword {
|
|
|
124
136
|
const otp = config.otp;
|
|
125
137
|
const rateLimiter = config.rateLimiter;
|
|
126
138
|
|
|
127
|
-
if (otp.collection === undefined) return RequestResetPasswordByIdStatus.MISSING_OTP_CONFIG;
|
|
128
|
-
if (rateLimiter.appName === undefined || rateLimiter.url === undefined) {
|
|
139
|
+
if (!otp || otp.collection === undefined) return RequestResetPasswordByIdStatus.MISSING_OTP_CONFIG;
|
|
140
|
+
if (!rateLimiter || rateLimiter.appName === undefined || rateLimiter.url === undefined) {
|
|
129
141
|
return RequestResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
130
142
|
}
|
|
131
143
|
|
|
@@ -159,13 +171,17 @@ export class RequestResetPassword {
|
|
|
159
171
|
return RequestResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
160
172
|
}
|
|
161
173
|
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
const rateLimited = await isRateLimited(identifier, rule);
|
|
175
|
+
if (rateLimited === RateLimitCheckStatus.MISSING_DATABASE_CONFIG ||
|
|
176
|
+
rateLimited === RateLimitCheckStatus.MISSING_IDENTIFIER_ID ||
|
|
177
|
+
rateLimited === RateLimitCheckStatus.MISSING_IDENTIFIER_TARGET
|
|
178
|
+
) {
|
|
179
|
+
return RequestResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
164
180
|
}
|
|
165
|
-
|
|
181
|
+
if (rateLimited === RateLimitCheckStatus.INTERNAL_ERROR) return RequestResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
182
|
+
if (rateLimited === RateLimitCheckStatus.LIMIT_EXISTS) return RequestResetPasswordByIdStatus.TOO_MANY_REQUEST;
|
|
166
183
|
|
|
167
|
-
|
|
168
|
-
if (await IsUserDisabled.withId(userId)) return RequestResetPasswordByIdStatus.USER_DISABLED;
|
|
184
|
+
await recordRateLimitHit(identifier, rule);
|
|
169
185
|
|
|
170
186
|
await Otp.generate(userId, "request_reset_password");
|
|
171
187
|
|
|
@@ -206,7 +222,13 @@ export class RequestResetPassword {
|
|
|
206
222
|
}
|
|
207
223
|
|
|
208
224
|
export class VerifyRequestResetPasswordOTP {
|
|
225
|
+
static async withId(userId: string, otp: string): Promise<void> {
|
|
209
226
|
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
static async withEmail(email: string, otp: string): Promise<void> {
|
|
230
|
+
|
|
231
|
+
}
|
|
210
232
|
}
|
|
211
233
|
|
|
212
234
|
export class ResetPassword {
|
|
@@ -243,13 +265,33 @@ export class ResetPassword {
|
|
|
243
265
|
maxHits: 5,
|
|
244
266
|
};
|
|
245
267
|
|
|
246
|
-
|
|
247
|
-
|
|
268
|
+
const rateLimited = await isRateLimited(identifier, rule);
|
|
269
|
+
if (rateLimited === RateLimitCheckStatus.MISSING_DATABASE_CONFIG ||
|
|
270
|
+
rateLimited === RateLimitCheckStatus.MISSING_IDENTIFIER_ID ||
|
|
271
|
+
rateLimited === RateLimitCheckStatus.MISSING_IDENTIFIER_TARGET
|
|
272
|
+
) {
|
|
273
|
+
return ResetPasswordByIdStatus.MISSING_DATABASE_CONFIG;
|
|
248
274
|
}
|
|
275
|
+
if (rateLimited === RateLimitCheckStatus.INTERNAL_ERROR) return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
276
|
+
if (rateLimited === RateLimitCheckStatus.LIMIT_EXISTS) return ResetPasswordByIdStatus.TOO_MANY_REQUEST;
|
|
277
|
+
|
|
249
278
|
await recordRateLimitHit(identifier, rule);
|
|
250
279
|
|
|
251
|
-
|
|
252
|
-
if (
|
|
280
|
+
const userExists = await IsUserExists.withId(userId);
|
|
281
|
+
if (userExists === UserExistsByIdStatus.MISSING_USER_ID) return ResetPasswordByIdStatus.MISSING_USER_ID;
|
|
282
|
+
if (userExists === UserExistsByIdStatus.INTERNAL_ERROR) return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
283
|
+
if (userExists === UserExistsByIdStatus.USER_NOT_FOUND) return ResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
284
|
+
|
|
285
|
+
const userDisabled = await IsUserDisabled.withId(userId);
|
|
286
|
+
if (userDisabled === UserDisabledByIdStatus.MISSING_USER_ID) {
|
|
287
|
+
return ResetPasswordByIdStatus.MISSING_USER_ID;
|
|
288
|
+
}
|
|
289
|
+
if (userDisabled === UserDisabledByIdStatus.INTERNAL_ERROR) {
|
|
290
|
+
return ResetPasswordByIdStatus.INTERNAL_ERROR;
|
|
291
|
+
}
|
|
292
|
+
if (userDisabled === UserDisabledByIdStatus.USER_NOT_FOUND) {
|
|
293
|
+
return ResetPasswordByIdStatus.USER_NOT_FOUND;
|
|
294
|
+
}
|
|
253
295
|
|
|
254
296
|
if (newPassword !== confirmNewPassword) return ResetPasswordByIdStatus.NOT_IDENTICAL_CONFIRM_PASSWORD;
|
|
255
297
|
|