@hedhog/admin 0.46.20 → 0.46.21
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/dist/auth/auth.controller.d.ts +1 -1
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +3 -1
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.service.d.ts +4 -1
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +22 -27
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/consts/body.d.ts.map +1 -1
- package/dist/auth/consts/body.js +2 -1
- package/dist/auth/consts/body.js.map +1 -1
- package/dist/auth/consts/subject.d.ts +2 -0
- package/dist/auth/consts/subject.d.ts.map +1 -0
- package/dist/auth/consts/subject.js +5 -0
- package/dist/auth/consts/subject.js.map +1 -0
- package/package.json +1 -1
- package/src/auth/auth.controller.ts +4 -0
- package/src/auth/auth.service.ts +35 -32
- package/src/auth/consts/body.ts +2 -1
- package/src/auth/consts/subject.ts +1 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"auth.controller.d.ts","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAErD,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAKjC,MAAM,CAAS,EAAE,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;IAM/B,KAAK,CAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;IAM3C,GAAG,CAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM;;;;;;;;;IAMnC,MAAM,CAEV,EACE,KAAK,
|
1
|
+
{"version":3,"file":"auth.controller.d.ts","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAErD,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAKjC,MAAM,CAAS,EAAE,EAAE,EAAE,EAAE,QAAQ;;;;;;;;;;IAM/B,KAAK,CAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;IAM3C,GAAG,CAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM;;;;;;;;;IAMnC,MAAM,CAEV,EACE,KAAK,EACL,OAAO,EACP,IAAI,GACL,EAAE,SAAS,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd;IAWG,KAAK,CAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,QAAQ;;;;;;;;;IAUjE,cAAc,CAElB,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,SAAS;;;;;;;;;IAYlE,WAAW,CAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ;;;;;;;;;CAGzE"}
|
@@ -34,9 +34,11 @@ let AuthController = class AuthController {
|
|
34
34
|
async otp({ token, code }) {
|
35
35
|
return this.service.otp({ token, code });
|
36
36
|
}
|
37
|
-
async forget({ email, }) {
|
37
|
+
async forget({ email, subject, body, }) {
|
38
38
|
return this.service.forget({
|
39
39
|
email,
|
40
|
+
subject,
|
41
|
+
body,
|
40
42
|
});
|
41
43
|
}
|
42
44
|
async reset({ newPassword, confirmNewPassword, code }) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAAkD;AAClD,2CAOwB;AACxB,iDAA6C;AAC7C,iDAA6C;AAC7C,+CAA2C;AAE3C,+CAA2C;AAC3C,2CAAuC;AACvC,+CAA2C;AAIpC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAEmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IACpC,CAAC;IAIE,AAAN,KAAK,CAAC,MAAM,CAAS,EAAE,EAAE,EAAY;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,KAAK,CAAS,EAAE,KAAK,EAAE,QAAQ,EAAY;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAIK,AAAN,KAAK,CAAC,GAAG,CAAS,EAAE,KAAK,EAAE,IAAI,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAEV,EACE,KAAK,
|
1
|
+
{"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAAkD;AAClD,2CAOwB;AACxB,iDAA6C;AAC7C,iDAA6C;AAC7C,+CAA2C;AAE3C,+CAA2C;AAC3C,2CAAuC;AACvC,+CAA2C;AAIpC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAEmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IACpC,CAAC;IAIE,AAAN,KAAK,CAAC,MAAM,CAAS,EAAE,EAAE,EAAY;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,KAAK,CAAS,EAAE,KAAK,EAAE,QAAQ,EAAY;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAIK,AAAN,KAAK,CAAC,GAAG,CAAS,EAAE,KAAK,EAAE,IAAI,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAEV,EACE,KAAK,EACL,OAAO,EACP,IAAI,GAIL;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACzB,KAAK;YACL,OAAO;YACP,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,KAAK,CAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAY;QACrE,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAChC,WAAW;YACX,kBAAkB;YAClB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc,CAElB,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAa;QAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YACjC,KAAK;YACL,eAAe;YACf,WAAW;YACX,kBAAkB;SACnB,CAAC,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,WAAW,CAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAY;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AAzEY,wCAAc;AAQnB;IAFL,IAAA,WAAI,GAAE;IACN,IAAA,YAAG,EAAC,QAAQ,CAAC;IACA,WAAA,IAAA,WAAI,GAAE,CAAA;;;;4CAEnB;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,OAAO,CAAC;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAsB,oBAAQ;;2CAEhD;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,KAAK,CAAC;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAkB,gBAAM;;yCAExC;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,QAAQ,CAAC;IAEZ,WAAA,IAAA,aAAI,GAAE,CAAA;;;;4CAeR;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,OAAO,CAAC;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAA4C,oBAAQ;;2CAMtE;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,iBAAiB,CAAC;IAErB,WAAA,IAAA,aAAI,GAAE,CAAA;;qCACsD,sBAAS;;oDAQvE;AAIK;IAFL,IAAA,aAAM,GAAE;IACR,IAAA,aAAI,EAAC,cAAc,CAAC;IACF,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAuC,oBAAQ;;iDAEvE;yBAxEU,cAAc;IAD1B,IAAA,mBAAU,EAAC,MAAM,CAAC;IAGd,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,CAAC,CAAA;qCACZ,0BAAW;GAH5B,cAAc,CAyE1B"}
|
@@ -38,7 +38,10 @@ export declare class AuthService {
|
|
38
38
|
address: any;
|
39
39
|
token: string;
|
40
40
|
}>;
|
41
|
-
forget({ email }: ForgetDTO
|
41
|
+
forget({ email, subject, body, }: ForgetDTO & {
|
42
|
+
subject?: string;
|
43
|
+
body?: string;
|
44
|
+
}): Promise<boolean>;
|
42
45
|
changePassword({ email, currentPassword, newPassword, confirmNewPassword, }: ChangeDTO): Promise<{
|
43
46
|
id: any;
|
44
47
|
name: any;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qBACa,WAAW;IAGpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAJJ,MAAM,EAAE,aAAa,EAErB,GAAG,EAAE,UAAU,EAEf,IAAI,EAAE,WAAW;IAG9B,WAAW,CAAC,KAAK,EAAE,MAAM;IAM/B,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAW5C,oBAAoB,IAAI,MAAM;IAMxB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;IAkDzD,QAAQ,CAAC,IAAI,KAAA;;;;;;;;;IAsEb,MAAM,CAAC,EACX,KAAK,EACL,OAAO,EACP,IAAI,GACL,EAAE,SAAS,GAAG;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAwCK,cAAc,CAAC,EACnB,KAAK,EACL,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,EAAE,SAAS;;;;;;;;;IA4BN,WAAW,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ;;;;;;;;;IA6B1D,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,QAAQ;;;;;;;;;IAkCjE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM;;;;;;;;;IA0BjC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ;;;;;;;;;;;;;;IAInC,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;CAGlB"}
|
@@ -19,6 +19,7 @@ const common_1 = require("@nestjs/common");
|
|
19
19
|
const jwt_1 = require("@nestjs/jwt");
|
20
20
|
const bcrypt_1 = require("bcrypt");
|
21
21
|
const body_1 = require("./consts/body");
|
22
|
+
const subject_1 = require("./consts/subject");
|
22
23
|
const multifactor_type_enum_1 = require("./enums/multifactor-type.enum");
|
23
24
|
let AuthService = class AuthService {
|
24
25
|
constructor(prisma, jwt, mail) {
|
@@ -150,7 +151,7 @@ let AuthService = class AuthService {
|
|
150
151
|
token: this.jwt.sign(payload),
|
151
152
|
};
|
152
153
|
}
|
153
|
-
async forget({ email }) {
|
154
|
+
async forget({ email, subject, body, }) {
|
154
155
|
const user = await this.prisma.user.findFirst({
|
155
156
|
where: {
|
156
157
|
email,
|
@@ -174,8 +175,8 @@ let AuthService = class AuthService {
|
|
174
175
|
});
|
175
176
|
await this.mail.send({
|
176
177
|
to: email,
|
177
|
-
subject:
|
178
|
-
body: (0, body_1.getBody)(`${process.env.
|
178
|
+
subject: subject !== null && subject !== void 0 ? subject : subject_1.SUBJECT_RECOVERY,
|
179
|
+
body: body !== null && body !== void 0 ? body : (0, body_1.getBody)(`${process.env.FRONTEND_URL}/password-recovery/${code}`),
|
179
180
|
});
|
180
181
|
return true;
|
181
182
|
}
|
@@ -224,37 +225,31 @@ let AuthService = class AuthService {
|
|
224
225
|
return this.getToken(newUser);
|
225
226
|
}
|
226
227
|
async resetPassword({ code, newPassword, confirmNewPassword }) {
|
227
|
-
var _a;
|
228
228
|
if (newPassword !== confirmNewPassword) {
|
229
229
|
throw new common_1.BadRequestException("Passwords don't match");
|
230
230
|
}
|
231
|
-
|
232
|
-
|
233
|
-
|
231
|
+
const { id } = this.jwt.decode(code);
|
232
|
+
const user = await this.prisma.user.findFirst({
|
233
|
+
where: {
|
234
|
+
id,
|
235
|
+
code,
|
236
|
+
},
|
237
|
+
});
|
238
|
+
if (user) {
|
239
|
+
const salt = await (0, bcrypt_1.genSalt)();
|
240
|
+
const password = await (0, bcrypt_1.hash)(confirmNewPassword, salt);
|
241
|
+
await this.prisma.user.update({
|
234
242
|
where: {
|
235
|
-
id,
|
236
|
-
|
243
|
+
id: user.id,
|
244
|
+
},
|
245
|
+
data: {
|
246
|
+
password,
|
247
|
+
code: null,
|
237
248
|
},
|
238
249
|
});
|
239
|
-
|
240
|
-
const salt = await (0, bcrypt_1.genSalt)();
|
241
|
-
const password = await (0, bcrypt_1.hash)(confirmNewPassword, salt);
|
242
|
-
await this.prisma.user.update({
|
243
|
-
where: {
|
244
|
-
id: user.id,
|
245
|
-
},
|
246
|
-
data: {
|
247
|
-
password,
|
248
|
-
code: null,
|
249
|
-
},
|
250
|
-
});
|
251
|
-
return this.getToken(user);
|
252
|
-
}
|
253
|
-
return false;
|
254
|
-
}
|
255
|
-
catch (error) {
|
256
|
-
throw new common_1.BadRequestException(`Invalid code. ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : String(error)}`);
|
250
|
+
return this.getToken(user);
|
257
251
|
}
|
252
|
+
return false;
|
258
253
|
}
|
259
254
|
async otp({ token, code }) {
|
260
255
|
const data = this.jwt.decode(token);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAA2C;AAC3C,2CAA+C;AAC/C,2CAOwB;AACxB,qCAAyC;AACzC,mCAAgD;
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../src/auth/consts/body.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,QAAS,MAAM,KAAG,
|
1
|
+
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../src/auth/consts/body.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,QAAS,MAAM,KAAG,MA0BrC,CAAC"}
|
package/dist/auth/consts/body.js
CHANGED
@@ -6,7 +6,8 @@ const getBody = (url) => {
|
|
6
6
|
<body style="font-family: Arial, sans-serif; background-color: #eef2f7; color: #333; margin: 0; padding: 0;">
|
7
7
|
<div style="max-width: 600px; margin: 40px auto; background-color: #ffffff; border: 1px solid #dcdfe6; border-radius: 10px; padding: 40px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);">
|
8
8
|
<div style="text-align: center; margin-bottom: 30px;">
|
9
|
-
<
|
9
|
+
<img style="margin-bottom: 16px" src="https://coinbitclub.vip/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fcoinbitclub-logo.b29de722.png&w=640&q=75" alt="Coinbitclub Logo" />
|
10
|
+
<h1 style="color: #2c3e50; font-size: 26px; margin: 0;">Recuperação de Senha - CoinBitClub</h1>
|
10
11
|
</div>
|
11
12
|
<div style="line-height: 1.8; font-size: 16px; color: #555; text-align: justify;">
|
12
13
|
<p>Olá,</p>
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../src/auth/consts/body.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO
|
1
|
+
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../src/auth/consts/body.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO;;;;;;;;;;;;;;2CAckC,GAAG;;;;;;;;;;gBAU9B,CAAC;AACjB,CAAC,CAAC;AA1BW,QAAA,OAAO,WA0BlB"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../../src/auth/consts/subject.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,mCAAyB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"subject.js","sourceRoot":"","sources":["../../../src/auth/consts/subject.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,sBAAsB,CAAC"}
|
package/package.json
CHANGED
@@ -47,6 +47,8 @@ export class AuthController {
|
|
47
47
|
@Body()
|
48
48
|
{
|
49
49
|
email,
|
50
|
+
subject,
|
51
|
+
body,
|
50
52
|
}: ForgetDTO & {
|
51
53
|
subject: string;
|
52
54
|
body: string;
|
@@ -54,6 +56,8 @@ export class AuthController {
|
|
54
56
|
) {
|
55
57
|
return this.service.forget({
|
56
58
|
email,
|
59
|
+
subject,
|
60
|
+
body,
|
57
61
|
});
|
58
62
|
}
|
59
63
|
|
package/src/auth/auth.service.ts
CHANGED
@@ -10,7 +10,9 @@ import {
|
|
10
10
|
} from '@nestjs/common';
|
11
11
|
import { JwtService } from '@nestjs/jwt';
|
12
12
|
import { compare, genSalt, hash } from 'bcrypt';
|
13
|
+
import { User } from 'hcode-core';
|
13
14
|
import { getBody } from './consts/body';
|
15
|
+
import { SUBJECT_RECOVERY } from './consts/subject';
|
14
16
|
import { ChangeDTO } from './dto/change.dto';
|
15
17
|
import { EmailDTO } from './dto/email.dto';
|
16
18
|
import { ForgetDTO } from './dto/forget.dto';
|
@@ -173,7 +175,14 @@ export class AuthService {
|
|
173
175
|
};
|
174
176
|
}
|
175
177
|
|
176
|
-
async forget({
|
178
|
+
async forget({
|
179
|
+
email,
|
180
|
+
subject,
|
181
|
+
body,
|
182
|
+
}: ForgetDTO & {
|
183
|
+
subject?: string;
|
184
|
+
body?: string;
|
185
|
+
}) {
|
177
186
|
const user = await this.prisma.user.findFirst({
|
178
187
|
where: {
|
179
188
|
email,
|
@@ -204,8 +213,10 @@ export class AuthService {
|
|
204
213
|
|
205
214
|
await this.mail.send({
|
206
215
|
to: email,
|
207
|
-
subject:
|
208
|
-
body:
|
216
|
+
subject: subject ?? SUBJECT_RECOVERY,
|
217
|
+
body:
|
218
|
+
body ??
|
219
|
+
getBody(`${process.env.FRONTEND_URL}/password-recovery/${code}`),
|
209
220
|
});
|
210
221
|
|
211
222
|
return true;
|
@@ -278,41 +289,33 @@ export class AuthService {
|
|
278
289
|
throw new BadRequestException("Passwords don't match");
|
279
290
|
}
|
280
291
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
292
|
+
const { id } = this.jwt.decode(code) as User;
|
293
|
+
|
294
|
+
const user = await this.prisma.user.findFirst({
|
295
|
+
where: {
|
296
|
+
id,
|
297
|
+
code,
|
298
|
+
},
|
299
|
+
});
|
300
|
+
|
301
|
+
if (user) {
|
302
|
+
const salt = await genSalt();
|
303
|
+
const password = await hash(confirmNewPassword, salt);
|
285
304
|
|
286
|
-
|
305
|
+
await this.prisma.user.update({
|
287
306
|
where: {
|
288
|
-
id,
|
289
|
-
|
307
|
+
id: user.id,
|
308
|
+
},
|
309
|
+
data: {
|
310
|
+
password,
|
311
|
+
code: null,
|
290
312
|
},
|
291
313
|
});
|
292
314
|
|
293
|
-
|
294
|
-
const salt = await genSalt();
|
295
|
-
const password = await hash(confirmNewPassword, salt);
|
296
|
-
|
297
|
-
await this.prisma.user.update({
|
298
|
-
where: {
|
299
|
-
id: user.id,
|
300
|
-
},
|
301
|
-
data: {
|
302
|
-
password,
|
303
|
-
code: null,
|
304
|
-
},
|
305
|
-
});
|
306
|
-
|
307
|
-
return this.getToken(user);
|
308
|
-
}
|
309
|
-
|
310
|
-
return false;
|
311
|
-
} catch (error: any) {
|
312
|
-
throw new BadRequestException(
|
313
|
-
`Invalid code. ${error?.message ?? String(error)}`,
|
314
|
-
);
|
315
|
+
return this.getToken(user);
|
315
316
|
}
|
317
|
+
|
318
|
+
return false;
|
316
319
|
}
|
317
320
|
|
318
321
|
async otp({ token, code }: OtpDTO) {
|
package/src/auth/consts/body.ts
CHANGED
@@ -3,7 +3,8 @@ export const getBody = (url: string): string => {
|
|
3
3
|
<body style="font-family: Arial, sans-serif; background-color: #eef2f7; color: #333; margin: 0; padding: 0;">
|
4
4
|
<div style="max-width: 600px; margin: 40px auto; background-color: #ffffff; border: 1px solid #dcdfe6; border-radius: 10px; padding: 40px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);">
|
5
5
|
<div style="text-align: center; margin-bottom: 30px;">
|
6
|
-
<
|
6
|
+
<img style="margin-bottom: 16px" src="https://coinbitclub.vip/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fcoinbitclub-logo.b29de722.png&w=640&q=75" alt="Coinbitclub Logo" />
|
7
|
+
<h1 style="color: #2c3e50; font-size: 26px; margin: 0;">Recuperação de Senha - CoinBitClub</h1>
|
7
8
|
</div>
|
8
9
|
<div style="line-height: 1.8; font-size: 16px; color: #555; text-align: justify;">
|
9
10
|
<p>Olá,</p>
|
@@ -0,0 +1 @@
|
|
1
|
+
export const SUBJECT_RECOVERY = 'Recuperação de Senha';
|