eh-commons 0.0.1-testing.97 → 0.0.2-testing.78
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/.prettierrc +2 -1
- package/dist/clients/index.d.ts +3 -0
- package/dist/clients/index.js +20 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/rest.client.d.ts +18 -0
- package/dist/clients/rest.client.js +101 -0
- package/dist/clients/rest.client.js.map +1 -0
- package/dist/clients/session.client.d.ts +3 -4
- package/dist/clients/session.client.js +4 -4
- package/dist/clients/session.client.js.map +1 -1
- package/dist/index.d.ts +22 -35
- package/dist/index.js +29 -55
- package/dist/index.js.map +1 -1
- package/dist/models/commons/interfaces/base.interface.d.ts +2 -2
- package/dist/models/interfaces/session/session.interface.d.ts +2 -2
- package/dist/models/rewards/embedded/origin.embedded.schema.d.ts +2 -2
- package/dist/models/rewards/embedded/rewards.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/file-log.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/file-meta.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/file-record.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/file-state.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/file.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/initiator.embedded.d.ts +2 -2
- package/dist/models/s3/embedded/s3.embedded.d.ts +2 -2
- package/dist/models/session/interfaces/session-client-data.interface.d.ts +2 -2
- package/dist/models/util/embedded/address.embedded.d.ts +2 -2
- package/dist/models/util/embedded/author.embedded.d.ts +2 -2
- package/dist/models/util/embedded/contact.embedded.d.ts +2 -2
- package/dist/models/util/embedded/geo-location.embedded.d.ts +2 -2
- package/dist/models/util/embedded/i18n.embedded.d.ts +2 -2
- package/dist/models/util/embedded/record.embedded.d.ts +2 -2
- package/dist/models/util/interfaces/person.interface.d.ts +0 -7
- package/dist/models/util/interfaces/person.interface.js +0 -2
- package/dist/models/wrappers/rest-wrapper.class.js +1 -4
- package/dist/models/wrappers/rest-wrapper.class.js.map +1 -1
- package/dist/modules/core/index.d.ts +6 -0
- package/dist/modules/core/index.js +23 -0
- package/dist/modules/core/index.js.map +1 -0
- package/dist/modules/core/models/enums/feed-type.enum.d.ts +6 -0
- package/dist/modules/core/models/enums/feed-type.enum.js +11 -0
- package/dist/modules/core/models/enums/feed-type.enum.js.map +1 -0
- package/dist/modules/core/models/interfaces/feed-thin.interface.d.ts +9 -0
- package/dist/modules/core/models/interfaces/feed-thin.interface.js +3 -0
- package/dist/modules/core/models/interfaces/feed-thin.interface.js.map +1 -0
- package/dist/modules/core/models/interfaces/index.d.ts +4 -0
- package/dist/modules/core/models/interfaces/index.js +21 -0
- package/dist/modules/core/models/interfaces/index.js.map +1 -0
- package/dist/modules/core/models/interfaces/range.interface.d.ts +4 -0
- package/dist/modules/core/models/interfaces/range.interface.js +3 -0
- package/dist/modules/core/models/interfaces/range.interface.js.map +1 -0
- package/dist/modules/core/models/interfaces/ref.interface.d.ts +6 -0
- package/dist/modules/core/models/interfaces/ref.interface.js +3 -0
- package/dist/modules/core/models/interfaces/ref.interface.js.map +1 -0
- package/dist/modules/core/models/interfaces/scope.interface.d.ts +14 -0
- package/dist/modules/core/models/interfaces/scope.interface.js +3 -0
- package/dist/modules/core/models/interfaces/scope.interface.js.map +1 -0
- package/dist/modules/core/models/schemas/index.d.ts +2 -0
- package/dist/modules/core/models/schemas/index.js +19 -0
- package/dist/modules/core/models/schemas/index.js.map +1 -0
- package/dist/modules/core/models/schemas/range.embedded.d.ts +14 -0
- package/dist/modules/core/models/schemas/range.embedded.js +29 -0
- package/dist/modules/core/models/schemas/range.embedded.js.map +1 -0
- package/dist/modules/core/models/schemas/scope.embedded.d.ts +25 -0
- package/dist/modules/core/models/schemas/scope.embedded.js +63 -0
- package/dist/modules/core/models/schemas/scope.embedded.js.map +1 -0
- package/dist/modules/dictionary/index.d.ts +5 -0
- package/dist/modules/dictionary/index.js +22 -0
- package/dist/modules/dictionary/index.js.map +1 -0
- package/dist/modules/dictionary/models/dtos/dictionary-list.dto.d.ts +10 -0
- package/dist/modules/dictionary/models/dtos/dictionary-list.dto.js +59 -0
- package/dist/modules/dictionary/models/dtos/dictionary-list.dto.js.map +1 -0
- package/dist/modules/dictionary/models/interfaces/index.d.ts +27 -0
- package/dist/modules/dictionary/models/interfaces/index.js +3 -0
- package/dist/modules/dictionary/models/interfaces/index.js.map +1 -0
- package/dist/modules/dictionary/models/schemas/index.d.ts +21 -0
- package/dist/modules/dictionary/models/schemas/index.js +47 -0
- package/dist/modules/dictionary/models/schemas/index.js.map +1 -0
- package/dist/modules/dictionary/services/dictionary.service.d.ts +13 -14
- package/dist/modules/dictionary/services/dictionary.service.js +43 -96
- package/dist/modules/dictionary/services/dictionary.service.js.map +1 -1
- package/dist/modules/dmm/dmm.module.d.ts +2 -0
- package/dist/modules/dmm/dmm.module.js +26 -0
- package/dist/modules/dmm/dmm.module.js.map +1 -0
- package/dist/modules/dmm/index.d.ts +4 -0
- package/dist/modules/dmm/index.js +21 -0
- package/dist/modules/dmm/index.js.map +1 -0
- package/dist/modules/dmm/models/interfaces/index.d.ts +12 -0
- package/dist/modules/dmm/models/interfaces/index.js +3 -0
- package/dist/modules/dmm/models/interfaces/index.js.map +1 -0
- package/dist/modules/dmm/models/schemas/index.d.ts +23 -0
- package/dist/modules/dmm/models/schemas/index.js +58 -0
- package/dist/modules/dmm/models/schemas/index.js.map +1 -0
- package/dist/modules/dmm/services/dmm.service.d.ts +26 -0
- package/dist/modules/dmm/services/dmm.service.js +40 -0
- package/dist/modules/dmm/services/dmm.service.js.map +1 -0
- package/dist/modules/emis/emis.module.d.ts +2 -0
- package/dist/modules/emis/emis.module.js +24 -0
- package/dist/modules/emis/emis.module.js.map +1 -0
- package/dist/modules/emis/index.d.ts +3 -0
- package/dist/modules/emis/index.js +20 -0
- package/dist/modules/emis/index.js.map +1 -0
- package/dist/modules/emis/models/interfaces/emis.interface.d.ts +34 -0
- package/dist/modules/emis/models/interfaces/emis.interface.js +3 -0
- package/dist/modules/emis/models/interfaces/emis.interface.js.map +1 -0
- package/dist/modules/emis/services/emis.service.d.ts +8 -0
- package/dist/modules/emis/services/emis.service.js +37 -0
- package/dist/modules/emis/services/emis.service.js.map +1 -0
- package/dist/modules/iam/iam.module.d.ts +2 -0
- package/dist/modules/iam/iam.module.js +24 -0
- package/dist/modules/iam/iam.module.js.map +1 -0
- package/dist/modules/iam/index.d.ts +5 -0
- package/dist/modules/iam/index.js +22 -0
- package/dist/modules/iam/index.js.map +1 -0
- package/dist/modules/iam/models/enums/index.d.ts +6 -0
- package/dist/modules/iam/models/enums/index.js +11 -0
- package/dist/modules/iam/models/enums/index.js.map +1 -0
- package/dist/modules/iam/models/interfaces/index.d.ts +101 -0
- package/dist/modules/iam/models/interfaces/index.js +3 -0
- package/dist/modules/iam/models/interfaces/index.js.map +1 -0
- package/dist/modules/iam/models/schemas/embedded/person.embedded.d.ts +19 -0
- package/dist/modules/iam/models/schemas/embedded/person.embedded.js +41 -0
- package/dist/modules/iam/models/schemas/embedded/person.embedded.js.map +1 -0
- package/dist/modules/iam/models/schemas/embedded/user-person-info.embedded.d.ts +17 -0
- package/dist/modules/iam/models/schemas/embedded/user-person-info.embedded.js +31 -0
- package/dist/modules/iam/models/schemas/embedded/user-person-info.embedded.js.map +1 -0
- package/dist/modules/iam/models/schemas/index.d.ts +2 -0
- package/dist/modules/iam/models/schemas/index.js +19 -0
- package/dist/modules/iam/models/schemas/index.js.map +1 -0
- package/dist/modules/iam/services/iam.service.d.ts +9 -0
- package/dist/modules/iam/services/iam.service.js +40 -0
- package/dist/modules/iam/services/iam.service.js.map +1 -0
- package/dist/modules/otp/index.d.ts +3 -0
- package/dist/modules/otp/index.js +20 -0
- package/dist/modules/otp/index.js.map +1 -0
- package/dist/modules/otp/models/interfaces/index.d.ts +18 -0
- package/dist/modules/otp/models/interfaces/index.js +3 -0
- package/dist/modules/otp/models/interfaces/index.js.map +1 -0
- package/dist/modules/otp/otp.module.d.ts +2 -0
- package/dist/modules/otp/otp.module.js +24 -0
- package/dist/modules/otp/otp.module.js.map +1 -0
- package/dist/modules/otp/services/otp.service.d.ts +11 -0
- package/dist/modules/otp/services/otp.service.js +48 -0
- package/dist/modules/otp/services/otp.service.js.map +1 -0
- package/dist/modules/session/functions/index.d.ts +5 -0
- package/dist/modules/session/functions/index.js +28 -0
- package/dist/modules/session/functions/index.js.map +1 -0
- package/dist/modules/session/guards/permission.guard.d.ts +15 -0
- package/dist/modules/session/guards/permission.guard.js +118 -0
- package/dist/modules/session/guards/permission.guard.js.map +1 -0
- package/dist/modules/session/guards/user.guard.d.ts +12 -0
- package/dist/modules/session/guards/user.guard.js +88 -0
- package/dist/modules/session/guards/user.guard.js.map +1 -0
- package/dist/modules/session/index.d.ts +9 -0
- package/dist/modules/session/index.js +26 -0
- package/dist/modules/session/index.js.map +1 -0
- package/dist/modules/session/models/classes/index.d.ts +3 -0
- package/dist/modules/session/models/classes/index.js +7 -0
- package/dist/modules/session/models/classes/index.js.map +1 -0
- package/dist/modules/session/models/interfaces/index.d.ts +54 -0
- package/dist/modules/session/models/interfaces/index.js +7 -0
- package/dist/modules/session/models/interfaces/index.js.map +1 -0
- package/dist/modules/session/reflectors/permission.reflector.d.ts +2 -0
- package/dist/modules/session/reflectors/permission.reflector.js +6 -0
- package/dist/modules/session/reflectors/permission.reflector.js.map +1 -0
- package/dist/modules/session/services/redis.service.d.ts +16 -0
- package/dist/modules/session/services/redis.service.js +94 -0
- package/dist/modules/session/services/redis.service.js.map +1 -0
- package/dist/modules/session/services/session-v1.service.d.ts +12 -0
- package/dist/modules/session/services/session-v1.service.js +36 -0
- package/dist/modules/session/services/session-v1.service.js.map +1 -0
- package/dist/modules/session/services/session-v2.service.d.ts +17 -0
- package/dist/modules/session/services/session-v2.service.js +102 -0
- package/dist/modules/session/services/session-v2.service.js.map +1 -0
- package/dist/modules/session/session.module.d.ts +2 -0
- package/dist/modules/session/session.module.js +27 -0
- package/dist/modules/session/session.module.js.map +1 -0
- package/dist/modules/storage/index.d.ts +4 -0
- package/dist/modules/storage/index.js +21 -0
- package/dist/modules/storage/index.js.map +1 -0
- package/dist/modules/storage/models/inerfaces/index.d.ts +7 -0
- package/dist/modules/storage/models/inerfaces/index.js +3 -0
- package/dist/modules/storage/models/inerfaces/index.js.map +1 -0
- package/dist/modules/storage/models/schemas/index.d.ts +36 -0
- package/dist/modules/storage/models/schemas/index.js +62 -0
- package/dist/modules/storage/models/schemas/index.js.map +1 -0
- package/dist/modules/storage/services/storage.service.d.ts +9 -0
- package/dist/modules/storage/services/storage.service.js +35 -0
- package/dist/modules/storage/services/storage.service.js.map +1 -0
- package/dist/modules/storage/storage.module.d.ts +2 -0
- package/dist/modules/storage/storage.module.js +24 -0
- package/dist/modules/storage/storage.module.js.map +1 -0
- package/dist/pipes/index.d.ts +13 -0
- package/dist/pipes/index.js +64 -0
- package/dist/pipes/index.js.map +1 -0
- package/dist/pipes/validate-mongo-id.pipe.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -18
- package/src/clients/index.ts +3 -0
- package/src/clients/rest.client.ts +112 -0
- package/src/clients/session.client.ts +10 -20
- package/src/index.ts +36 -164
- package/src/models/commons/interfaces/base.interface.ts +2 -2
- package/src/models/interfaces/session/session.interface.ts +6 -6
- package/src/models/session/interfaces/session-client-data.interface.ts +2 -2
- package/src/models/util/interfaces/person.interface.ts +1 -7
- package/src/models/wrappers/rest-wrapper.class.ts +1 -4
- package/src/modules/core/index.ts +6 -0
- package/src/modules/core/models/enums/feed-type.enum.ts +6 -0
- package/src/modules/core/models/interfaces/feed-thin.interface.ts +10 -0
- package/src/modules/core/models/interfaces/index.ts +4 -0
- package/src/modules/core/models/interfaces/range.interface.ts +4 -0
- package/src/modules/core/models/interfaces/ref.interface.ts +7 -0
- package/src/modules/core/models/interfaces/scope.interface.ts +15 -0
- package/src/modules/core/models/schemas/index.ts +2 -0
- package/src/modules/core/models/schemas/range.embedded.ts +13 -0
- package/src/modules/core/models/schemas/scope.embedded.ts +41 -0
- package/src/modules/dictionary/index.ts +5 -0
- package/src/modules/dictionary/{dtos → models/dtos}/dictionary-list.dto.ts +9 -16
- package/src/modules/dictionary/models/interfaces/index.ts +31 -0
- package/src/modules/dictionary/models/schemas/index.ts +28 -0
- package/src/modules/dictionary/services/dictionary.service.ts +55 -149
- package/src/modules/dmm/dmm.module.ts +13 -0
- package/src/modules/dmm/index.ts +4 -0
- package/src/modules/dmm/models/interfaces/index.ts +13 -0
- package/src/modules/dmm/models/schemas/index.ts +36 -0
- package/src/modules/dmm/services/dmm.service.ts +33 -0
- package/src/modules/emis/emis.module.ts +11 -0
- package/src/modules/emis/index.ts +3 -0
- package/src/modules/emis/models/interfaces/emis.interface.ts +37 -0
- package/src/modules/emis/services/emis.service.ts +30 -0
- package/src/modules/iam/iam.module.ts +11 -0
- package/src/modules/iam/index.ts +5 -0
- package/src/modules/iam/models/enums/index.ts +6 -0
- package/src/modules/iam/models/interfaces/index.ts +114 -0
- package/src/{models/util → modules/iam/models/schemas}/embedded/person.embedded.ts +5 -1
- package/src/modules/iam/models/schemas/embedded/user-person-info.embedded.ts +16 -0
- package/src/modules/iam/models/schemas/index.ts +2 -0
- package/src/modules/iam/services/iam.service.ts +35 -0
- package/src/modules/otp/index.ts +3 -0
- package/src/modules/otp/models/interfaces/index.ts +20 -0
- package/src/modules/otp/otp.module.ts +11 -0
- package/src/modules/otp/services/otp.service.ts +48 -0
- package/src/modules/session/functions/index.ts +24 -0
- package/src/modules/session/guards/permission.guard.ts +122 -0
- package/src/modules/session/guards/user.guard.ts +88 -0
- package/src/modules/session/index.ts +9 -0
- package/src/modules/session/models/classes/index.ts +3 -0
- package/src/modules/session/models/interfaces/index.ts +57 -0
- package/src/modules/{cache/reflector → session/reflectors}/permission.reflector.ts +1 -1
- package/src/modules/{cache → session}/services/redis.service.ts +23 -20
- package/src/modules/session/services/session-v1.service.ts +30 -0
- package/src/modules/session/services/session-v2.service.ts +113 -0
- package/src/modules/session/session.module.ts +14 -0
- package/src/modules/storage/index.ts +4 -0
- package/src/modules/storage/models/inerfaces/index.ts +8 -0
- package/src/modules/storage/models/schemas/index.ts +42 -0
- package/src/modules/storage/services/storage.service.ts +29 -0
- package/src/modules/storage/storage.module.ts +11 -0
- package/src/pipes/index.ts +49 -0
- package/src/pipes/validate-mongo-id.pipe.ts +1 -3
- package/src/functions/session/keyword.function.ts +0 -14
- package/src/models/dictionary/embedded/dictionary.embedded.ts +0 -31
- package/src/models/dictionary/interfaces/dictionary-embedded.interface.ts +0 -12
- package/src/models/dictionary/interfaces/dictionary-event.interface.ts +0 -6
- package/src/models/dictionary/interfaces/dictionary-setting.interface.ts +0 -5
- package/src/models/dictionary/interfaces/dictionary.interface.ts +0 -13
- package/src/models/session/interfaces/session-user-data.interface.ts +0 -16
- package/src/models/um/enums/client-type.enum.ts +0 -6
- package/src/models/um/enums/permission-include-strategy.enum.ts +0 -5
- package/src/models/um/interfaces/client.interface.ts +0 -23
- package/src/models/um/interfaces/credentials.interface.ts +0 -4
- package/src/models/um/interfaces/permission.interface.ts +0 -11
- package/src/models/um/interfaces/prof-info.interface.ts +0 -5
- package/src/models/um/interfaces/role.interface.ts +0 -14
- package/src/models/um/interfaces/user-client.interface.ts +0 -10
- package/src/models/um/interfaces/user.interface.ts +0 -20
- package/src/models/wrappers/permission-guard-config.wrapper.ts +0 -5
- package/src/modules/cache/cache.module.ts +0 -13
- package/src/modules/cache/guards/permission.guard.ts +0 -109
- package/src/modules/cache/services/session.service.ts +0 -23
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { RedisService } from './redis.service';
|
|
3
|
+
import { SessionClient } from '../../../clients/session.client';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class SessionV1Service {
|
|
7
|
+
//#region Private Members
|
|
8
|
+
private readonly _sessionClient: SessionClient;
|
|
9
|
+
//#endregion
|
|
10
|
+
|
|
11
|
+
//#region Constructor
|
|
12
|
+
constructor(private readonly _redisService: RedisService) {
|
|
13
|
+
this._sessionClient = new SessionClient(this._redisService.getRedisClient());
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
|
|
17
|
+
//#region Public APIs
|
|
18
|
+
public getUserData(token: string) {
|
|
19
|
+
return this._sessionClient.getUserData(token);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public getClientData(userId: string) {
|
|
23
|
+
return this._sessionClient.getUserClients(userId);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public getUserClientPermissions(userId: string, clientId: string) {
|
|
27
|
+
return this._sessionClient.getUserClientPermissions(userId, clientId);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
import { RestClient } from '../../../clients';
|
|
4
|
+
import { ICompleteUserData } from '../../iam';
|
|
5
|
+
import { ISessionClientData, ISessionData, IUserSessionData } from '../models/interfaces';
|
|
6
|
+
import { generateSessionKeyword, generateUserClientPermissionKeyword, generateUserClientsKeyword, generateUserSessionTokenKeyword } from '../functions';
|
|
7
|
+
import { RESTError } from '../../../models/wrappers/rest-wrapper.class';
|
|
8
|
+
import { RedisService } from './redis.service';
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class SessionV2Service {
|
|
12
|
+
//#region Private Members
|
|
13
|
+
private readonly _client: RestClient;
|
|
14
|
+
//#endregion
|
|
15
|
+
|
|
16
|
+
//#region Constructor
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly _configService: ConfigService,
|
|
19
|
+
private readonly _redisService: RedisService,
|
|
20
|
+
) {
|
|
21
|
+
this._client = new RestClient({
|
|
22
|
+
name: 'SESSION_SERVICE',
|
|
23
|
+
baseUrl: this._configService.get('EH_SESSIONS__REST__BASE_URL', ''),
|
|
24
|
+
timeout: 30000,
|
|
25
|
+
accessToken: this._configService.get('EH_SESSIONS__REST__ACCESS_TOKEN', ''),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
|
|
30
|
+
//#region Public APIs
|
|
31
|
+
public async initPrivateSchool(data: ICompleteUserData) {
|
|
32
|
+
const requestBody = { data };
|
|
33
|
+
return await this._client.post<ISessionData>(`/internals/v1/sessions/private-schools`, requestBody);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public async readBySessionToken(token: string): Promise<ISessionData> {
|
|
37
|
+
const userKey = generateSessionKeyword(token);
|
|
38
|
+
const response = await this._redisService.get(userKey);
|
|
39
|
+
|
|
40
|
+
if (!response) {
|
|
41
|
+
throw new RESTError('session_not_found', null, 401);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const parsedUserResponse = JSON.parse(response);
|
|
45
|
+
const userClientKey = generateUserClientsKeyword(parsedUserResponse.userId);
|
|
46
|
+
|
|
47
|
+
const clientResponse = await this._redisService.get(userClientKey);
|
|
48
|
+
const parsedClient = JSON.parse(clientResponse);
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
sessionToken: token,
|
|
52
|
+
userInfo: parsedUserResponse,
|
|
53
|
+
userClients: parsedClient,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public async deleteBySessionToken(token: string) {
|
|
58
|
+
const userKey = generateSessionKeyword(token);
|
|
59
|
+
|
|
60
|
+
const userInfoRaw = await this._redisService.get(userKey);
|
|
61
|
+
if (!userInfoRaw) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const userInfo: IUserSessionData = JSON.parse(userInfoRaw);
|
|
66
|
+
const userId = userInfo.userId;
|
|
67
|
+
const userClientKey = generateUserClientsKeyword(userId);
|
|
68
|
+
const userSessionTokenKey = generateUserSessionTokenKeyword(userId);
|
|
69
|
+
|
|
70
|
+
// Delete per-client permission keys
|
|
71
|
+
try {
|
|
72
|
+
const clientsRaw: string = await this._redisService.get(userClientKey);
|
|
73
|
+
if (clientsRaw) {
|
|
74
|
+
const clients: { [key: string]: ISessionClientData } = JSON.parse(clientsRaw);
|
|
75
|
+
for (const key in clients) {
|
|
76
|
+
const userClientPermissionsKey = generateUserClientPermissionKeyword(userId, clients[key].clientId);
|
|
77
|
+
await this._redisService.del(userClientPermissionsKey);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} catch (_) {
|
|
81
|
+
// Continue cleanup even if client permissions deletion fails
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Always delete the main session keys
|
|
85
|
+
await this._redisService.del(userClientKey);
|
|
86
|
+
await this._redisService.del(userSessionTokenKey);
|
|
87
|
+
await this._redisService.del(userKey);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public async readByUserId(userId: string): Promise<ISessionData> {
|
|
91
|
+
const token = await this.validateUsesSessionToken(userId);
|
|
92
|
+
return await this.readBySessionToken(token);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public async deleteByUserId(userId: string) {
|
|
96
|
+
const token = await this.validateUsesSessionToken(userId);
|
|
97
|
+
return await this.deleteBySessionToken(token);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public async readUserSessionToken(userId: string) {
|
|
101
|
+
const userSessionTokenKey = generateUserSessionTokenKeyword(userId);
|
|
102
|
+
return await this._redisService.get(userSessionTokenKey);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public async validateUsesSessionToken(userId: string): Promise<string> {
|
|
106
|
+
const userSessionToken = await this.readUserSessionToken(userId);
|
|
107
|
+
if (!userSessionToken) {
|
|
108
|
+
throw new RESTError('user_session_token_not_found', userId, 400);
|
|
109
|
+
}
|
|
110
|
+
return userSessionToken;
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Module } from '@nestjs/common';
|
|
2
|
+
import { ConfigModule } from '@nestjs/config';
|
|
3
|
+
import { SessionV2Service } from './services/session-v2.service';
|
|
4
|
+
import { SessionV1Service } from './services/session-v1.service';
|
|
5
|
+
import { RedisService } from './services/redis.service';
|
|
6
|
+
import { CoreModule } from '../core/core.module';
|
|
7
|
+
|
|
8
|
+
@Module({
|
|
9
|
+
imports: [ConfigModule, CoreModule],
|
|
10
|
+
controllers: [],
|
|
11
|
+
providers: [RedisService, SessionV1Service, SessionV2Service],
|
|
12
|
+
exports: [RedisService, SessionV1Service, SessionV2Service],
|
|
13
|
+
})
|
|
14
|
+
export class SessionModule {}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
|
|
2
|
+
import { HydratedDocument, SchemaTypes, Types } from 'mongoose';
|
|
3
|
+
import { IFileMeta } from '../../../../models/s3/interfaces/file-meta.interface';
|
|
4
|
+
import { S3Schema } from '../../../../models/s3/embedded/s3.embedded';
|
|
5
|
+
import { IS3 } from '../../../../models/s3/interfaces/s3.interface';
|
|
6
|
+
import { IS3FileThin } from '../inerfaces';
|
|
7
|
+
|
|
8
|
+
@Schema({ _id: false })
|
|
9
|
+
export class FileMeta implements IFileMeta {
|
|
10
|
+
@Prop({ type: String, required: false })
|
|
11
|
+
name: string;
|
|
12
|
+
|
|
13
|
+
@Prop({ type: Number, required: true })
|
|
14
|
+
size: number;
|
|
15
|
+
|
|
16
|
+
@Prop({ type: String, required: true })
|
|
17
|
+
mimeType: string;
|
|
18
|
+
|
|
19
|
+
@Prop({ type: String, required: true })
|
|
20
|
+
extension: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const FileMetaSchema = SchemaFactory.createForClass(FileMeta);
|
|
24
|
+
export type FileMetaDocument = HydratedDocument<FileMeta>;
|
|
25
|
+
|
|
26
|
+
@Schema({ _id: false })
|
|
27
|
+
export class S3FileThin implements IS3FileThin {
|
|
28
|
+
@Prop({ type: SchemaTypes.ObjectId, required: true })
|
|
29
|
+
id: Types.ObjectId;
|
|
30
|
+
|
|
31
|
+
@Prop({ required: false, type: FileMetaSchema })
|
|
32
|
+
fileMeta: IFileMeta;
|
|
33
|
+
|
|
34
|
+
@Prop({ required: false, type: S3Schema })
|
|
35
|
+
s3: IS3;
|
|
36
|
+
|
|
37
|
+
@Prop({ required: false, type: String })
|
|
38
|
+
owner: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const S3FileThinSchema = SchemaFactory.createForClass(S3FileThin);
|
|
42
|
+
export type S3FileThinDocument = HydratedDocument<S3FileThin>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
import { ObjectId } from 'mongoose';
|
|
4
|
+
import { RestClient } from '../../../clients';
|
|
5
|
+
import { IS3File } from '../../../models/s3/interfaces/file.interface';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class StorageService {
|
|
9
|
+
//#region Private Members
|
|
10
|
+
private readonly _client: RestClient;
|
|
11
|
+
//#endregion
|
|
12
|
+
|
|
13
|
+
//#region Constructor
|
|
14
|
+
constructor(private _configService: ConfigService) {
|
|
15
|
+
this._client = new RestClient({
|
|
16
|
+
name: 'STORAGE_SERVICE',
|
|
17
|
+
baseUrl: this._configService.get('EH_STORAGE__REST__BASE_URL', ''),
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
accessToken: this._configService.get('EH_STORAGE__REST__ACCESS_TOKEN', ''),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
|
|
24
|
+
//#region Public APIs
|
|
25
|
+
public async fetchMeta(fileId: string | ObjectId, bucketName: string) {
|
|
26
|
+
return await this._client.get<IS3File>(`/bucket/${bucketName}/file/${fileId}/meta`);
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Module } from '@nestjs/common';
|
|
2
|
+
import { StorageService } from './services/storage.service';
|
|
3
|
+
import { ConfigModule } from '@nestjs/config';
|
|
4
|
+
|
|
5
|
+
@Module({
|
|
6
|
+
imports: [ConfigModule],
|
|
7
|
+
controllers: [],
|
|
8
|
+
providers: [StorageService],
|
|
9
|
+
exports: [StorageService],
|
|
10
|
+
})
|
|
11
|
+
export class StorageModule {}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { isMongoId } from 'class-validator';
|
|
2
|
+
import { ObjectId } from 'bson';
|
|
3
|
+
import { TransformFnParams } from 'class-transformer';
|
|
4
|
+
import { RESTError } from '../models/wrappers/rest-wrapper.class';
|
|
5
|
+
|
|
6
|
+
const toStringArray = (value: string | string[]) => {
|
|
7
|
+
return typeof value === 'string' ? [value] : value;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const toMongoId = (value: string) => {
|
|
11
|
+
const check = isMongoId(value);
|
|
12
|
+
if (!check) {
|
|
13
|
+
throw new RESTError('invalid_mongoid', value);
|
|
14
|
+
}
|
|
15
|
+
return ObjectId.createFromHexString(value);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const toMongoIdArray = (values: string | string[]) => {
|
|
19
|
+
const result: ObjectId[] = [];
|
|
20
|
+
const items = typeof values === 'string' ? [values] : values;
|
|
21
|
+
for (const value of items) {
|
|
22
|
+
result.push(toMongoId(value));
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const toBoolean = (value: string) => {
|
|
28
|
+
return value === 'true';
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const stringArrayTransformer = (params: TransformFnParams) => {
|
|
32
|
+
return toStringArray(params.value);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const mongoIdTransformer = (params: TransformFnParams) => {
|
|
36
|
+
return toMongoId(params.value);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const mongoIdArrayTransformer = (params: TransformFnParams) => {
|
|
40
|
+
return toMongoIdArray(params.value);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const booleanTransformer = (params: TransformFnParams) => {
|
|
44
|
+
return toBoolean(params.value);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { toStringArray, toMongoId, toMongoIdArray, toBoolean, stringArrayTransformer, mongoIdTransformer, mongoIdArrayTransformer, booleanTransformer };
|
|
48
|
+
export * from './validate-pid.pipe';
|
|
49
|
+
export * from './validate-mongo-id.pipe';
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Injectable, PipeTransform } from '@nestjs/common';
|
|
2
2
|
import { isMongoId } from 'class-validator';
|
|
3
|
-
import {
|
|
4
|
-
RESTError,
|
|
5
|
-
} from '../models/wrappers/rest-wrapper.class';
|
|
3
|
+
import { RESTError } from '../models/wrappers/rest-wrapper.class';
|
|
6
4
|
|
|
7
5
|
@Injectable()
|
|
8
6
|
export class ValidateMongoIdPipe implements PipeTransform<string, string> {
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export function generateSessionKeyword(token: string) {
|
|
2
|
-
return `sessions::${token}`;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function generateUserClientKeyword(userId: string) {
|
|
6
|
-
return `user-clients::${userId}`;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function generateUserClientPermissionKeyword(
|
|
10
|
-
userId: string,
|
|
11
|
-
clientId: string,
|
|
12
|
-
) {
|
|
13
|
-
return `user-client-permissions::${userId}::${clientId}`;
|
|
14
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
|
|
2
|
-
import { HydratedDocument, SchemaTypes } from 'mongoose';
|
|
3
|
-
import { mongo } from 'mongoose';
|
|
4
|
-
import { I18n, I18nSchema } from '../../util/embedded/i18n.embedded';
|
|
5
|
-
import { IDictionaryEmbedded } from '../interfaces/dictionary-embedded.interface';
|
|
6
|
-
import { RecordState } from '../../util/enums/record-state.enum';
|
|
7
|
-
|
|
8
|
-
@Schema({ _id: false })
|
|
9
|
-
export class DictionaryEmbedded implements IDictionaryEmbedded {
|
|
10
|
-
@Prop({ type: I18nSchema, required: false })
|
|
11
|
-
title: I18n;
|
|
12
|
-
|
|
13
|
-
@Prop({ type: String, required: false })
|
|
14
|
-
keyword: string;
|
|
15
|
-
|
|
16
|
-
@Prop({ type: String, required: false, enum: RecordState })
|
|
17
|
-
record: RecordState;
|
|
18
|
-
|
|
19
|
-
@Prop({ type: SchemaTypes.ObjectId, required: false })
|
|
20
|
-
originId: mongo.ObjectId;
|
|
21
|
-
|
|
22
|
-
@Prop({ type: [SchemaTypes.ObjectId], required: false })
|
|
23
|
-
originIds: mongo.ObjectId[];
|
|
24
|
-
|
|
25
|
-
@Prop({ type: SchemaTypes.ObjectId, required: false })
|
|
26
|
-
dictionaryId: mongo.ObjectId;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const DictionaryEmbeddedSchema =
|
|
30
|
-
SchemaFactory.createForClass(DictionaryEmbedded);
|
|
31
|
-
export type DictionaryEmbeddedDocument = HydratedDocument<DictionaryEmbedded>;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { mongo } from 'mongoose';
|
|
2
|
-
import { II18n } from '../../util/interfaces/i18n.interface';
|
|
3
|
-
import { RecordState } from '../../util/enums/record-state.enum';
|
|
4
|
-
|
|
5
|
-
export interface IDictionaryEmbedded {
|
|
6
|
-
originId: mongo.ObjectId;
|
|
7
|
-
originIds: mongo.ObjectId[];
|
|
8
|
-
dictionaryId: mongo.ObjectId;
|
|
9
|
-
title: II18n;
|
|
10
|
-
keyword: string;
|
|
11
|
-
record: RecordState;
|
|
12
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ObjectId } from 'bson';
|
|
2
|
-
import { IDictionarySetting } from './dictionary-setting.interface';
|
|
3
|
-
import { IBase } from '../../commons/interfaces/base.interface';
|
|
4
|
-
import { II18n } from '../../util/interfaces/i18n.interface';
|
|
5
|
-
|
|
6
|
-
export interface IDictionary extends IBase {
|
|
7
|
-
keyword: string;
|
|
8
|
-
originIds: ObjectId[];
|
|
9
|
-
parentIds: ObjectId[];
|
|
10
|
-
title: II18n;
|
|
11
|
-
settings: IDictionarySetting;
|
|
12
|
-
metas: Map<string, string>;
|
|
13
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IContact } from '../../../models/util/interfaces/contact.interface';
|
|
2
|
-
import { IDictionaryEmbedded } from '../../dictionary/interfaces/dictionary-embedded.interface';
|
|
3
|
-
|
|
4
|
-
export interface ISessionUserData {
|
|
5
|
-
userId: string;
|
|
6
|
-
username: string;
|
|
7
|
-
fistName: string;
|
|
8
|
-
lastName: string;
|
|
9
|
-
contacts: IContact[];
|
|
10
|
-
gender: number;
|
|
11
|
-
birthDate: Date;
|
|
12
|
-
pid: string;
|
|
13
|
-
subjects: IDictionaryEmbedded[];
|
|
14
|
-
level: IDictionaryEmbedded;
|
|
15
|
-
ua: any;
|
|
16
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { mongo } from 'mongoose';
|
|
2
|
-
import { II18n } from '../../util/interfaces/i18n.interface';
|
|
3
|
-
import { IRecord } from '../../../models/util/interfaces/record.interface';
|
|
4
|
-
import { IAddress } from '../../../models/util/interfaces/address.interface';
|
|
5
|
-
import { IContact } from '../../../models/util/interfaces/contact.interface';
|
|
6
|
-
import { IDictionaryEmbedded } from '../../dictionary/interfaces/dictionary-embedded.interface';
|
|
7
|
-
|
|
8
|
-
export interface IClient {
|
|
9
|
-
_id: mongo.ObjectId;
|
|
10
|
-
originId: mongo.ObjectId;
|
|
11
|
-
type: IDictionaryEmbedded;
|
|
12
|
-
parentId: mongo.ObjectId;
|
|
13
|
-
name: II18n;
|
|
14
|
-
address: IAddress;
|
|
15
|
-
highland: boolean;
|
|
16
|
-
code: string;
|
|
17
|
-
contacts: IContact[];
|
|
18
|
-
record: IRecord;
|
|
19
|
-
region: IDictionaryEmbedded;
|
|
20
|
-
district: IDictionaryEmbedded;
|
|
21
|
-
languageSectors: IDictionaryEmbedded[];
|
|
22
|
-
levels: IDictionaryEmbedded[];
|
|
23
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { mongo } from 'mongoose';
|
|
2
|
-
import { II18n } from '../../util/interfaces/i18n.interface';
|
|
3
|
-
import { IRecord } from '../../util/interfaces/record.interface';
|
|
4
|
-
|
|
5
|
-
export interface IPermission {
|
|
6
|
-
_id: mongo.ObjectId;
|
|
7
|
-
name: II18n;
|
|
8
|
-
description: II18n;
|
|
9
|
-
keyword: string;
|
|
10
|
-
record: IRecord;
|
|
11
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { mongo } from 'mongoose';
|
|
2
|
-
import { II18n } from '../../util/interfaces/i18n.interface';
|
|
3
|
-
import { IPermission } from './permission.interface';
|
|
4
|
-
import { IRecord } from '../../util/interfaces/record.interface';
|
|
5
|
-
|
|
6
|
-
export interface IRole {
|
|
7
|
-
_id: mongo.ObjectId;
|
|
8
|
-
keyword: string;
|
|
9
|
-
name: II18n;
|
|
10
|
-
description: II18n;
|
|
11
|
-
permissions: IPermission[];
|
|
12
|
-
record: IRecord;
|
|
13
|
-
default: boolean;
|
|
14
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ObjectId } from 'mongoose';
|
|
2
|
-
import { IDictionaryEmbedded } from '../../dictionary/interfaces/dictionary-embedded.interface';
|
|
3
|
-
import { IClient } from './client.interface';
|
|
4
|
-
import { IRole } from './role.interface';
|
|
5
|
-
|
|
6
|
-
export interface IUserClient {
|
|
7
|
-
client: IClient;
|
|
8
|
-
roles: IRole[];
|
|
9
|
-
subjects: IDictionaryEmbedded[];
|
|
10
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ObjectId, mongo } from 'mongoose';
|
|
2
|
-
import { IPerson } from '../../util/interfaces/person.interface';
|
|
3
|
-
import { IContact } from '../../util/interfaces/contact.interface';
|
|
4
|
-
import { IUserClient } from './user-client.interface';
|
|
5
|
-
import { IRecord } from '../../util/interfaces/record.interface';
|
|
6
|
-
import { IProfInfo } from './prof-info.interface';
|
|
7
|
-
import { ICredentials } from './credentials.interface';
|
|
8
|
-
import { IDictionaryEmbedded } from '../../dictionary/interfaces/dictionary-embedded.interface';
|
|
9
|
-
|
|
10
|
-
export interface IUser {
|
|
11
|
-
_id: mongo.ObjectId;
|
|
12
|
-
person: IPerson;
|
|
13
|
-
contacts: IContact[];
|
|
14
|
-
clients: IUserClient[];
|
|
15
|
-
settings: any;
|
|
16
|
-
record: IRecord;
|
|
17
|
-
profInfo: IProfInfo;
|
|
18
|
-
credentials: ICredentials;
|
|
19
|
-
level: IDictionaryEmbedded;
|
|
20
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Module } from '@nestjs/common';
|
|
2
|
-
import { RedisService } from './services/redis.service';
|
|
3
|
-
import { SessionService } from './services/session.service';
|
|
4
|
-
import { PermissionGuard } from './guards/permission.guard';
|
|
5
|
-
import { CoreModule } from '../core/core.module';
|
|
6
|
-
|
|
7
|
-
@Module({
|
|
8
|
-
imports: [CoreModule],
|
|
9
|
-
controllers: [],
|
|
10
|
-
providers: [RedisService, SessionService, PermissionGuard],
|
|
11
|
-
exports: [RedisService, SessionService, PermissionGuard],
|
|
12
|
-
})
|
|
13
|
-
export class CacheModule {}
|