@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.
Files changed (90) hide show
  1. package/README.md +455 -120
  2. package/dist/auth-kit.module.d.ts +6 -4
  3. package/dist/auth-kit.module.js +64 -13
  4. package/dist/config/passport.config.d.ts +2 -1
  5. package/dist/config/passport.config.js +64 -241
  6. package/dist/controllers/auth.controller.d.ts +35 -19
  7. package/dist/controllers/auth.controller.js +155 -488
  8. package/dist/controllers/permissions.controller.d.ts +10 -5
  9. package/dist/controllers/permissions.controller.js +40 -76
  10. package/dist/controllers/roles.controller.d.ts +11 -5
  11. package/dist/controllers/roles.controller.js +49 -66
  12. package/dist/controllers/users.controller.d.ts +15 -6
  13. package/dist/controllers/users.controller.js +56 -203
  14. package/dist/dtos/auth/forgot-password.dto.d.ts +3 -0
  15. package/dist/dtos/auth/forgot-password.dto.js +20 -0
  16. package/dist/dtos/auth/login.dto.d.ts +4 -0
  17. package/dist/dtos/auth/login.dto.js +24 -0
  18. package/dist/dtos/auth/refresh-token.dto.d.ts +3 -0
  19. package/dist/dtos/auth/refresh-token.dto.js +21 -0
  20. package/dist/dtos/auth/register.dto.d.ts +13 -0
  21. package/dist/dtos/auth/register.dto.js +56 -0
  22. package/dist/dtos/auth/resend-verification.dto.d.ts +3 -0
  23. package/dist/dtos/auth/resend-verification.dto.js +20 -0
  24. package/dist/dtos/auth/reset-password.dto.d.ts +4 -0
  25. package/dist/dtos/auth/reset-password.dto.js +25 -0
  26. package/dist/dtos/auth/update-user-role.dto.d.ts +3 -0
  27. package/dist/dtos/auth/update-user-role.dto.js +21 -0
  28. package/dist/dtos/auth/verify-email.dto.d.ts +3 -0
  29. package/dist/dtos/auth/verify-email.dto.js +20 -0
  30. package/dist/dtos/permission/create-permission.dto.d.ts +4 -0
  31. package/dist/dtos/permission/create-permission.dto.js +25 -0
  32. package/dist/dtos/permission/update-permission.dto.d.ts +4 -0
  33. package/dist/dtos/permission/update-permission.dto.js +26 -0
  34. package/dist/dtos/role/create-role.dto.d.ts +4 -0
  35. package/dist/dtos/role/create-role.dto.js +26 -0
  36. package/dist/dtos/role/update-role.dto.d.ts +7 -0
  37. package/dist/dtos/role/update-role.dto.js +35 -0
  38. package/dist/index.d.ts +5 -2
  39. package/dist/index.js +11 -5
  40. package/dist/middleware/admin.decorator.d.ts +1 -0
  41. package/dist/middleware/admin.decorator.js +8 -0
  42. package/dist/middleware/admin.guard.d.ts +7 -0
  43. package/dist/middleware/admin.guard.js +35 -0
  44. package/dist/middleware/authenticate.guard.d.ts +5 -1
  45. package/dist/middleware/authenticate.guard.js +35 -8
  46. package/dist/middleware/role.guard.d.ts +4 -0
  47. package/dist/middleware/role.guard.js +29 -0
  48. package/dist/models/permission.model.d.ts +8 -16
  49. package/dist/models/permission.model.js +25 -14
  50. package/dist/models/role.model.d.ts +9 -28
  51. package/dist/models/role.model.js +26 -14
  52. package/dist/models/user.model.d.ts +22 -64
  53. package/dist/models/user.model.js +82 -41
  54. package/dist/repositories/permission.repository.d.ts +34 -0
  55. package/dist/repositories/permission.repository.js +47 -0
  56. package/dist/repositories/role.repository.d.ts +39 -0
  57. package/dist/repositories/role.repository.js +50 -0
  58. package/dist/repositories/user.repository.d.ts +57 -0
  59. package/dist/repositories/user.repository.js +71 -0
  60. package/dist/services/admin-role.service.d.ts +7 -0
  61. package/dist/services/admin-role.service.js +33 -0
  62. package/dist/services/auth.service.d.ts +49 -0
  63. package/dist/services/auth.service.js +219 -0
  64. package/dist/services/mail.service.d.ts +5 -0
  65. package/dist/services/mail.service.js +39 -0
  66. package/dist/services/oauth.service.d.ts +32 -0
  67. package/dist/services/oauth.service.js +138 -0
  68. package/dist/services/permissions.service.d.ts +19 -0
  69. package/dist/services/permissions.service.js +44 -0
  70. package/dist/services/roles.service.d.ts +23 -0
  71. package/dist/services/roles.service.js +57 -0
  72. package/dist/services/seed.service.d.ts +11 -0
  73. package/dist/services/seed.service.js +50 -0
  74. package/dist/services/users.service.d.ts +30 -0
  75. package/dist/services/users.service.js +81 -0
  76. package/package.json +31 -21
  77. package/dist/config/db.config.d.ts +0 -1
  78. package/dist/config/db.config.js +0 -22
  79. package/dist/controllers/admin.controller.d.ts +0 -4
  80. package/dist/controllers/admin.controller.js +0 -59
  81. package/dist/controllers/password-reset.controller.d.ts +0 -8
  82. package/dist/controllers/password-reset.controller.js +0 -146
  83. package/dist/middleware/auth.guard.d.ts +0 -4
  84. package/dist/middleware/auth.guard.js +0 -39
  85. package/dist/middleware/permission.guard.d.ts +0 -4
  86. package/dist/middleware/permission.guard.js +0 -52
  87. package/dist/models/client.model.d.ts +0 -54
  88. package/dist/models/client.model.js +0 -37
  89. package/dist/models/tenant.model.d.ts +0 -19
  90. package/dist/models/tenant.model.js +0 -15
