@tomei/sso 0.50.7 → 0.51.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/sso",
3
- "version": "0.50.7",
3
+ "version": "0.51.0",
4
4
  "description": "Tomei SSO Package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -2009,6 +2009,44 @@ export class User extends UserBase {
2009
2009
  return `${userId}:${systemLogin.sessionId}`;
2010
2010
  }
2011
2011
 
2012
+ public async bypass2FA(systemCode: string, dbTransaction: any) {
2013
+ try {
2014
+ const user = await User._Repository.findOne({
2015
+ where: {
2016
+ UserId: this.UserId,
2017
+ },
2018
+ transaction: dbTransaction,
2019
+ });
2020
+
2021
+ //Check if 2FA is not enabled
2022
+ if (user.MFAEnabled === 1) {
2023
+ //If Enabled return error
2024
+ throw new ClassError(
2025
+ 'LoginUser',
2026
+ 'LoginUserErrMsg0X',
2027
+ 'Cannot bypass 2FA as it is enabled',
2028
+ );
2029
+ }
2030
+
2031
+ //Retrieve user session
2032
+ const userSession = await this._SessionService.retrieveUserSession(
2033
+ `${this.UserId}`,
2034
+ );
2035
+
2036
+ //Retrieve system code
2037
+ if (!systemCode) {
2038
+ systemCode = ApplicationConfig.getComponentConfigValue('system-code');
2039
+ }
2040
+
2041
+ const systemLogin = userSession.systemLogins.find(
2042
+ (e) => e.code === systemCode,
2043
+ );
2044
+ return `${this.UserId}:${systemLogin.sessionId}`;
2045
+ } catch (error) {
2046
+ throw error;
2047
+ }
2048
+ }
2049
+
2012
2050
  public async addUserGroup(
2013
2051
  GroupCode: string,
2014
2052
  loginUser: User,
@@ -8,6 +8,7 @@ import { ActionEnum, Activity } from '@tomei/activity-history';
8
8
  import GroupSystemAccessModel from '../../models/group-system-access.entity';
9
9
  import GroupModel from '../../models/group.entity';
10
10
  import SystemModel from '../../models/system.entity';
11
+ import UserModel from '../../models/user.entity';
11
12
  import { Transaction } from 'sequelize';
12
13
 
13
14
  export class UserGroup extends ObjectBase {
@@ -301,6 +302,59 @@ export class UserGroup extends ObjectBase {
301
302
  }
302
303
  }
303
304
 
305
+ public static async getUser(
306
+ dbTransaction: any,
307
+ loginUser: LoginUser,
308
+ GroupCode: string,
309
+ ) {
310
+ try {
311
+ // Part 1: Privilege Checking
312
+ // Call loginUser.checkPrivileges() by passing:
313
+ // SystemCode: "<get_from_app_config>"
314
+ // PrivilegeCode: "USER_GROUP_VIEW"
315
+ const systemCode =
316
+ ApplicationConfig.getComponentConfigValue('system-code');
317
+ const isPrivileged = await loginUser.checkPrivileges(
318
+ systemCode,
319
+ 'USER_GROUP_VIEW',
320
+ );
321
+
322
+ // If user does not have privilege to view user group, throw a ClassError
323
+ if (!isPrivileged) {
324
+ throw new ClassError(
325
+ 'UserGroup',
326
+ 'UserGroupErrMsg0X',
327
+ 'User does not have privilege to view user group.',
328
+ );
329
+ }
330
+
331
+ // Part 2: Retrieve Record
332
+ // Call UserGroup._Repo findAll method by passing:
333
+ // where:
334
+ // GroupCode: Params.GroupCode
335
+ // dbTransaction
336
+ const userGroup = await UserGroup._Repository.findAll({
337
+ where: {
338
+ GroupCode,
339
+ },
340
+ include: [
341
+ {
342
+ model: UserModel,
343
+ as: 'User',
344
+ attributes: ['UserId', 'FullName', 'Email'],
345
+ },
346
+ ],
347
+ transaction: dbTransaction,
348
+ });
349
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
350
+ return userGroup;
351
+ // If record not exists, return null.
352
+ return null;
353
+ } catch (error) {
354
+ throw error;
355
+ }
356
+ }
357
+
304
358
  static async findAllInheritedSystemAccesses(
305
359
  UserId: number,
306
360
  loginUser: User,