prow-authority 3.6.3
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/.claude/settings.local.json +11 -0
- package/.dockerignore +11 -0
- package/.github/workflows/_deploy.yml +191 -0
- package/.github/workflows/deploy-dev.yml +30 -0
- package/.github/workflows/deploy-prod.yml +34 -0
- package/CLAUDE.md +114 -0
- package/Dockerfile +61 -0
- package/Dockerfile.dev +24 -0
- package/README.md +1 -0
- package/package.json +61 -0
- package/src/App.ts +40 -0
- package/src/helpers/api-error.ts +21 -0
- package/src/helpers/authority.ts +216 -0
- package/src/helpers/config.ts +4 -0
- package/src/helpers/holded.ts +105 -0
- package/src/helpers/mysql.ts +15 -0
- package/src/helpers/notifications.ts +55 -0
- package/src/helpers/random.ts +18 -0
- package/src/helpers/s3.ts +43 -0
- package/src/helpers/stripe.ts +8 -0
- package/src/index.ts +47 -0
- package/src/v1/common-types.ts +12 -0
- package/src/v1/controllers/admin/accounting-seat-controller.ts +148 -0
- package/src/v1/controllers/admin/billing-cycle-controller.ts +171 -0
- package/src/v1/controllers/admin/invoice-controller.ts +222 -0
- package/src/v1/controllers/admin/license-controller.ts +190 -0
- package/src/v1/controllers/admin/license-limit-controller.ts +160 -0
- package/src/v1/controllers/admin/notification-controller.ts +115 -0
- package/src/v1/controllers/admin/organization-controller.ts +210 -0
- package/src/v1/controllers/admin/organization-license-controller.ts +224 -0
- package/src/v1/controllers/admin/organization-license-limit-controller.ts +196 -0
- package/src/v1/controllers/admin/organization-usage-controller.ts +167 -0
- package/src/v1/controllers/admin/payment-method-controller.ts +173 -0
- package/src/v1/controllers/admin/policy-controller.ts +138 -0
- package/src/v1/controllers/admin/policy-version-controller.ts +143 -0
- package/src/v1/controllers/admin/schedule-controller.ts +181 -0
- package/src/v1/controllers/admin/service-controller.ts +206 -0
- package/src/v1/controllers/admin/service-notification-controller.ts +166 -0
- package/src/v1/controllers/admin/user-controller.ts +282 -0
- package/src/v1/controllers/admin/user-organization-controller.ts +172 -0
- package/src/v1/controllers/admin/user-policy-controller.ts +164 -0
- package/src/v1/controllers/auth/@deprecated oauth-controller.ts +191 -0
- package/src/v1/controllers/auth/identity-token-controller.ts +286 -0
- package/src/v1/controllers/auth/organization-token-controller.ts +277 -0
- package/src/v1/controllers/auth/temp-code-controller.ts +60 -0
- package/src/v1/controllers/billing/billing-controller.ts +805 -0
- package/src/v1/controllers/organizations/public-organization-controller.ts +1796 -0
- package/src/v1/controllers/policies/public-policy-controller.ts +68 -0
- package/src/v1/controllers/services/public-service-controller.ts +177 -0
- package/src/v1/controllers/services/service-controller.ts +474 -0
- package/src/v1/controllers/users/public-user-controller.ts +471 -0
- package/src/v1/daos/@deprecated auth-dao.ts +173 -0
- package/src/v1/daos/accounting-seat-dao.ts +111 -0
- package/src/v1/daos/billing-cycle-dao.ts +107 -0
- package/src/v1/daos/invoice-dao.ts +131 -0
- package/src/v1/daos/license-dao.ts +152 -0
- package/src/v1/daos/license-limit-dao.ts +120 -0
- package/src/v1/daos/organization-dao.ts +109 -0
- package/src/v1/daos/organization-license-dao.ts +117 -0
- package/src/v1/daos/organization-license-limit-dao.ts +157 -0
- package/src/v1/daos/organization-usage-dao.ts +115 -0
- package/src/v1/daos/payment-method-dao.ts +110 -0
- package/src/v1/daos/policy-dao.ts +105 -0
- package/src/v1/daos/policy-version-dao.ts +112 -0
- package/src/v1/daos/redis-dao.ts +38 -0
- package/src/v1/daos/schema.sql +462 -0
- package/src/v1/daos/service-dao.ts +118 -0
- package/src/v1/daos/service-notification-dao.ts +120 -0
- package/src/v1/daos/user-dao.ts +127 -0
- package/src/v1/daos/user-organization-dao.ts +123 -0
- package/src/v1/daos/user-policy-dao.ts +109 -0
- package/src/v1/middlewares/auth/identity-token-middleware.ts +51 -0
- package/src/v1/middlewares/auth/organization-token-middleware.ts +73 -0
- package/src/v1/middlewares/auth/service-token-middleware.ts +167 -0
- package/src/v1/middlewares/authority-middleware.ts +97 -0
- package/src/v1/middlewares/organizations/organization-middleware.ts +94 -0
- package/src/v1/middlewares/static/static-middleware.ts +41 -0
- package/src/v1/middlewares/users/user-middleware.ts +41 -0
- package/src/v1/routes/admin/accounting-seat-router.ts +89 -0
- package/src/v1/routes/admin/admin-router.ts +61 -0
- package/src/v1/routes/admin/billing-cycle-router.ts +89 -0
- package/src/v1/routes/admin/invoice-router.ts +89 -0
- package/src/v1/routes/admin/license-limit-router.ts +89 -0
- package/src/v1/routes/admin/license-router.ts +89 -0
- package/src/v1/routes/admin/notification-router.ts +61 -0
- package/src/v1/routes/admin/organization-license-limit-router.ts +89 -0
- package/src/v1/routes/admin/organization-license-router.ts +89 -0
- package/src/v1/routes/admin/organization-router.ts +89 -0
- package/src/v1/routes/admin/payment-method-router.ts +89 -0
- package/src/v1/routes/admin/policy-router.ts +89 -0
- package/src/v1/routes/admin/policy-version-router.ts +89 -0
- package/src/v1/routes/admin/schedule-router.ts +75 -0
- package/src/v1/routes/admin/service-notification-router.ts +98 -0
- package/src/v1/routes/admin/service-router.ts +89 -0
- package/src/v1/routes/admin/user-organization-router.ts +89 -0
- package/src/v1/routes/admin/user-policy-router.ts +89 -0
- package/src/v1/routes/admin/user-router.ts +89 -0
- package/src/v1/routes/auth/@deprecated auth-router.ts +199 -0
- package/src/v1/routes/auth/identity-token-router.ts +147 -0
- package/src/v1/routes/auth/organization-token-router.ts +70 -0
- package/src/v1/routes/billing/billing-router.ts +227 -0
- package/src/v1/routes/organizations/invoices-router.ts +48 -0
- package/src/v1/routes/organizations/payments-router.ts +104 -0
- package/src/v1/routes/organizations/public-organization-router.ts +319 -0
- package/src/v1/routes/organizations/users-router.ts +139 -0
- package/src/v1/routes/policies/public-policy-router.ts +50 -0
- package/src/v1/routes/services/public-service-router.ts +89 -0
- package/src/v1/routes/services/service-router.ts +197 -0
- package/src/v1/routes/users/public-user-router.ts +230 -0
- package/src/v1/routes/v1-router.ts +50 -0
- package/src/v1/schemas/admin/accounting-seat-schemas.ts +22 -0
- package/src/v1/schemas/admin/billing-cycle-schemas.ts +20 -0
- package/src/v1/schemas/admin/invoice-schemas.ts +41 -0
- package/src/v1/schemas/admin/license-limit-schemas.ts +25 -0
- package/src/v1/schemas/admin/license-schemas.ts +30 -0
- package/src/v1/schemas/admin/organization-license-limit-schemas.ts +29 -0
- package/src/v1/schemas/admin/organization-license-schemas.ts +43 -0
- package/src/v1/schemas/admin/organization-schemas.ts +67 -0
- package/src/v1/schemas/admin/organization-usage-schemas.ts +15 -0
- package/src/v1/schemas/admin/payment-method-schemas.ts +40 -0
- package/src/v1/schemas/admin/policy-schemas.ts +31 -0
- package/src/v1/schemas/admin/service-notification-schemas.ts +23 -0
- package/src/v1/schemas/admin/service-schemas.ts +56 -0
- package/src/v1/schemas/admin/user-organization-schemas.ts +24 -0
- package/src/v1/schemas/admin/user-policy-schemas.ts +17 -0
- package/src/v1/schemas/admin/user-schemas.ts +52 -0
- package/src/v1/schemas/auth/auth-schemas.ts +55 -0
- package/src/v1/schemas/billing/billing-schemas.ts +32 -0
- package/src/v1/schemas/organizations/public-organization-schemas.ts +77 -0
- package/src/v1/schemas/payments/payment-method-schemas.ts +0 -0
- package/src/v1/schemas/services/public-service-schemas.ts +5 -0
- package/src/v1/schemas/services/service-schemas.ts +27 -0
- package/src/v1/schemas/users/public-user-schemas.ts +73 -0
- package/src/v1/types/admin/accounting-seat-types.ts +16 -0
- package/src/v1/types/admin/billing-cycle-types.ts +14 -0
- package/src/v1/types/admin/invoice-types.ts +39 -0
- package/src/v1/types/admin/license-limit-types.ts +16 -0
- package/src/v1/types/admin/license-types.ts +29 -0
- package/src/v1/types/admin/organization-license-limit-types.ts +13 -0
- package/src/v1/types/admin/organization-license-types.ts +21 -0
- package/src/v1/types/admin/organization-types.ts +60 -0
- package/src/v1/types/admin/organization-usage-types.ts +17 -0
- package/src/v1/types/admin/payment-method-types.ts +30 -0
- package/src/v1/types/admin/policy-types.ts +9 -0
- package/src/v1/types/admin/policy-version-types.ts +12 -0
- package/src/v1/types/admin/service-notification-types.ts +20 -0
- package/src/v1/types/admin/service-types.ts +36 -0
- package/src/v1/types/admin/user-organization-types.ts +31 -0
- package/src/v1/types/admin/user-types.ts +44 -0
- package/src/v1/types/auth/@deprecated auth-types.ts +26 -0
- package/src/v1/types/auth/common-types.ts +7 -0
- package/src/v1/types/auth/confirmation-types.ts +5 -0
- package/src/v1/types/auth/identity-token-types.ts +8 -0
- package/src/v1/types/auth/organization-token-types.ts +23 -0
- package/src/v1/types/auth/otp-types.ts +12 -0
- package/src/v1/types/billing/billing-types.ts +37 -0
- package/src/v1/types/billing/ue-types.ts +29 -0
- package/src/v1/types/organizations/public-organization-types.ts +76 -0
- package/src/v1/types/policies/public-policy-types.ts +7 -0
- package/src/v1/types/services/public-service-types.ts +20 -0
- package/src/v1/types/services/service-types.ts +43 -0
- package/src/v1/types/users/public-user-types.ts +15 -0
- package/src/v1/types/users/user-policy-types.ts +11 -0
- package/static/error.html +55 -0
- package/static/grant.html +117 -0
- package/static/login.html +54 -0
- package/static/oauth-client-logo.webp +0 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
|
|
2
|
+
import mySql from '../../helpers/mysql';
|
|
3
|
+
import { DBRecord } from '../types/admin/service-types';
|
|
4
|
+
import { Modifiers } from '../common-types';
|
|
5
|
+
|
|
6
|
+
class ServiceDao {
|
|
7
|
+
public readonly get = async (
|
|
8
|
+
params: Pick<DBRecord, `id`>
|
|
9
|
+
): Promise<DBRecord[]> => {
|
|
10
|
+
try {
|
|
11
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
12
|
+
select: `*`,
|
|
13
|
+
from: `service`,
|
|
14
|
+
where: params,
|
|
15
|
+
});
|
|
16
|
+
const response = await mySql.promiseQuery(q, p);
|
|
17
|
+
return response;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw e;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
|
|
24
|
+
try {
|
|
25
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
26
|
+
select: `*`,
|
|
27
|
+
from: `service`,
|
|
28
|
+
where: params,
|
|
29
|
+
...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
|
|
30
|
+
...modifiers.limit && {
|
|
31
|
+
limit: {
|
|
32
|
+
count: parseInt(modifiers.limit.count, 10),
|
|
33
|
+
...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const response = await mySql.promiseQuery(q, p);
|
|
38
|
+
return response;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
public readonly add = async (
|
|
45
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
46
|
+
): Promise<{ insertId: number }> => {
|
|
47
|
+
try {
|
|
48
|
+
const q = `insert into service (uuid, token, properties, preferences, created_date, modified_date, enabled, metadata, internal) values (?,?,?,?,?,?,?,?,?)`;
|
|
49
|
+
const p = [
|
|
50
|
+
data.uuid,
|
|
51
|
+
data.token,
|
|
52
|
+
JSON.stringify(data.properties || {}),
|
|
53
|
+
JSON.stringify(data.preferences || {}),
|
|
54
|
+
new Date(),
|
|
55
|
+
new Date(),
|
|
56
|
+
data.enabled,
|
|
57
|
+
JSON.stringify(data.metadata || {}),
|
|
58
|
+
JSON.stringify(data.internal || {}),
|
|
59
|
+
];
|
|
60
|
+
const response = await mySql.promiseQuery(q, p);
|
|
61
|
+
return response;
|
|
62
|
+
} catch (e) {
|
|
63
|
+
throw e;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
public readonly update = async (
|
|
68
|
+
params: Pick<DBRecord, `id`>,
|
|
69
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
70
|
+
): Promise<{ affectedRows: number }> => {
|
|
71
|
+
try {
|
|
72
|
+
const q = `update service set
|
|
73
|
+
uuid = ?,
|
|
74
|
+
token = ?,
|
|
75
|
+
properties = ?,
|
|
76
|
+
preferences = ?,
|
|
77
|
+
modified_date = ?,
|
|
78
|
+
enabled = ?,
|
|
79
|
+
metadata = ?,
|
|
80
|
+
internal = ?
|
|
81
|
+
where id = ?`;
|
|
82
|
+
const p = [
|
|
83
|
+
data.uuid,
|
|
84
|
+
data.token,
|
|
85
|
+
JSON.stringify(data.properties || {}),
|
|
86
|
+
JSON.stringify(data.preferences || {}),
|
|
87
|
+
new Date(),
|
|
88
|
+
data.enabled,
|
|
89
|
+
JSON.stringify(data.metadata || {}),
|
|
90
|
+
JSON.stringify(data.internal || {}),
|
|
91
|
+
params.id,
|
|
92
|
+
];
|
|
93
|
+
const response = await mySql.promiseQuery(q, p);
|
|
94
|
+
return response;
|
|
95
|
+
} catch (e) {
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
public readonly delete = async (
|
|
101
|
+
params: Pick<DBRecord, `id`>
|
|
102
|
+
): Promise<{ affectedRows: number }> => {
|
|
103
|
+
try {
|
|
104
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
105
|
+
delete: null,
|
|
106
|
+
from: `service`,
|
|
107
|
+
where: params,
|
|
108
|
+
});
|
|
109
|
+
const response = await mySql.promiseQuery(q, p);
|
|
110
|
+
return response;
|
|
111
|
+
} catch (e) {
|
|
112
|
+
throw e;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const serviceDao = new ServiceDao();
|
|
118
|
+
export default serviceDao;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
|
|
2
|
+
import mySql from '../../helpers/mysql';
|
|
3
|
+
import { DBRecord } from '../types/admin/service-notification-types';
|
|
4
|
+
import { Modifiers } from '../common-types';
|
|
5
|
+
|
|
6
|
+
class ServiceNotificationDao {
|
|
7
|
+
public readonly get = async (
|
|
8
|
+
params: Pick<DBRecord, `id`>
|
|
9
|
+
): Promise<DBRecord[]> => {
|
|
10
|
+
try {
|
|
11
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
12
|
+
select: `*`,
|
|
13
|
+
from: `service_notifications`,
|
|
14
|
+
where: params,
|
|
15
|
+
});
|
|
16
|
+
const response = await mySql.promiseQuery(q, p);
|
|
17
|
+
return response;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw e;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
|
|
24
|
+
try {
|
|
25
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
26
|
+
select: `*`,
|
|
27
|
+
from: `service_notifications`,
|
|
28
|
+
where: params,
|
|
29
|
+
...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
|
|
30
|
+
...modifiers.limit && {
|
|
31
|
+
limit: {
|
|
32
|
+
count: parseInt(modifiers.limit.count, 10),
|
|
33
|
+
...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const response = await mySql.promiseQuery(q, p);
|
|
38
|
+
return response;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
public readonly add = async (
|
|
46
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
47
|
+
): Promise<{ insertId: number }> => {
|
|
48
|
+
try {
|
|
49
|
+
const q = `insert into service_notifications (service, event, template, scope, created_date, modified_date, \`default\`, enabled, metadata) values (?,?,?,?,?,?,?,?,?)`;
|
|
50
|
+
const p = [
|
|
51
|
+
data.service,
|
|
52
|
+
data.event,
|
|
53
|
+
data.template,
|
|
54
|
+
JSON.stringify(data.scope || {}),
|
|
55
|
+
new Date(),
|
|
56
|
+
new Date(),
|
|
57
|
+
data.default,
|
|
58
|
+
data.enabled,
|
|
59
|
+
JSON.stringify(data.metadata || {}),
|
|
60
|
+
];
|
|
61
|
+
const response = await mySql.promiseQuery(q, p);
|
|
62
|
+
return response;
|
|
63
|
+
} catch (e) {
|
|
64
|
+
throw e;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
public readonly update = async (
|
|
70
|
+
params: Pick<DBRecord, `id`>,
|
|
71
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
72
|
+
): Promise<{ affectedRows: number }> => {
|
|
73
|
+
try {
|
|
74
|
+
const q = `update service_notifications set
|
|
75
|
+
service = ?,
|
|
76
|
+
event = ?,
|
|
77
|
+
template = ?,
|
|
78
|
+
scope = ?,
|
|
79
|
+
modified_date = ?,
|
|
80
|
+
\`default\` = ?,
|
|
81
|
+
enabled = ?,
|
|
82
|
+
metadata = ?
|
|
83
|
+
where id = ?`;
|
|
84
|
+
const p = [
|
|
85
|
+
data.service,
|
|
86
|
+
data.event,
|
|
87
|
+
data.template,
|
|
88
|
+
JSON.stringify(data.scope || {}),
|
|
89
|
+
new Date(),
|
|
90
|
+
data.default,
|
|
91
|
+
data.enabled,
|
|
92
|
+
JSON.stringify(data.metadata || {}),
|
|
93
|
+
params.id,
|
|
94
|
+
];
|
|
95
|
+
const response = await mySql.promiseQuery(q, p);
|
|
96
|
+
return response;
|
|
97
|
+
} catch (e) {
|
|
98
|
+
throw e;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
public readonly delete = async (
|
|
103
|
+
params: Pick<DBRecord, `id`>
|
|
104
|
+
): Promise<{ affectedRows: number }> => {
|
|
105
|
+
try {
|
|
106
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
107
|
+
delete: null,
|
|
108
|
+
from: `service_notifications`,
|
|
109
|
+
where: params,
|
|
110
|
+
});
|
|
111
|
+
const response = await mySql.promiseQuery(q, p);
|
|
112
|
+
return response;
|
|
113
|
+
} catch (e) {
|
|
114
|
+
throw e;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const serviceNotificationDao = new ServiceNotificationDao();
|
|
120
|
+
export default serviceNotificationDao;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
|
|
2
|
+
import mySql from '../../helpers/mysql';
|
|
3
|
+
import { DBRecord } from '../types/admin/user-types';
|
|
4
|
+
import { Modifiers } from '../common-types';
|
|
5
|
+
|
|
6
|
+
class UserDao {
|
|
7
|
+
public readonly get = async (
|
|
8
|
+
params: Pick<DBRecord, `id`>
|
|
9
|
+
): Promise<DBRecord[]> => {
|
|
10
|
+
try {
|
|
11
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
12
|
+
select: `*`,
|
|
13
|
+
from: `user`,
|
|
14
|
+
where: params,
|
|
15
|
+
});
|
|
16
|
+
const response = await mySql.promiseQuery(q, p);
|
|
17
|
+
return response;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw e;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
|
|
24
|
+
try {
|
|
25
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
26
|
+
select: `*`,
|
|
27
|
+
from: `user`,
|
|
28
|
+
where: params,
|
|
29
|
+
...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
|
|
30
|
+
...modifiers.limit && {
|
|
31
|
+
limit: {
|
|
32
|
+
count: parseInt(modifiers.limit.count, 10),
|
|
33
|
+
...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const response = await mySql.promiseQuery(q, p);
|
|
38
|
+
return response;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
public readonly add = async (
|
|
45
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
46
|
+
): Promise<{ insertId: number }> => {
|
|
47
|
+
try {
|
|
48
|
+
const q = `insert into \`user\` (uuid, email, password, properties, preferences, utm, referrer, omnipotent, created_date, modified_date, status, metadata) values (?,?,?,?,?,?,?,?,?,?,?,?)`;
|
|
49
|
+
const p = [
|
|
50
|
+
data.uuid,
|
|
51
|
+
data.email,
|
|
52
|
+
data.password,
|
|
53
|
+
JSON.stringify(data.properties || {}),
|
|
54
|
+
JSON.stringify(data.preferences || {}),
|
|
55
|
+
JSON.stringify(data.utm || {}),
|
|
56
|
+
data.referrer,
|
|
57
|
+
data.omnipotent,
|
|
58
|
+
new Date(),
|
|
59
|
+
new Date(),
|
|
60
|
+
data.status,
|
|
61
|
+
JSON.stringify(data.metadata || {}),
|
|
62
|
+
];
|
|
63
|
+
const response = await mySql.promiseQuery(q, p);
|
|
64
|
+
return response;
|
|
65
|
+
} catch (e) {
|
|
66
|
+
throw e;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
public readonly update = async (
|
|
71
|
+
params: Pick<DBRecord, `id`>,
|
|
72
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
73
|
+
): Promise<{ affectedRows: number }> => {
|
|
74
|
+
try {
|
|
75
|
+
const q = `update \`user\` set
|
|
76
|
+
uuid = ?,
|
|
77
|
+
email = ?,
|
|
78
|
+
password = ?,
|
|
79
|
+
properties = ?,
|
|
80
|
+
preferences = ?,
|
|
81
|
+
utm = ?,
|
|
82
|
+
referrer = ?,
|
|
83
|
+
omnipotent = ?,
|
|
84
|
+
modified_date = ?,
|
|
85
|
+
status = ?,
|
|
86
|
+
metadata = ?
|
|
87
|
+
where id = ?`;
|
|
88
|
+
const p = [
|
|
89
|
+
data.uuid,
|
|
90
|
+
data.email,
|
|
91
|
+
data.password,
|
|
92
|
+
JSON.stringify(data.properties || {}),
|
|
93
|
+
JSON.stringify(data.preferences || {}),
|
|
94
|
+
JSON.stringify(data.utm || {}),
|
|
95
|
+
data.referrer,
|
|
96
|
+
data.omnipotent,
|
|
97
|
+
new Date(),
|
|
98
|
+
data.status,
|
|
99
|
+
JSON.stringify(data.metadata || {}),
|
|
100
|
+
params.id,
|
|
101
|
+
];
|
|
102
|
+
const response = await mySql.promiseQuery(q, p);
|
|
103
|
+
return response;
|
|
104
|
+
} catch (e) {
|
|
105
|
+
throw e;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
public readonly delete = async (
|
|
110
|
+
params: Pick<DBRecord, `id`>
|
|
111
|
+
): Promise<{ affectedRows: number }> => {
|
|
112
|
+
try {
|
|
113
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
114
|
+
delete: null,
|
|
115
|
+
from: `user`,
|
|
116
|
+
where: params,
|
|
117
|
+
});
|
|
118
|
+
const response = await mySql.promiseQuery(q, p);
|
|
119
|
+
return response;
|
|
120
|
+
} catch (e) {
|
|
121
|
+
throw e;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const userDao = new UserDao();
|
|
127
|
+
export default userDao;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
|
|
2
|
+
import mySql from '../../helpers/mysql';
|
|
3
|
+
import { DBRecord } from '../types/admin/user-organization-types';
|
|
4
|
+
import { Modifiers } from '../common-types';
|
|
5
|
+
|
|
6
|
+
class UserOrganizationDao {
|
|
7
|
+
public readonly get = async (
|
|
8
|
+
params: Pick<DBRecord, `id`>
|
|
9
|
+
): Promise<DBRecord[]> => {
|
|
10
|
+
try {
|
|
11
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
12
|
+
select: `*`,
|
|
13
|
+
from: `user_organization`,
|
|
14
|
+
where: params,
|
|
15
|
+
});
|
|
16
|
+
const response = await mySql.promiseQuery(q, p);
|
|
17
|
+
return response;
|
|
18
|
+
} catch (e) { throw e; }
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
|
|
22
|
+
try {
|
|
23
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
24
|
+
select: `*`,
|
|
25
|
+
from: `user_organization`,
|
|
26
|
+
where: params,
|
|
27
|
+
...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
|
|
28
|
+
...modifiers.limit && {
|
|
29
|
+
limit: {
|
|
30
|
+
count: parseInt(modifiers.limit.count, 10),
|
|
31
|
+
...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
const response = await mySql.promiseQuery(q, p);
|
|
36
|
+
return response;
|
|
37
|
+
} catch (e) { throw e; }
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
public readonly count = async (params: Where<DBRecord>): Promise<{ count: number }[]> => {
|
|
41
|
+
try {
|
|
42
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
43
|
+
count: `id`,
|
|
44
|
+
from: `user_organization`,
|
|
45
|
+
where: params,
|
|
46
|
+
});
|
|
47
|
+
const response = await mySql.promiseQuery(q, p);
|
|
48
|
+
return response;
|
|
49
|
+
} catch (e) { throw e; }
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
public readonly add = async (
|
|
53
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
54
|
+
): Promise<{ insertId: number }> => {
|
|
55
|
+
try {
|
|
56
|
+
const q = `insert into user_organization (\`user\`, organization, role, invite, invited_by, preferences, created_date, modified_date, enabled, metadata) values (?,?,?,?,?,?,?,?,?,?)`;
|
|
57
|
+
const p = [
|
|
58
|
+
data.user,
|
|
59
|
+
data.organization,
|
|
60
|
+
data.role,
|
|
61
|
+
data.invite,
|
|
62
|
+
data.invited_by,
|
|
63
|
+
JSON.stringify(data.preferences || {}),
|
|
64
|
+
new Date(),
|
|
65
|
+
new Date(),
|
|
66
|
+
data.enabled,
|
|
67
|
+
JSON.stringify(data.metadata || {}),
|
|
68
|
+
];
|
|
69
|
+
const response = await mySql.promiseQuery(q, p);
|
|
70
|
+
return response;
|
|
71
|
+
} catch (e) { throw e; }
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
public readonly update = async (
|
|
75
|
+
params: Pick<DBRecord, `id`>,
|
|
76
|
+
data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
|
|
77
|
+
): Promise<{ affectedRows: number }> => {
|
|
78
|
+
try {
|
|
79
|
+
const q = `update user_organization set
|
|
80
|
+
\`user\` = ?,
|
|
81
|
+
organization = ?,
|
|
82
|
+
role = ?,
|
|
83
|
+
invite = ?,
|
|
84
|
+
invited_by = ?,
|
|
85
|
+
preferences = ?,
|
|
86
|
+
modified_date = ?,
|
|
87
|
+
enabled = ?,
|
|
88
|
+
metadata = ?
|
|
89
|
+
where id = ?`;
|
|
90
|
+
const p = [
|
|
91
|
+
data.user,
|
|
92
|
+
data.organization,
|
|
93
|
+
data.role,
|
|
94
|
+
data.invite,
|
|
95
|
+
data.invited_by,
|
|
96
|
+
JSON.stringify(data.preferences || {}),
|
|
97
|
+
new Date(),
|
|
98
|
+
data.enabled,
|
|
99
|
+
JSON.stringify(data.metadata || {}),
|
|
100
|
+
params.id,
|
|
101
|
+
];
|
|
102
|
+
const response = await mySql.promiseQuery(q, p);
|
|
103
|
+
return response;
|
|
104
|
+
} catch (e) { throw e; }
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
public readonly delete = async (
|
|
108
|
+
params: Pick<DBRecord, `id`>
|
|
109
|
+
): Promise<{ affectedRows: number }> => {
|
|
110
|
+
try {
|
|
111
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
112
|
+
delete: null,
|
|
113
|
+
from: `user_organization`,
|
|
114
|
+
where: params,
|
|
115
|
+
});
|
|
116
|
+
const response = await mySql.promiseQuery(q, p);
|
|
117
|
+
return response;
|
|
118
|
+
} catch (e) { throw e; }
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const userOrganizationDao = new UserOrganizationDao();
|
|
123
|
+
export default userOrganizationDao;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
|
|
2
|
+
import mySql from '../../helpers/mysql';
|
|
3
|
+
import { DBRecord } from '../types/users/user-policy-types';
|
|
4
|
+
import { Modifiers } from '../common-types';
|
|
5
|
+
|
|
6
|
+
class UserPolicyDao {
|
|
7
|
+
public readonly get = async (
|
|
8
|
+
params: Pick<DBRecord, 'id'>
|
|
9
|
+
): Promise<DBRecord[]> => {
|
|
10
|
+
try {
|
|
11
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
12
|
+
select: `*`,
|
|
13
|
+
from: `user_policy`,
|
|
14
|
+
where: params,
|
|
15
|
+
});
|
|
16
|
+
const response = await mySql.promiseQuery(q, p);
|
|
17
|
+
return response;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw e;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
public readonly list = async (params?: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
|
|
24
|
+
try {
|
|
25
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
26
|
+
select: `*`,
|
|
27
|
+
from: `user_policy`,
|
|
28
|
+
where: params,
|
|
29
|
+
...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
|
|
30
|
+
...modifiers.limit && {
|
|
31
|
+
limit: {
|
|
32
|
+
count: parseInt(modifiers.limit.count, 10),
|
|
33
|
+
...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const response = await mySql.promiseQuery(q, p);
|
|
38
|
+
return response;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
public readonly add = async (
|
|
45
|
+
data: Omit<DBRecord, 'id' | 'informed_date'>
|
|
46
|
+
): Promise<{ insertId: number }> => {
|
|
47
|
+
try {
|
|
48
|
+
const q = `insert into user_policy (user, policy, version, metadata, internal, informed_date) values (?,?,?,?,?,?)`;
|
|
49
|
+
const p = [
|
|
50
|
+
data.user,
|
|
51
|
+
data.policy,
|
|
52
|
+
data.version,
|
|
53
|
+
JSON.stringify(data.metadata || {}),
|
|
54
|
+
JSON.stringify(data.internal || {}),
|
|
55
|
+
new Date(),
|
|
56
|
+
];
|
|
57
|
+
const response = await mySql.promiseQuery(q, p);
|
|
58
|
+
return response;
|
|
59
|
+
} catch (e) {
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
public readonly update = async (
|
|
65
|
+
params: Pick<DBRecord, 'id'>,
|
|
66
|
+
data: Omit<DBRecord, 'id' | 'informed_date'>
|
|
67
|
+
): Promise<{ affectedRows: number }> => {
|
|
68
|
+
try {
|
|
69
|
+
const q = `update user_policy set
|
|
70
|
+
user = ?,
|
|
71
|
+
policy = ?,
|
|
72
|
+
version = ?,
|
|
73
|
+
metadata = ?,
|
|
74
|
+
internal = ?
|
|
75
|
+
where id = ?`;
|
|
76
|
+
const p = [
|
|
77
|
+
data.user,
|
|
78
|
+
data.policy,
|
|
79
|
+
data.version,
|
|
80
|
+
JSON.stringify(data.metadata || {}),
|
|
81
|
+
JSON.stringify(data.internal || {}),
|
|
82
|
+
params.id,
|
|
83
|
+
];
|
|
84
|
+
const response = await mySql.promiseQuery(q, p);
|
|
85
|
+
return response;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
throw e;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
public readonly delete = async (
|
|
92
|
+
params: Pick<DBRecord, 'id'>
|
|
93
|
+
): Promise<{ affectedRows: number }> => {
|
|
94
|
+
try {
|
|
95
|
+
const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
|
|
96
|
+
delete: null,
|
|
97
|
+
from: `user_policy`,
|
|
98
|
+
where: params,
|
|
99
|
+
});
|
|
100
|
+
const response = await mySql.promiseQuery(q, p);
|
|
101
|
+
return response;
|
|
102
|
+
} catch (e) {
|
|
103
|
+
throw e;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const userPolicyDao = new UserPolicyDao();
|
|
109
|
+
export default userPolicyDao;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { NextFunction, Request, Response } from 'express';
|
|
2
|
+
import APIError, { StatusCodes } from '../../../helpers/api-error';
|
|
3
|
+
import identityTokenController from '../../controllers/auth/identity-token-controller';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IdentityTokenMiddleware {
|
|
7
|
+
public readonly exists = async (req: any, res: Response, next: NextFunction) => {
|
|
8
|
+
try {
|
|
9
|
+
const access_token = (req.headers.authorization || ``).replace(`Bearer `, ``).trim();
|
|
10
|
+
if (!access_token) {
|
|
11
|
+
throw new APIError({
|
|
12
|
+
code: StatusCodes.UNAUTHORIZED,
|
|
13
|
+
detail: `No authorization provided.`,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
req[`id_access_token`] = access_token;
|
|
18
|
+
next();
|
|
19
|
+
} catch (e) {
|
|
20
|
+
if (e instanceof APIError) {
|
|
21
|
+
res.status(e.code).json(e.data);
|
|
22
|
+
} else {
|
|
23
|
+
res.status(StatusCodes.UNAUTHORIZED).json({ error: e.message || e });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
public readonly validate = async (req: Request, res: Response, next: NextFunction) => {
|
|
29
|
+
try {
|
|
30
|
+
if (!req[`id_access_token`]) {
|
|
31
|
+
throw new APIError({
|
|
32
|
+
code: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
33
|
+
detail: `Middleware dependency broken: required id_access_token missing.`,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const user = await identityTokenController.check(req[`id_access_token`]);
|
|
38
|
+
req[`user`] = user;
|
|
39
|
+
next();
|
|
40
|
+
} catch (e) {
|
|
41
|
+
if (e instanceof APIError) {
|
|
42
|
+
res.status(e.code).json(e.data);
|
|
43
|
+
} else {
|
|
44
|
+
res.status(StatusCodes.UNAUTHORIZED).json({ error: e.message || e });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const identityTokenMiddleware = new IdentityTokenMiddleware();
|
|
51
|
+
export default identityTokenMiddleware;
|