@@ -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 passport_config_1 = __importDefault(require("./config/passport.config"));
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 admin_controller_1 = require("./controllers/admin.controller");
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
- async onModuleInit() {
27
- await (0, db_config_1.connectDB)();
43
+ constructor(oauth) {
44
+ this.oauth = oauth;
28
45
  }
29
- async onModuleDestroy() {
30
- await mongoose_1.default.disconnect();
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)(), passport_config_1.default.initialize())
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);
@@ -1,3 +1,4 @@
1
1
  import passport from 'passport';
2
- import 'dotenv/config';
2
+ import { OAuthService } from '../services/oauth.service';
3
+ export declare const registerOAuthStrategies: (oauth: OAuthService) => void;
3
4
  export default passport;
@@ -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 bcryptjs_1 = __importDefault(require("bcryptjs"));
12
- const jsonwebtoken_1 = require("jsonwebtoken");
13
- const user_model_1 = __importDefault(require("../models/user.model"));
14
- const client_model_1 = __importDefault(require("../models/client.model"));
15
- require("dotenv/config");
16
- const MAX_FAILED = parseInt(process.env.MAX_FAILED_LOGIN_ATTEMPTS || '', 10) || 3;
17
- const LOCK_TIME_MIN = parseInt(process.env.ACCOUNT_LOCK_TIME_MINUTES || '', 10) || 15;
18
- const LOCK_TIME_MS = LOCK_TIME_MIN * 60 * 1000;
19
- passport_1.default.use(new passport_local_1.Strategy({ usernameField: 'email', passwordField: 'password', passReqToCallback: true }, async (req, email, password, done) => {
20
- try {
21
- const user = await user_model_1.default.findOne({ email });
22
- if (!user)
23
- return done(null, false, { message: 'Incorrect email.' });
24
- if (user.lockUntil && user.lockUntil > Date.now()) {
25
- return done(null, false, { message: `Account locked until ${new Date(user.lockUntil).toLocaleString()}.` });
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
- await client.save();
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
- else if (!client.googleId) {
165
- client.googleId = profile.id;
166
- await client.save();
34
+ catch (err) {
35
+ return done(err);
167
36
  }
168
- return done(null, client);
169
- }
170
- catch (err) {
171
- return done(err);
172
- }
173
- }));
174
- }
175
- if (process.env.FB_CLIENT_ID && process.env.FB_CLIENT_SECRET && process.env.FB_CALLBACK_URL_USER) {
176
- passport_1.default.use('facebook-user', new passport_facebook_1.Strategy({
177
- clientID: process.env.FB_CLIENT_ID,
178
- clientSecret: process.env.FB_CLIENT_SECRET,
179
- callbackURL: process.env.FB_CALLBACK_URL_USER,
180
- profileFields: ['id', 'displayName', 'emails']
181
- }, async (_at, _rt, profile, done) => {
182
- var _a;
183
- try {
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
- else {
199
- let changed = false;
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
- return done(null, user);
208
- }
209
- catch (err) {
210
- return done(err);
211
- }
212
- }));
213
- }
214
- if (process.env.FB_CLIENT_ID && process.env.FB_CLIENT_SECRET && process.env.FB_CALLBACK_URL_CLIENT) {
215
- passport_1.default.use('facebook-client', new passport_facebook_1.Strategy({
216
- clientID: process.env.FB_CLIENT_ID,
217
- clientSecret: process.env.FB_CLIENT_SECRET,
218
- callbackURL: process.env.FB_CALLBACK_URL_CLIENT,
219
- profileFields: ['id', 'displayName', 'emails']
220
- }, async (_at, _rt, profile, done) => {
221
- var _a;
222
- try {
223
- const email = profile.emails && ((_a = profile.emails[0]) === null || _a === void 0 ? void 0 : _a.value);
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
- else if (!client.facebookId) {
237
- client.facebookId = profile.id;
238
- await client.save();
75
+ catch (err) {
76
+ return done(err);
239
77
  }
240
- return done(null, client);
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
- catch (err) {
256
- done(err);
257
- }
258
- });
80
+ };
81
+ exports.registerOAuthStrategies = registerOAuthStrategies;
259
82
  exports.default = passport_1.default;
@@ -1,23 +1,39 @@
1
- import type { Request, Response, NextFunction } from 'express';
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 issueTokensAndRespond;
4
- private respondWebOrMobile;
5
- registerClient(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
6
- clientLogin(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
7
- localLogin(req: Request, res: Response, next: NextFunction): any;
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
- microsoftExchange(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
11
- googleUserLogin(req: Request, res: Response, next: NextFunction): any;
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
  }