@tomei/sso 0.60.4-dev.1 → 0.60.4-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/login-history/index.d.ts +1 -0
- package/dist/src/components/login-history/index.js +1 -0
- package/dist/src/components/login-history/index.js.map +1 -1
- package/dist/src/components/login-history/login-history.d.ts +22 -0
- package/dist/src/components/login-history/login-history.js +75 -0
- package/dist/src/components/login-history/login-history.js.map +1 -0
- package/dist/src/components/login-history/login-history.repository.d.ts +2 -2
- package/dist/src/components/login-history/login-history.repository.js.map +1 -1
- package/dist/src/interfaces/login-history-search-attr.interface.d.ts +8 -0
- package/dist/src/interfaces/login-history-search-attr.interface.js +3 -0
- package/dist/src/interfaces/login-history-search-attr.interface.js.map +1 -0
- package/dist/src/interfaces/login-history.interface.d.ts +8 -0
- package/dist/src/interfaces/login-history.interface.js +3 -0
- package/dist/src/interfaces/login-history.interface.js.map +1 -0
- package/dist/src/models/login-history.entity.d.ts +2 -2
- package/dist/src/models/login-history.entity.js +13 -13
- package/dist/src/models/login-history.entity.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/login-history/index.ts +1 -0
- package/src/components/login-history/login-history.repository.ts +4 -4
- package/src/components/login-history/login-history.ts +109 -0
- package/src/interfaces/login-history-search-attr.interface.ts +8 -0
- package/src/interfaces/login-history.interface.ts +8 -0
- package/src/models/login-history.entity.ts +2 -2
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
__exportStar(require("./login-history.repository"), exports);
|
18
|
+
__exportStar(require("./login-history"), exports);
|
18
19
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/login-history/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/login-history/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,kDAAgC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { ObjectBase } from '@tomei/general';
|
2
|
+
import { LoginUser } from '../login-user/login-user';
|
3
|
+
import { ILoginHistorySearchAttr } from '../../interfaces/login-history-search-attr.interface';
|
4
|
+
export declare class LoginHistory extends ObjectBase {
|
5
|
+
ObjectId: string;
|
6
|
+
ObjectName: string;
|
7
|
+
TableName: string;
|
8
|
+
ObjectType: string;
|
9
|
+
HistoryId: number;
|
10
|
+
UserId: number;
|
11
|
+
OriginIP: string;
|
12
|
+
SystemCode: string;
|
13
|
+
LoginStatus: string;
|
14
|
+
private _CreatedAt;
|
15
|
+
private static _Repo;
|
16
|
+
get CreatedAt(): Date;
|
17
|
+
private constructor();
|
18
|
+
static findAll(dbTransaction: any, loginUser: LoginUser, page?: number, rows?: number, search?: ILoginHistorySearchAttr): Promise<{
|
19
|
+
count: number;
|
20
|
+
loginHistory: LoginHistory[];
|
21
|
+
}>;
|
22
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.LoginHistory = void 0;
|
13
|
+
const general_1 = require("@tomei/general");
|
14
|
+
const login_history_repository_1 = require("./login-history.repository");
|
15
|
+
const config_1 = require("@tomei/config");
|
16
|
+
const sequelize_1 = require("sequelize");
|
17
|
+
class LoginHistory extends general_1.ObjectBase {
|
18
|
+
get CreatedAt() {
|
19
|
+
return this._CreatedAt;
|
20
|
+
}
|
21
|
+
constructor(loginHistoryAttr) {
|
22
|
+
super();
|
23
|
+
this.TableName = 'sso_LoginHistory';
|
24
|
+
this.ObjectType = 'Login History';
|
25
|
+
if (loginHistoryAttr) {
|
26
|
+
this.HistoryId = loginHistoryAttr.HistoryId;
|
27
|
+
this.UserId = loginHistoryAttr.UserId;
|
28
|
+
this.OriginIP = loginHistoryAttr === null || loginHistoryAttr === void 0 ? void 0 : loginHistoryAttr.OriginIp;
|
29
|
+
this.SystemCode = loginHistoryAttr === null || loginHistoryAttr === void 0 ? void 0 : loginHistoryAttr.SystemCode;
|
30
|
+
this.LoginStatus = loginHistoryAttr === null || loginHistoryAttr === void 0 ? void 0 : loginHistoryAttr.LoginStatus;
|
31
|
+
this._CreatedAt = loginHistoryAttr.CreatedAt;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
static findAll(dbTransaction, loginUser, page, rows, search) {
|
35
|
+
return __awaiter(this, void 0, void 0, function* () {
|
36
|
+
try {
|
37
|
+
const sc = config_1.ApplicationConfig.getComponentConfigValue('system-code');
|
38
|
+
const isPrivileged = yield loginUser.checkPrivileges(sc, 'LOGIN_HISTORY_REPORT');
|
39
|
+
if (!isPrivileged) {
|
40
|
+
throw new general_1.ClassError('System', 'SystemErrMsg06', 'You do not have permission to list login histories.');
|
41
|
+
}
|
42
|
+
const queryObj = {};
|
43
|
+
const whereObj = {};
|
44
|
+
if (search) {
|
45
|
+
Object.entries(search).forEach(([key, value]) => {
|
46
|
+
if (value !== undefined && value !== null) {
|
47
|
+
if (key === 'DateFrom' || key === 'DateTo') {
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
queryObj[key] = {
|
51
|
+
[sequelize_1.Op.substring]: value,
|
52
|
+
};
|
53
|
+
}
|
54
|
+
});
|
55
|
+
}
|
56
|
+
if (page && rows) {
|
57
|
+
whereObj.offset = (page - 1) * rows;
|
58
|
+
whereObj.limit = rows;
|
59
|
+
}
|
60
|
+
if ((search === null || search === void 0 ? void 0 : search.DateFrom) || (search === null || search === void 0 ? void 0 : search.DateTo)) {
|
61
|
+
queryObj.createdAt = Object.assign(Object.assign({}, ((search === null || search === void 0 ? void 0 : search.DateFrom) && { [sequelize_1.Op.gte]: search.DateFrom })), ((search === null || search === void 0 ? void 0 : search.DateTo) && { [sequelize_1.Op.lte]: search.DateTo }));
|
62
|
+
}
|
63
|
+
const result = yield LoginHistory._Repo.findAllWithPagination(Object.assign(Object.assign({ distinct: true, where: queryObj }, whereObj), { order: [['CreatedAt', 'DESC']], transaction: dbTransaction }));
|
64
|
+
const loginHistory = result.rows.map((data) => new LoginHistory(data));
|
65
|
+
return { count: result.count, loginHistory };
|
66
|
+
}
|
67
|
+
catch (error) {
|
68
|
+
throw error;
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}
|
72
|
+
}
|
73
|
+
exports.LoginHistory = LoginHistory;
|
74
|
+
LoginHistory._Repo = new login_history_repository_1.LoginHistoryRepository();
|
75
|
+
//# sourceMappingURL=login-history.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"login-history.js","sourceRoot":"","sources":["../../../../src/components/login-history/login-history.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
1
|
+
import LoginHistoryModel from '../../models/login-history.entity';
|
2
2
|
import { RepositoryBase, IRepositoryBase } from '@tomei/general';
|
3
|
-
export declare class LoginHistoryRepository extends RepositoryBase<
|
3
|
+
export declare class LoginHistoryRepository extends RepositoryBase<LoginHistoryModel> implements IRepositoryBase<LoginHistoryModel> {
|
4
4
|
constructor();
|
5
5
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"login-history.repository.js","sourceRoot":"","sources":["../../../../src/components/login-history/login-history.repository.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"login-history.repository.js","sourceRoot":"","sources":["../../../../src/components/login-history/login-history.repository.ts"],"names":[],"mappings":";;;AAAA,4EAAkE;AAClE,4CAAiE;AAEjE,MAAa,sBACX,SAAQ,wBAAiC;IAGzC;QACE,KAAK,CAAC,8BAAiB,CAAC,CAAC;IAC3B,CAAC;CACF;AAPD,wDAOC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"login-history-search-attr.interface.js","sourceRoot":"","sources":["../../../src/interfaces/login-history-search-attr.interface.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"login-history.interface.js","sourceRoot":"","sources":["../../../src/interfaces/login-history.interface.ts"],"names":[],"mappings":""}
|
@@ -2,10 +2,10 @@ import { Model } from 'sequelize-typescript';
|
|
2
2
|
import User from './user.entity';
|
3
3
|
import SystemModel from './system.entity';
|
4
4
|
import { LoginStatusEnum } from '../enum/login-status.enum';
|
5
|
-
export default class
|
5
|
+
export default class LoginHistoryModel extends Model {
|
6
6
|
HistoryId: number;
|
7
7
|
UserId: number;
|
8
|
-
SystemCode:
|
8
|
+
SystemCode: string;
|
9
9
|
LoginStatus: LoginStatusEnum;
|
10
10
|
OriginIp: string;
|
11
11
|
CreatedAt: Date;
|
@@ -13,7 +13,7 @@ const sequelize_typescript_1 = require("sequelize-typescript");
|
|
13
13
|
const user_entity_1 = require("./user.entity");
|
14
14
|
const system_entity_1 = require("./system.entity");
|
15
15
|
const login_status_enum_1 = require("../enum/login-status.enum");
|
16
|
-
let
|
16
|
+
let LoginHistoryModel = class LoginHistoryModel extends sequelize_typescript_1.Model {
|
17
17
|
};
|
18
18
|
__decorate([
|
19
19
|
(0, sequelize_typescript_1.Column)({
|
@@ -23,7 +23,7 @@ __decorate([
|
|
23
23
|
type: sequelize_typescript_1.DataType.INTEGER,
|
24
24
|
}),
|
25
25
|
__metadata("design:type", Number)
|
26
|
-
],
|
26
|
+
], LoginHistoryModel.prototype, "HistoryId", void 0);
|
27
27
|
__decorate([
|
28
28
|
(0, sequelize_typescript_1.ForeignKey)(() => user_entity_1.default),
|
29
29
|
(0, sequelize_typescript_1.Column)({
|
@@ -31,48 +31,48 @@ __decorate([
|
|
31
31
|
type: sequelize_typescript_1.DataType.INTEGER,
|
32
32
|
}),
|
33
33
|
__metadata("design:type", Number)
|
34
|
-
],
|
34
|
+
], LoginHistoryModel.prototype, "UserId", void 0);
|
35
35
|
__decorate([
|
36
36
|
(0, sequelize_typescript_1.ForeignKey)(() => system_entity_1.default),
|
37
37
|
(0, sequelize_typescript_1.Column)({
|
38
38
|
allowNull: true,
|
39
39
|
type: sequelize_typescript_1.DataType.STRING(10),
|
40
40
|
}),
|
41
|
-
__metadata("design:type",
|
42
|
-
],
|
41
|
+
__metadata("design:type", String)
|
42
|
+
], LoginHistoryModel.prototype, "SystemCode", void 0);
|
43
43
|
__decorate([
|
44
44
|
(0, sequelize_typescript_1.Column)({
|
45
45
|
allowNull: true,
|
46
46
|
type: sequelize_typescript_1.DataType.STRING(191),
|
47
47
|
}),
|
48
48
|
__metadata("design:type", String)
|
49
|
-
],
|
49
|
+
], LoginHistoryModel.prototype, "LoginStatus", void 0);
|
50
50
|
__decorate([
|
51
51
|
(0, sequelize_typescript_1.Column)({
|
52
52
|
allowNull: true,
|
53
53
|
type: sequelize_typescript_1.DataType.STRING(191),
|
54
54
|
}),
|
55
55
|
__metadata("design:type", String)
|
56
|
-
],
|
56
|
+
], LoginHistoryModel.prototype, "OriginIp", void 0);
|
57
57
|
__decorate([
|
58
58
|
sequelize_typescript_1.CreatedAt,
|
59
59
|
__metadata("design:type", Date)
|
60
|
-
],
|
60
|
+
], LoginHistoryModel.prototype, "CreatedAt", void 0);
|
61
61
|
__decorate([
|
62
62
|
(0, sequelize_typescript_1.BelongsTo)(() => user_entity_1.default),
|
63
63
|
__metadata("design:type", user_entity_1.default)
|
64
|
-
],
|
64
|
+
], LoginHistoryModel.prototype, "User", void 0);
|
65
65
|
__decorate([
|
66
66
|
(0, sequelize_typescript_1.BelongsTo)(() => system_entity_1.default),
|
67
67
|
__metadata("design:type", system_entity_1.default)
|
68
|
-
],
|
69
|
-
|
68
|
+
], LoginHistoryModel.prototype, "System", void 0);
|
69
|
+
LoginHistoryModel = __decorate([
|
70
70
|
(0, sequelize_typescript_1.Table)({
|
71
71
|
tableName: 'sso_LoginHistory',
|
72
72
|
timestamps: true,
|
73
73
|
createdAt: 'CreatedAt',
|
74
74
|
updatedAt: false,
|
75
75
|
})
|
76
|
-
],
|
77
|
-
exports.default =
|
76
|
+
], LoginHistoryModel);
|
77
|
+
exports.default = LoginHistoryModel;
|
78
78
|
//# sourceMappingURL=login-history.entity.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"login-history.entity.js","sourceRoot":"","sources":["../../../src/models/login-history.entity.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAQ8B;AAC9B,+CAAiC;AACjC,mDAA0C;AAC1C,iEAA4D;AAQ7C,IAAM,
|
1
|
+
{"version":3,"file":"login-history.entity.js","sourceRoot":"","sources":["../../../src/models/login-history.entity.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAQ8B;AAC9B,+CAAiC;AACjC,mDAA0C;AAC1C,iEAA4D;AAQ7C,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,4BAAK;CA2CnD,CAAA;AApCC;IANC,IAAA,6BAAM,EAAC;QACN,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,IAAI;QACnB,IAAI,EAAE,+BAAQ,CAAC,OAAO;KACvB,CAAC;;oDACgB;AAOlB;IALC,IAAA,iCAAU,EAAC,GAAG,EAAE,CAAC,qBAAI,CAAC;IACtB,IAAA,6BAAM,EAAC;QACN,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,+BAAQ,CAAC,OAAO;KACvB,CAAC;;iDACa;AAOf;IALC,IAAA,iCAAU,EAAC,GAAG,EAAE,CAAC,uBAAW,CAAC;IAC7B,IAAA,6BAAM,EAAC;QACN,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,+BAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;KAC1B,CAAC;;qDACiB;AAMnB;IAJC,IAAA,6BAAM,EAAC;QACN,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,+BAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;KAC3B,CAAC;;sDAC2B;AAM7B;IAJC,IAAA,6BAAM,EAAC;QACN,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,+BAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;KAC3B,CAAC;;mDACe;AAGjB;IADC,gCAAS;8BACC,IAAI;oDAAC;AAGhB;IADC,IAAA,gCAAS,EAAC,GAAG,EAAE,CAAC,qBAAI,CAAC;8BAChB,qBAAI;+CAAC;AAGX;IADC,IAAA,gCAAS,EAAC,GAAG,EAAE,CAAC,uBAAW,CAAC;8BACrB,uBAAW;iDAAC;AA1CD,iBAAiB;IANrC,IAAA,4BAAK,EAAC;QACL,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,KAAK;KACjB,CAAC;GACmB,iBAAiB,CA2CrC;kBA3CoB,iBAAiB"}
|