@ciscode/authentication-kit 1.1.5 → 1.2.0
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 +455 -120
- package/dist/auth-kit.module.d.ts +6 -4
- package/dist/auth-kit.module.js +64 -13
- package/dist/config/passport.config.d.ts +2 -1
- package/dist/config/passport.config.js +64 -241
- package/dist/controllers/auth.controller.d.ts +35 -19
- package/dist/controllers/auth.controller.js +155 -488
- package/dist/controllers/permissions.controller.d.ts +10 -5
- package/dist/controllers/permissions.controller.js +40 -76
- package/dist/controllers/roles.controller.d.ts +11 -5
- package/dist/controllers/roles.controller.js +49 -66
- package/dist/controllers/users.controller.d.ts +15 -6
- package/dist/controllers/users.controller.js +56 -203
- package/dist/dtos/auth/forgot-password.dto.d.ts +3 -0
- package/dist/dtos/auth/forgot-password.dto.js +20 -0
- package/dist/dtos/auth/login.dto.d.ts +4 -0
- package/dist/dtos/auth/login.dto.js +24 -0
- package/dist/dtos/auth/refresh-token.dto.d.ts +3 -0
- package/dist/dtos/auth/refresh-token.dto.js +21 -0
- package/dist/dtos/auth/register.dto.d.ts +13 -0
- package/dist/dtos/auth/register.dto.js +56 -0
- package/dist/dtos/auth/resend-verification.dto.d.ts +3 -0
- package/dist/dtos/auth/resend-verification.dto.js +20 -0
- package/dist/dtos/auth/reset-password.dto.d.ts +4 -0
- package/dist/dtos/auth/reset-password.dto.js +25 -0
- package/dist/dtos/auth/update-user-role.dto.d.ts +3 -0
- package/dist/dtos/auth/update-user-role.dto.js +21 -0
- package/dist/dtos/auth/verify-email.dto.d.ts +3 -0
- package/dist/dtos/auth/verify-email.dto.js +20 -0
- package/dist/dtos/permission/create-permission.dto.d.ts +4 -0
- package/dist/dtos/permission/create-permission.dto.js +25 -0
- package/dist/dtos/permission/update-permission.dto.d.ts +4 -0
- package/dist/dtos/permission/update-permission.dto.js +26 -0
- package/dist/dtos/role/create-role.dto.d.ts +4 -0
- package/dist/dtos/role/create-role.dto.js +26 -0
- package/dist/dtos/role/update-role.dto.d.ts +7 -0
- package/dist/dtos/role/update-role.dto.js +35 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +11 -5
- package/dist/middleware/admin.decorator.d.ts +1 -0
- package/dist/middleware/admin.decorator.js +8 -0
- package/dist/middleware/admin.guard.d.ts +7 -0
- package/dist/middleware/admin.guard.js +35 -0
- package/dist/middleware/authenticate.guard.d.ts +5 -1
- package/dist/middleware/authenticate.guard.js +35 -8
- package/dist/middleware/role.guard.d.ts +4 -0
- package/dist/middleware/role.guard.js +29 -0
- package/dist/models/permission.model.d.ts +8 -16
- package/dist/models/permission.model.js +25 -14
- package/dist/models/role.model.d.ts +9 -28
- package/dist/models/role.model.js +26 -14
- package/dist/models/user.model.d.ts +22 -64
- package/dist/models/user.model.js +82 -41
- package/dist/repositories/permission.repository.d.ts +34 -0
- package/dist/repositories/permission.repository.js +47 -0
- package/dist/repositories/role.repository.d.ts +39 -0
- package/dist/repositories/role.repository.js +50 -0
- package/dist/repositories/user.repository.d.ts +57 -0
- package/dist/repositories/user.repository.js +71 -0
- package/dist/services/admin-role.service.d.ts +7 -0
- package/dist/services/admin-role.service.js +33 -0
- package/dist/services/auth.service.d.ts +49 -0
- package/dist/services/auth.service.js +219 -0
- package/dist/services/mail.service.d.ts +5 -0
- package/dist/services/mail.service.js +39 -0
- package/dist/services/oauth.service.d.ts +32 -0
- package/dist/services/oauth.service.js +138 -0
- package/dist/services/permissions.service.d.ts +19 -0
- package/dist/services/permissions.service.js +44 -0
- package/dist/services/roles.service.d.ts +23 -0
- package/dist/services/roles.service.js +57 -0
- package/dist/services/seed.service.d.ts +11 -0
- package/dist/services/seed.service.js +50 -0
- package/dist/services/users.service.d.ts +30 -0
- package/dist/services/users.service.js +81 -0
- package/package.json +31 -21
- package/dist/config/db.config.d.ts +0 -1
- package/dist/config/db.config.js +0 -22
- package/dist/controllers/admin.controller.d.ts +0 -4
- package/dist/controllers/admin.controller.js +0 -59
- package/dist/controllers/password-reset.controller.d.ts +0 -8
- package/dist/controllers/password-reset.controller.js +0 -146
- package/dist/middleware/auth.guard.d.ts +0 -4
- package/dist/middleware/auth.guard.js +0 -39
- package/dist/middleware/permission.guard.d.ts +0 -4
- package/dist/middleware/permission.guard.js +0 -52
- package/dist/models/client.model.d.ts +0 -54
- package/dist/models/client.model.js +0 -37
- package/dist/models/tenant.model.d.ts +0 -19
- package/dist/models/tenant.model.js +0 -15
package/dist/auth-kit.module.js
CHANGED
|
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
8
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
13
|
};
|
|
@@ -12,39 +15,87 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
15
|
exports.AuthKitModule = void 0;
|
|
13
16
|
require("dotenv/config");
|
|
14
17
|
const common_1 = require("@nestjs/common");
|
|
15
|
-
const
|
|
18
|
+
const mongoose_1 = require("@nestjs/mongoose");
|
|
16
19
|
const cookie_parser_1 = __importDefault(require("cookie-parser"));
|
|
17
|
-
const mongoose_1 = __importDefault(require("mongoose"));
|
|
18
|
-
const db_config_1 = require("./config/db.config");
|
|
19
20
|
const auth_controller_1 = require("./controllers/auth.controller");
|
|
20
|
-
const password_reset_controller_1 = require("./controllers/password-reset.controller");
|
|
21
21
|
const users_controller_1 = require("./controllers/users.controller");
|
|
22
22
|
const roles_controller_1 = require("./controllers/roles.controller");
|
|
23
23
|
const permissions_controller_1 = require("./controllers/permissions.controller");
|
|
24
|
-
const
|
|
24
|
+
const user_model_1 = require("./models/user.model");
|
|
25
|
+
const role_model_1 = require("./models/role.model");
|
|
26
|
+
const permission_model_1 = require("./models/permission.model");
|
|
27
|
+
const auth_service_1 = require("./services/auth.service");
|
|
28
|
+
const users_service_1 = require("./services/users.service");
|
|
29
|
+
const roles_service_1 = require("./services/roles.service");
|
|
30
|
+
const permissions_service_1 = require("./services/permissions.service");
|
|
31
|
+
const mail_service_1 = require("./services/mail.service");
|
|
32
|
+
const seed_service_1 = require("./services/seed.service");
|
|
33
|
+
const user_repository_1 = require("./repositories/user.repository");
|
|
34
|
+
const role_repository_1 = require("./repositories/role.repository");
|
|
35
|
+
const permission_repository_1 = require("./repositories/permission.repository");
|
|
36
|
+
const authenticate_guard_1 = require("./middleware/authenticate.guard");
|
|
37
|
+
const admin_guard_1 = require("./middleware/admin.guard");
|
|
38
|
+
const admin_role_service_1 = require("./services/admin-role.service");
|
|
39
|
+
const oauth_service_1 = require("./services/oauth.service");
|
|
40
|
+
const passport_1 = __importDefault(require("passport"));
|
|
41
|
+
const passport_config_1 = require("./config/passport.config");
|
|
25
42
|
let AuthKitModule = class AuthKitModule {
|
|
26
|
-
|
|
27
|
-
|
|
43
|
+
constructor(oauth) {
|
|
44
|
+
this.oauth = oauth;
|
|
28
45
|
}
|
|
29
|
-
|
|
30
|
-
|
|
46
|
+
onModuleInit() {
|
|
47
|
+
(0, passport_config_1.registerOAuthStrategies)(this.oauth);
|
|
31
48
|
}
|
|
32
49
|
configure(consumer) {
|
|
33
50
|
consumer
|
|
34
|
-
.apply((0, cookie_parser_1.default)(),
|
|
51
|
+
.apply((0, cookie_parser_1.default)(), passport_1.default.initialize())
|
|
35
52
|
.forRoutes({ path: '*', method: common_1.RequestMethod.ALL });
|
|
36
53
|
}
|
|
37
54
|
};
|
|
38
55
|
exports.AuthKitModule = AuthKitModule;
|
|
39
56
|
exports.AuthKitModule = AuthKitModule = __decorate([
|
|
40
57
|
(0, common_1.Module)({
|
|
58
|
+
imports: [
|
|
59
|
+
mongoose_1.MongooseModule.forFeature([
|
|
60
|
+
{ name: user_model_1.User.name, schema: user_model_1.UserSchema },
|
|
61
|
+
{ name: role_model_1.Role.name, schema: role_model_1.RoleSchema },
|
|
62
|
+
{ name: permission_model_1.Permission.name, schema: permission_model_1.PermissionSchema },
|
|
63
|
+
]),
|
|
64
|
+
],
|
|
41
65
|
controllers: [
|
|
42
66
|
auth_controller_1.AuthController,
|
|
43
|
-
password_reset_controller_1.PasswordResetController,
|
|
44
67
|
users_controller_1.UsersController,
|
|
45
68
|
roles_controller_1.RolesController,
|
|
46
69
|
permissions_controller_1.PermissionsController,
|
|
47
|
-
admin_controller_1.AdminController,
|
|
48
70
|
],
|
|
49
|
-
|
|
71
|
+
providers: [
|
|
72
|
+
auth_service_1.AuthService,
|
|
73
|
+
users_service_1.UsersService,
|
|
74
|
+
roles_service_1.RolesService,
|
|
75
|
+
permissions_service_1.PermissionsService,
|
|
76
|
+
mail_service_1.MailService,
|
|
77
|
+
seed_service_1.SeedService,
|
|
78
|
+
user_repository_1.UserRepository,
|
|
79
|
+
role_repository_1.RoleRepository,
|
|
80
|
+
permission_repository_1.PermissionRepository,
|
|
81
|
+
authenticate_guard_1.AuthenticateGuard,
|
|
82
|
+
admin_guard_1.AdminGuard,
|
|
83
|
+
admin_role_service_1.AdminRoleService,
|
|
84
|
+
oauth_service_1.OAuthService,
|
|
85
|
+
],
|
|
86
|
+
exports: [
|
|
87
|
+
auth_service_1.AuthService,
|
|
88
|
+
users_service_1.UsersService,
|
|
89
|
+
roles_service_1.RolesService,
|
|
90
|
+
permissions_service_1.PermissionsService,
|
|
91
|
+
seed_service_1.SeedService,
|
|
92
|
+
authenticate_guard_1.AuthenticateGuard,
|
|
93
|
+
user_repository_1.UserRepository,
|
|
94
|
+
role_repository_1.RoleRepository,
|
|
95
|
+
permission_repository_1.PermissionRepository,
|
|
96
|
+
admin_guard_1.AdminGuard,
|
|
97
|
+
admin_role_service_1.AdminRoleService,
|
|
98
|
+
],
|
|
99
|
+
}),
|
|
100
|
+
__metadata("design:paramtypes", [oauth_service_1.OAuthService])
|
|
50
101
|
], AuthKitModule);
|
|
@@ -3,257 +3,80 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerOAuthStrategies = void 0;
|
|
6
7
|
const passport_1 = __importDefault(require("passport"));
|
|
7
|
-
const passport_local_1 = require("passport-local");
|
|
8
8
|
const passport_azure_ad_oauth2_1 = require("passport-azure-ad-oauth2");
|
|
9
9
|
const passport_google_oauth20_1 = require("passport-google-oauth20");
|
|
10
10
|
const passport_facebook_1 = require("passport-facebook");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
const ok = await bcryptjs_1.default.compare(password, user.password);
|
|
28
|
-
if (!ok) {
|
|
29
|
-
user.failedLoginAttempts += 1;
|
|
30
|
-
if (user.failedLoginAttempts >= MAX_FAILED)
|
|
31
|
-
user.lockUntil = Date.now() + LOCK_TIME_MS;
|
|
32
|
-
await user.save();
|
|
33
|
-
return done(null, false, { message: 'Incorrect password.' });
|
|
34
|
-
}
|
|
35
|
-
user.failedLoginAttempts = 0;
|
|
36
|
-
user.lockUntil = undefined;
|
|
37
|
-
await user.save();
|
|
38
|
-
return done(null, user);
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
return done(err);
|
|
42
|
-
}
|
|
43
|
-
}));
|
|
44
|
-
passport_1.default.use(new passport_azure_ad_oauth2_1.Strategy({
|
|
45
|
-
clientID: process.env.MICROSOFT_CLIENT_ID,
|
|
46
|
-
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
|
|
47
|
-
callbackURL: process.env.MICROSOFT_CALLBACK_URL,
|
|
48
|
-
}, async (_at, _rt, params, _profile, done) => {
|
|
49
|
-
try {
|
|
50
|
-
const decoded = (0, jsonwebtoken_1.decode)(params.id_token);
|
|
51
|
-
const microsoftId = decoded.oid || decoded.sub;
|
|
52
|
-
const email = decoded.preferred_username || decoded.upn || decoded.email;
|
|
53
|
-
const name = decoded.name;
|
|
54
|
-
const match = [{ microsoftId }];
|
|
55
|
-
if (email)
|
|
56
|
-
match.push({ email });
|
|
57
|
-
let user = await user_model_1.default.findOne({ $or: match });
|
|
58
|
-
if (!user) {
|
|
59
|
-
user = new user_model_1.default({ email, name, microsoftId, roles: [], status: 'active' });
|
|
60
|
-
await user.save();
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
let changed = false;
|
|
64
|
-
if (!user.microsoftId) {
|
|
65
|
-
user.microsoftId = microsoftId;
|
|
66
|
-
changed = true;
|
|
67
|
-
}
|
|
68
|
-
if (changed)
|
|
69
|
-
await user.save();
|
|
70
|
-
}
|
|
71
|
-
return done(null, user);
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
return done(err);
|
|
75
|
-
}
|
|
76
|
-
}));
|
|
77
|
-
passport_1.default.use('azure_ad_oauth2_client', new passport_azure_ad_oauth2_1.Strategy({
|
|
78
|
-
clientID: process.env.MICROSOFT_CLIENT_ID_CLIENT || process.env.MICROSOFT_CLIENT_ID,
|
|
79
|
-
clientSecret: process.env.MICROSOFT_CLIENT_SECRET_CLIENT || process.env.MICROSOFT_CLIENT_SECRET,
|
|
80
|
-
callbackURL: process.env.MICROSOFT_CALLBACK_URL_CLIENT,
|
|
81
|
-
}, async (_at, _rt, params, _profile, done) => {
|
|
82
|
-
try {
|
|
83
|
-
const decoded = (0, jsonwebtoken_1.decode)(params.id_token);
|
|
84
|
-
const microsoftId = decoded.oid || decoded.sub;
|
|
85
|
-
const email = decoded.preferred_username || decoded.upn || decoded.email;
|
|
86
|
-
const name = decoded.name;
|
|
87
|
-
const match = [{ microsoftId }];
|
|
88
|
-
if (email)
|
|
89
|
-
match.push({ email });
|
|
90
|
-
let client = await client_model_1.default.findOne({ $or: match });
|
|
91
|
-
if (!client) {
|
|
92
|
-
client = new client_model_1.default({ email, name, microsoftId, roles: [] });
|
|
93
|
-
await client.save();
|
|
94
|
-
}
|
|
95
|
-
else if (!client.microsoftId) {
|
|
96
|
-
client.microsoftId = microsoftId;
|
|
97
|
-
await client.save();
|
|
98
|
-
}
|
|
99
|
-
return done(null, client);
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
return done(err);
|
|
103
|
-
}
|
|
104
|
-
}));
|
|
105
|
-
if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET && process.env.GOOGLE_CALLBACK_URL_USER) {
|
|
106
|
-
passport_1.default.use('google-user', new passport_google_oauth20_1.Strategy({
|
|
107
|
-
clientID: process.env.GOOGLE_CLIENT_ID,
|
|
108
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
109
|
-
callbackURL: process.env.GOOGLE_CALLBACK_URL_USER
|
|
110
|
-
}, async (_at, _rt, profile, done) => {
|
|
111
|
-
var _a;
|
|
112
|
-
try {
|
|
113
|
-
const email = profile.emails && ((_a = profile.emails[0]) === null || _a === void 0 ? void 0 : _a.value);
|
|
114
|
-
if (!email)
|
|
115
|
-
return done(null, false);
|
|
116
|
-
let user = await user_model_1.default.findOne({ email });
|
|
117
|
-
if (!user) {
|
|
118
|
-
user = new user_model_1.default({
|
|
119
|
-
email,
|
|
120
|
-
name: profile.displayName,
|
|
121
|
-
googleId: profile.id,
|
|
122
|
-
roles: [],
|
|
123
|
-
status: 'active'
|
|
124
|
-
});
|
|
125
|
-
await user.save();
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
let changed = false;
|
|
129
|
-
if (!user.googleId) {
|
|
130
|
-
user.googleId = profile.id;
|
|
131
|
-
changed = true;
|
|
132
|
-
}
|
|
133
|
-
if (changed)
|
|
134
|
-
await user.save();
|
|
135
|
-
}
|
|
136
|
-
return done(null, user);
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
return done(err);
|
|
140
|
-
}
|
|
141
|
-
}));
|
|
142
|
-
}
|
|
143
|
-
if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET && process.env.GOOGLE_CALLBACK_URL_CLIENT) {
|
|
144
|
-
passport_1.default.use('google-client', new passport_google_oauth20_1.Strategy({
|
|
145
|
-
clientID: process.env.GOOGLE_CLIENT_ID,
|
|
146
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
147
|
-
callbackURL: process.env.GOOGLE_CALLBACK_URL_CLIENT
|
|
148
|
-
}, async (_at, _rt, profile, done) => {
|
|
149
|
-
var _a;
|
|
150
|
-
try {
|
|
151
|
-
const email = profile.emails && ((_a = profile.emails[0]) === null || _a === void 0 ? void 0 : _a.value);
|
|
152
|
-
if (!email)
|
|
153
|
-
return done(null, false);
|
|
154
|
-
let client = await client_model_1.default.findOne({ email });
|
|
155
|
-
if (!client) {
|
|
156
|
-
client = new client_model_1.default({
|
|
157
|
-
email,
|
|
158
|
-
name: profile.displayName,
|
|
159
|
-
googleId: profile.id,
|
|
160
|
-
roles: []
|
|
11
|
+
const axios_1 = __importDefault(require("axios"));
|
|
12
|
+
const registerOAuthStrategies = (oauth) => {
|
|
13
|
+
// Microsoft
|
|
14
|
+
if (process.env.MICROSOFT_CLIENT_ID && process.env.MICROSOFT_CLIENT_SECRET && process.env.MICROSOFT_CALLBACK_URL) {
|
|
15
|
+
passport_1.default.use('azure_ad_oauth2', new passport_azure_ad_oauth2_1.Strategy({
|
|
16
|
+
clientID: process.env.MICROSOFT_CLIENT_ID,
|
|
17
|
+
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
|
|
18
|
+
callbackURL: process.env.MICROSOFT_CALLBACK_URL,
|
|
19
|
+
resource: 'https://graph.microsoft.com',
|
|
20
|
+
tenant: process.env.MICROSOFT_TENANT_ID || 'common'
|
|
21
|
+
}, async (accessToken, _rt, _params, _profile, done) => {
|
|
22
|
+
var _a, _b, _c;
|
|
23
|
+
try {
|
|
24
|
+
const me = await axios_1.default.get('https://graph.microsoft.com/v1.0/me', {
|
|
25
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
161
26
|
});
|
|
162
|
-
|
|
27
|
+
const email = ((_a = me.data) === null || _a === void 0 ? void 0 : _a.mail) || ((_b = me.data) === null || _b === void 0 ? void 0 : _b.userPrincipalName);
|
|
28
|
+
const name = (_c = me.data) === null || _c === void 0 ? void 0 : _c.displayName;
|
|
29
|
+
if (!email)
|
|
30
|
+
return done(null, false);
|
|
31
|
+
const { accessToken: appToken, refreshToken } = await oauth.findOrCreateOAuthUser(email, name);
|
|
32
|
+
return done(null, { accessToken: appToken, refreshToken });
|
|
163
33
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
await client.save();
|
|
34
|
+
catch (err) {
|
|
35
|
+
return done(err);
|
|
167
36
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
const email = profile.emails && ((_a = profile.emails[0]) === null || _a === void 0 ? void 0 : _a.value);
|
|
185
|
-
if (!email)
|
|
186
|
-
return done(null, false);
|
|
187
|
-
let user = await user_model_1.default.findOne({ email });
|
|
188
|
-
if (!user) {
|
|
189
|
-
user = new user_model_1.default({
|
|
190
|
-
email,
|
|
191
|
-
name: profile.displayName,
|
|
192
|
-
facebookId: profile.id,
|
|
193
|
-
roles: [],
|
|
194
|
-
status: 'active'
|
|
195
|
-
});
|
|
196
|
-
await user.save();
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
// Google
|
|
40
|
+
if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET && process.env.GOOGLE_CALLBACK_URL) {
|
|
41
|
+
passport_1.default.use('google', new passport_google_oauth20_1.Strategy({
|
|
42
|
+
clientID: process.env.GOOGLE_CLIENT_ID,
|
|
43
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
44
|
+
callbackURL: process.env.GOOGLE_CALLBACK_URL,
|
|
45
|
+
}, async (_at, _rt, profile, done) => {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
try {
|
|
48
|
+
const email = (_b = (_a = profile.emails) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value;
|
|
49
|
+
if (!email)
|
|
50
|
+
return done(null, false);
|
|
51
|
+
const { accessToken, refreshToken } = await oauth.findOrCreateOAuthUser(email, profile.displayName);
|
|
52
|
+
return done(null, { accessToken, refreshToken });
|
|
197
53
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (!user.facebookId) {
|
|
201
|
-
user.facebookId = profile.id;
|
|
202
|
-
changed = true;
|
|
203
|
-
}
|
|
204
|
-
if (changed)
|
|
205
|
-
await user.save();
|
|
54
|
+
catch (err) {
|
|
55
|
+
return done(err);
|
|
206
56
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if (!email)
|
|
225
|
-
return done(null, false);
|
|
226
|
-
let client = await client_model_1.default.findOne({ email });
|
|
227
|
-
if (!client) {
|
|
228
|
-
client = new client_model_1.default({
|
|
229
|
-
email,
|
|
230
|
-
name: profile.displayName,
|
|
231
|
-
facebookId: profile.id,
|
|
232
|
-
roles: []
|
|
233
|
-
});
|
|
234
|
-
await client.save();
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
// Facebook
|
|
60
|
+
if (process.env.FB_CLIENT_ID && process.env.FB_CLIENT_SECRET && process.env.FB_CALLBACK_URL) {
|
|
61
|
+
passport_1.default.use('facebook', new passport_facebook_1.Strategy({
|
|
62
|
+
clientID: process.env.FB_CLIENT_ID,
|
|
63
|
+
clientSecret: process.env.FB_CLIENT_SECRET,
|
|
64
|
+
callbackURL: process.env.FB_CALLBACK_URL,
|
|
65
|
+
profileFields: ['id', 'displayName', 'emails'],
|
|
66
|
+
}, async (_at, _rt, profile, done) => {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
try {
|
|
69
|
+
const email = (_b = (_a = profile.emails) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value;
|
|
70
|
+
if (!email)
|
|
71
|
+
return done(null, false);
|
|
72
|
+
const { accessToken, refreshToken } = await oauth.findOrCreateOAuthUser(email, profile.displayName);
|
|
73
|
+
return done(null, { accessToken, refreshToken });
|
|
235
74
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
await client.save();
|
|
75
|
+
catch (err) {
|
|
76
|
+
return done(err);
|
|
239
77
|
}
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
catch (err) {
|
|
243
|
-
return done(err);
|
|
244
|
-
}
|
|
245
|
-
}));
|
|
246
|
-
}
|
|
247
|
-
passport_1.default.serializeUser((principal, done) => done(null, principal.id));
|
|
248
|
-
passport_1.default.deserializeUser(async (id, done) => {
|
|
249
|
-
try {
|
|
250
|
-
let principal = await user_model_1.default.findById(id);
|
|
251
|
-
if (!principal)
|
|
252
|
-
principal = await client_model_1.default.findById(id);
|
|
253
|
-
done(null, principal);
|
|
78
|
+
}));
|
|
254
79
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
});
|
|
80
|
+
};
|
|
81
|
+
exports.registerOAuthStrategies = registerOAuthStrategies;
|
|
259
82
|
exports.default = passport_1.default;
|
|
@@ -1,23 +1,39 @@
|
|
|
1
|
-
import type { Request, Response
|
|
1
|
+
import type { NextFunction, Request, Response } from 'express';
|
|
2
|
+
import { AuthService } from '../services/auth.service';
|
|
3
|
+
import { LoginDto } from '../dtos/auth/login.dto';
|
|
4
|
+
import { RegisterDto } from '../dtos/auth/register.dto';
|
|
5
|
+
import { RefreshTokenDto } from '../dtos/auth/refresh-token.dto';
|
|
6
|
+
import { VerifyEmailDto } from '../dtos/auth/verify-email.dto';
|
|
7
|
+
import { ResendVerificationDto } from '../dtos/auth/resend-verification.dto';
|
|
8
|
+
import { ForgotPasswordDto } from '../dtos/auth/forgot-password.dto';
|
|
9
|
+
import { ResetPasswordDto } from '../dtos/auth/reset-password.dto';
|
|
10
|
+
import { OAuthService } from '../services/oauth.service';
|
|
2
11
|
export declare class AuthController {
|
|
3
|
-
private
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
12
|
+
private readonly auth;
|
|
13
|
+
private readonly oauth;
|
|
14
|
+
constructor(auth: AuthService, oauth: OAuthService);
|
|
15
|
+
register(dto: RegisterDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
16
|
+
verifyEmail(dto: VerifyEmailDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
17
|
+
resendVerification(dto: ResendVerificationDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
18
|
+
login(dto: LoginDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
19
|
+
refresh(dto: RefreshTokenDto, req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
20
|
+
forgotPassword(dto: ForgotPasswordDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
21
|
+
resetPassword(dto: ResetPasswordDto, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
22
|
+
deleteAccount(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
23
|
+
microsoftExchange(body: {
|
|
24
|
+
idToken: string;
|
|
25
|
+
}, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
26
|
+
googleExchange(body: {
|
|
27
|
+
idToken?: string;
|
|
28
|
+
code?: string;
|
|
29
|
+
}, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
30
|
+
facebookExchange(body: {
|
|
31
|
+
accessToken: string;
|
|
32
|
+
}, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
33
|
+
googleLogin(req: Request, res: Response, next: NextFunction): any;
|
|
34
|
+
googleCallback(req: Request, res: Response, next: NextFunction): void;
|
|
8
35
|
microsoftLogin(req: Request, res: Response, next: NextFunction): any;
|
|
9
36
|
microsoftCallback(req: Request, res: Response, next: NextFunction): void;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
googleUserCallback(req: Request, res: Response, next: NextFunction): void;
|
|
13
|
-
googleClientLogin(req: Request, res: Response, next: NextFunction): any;
|
|
14
|
-
googleClientCallback(req: Request, res: Response, next: NextFunction): void;
|
|
15
|
-
googleExchange(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
16
|
-
facebookUserLogin(req: Request, res: Response, next: NextFunction): any;
|
|
17
|
-
facebookUserCallback(req: Request, res: Response, next: NextFunction): void;
|
|
18
|
-
facebookClientLogin(req: Request, res: Response, next: NextFunction): any;
|
|
19
|
-
facebookClientCallback(req: Request, res: Response, next: NextFunction): void;
|
|
20
|
-
microsoftClientLogin(req: Request, res: Response, next: NextFunction): any;
|
|
21
|
-
microsoftClientCallback(req: Request, res: Response, next: NextFunction): void;
|
|
22
|
-
refreshToken(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
37
|
+
facebookLogin(req: Request, res: Response, next: NextFunction): any;
|
|
38
|
+
facebookCallback(req: Request, res: Response, next: NextFunction): void;
|
|
23
39
|
}
|