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.
Files changed (168) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/.dockerignore +11 -0
  3. package/.github/workflows/_deploy.yml +191 -0
  4. package/.github/workflows/deploy-dev.yml +30 -0
  5. package/.github/workflows/deploy-prod.yml +34 -0
  6. package/CLAUDE.md +114 -0
  7. package/Dockerfile +61 -0
  8. package/Dockerfile.dev +24 -0
  9. package/README.md +1 -0
  10. package/package.json +61 -0
  11. package/src/App.ts +40 -0
  12. package/src/helpers/api-error.ts +21 -0
  13. package/src/helpers/authority.ts +216 -0
  14. package/src/helpers/config.ts +4 -0
  15. package/src/helpers/holded.ts +105 -0
  16. package/src/helpers/mysql.ts +15 -0
  17. package/src/helpers/notifications.ts +55 -0
  18. package/src/helpers/random.ts +18 -0
  19. package/src/helpers/s3.ts +43 -0
  20. package/src/helpers/stripe.ts +8 -0
  21. package/src/index.ts +47 -0
  22. package/src/v1/common-types.ts +12 -0
  23. package/src/v1/controllers/admin/accounting-seat-controller.ts +148 -0
  24. package/src/v1/controllers/admin/billing-cycle-controller.ts +171 -0
  25. package/src/v1/controllers/admin/invoice-controller.ts +222 -0
  26. package/src/v1/controllers/admin/license-controller.ts +190 -0
  27. package/src/v1/controllers/admin/license-limit-controller.ts +160 -0
  28. package/src/v1/controllers/admin/notification-controller.ts +115 -0
  29. package/src/v1/controllers/admin/organization-controller.ts +210 -0
  30. package/src/v1/controllers/admin/organization-license-controller.ts +224 -0
  31. package/src/v1/controllers/admin/organization-license-limit-controller.ts +196 -0
  32. package/src/v1/controllers/admin/organization-usage-controller.ts +167 -0
  33. package/src/v1/controllers/admin/payment-method-controller.ts +173 -0
  34. package/src/v1/controllers/admin/policy-controller.ts +138 -0
  35. package/src/v1/controllers/admin/policy-version-controller.ts +143 -0
  36. package/src/v1/controllers/admin/schedule-controller.ts +181 -0
  37. package/src/v1/controllers/admin/service-controller.ts +206 -0
  38. package/src/v1/controllers/admin/service-notification-controller.ts +166 -0
  39. package/src/v1/controllers/admin/user-controller.ts +282 -0
  40. package/src/v1/controllers/admin/user-organization-controller.ts +172 -0
  41. package/src/v1/controllers/admin/user-policy-controller.ts +164 -0
  42. package/src/v1/controllers/auth/@deprecated oauth-controller.ts +191 -0
  43. package/src/v1/controllers/auth/identity-token-controller.ts +286 -0
  44. package/src/v1/controllers/auth/organization-token-controller.ts +277 -0
  45. package/src/v1/controllers/auth/temp-code-controller.ts +60 -0
  46. package/src/v1/controllers/billing/billing-controller.ts +805 -0
  47. package/src/v1/controllers/organizations/public-organization-controller.ts +1796 -0
  48. package/src/v1/controllers/policies/public-policy-controller.ts +68 -0
  49. package/src/v1/controllers/services/public-service-controller.ts +177 -0
  50. package/src/v1/controllers/services/service-controller.ts +474 -0
  51. package/src/v1/controllers/users/public-user-controller.ts +471 -0
  52. package/src/v1/daos/@deprecated auth-dao.ts +173 -0
  53. package/src/v1/daos/accounting-seat-dao.ts +111 -0
  54. package/src/v1/daos/billing-cycle-dao.ts +107 -0
  55. package/src/v1/daos/invoice-dao.ts +131 -0
  56. package/src/v1/daos/license-dao.ts +152 -0
  57. package/src/v1/daos/license-limit-dao.ts +120 -0
  58. package/src/v1/daos/organization-dao.ts +109 -0
  59. package/src/v1/daos/organization-license-dao.ts +117 -0
  60. package/src/v1/daos/organization-license-limit-dao.ts +157 -0
  61. package/src/v1/daos/organization-usage-dao.ts +115 -0
  62. package/src/v1/daos/payment-method-dao.ts +110 -0
  63. package/src/v1/daos/policy-dao.ts +105 -0
  64. package/src/v1/daos/policy-version-dao.ts +112 -0
  65. package/src/v1/daos/redis-dao.ts +38 -0
  66. package/src/v1/daos/schema.sql +462 -0
  67. package/src/v1/daos/service-dao.ts +118 -0
  68. package/src/v1/daos/service-notification-dao.ts +120 -0
  69. package/src/v1/daos/user-dao.ts +127 -0
  70. package/src/v1/daos/user-organization-dao.ts +123 -0
  71. package/src/v1/daos/user-policy-dao.ts +109 -0
  72. package/src/v1/middlewares/auth/identity-token-middleware.ts +51 -0
  73. package/src/v1/middlewares/auth/organization-token-middleware.ts +73 -0
  74. package/src/v1/middlewares/auth/service-token-middleware.ts +167 -0
  75. package/src/v1/middlewares/authority-middleware.ts +97 -0
  76. package/src/v1/middlewares/organizations/organization-middleware.ts +94 -0
  77. package/src/v1/middlewares/static/static-middleware.ts +41 -0
  78. package/src/v1/middlewares/users/user-middleware.ts +41 -0
  79. package/src/v1/routes/admin/accounting-seat-router.ts +89 -0
  80. package/src/v1/routes/admin/admin-router.ts +61 -0
  81. package/src/v1/routes/admin/billing-cycle-router.ts +89 -0
  82. package/src/v1/routes/admin/invoice-router.ts +89 -0
  83. package/src/v1/routes/admin/license-limit-router.ts +89 -0
  84. package/src/v1/routes/admin/license-router.ts +89 -0
  85. package/src/v1/routes/admin/notification-router.ts +61 -0
  86. package/src/v1/routes/admin/organization-license-limit-router.ts +89 -0
  87. package/src/v1/routes/admin/organization-license-router.ts +89 -0
  88. package/src/v1/routes/admin/organization-router.ts +89 -0
  89. package/src/v1/routes/admin/payment-method-router.ts +89 -0
  90. package/src/v1/routes/admin/policy-router.ts +89 -0
  91. package/src/v1/routes/admin/policy-version-router.ts +89 -0
  92. package/src/v1/routes/admin/schedule-router.ts +75 -0
  93. package/src/v1/routes/admin/service-notification-router.ts +98 -0
  94. package/src/v1/routes/admin/service-router.ts +89 -0
  95. package/src/v1/routes/admin/user-organization-router.ts +89 -0
  96. package/src/v1/routes/admin/user-policy-router.ts +89 -0
  97. package/src/v1/routes/admin/user-router.ts +89 -0
  98. package/src/v1/routes/auth/@deprecated auth-router.ts +199 -0
  99. package/src/v1/routes/auth/identity-token-router.ts +147 -0
  100. package/src/v1/routes/auth/organization-token-router.ts +70 -0
  101. package/src/v1/routes/billing/billing-router.ts +227 -0
  102. package/src/v1/routes/organizations/invoices-router.ts +48 -0
  103. package/src/v1/routes/organizations/payments-router.ts +104 -0
  104. package/src/v1/routes/organizations/public-organization-router.ts +319 -0
  105. package/src/v1/routes/organizations/users-router.ts +139 -0
  106. package/src/v1/routes/policies/public-policy-router.ts +50 -0
  107. package/src/v1/routes/services/public-service-router.ts +89 -0
  108. package/src/v1/routes/services/service-router.ts +197 -0
  109. package/src/v1/routes/users/public-user-router.ts +230 -0
  110. package/src/v1/routes/v1-router.ts +50 -0
  111. package/src/v1/schemas/admin/accounting-seat-schemas.ts +22 -0
  112. package/src/v1/schemas/admin/billing-cycle-schemas.ts +20 -0
  113. package/src/v1/schemas/admin/invoice-schemas.ts +41 -0
  114. package/src/v1/schemas/admin/license-limit-schemas.ts +25 -0
  115. package/src/v1/schemas/admin/license-schemas.ts +30 -0
  116. package/src/v1/schemas/admin/organization-license-limit-schemas.ts +29 -0
  117. package/src/v1/schemas/admin/organization-license-schemas.ts +43 -0
  118. package/src/v1/schemas/admin/organization-schemas.ts +67 -0
  119. package/src/v1/schemas/admin/organization-usage-schemas.ts +15 -0
  120. package/src/v1/schemas/admin/payment-method-schemas.ts +40 -0
  121. package/src/v1/schemas/admin/policy-schemas.ts +31 -0
  122. package/src/v1/schemas/admin/service-notification-schemas.ts +23 -0
  123. package/src/v1/schemas/admin/service-schemas.ts +56 -0
  124. package/src/v1/schemas/admin/user-organization-schemas.ts +24 -0
  125. package/src/v1/schemas/admin/user-policy-schemas.ts +17 -0
  126. package/src/v1/schemas/admin/user-schemas.ts +52 -0
  127. package/src/v1/schemas/auth/auth-schemas.ts +55 -0
  128. package/src/v1/schemas/billing/billing-schemas.ts +32 -0
  129. package/src/v1/schemas/organizations/public-organization-schemas.ts +77 -0
  130. package/src/v1/schemas/payments/payment-method-schemas.ts +0 -0
  131. package/src/v1/schemas/services/public-service-schemas.ts +5 -0
  132. package/src/v1/schemas/services/service-schemas.ts +27 -0
  133. package/src/v1/schemas/users/public-user-schemas.ts +73 -0
  134. package/src/v1/types/admin/accounting-seat-types.ts +16 -0
  135. package/src/v1/types/admin/billing-cycle-types.ts +14 -0
  136. package/src/v1/types/admin/invoice-types.ts +39 -0
  137. package/src/v1/types/admin/license-limit-types.ts +16 -0
  138. package/src/v1/types/admin/license-types.ts +29 -0
  139. package/src/v1/types/admin/organization-license-limit-types.ts +13 -0
  140. package/src/v1/types/admin/organization-license-types.ts +21 -0
  141. package/src/v1/types/admin/organization-types.ts +60 -0
  142. package/src/v1/types/admin/organization-usage-types.ts +17 -0
  143. package/src/v1/types/admin/payment-method-types.ts +30 -0
  144. package/src/v1/types/admin/policy-types.ts +9 -0
  145. package/src/v1/types/admin/policy-version-types.ts +12 -0
  146. package/src/v1/types/admin/service-notification-types.ts +20 -0
  147. package/src/v1/types/admin/service-types.ts +36 -0
  148. package/src/v1/types/admin/user-organization-types.ts +31 -0
  149. package/src/v1/types/admin/user-types.ts +44 -0
  150. package/src/v1/types/auth/@deprecated auth-types.ts +26 -0
  151. package/src/v1/types/auth/common-types.ts +7 -0
  152. package/src/v1/types/auth/confirmation-types.ts +5 -0
  153. package/src/v1/types/auth/identity-token-types.ts +8 -0
  154. package/src/v1/types/auth/organization-token-types.ts +23 -0
  155. package/src/v1/types/auth/otp-types.ts +12 -0
  156. package/src/v1/types/billing/billing-types.ts +37 -0
  157. package/src/v1/types/billing/ue-types.ts +29 -0
  158. package/src/v1/types/organizations/public-organization-types.ts +76 -0
  159. package/src/v1/types/policies/public-policy-types.ts +7 -0
  160. package/src/v1/types/services/public-service-types.ts +20 -0
  161. package/src/v1/types/services/service-types.ts +43 -0
  162. package/src/v1/types/users/public-user-types.ts +15 -0
  163. package/src/v1/types/users/user-policy-types.ts +11 -0
  164. package/static/error.html +55 -0
  165. package/static/grant.html +117 -0
  166. package/static/login.html +54 -0
  167. package/static/oauth-client-logo.webp +0 -0
  168. package/tsconfig.json +20 -0
@@ -0,0 +1,89 @@
1
+ import { Request, Router, Response } from 'express';
2
+ import userPolicyController from '../../controllers/admin/user-policy-controller';
3
+ import httpcodes from 'http-status-codes';
4
+ import APIError from '../../../helpers/api-error';
5
+
6
+ class UserPolicyRouter {
7
+ router: Router;
8
+
9
+ constructor() {
10
+ this.router = Router();
11
+ this.init();
12
+ }
13
+
14
+ private readonly get = async (req: Request, res: Response) => {
15
+ try {
16
+ const response = await userPolicyController.get(parseInt(req.params[`id`], 10));
17
+ res.json(response);
18
+ } catch (e) {
19
+ if (e instanceof APIError) {
20
+ res.status(e.code).json(e.data);
21
+ } else {
22
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
23
+ }
24
+ }
25
+ };
26
+
27
+ private readonly list = async (req: Request, res: Response) => {
28
+ try {
29
+ const response = await userPolicyController.list(req.body);
30
+ res.json(response);
31
+ } catch (e) {
32
+ if (e instanceof APIError) {
33
+ res.status(e.code).json(e.data);
34
+ } else {
35
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
36
+ }
37
+ }
38
+ };
39
+
40
+ private readonly add = async (req: Request, res: Response) => {
41
+ try {
42
+ const response = await userPolicyController.add(req.body);
43
+ res.json(response);
44
+ } catch (e) {
45
+ if (e instanceof APIError) {
46
+ res.status(e.code).json(e.data);
47
+ } else {
48
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
49
+ }
50
+ }
51
+ };
52
+
53
+ private readonly update = async (req: Request, res: Response) => {
54
+ try {
55
+ const response = await userPolicyController.update(parseInt(req.params[`id`], 10), req.body);
56
+ res.json(response);
57
+ } catch (e) {
58
+ if (e instanceof APIError) {
59
+ res.status(e.code).json(e.data);
60
+ } else {
61
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
62
+ }
63
+ }
64
+ };
65
+
66
+ private readonly delete = async (req: Request, res: Response) => {
67
+ try {
68
+ const response = await userPolicyController.delete(parseInt(req.params[`id`], 10));
69
+ res.json(response);
70
+ } catch (e) {
71
+ if (e instanceof APIError) {
72
+ res.status(e.code).json(e.data);
73
+ } else {
74
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
75
+ }
76
+ }
77
+ };
78
+
79
+ private readonly init = () => {
80
+ this.router.get(`/:id`, this.get);
81
+ this.router.post(`/list`, this.list);
82
+ this.router.post(`/`, this.add);
83
+ this.router.put(`/:id`, this.update);
84
+ this.router.delete(`/:id`, this.delete);
85
+ };
86
+ }
87
+
88
+ const userPolicyRouter = (new UserPolicyRouter()).router;
89
+ export default userPolicyRouter;
@@ -0,0 +1,89 @@
1
+ import { Request, Router, Response } from 'express';
2
+ import userController from '../../controllers/admin/user-controller';
3
+ import httpcodes from 'http-status-codes';
4
+ import APIError from '../../../helpers/api-error';
5
+
6
+ class UserRouter {
7
+ router: Router;
8
+
9
+ constructor() {
10
+ this.router = Router();
11
+ this.init();
12
+ }
13
+
14
+ private readonly get = async (req: Request, res: Response) => {
15
+ try {
16
+ const response = await userController.get(parseInt(req.params[`id`], 10), { password: false });
17
+ res.json(response);
18
+ } catch (e) {
19
+ if (e instanceof APIError) {
20
+ res.status(e.code).json(e.data);
21
+ } else {
22
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
23
+ }
24
+ }
25
+ };
26
+
27
+ private readonly list = async (req: Request, res: Response) => {
28
+ try {
29
+ const response = await userController.list(req.body, { password: false });
30
+ res.json(response);
31
+ } catch (e) {
32
+ if (e instanceof APIError) {
33
+ res.status(e.code).json(e.data);
34
+ } else {
35
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
36
+ }
37
+ }
38
+ };
39
+
40
+ private readonly add = async (req: Request, res: Response) => {
41
+ try {
42
+ const response = await userController.add(req.body, { password: false });
43
+ res.json(response);
44
+ } catch (e) {
45
+ if (e instanceof APIError) {
46
+ res.status(e.code).json(e.data);
47
+ } else {
48
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
49
+ }
50
+ }
51
+ };
52
+
53
+ private readonly update = async (req: Request, res: Response) => {
54
+ try {
55
+ const response = await userController.update(parseInt(req.params[`id`], 10), req.body, { password: false });
56
+ res.json(response);
57
+ } catch (e) {
58
+ if (e instanceof APIError) {
59
+ res.status(e.code).json(e.data);
60
+ } else {
61
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
62
+ }
63
+ }
64
+ };
65
+
66
+ private readonly delete = async (req: Request, res: Response) => {
67
+ try {
68
+ const response = await userController.delete(parseInt(req.params[`id`], 10));
69
+ res.json(response);
70
+ } catch (e) {
71
+ if (e instanceof APIError) {
72
+ res.status(e.code).json(e.data);
73
+ } else {
74
+ res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
75
+ }
76
+ }
77
+ };
78
+
79
+ private readonly init = () => {
80
+ this.router.get(`/:id`, this.get);
81
+ this.router.post(`/list`, this.list);
82
+ this.router.post(`/`, this.add);
83
+ this.router.put(`/:id`, this.update);
84
+ this.router.delete(`/:id`, this.delete);
85
+ };
86
+ }
87
+
88
+ const userRouter = (new UserRouter()).router;
89
+ export default userRouter;
@@ -0,0 +1,199 @@
1
+ // import { Request, Response, Router } from 'express';
2
+ // import APIError, { StatusCodes } from '../../helpers/api-error';
3
+ // import identityTokenController from '../controllers/auth/identity-token-controller';
4
+ // import identityTokenMiddleware from '../middlewares/identity-token-middleware';
5
+ // import userMiddleware from '../middlewares/user-middleware';
6
+ // import confirmationCtrl from '../controllers/auth/confirmation-controller';
7
+
8
+ // export class AuthRouter {
9
+ // router: Router;
10
+
11
+ // constructor() {
12
+ // this.router = Router();
13
+ // this.init();
14
+ // }
15
+
16
+ // // session credentials
17
+ // private readonly login = async (req: Request, res: Response) => {
18
+ // try {
19
+ // const response = await identityTokenController.login(req.body);
20
+ // res.setHeader(`Cache-Control`, `no-store`).json(response);
21
+ // } catch (e: any) {
22
+ // if (e instanceof APIError) {
23
+ // res.status(e.code).json(e.data);
24
+ // } else {
25
+ // res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
26
+ // }
27
+ // }
28
+ // };
29
+
30
+ // private readonly confirm = async (req: Request, res: Response) => {
31
+ // try {
32
+ // const response = await confirmationCtrl.confirm(req[`user`], req.body);
33
+ // res.setHeader(`Cache-Control`, `no-store`).json(response);
34
+ // } catch (e: any) {
35
+ // if (e instanceof APIError) {
36
+ // res.status(e.code).json(e.data);
37
+ // } else {
38
+ // res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
39
+ // }
40
+ // }
41
+ // };
42
+
43
+ // // // oauth credentials
44
+ // // private readonly accountPage = async (req: Request, res: Response) => {
45
+ // // try {
46
+ // // const { token } = req.body;
47
+
48
+ // // let session: Session;
49
+ // // if (token) {
50
+ // // try {
51
+ // // session = await authController.recoverOAuthSession(token);
52
+ // // } catch (e) { }
53
+ // // }
54
+
55
+ // // if (!session) {
56
+ // // const data = Validator.validate(Schema.object({
57
+ // // client_id: Schema.requiredString(),
58
+ // // redirect_uri: Schema.requiredString(),
59
+ // // response_type: Schema.requiredString(),
60
+ // // scope: Schema.requiredString(),
61
+ // // access_type: Schema.requiredString(),
62
+ // // }), req.query as any);
63
+ // // session = await authController.startOAuthSession(data);
64
+ // // }
65
+
66
+ // // const page = new File2({ path: __dirname, filename: `../../../static/login.html` });
67
+ // // const html = new String2(page.toString()).compile(session);
68
+
69
+ // // res.status(httpcodes.OK).send(html);
70
+ // // } catch (e) {
71
+ // // const page = new File2({ path: __dirname, filename: `../../../static/error.html` });
72
+ // // const html = new String2(page.toString()).compile({ error: e.message });
73
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).send(html);
74
+ // // }
75
+ // // };
76
+
77
+ // // private readonly accountCheck = async (req: Request, res: Response) => {
78
+ // // try {
79
+ // // const { username, password, token } = req.body;
80
+
81
+ // // const { success, user } = await authController.login(username, password);
82
+
83
+ // // if (!success) {
84
+ // // // TODO
85
+ // // res.redirect(`/auth/account`);
86
+ // // return;
87
+ // // }
88
+
89
+ // // const session = await authController.setUserOnOAuthSession(token, user.id);
90
+
91
+ // // const page = new File2({ path: __dirname, filename: `../../../static/grant.html` });
92
+ // // const html = new String2(page.toString()).compile(session);
93
+
94
+ // // res.status(httpcodes.OK).send(html);
95
+ // // } catch (e) {
96
+ // // const page = new File2({ path: __dirname, filename: `../../../static/error.html` });
97
+ // // const html = new String2(page.toString()).compile({ error: e.message });
98
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).send(html);
99
+ // // }
100
+ // // };
101
+
102
+ // // private readonly cancelAccess = async (req: Request, res: Response) => {
103
+ // // try {
104
+ // // const { token } = req.body;
105
+ // // const { redirect } = await authController.cancelOauthSession(token);
106
+ // // res.redirect(redirect);
107
+ // // } catch (e) {
108
+ // // const page = new File2({ path: __dirname, filename: `../../../static/error.html` });
109
+ // // const html = new String2(page.toString()).compile({ error: e.message });
110
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).send(html);
111
+ // // }
112
+ // // };
113
+
114
+ // // private readonly grantAccess = async (req: Request, res: Response) => {
115
+ // // try {
116
+ // // const { token } = req.body;
117
+ // // const { redirect } = await authController.grantOAuthSession(token);
118
+ // // res.redirect(redirect);
119
+ // // } catch (e) {
120
+ // // const page = new File2({ path: __dirname, filename: `../../../static/error.html` });
121
+ // // const html = new String2(page.toString()).compile({ error: e.message });
122
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).send(html);
123
+ // // }
124
+ // // };
125
+
126
+ // // private readonly oauthToken = async (req: Request, res: Response) => {
127
+ // // try {
128
+ // // const data = Validator.validate(Schema.alternatives(a, b), req.body);
129
+
130
+ // // const response = await authController.oauthToken(data);
131
+ // // res.json(response);
132
+ // // } catch (e) {
133
+ // // // TODO: route error logic
134
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
135
+ // // }
136
+ // // };
137
+
138
+ // // private readonly revokeToken = async (req: Request, res: Response) => {
139
+ // // try {
140
+ // // const { id } = await Validator.validate(Schema.object({ id: Schema.requiredString() }), req.body);
141
+ // // await authController.revokeToken(id);
142
+ // // res.json({ done: true });
143
+ // // } catch (e) {
144
+ // // // TODO: route error logic
145
+ // // res.status(httpcodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
146
+ // // }
147
+ // // };
148
+
149
+
150
+ // private readonly refresh = async (req: Request, res: Response) => {
151
+ // try {
152
+ // const response = await identityTokenController.refresh(req[`access_token`], req.body);
153
+ // res.setHeader(`Cache-Control`, `no-store`).json(response);
154
+ // } catch (e: any) {
155
+ // if (e instanceof APIError) {
156
+ // res.status(e.code).json(e.data);
157
+ // } else {
158
+ // res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
159
+ // }
160
+ // }
161
+ // };
162
+
163
+ // private readonly user = async (req: Request, res: Response) => {
164
+ // try {
165
+ // const response = req[`user`];
166
+ // res.json(response);
167
+ // } catch (e) {
168
+ // res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
169
+ // }
170
+ // };
171
+
172
+ // private readonly init = () => {
173
+ // // static credentials
174
+
175
+ // // session credentials
176
+ // this.router.post(`/user`, this.login);
177
+
178
+ // // oauth credentials
179
+ // // this.router.all(`/account`, this.accountPage);
180
+ // // this.router.post(`/account/check`, this.accountCheck);
181
+ // // this.router.post(`/account/grant`, this.grantAccess);
182
+ // // this.router.post(`/account/cancel`, this.cancelAccess);
183
+
184
+ // // this.router.post(`/token`, this.oauthToken);
185
+ // // this.router.post(`/revoke`, this.revokeToken);
186
+
187
+ // this.router.use(identityTokenMiddleware.exists);
188
+ // this.router.post(`/user/refresh`, this.refresh);
189
+
190
+ // this.router.use(identityTokenMiddleware.validate);
191
+ // this.router.post(`/user/confirm`, userMiddleware.pending, this.confirm);
192
+
193
+ // this.router.get(`/user`, this.user);
194
+ // };
195
+ // }
196
+
197
+
198
+ // const authRouter = (new AuthRouter()).router;
199
+ // export default authRouter;
@@ -0,0 +1,147 @@
1
+ import { Request, Response, Router } from 'express';
2
+ import APIError, { StatusCodes } from '../../../helpers/api-error';
3
+ import identityTokenController from '../../controllers/auth/identity-token-controller';
4
+ import identityTokenMiddleware from '../../middlewares/auth/identity-token-middleware';
5
+ import { admin } from '../../middlewares/static/static-middleware';
6
+
7
+ export class IdentityTokenRouter {
8
+ router: Router;
9
+
10
+ constructor() {
11
+ this.router = Router();
12
+ this.init();
13
+ }
14
+
15
+ private readonly validateRecaptcha = async (req: Request, res: Response) => {
16
+ try {
17
+ const response = await identityTokenController.validateRecaptcha(req.body);
18
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
19
+ } catch (e: any) {
20
+ console.log(e);
21
+
22
+ if (e instanceof APIError) {
23
+ res.status(e.code).json(e.data);
24
+ } else {
25
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
26
+ }
27
+ }
28
+ };
29
+
30
+ private readonly socialGoogle = async (req: Request, res: Response) => {
31
+ try {
32
+ const response = await identityTokenController.socialGoogle(req.body);
33
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
34
+ } catch (e: any) {
35
+ if (e instanceof APIError) {
36
+ res.status(e.code).json(e.data);
37
+ } else {
38
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
39
+ }
40
+ }
41
+ };
42
+
43
+ private readonly requestOTP = async (req: Request, res: Response) => {
44
+ try {
45
+ await identityTokenController.requestOTP(req.body);
46
+ res.status(StatusCodes.NO_CONTENT).json();
47
+ } catch (e: any) {
48
+ if (e instanceof APIError) {
49
+ res.status(e.code).json(e.data);
50
+ } else {
51
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
52
+ }
53
+ }
54
+ };
55
+
56
+ private readonly validateOTP = async (req: Request, res: Response) => {
57
+ try {
58
+ const response = await identityTokenController.validateOTP(req.body);
59
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
60
+ } catch (e: any) {
61
+ if (e instanceof APIError) {
62
+ res.status(e.code).json(e.data);
63
+ } else {
64
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
65
+ }
66
+ }
67
+ };
68
+
69
+ private readonly admin = async (req: Request, res: Response) => {
70
+ try {
71
+ const response = await identityTokenController.admin(req.body);
72
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
73
+ } catch (e: any) {
74
+ if (e instanceof APIError) {
75
+ res.status(e.code).json(e.data);
76
+ } else {
77
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
78
+ }
79
+ }
80
+ };
81
+
82
+ private readonly token = async (req: Request, res: Response) => {
83
+ try {
84
+ const response = await identityTokenController.token(req.body);
85
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
86
+ } catch (e: any) {
87
+ if (e instanceof APIError) {
88
+ res.status(e.code).json(e.data);
89
+ } else {
90
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
91
+ }
92
+ }
93
+ };
94
+
95
+ private readonly refresh = async (req: Request, res: Response) => {
96
+ try {
97
+ const response = await identityTokenController.refresh(req[`id_access_token`], req.body);
98
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
99
+ } catch (e: any) {
100
+ if (e instanceof APIError) {
101
+ res.status(e.code).json(e.data);
102
+ } else {
103
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
104
+ }
105
+ }
106
+ };
107
+
108
+ private readonly delete = async (req: Request, res: Response) => {
109
+ try {
110
+ await identityTokenController.delete(req[`user`], req[`id_access_token`]);
111
+ res.status(StatusCodes.NO_CONTENT).json();
112
+ } catch (e: any) {
113
+ if (e instanceof APIError) {
114
+ res.status(e.code).json(e.data);
115
+ } else {
116
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
117
+ }
118
+ }
119
+ };
120
+
121
+ private readonly init = () => {
122
+
123
+ // admin: bypass identity token
124
+ this.router.post(`/admin`, admin, this.admin);
125
+
126
+ this.router.post(`/recaptcha`, this.validateRecaptcha);
127
+
128
+ this.router.patch(`/otp`, this.requestOTP);
129
+ this.router.post(`/otp`, this.validateOTP);
130
+
131
+ this.router.post(`/social/google`, this.socialGoogle);
132
+
133
+ this.router.post(`/token`, this.token);
134
+
135
+ this.router.use(identityTokenMiddleware.exists);
136
+ this.router.post(`/token/refresh`, this.refresh);
137
+
138
+ this.router.use(identityTokenMiddleware.validate);
139
+ this.router.delete(`/token`, this.delete);
140
+
141
+
142
+ };
143
+ }
144
+
145
+
146
+ const identityTokenRouter = (new IdentityTokenRouter()).router;
147
+ export default identityTokenRouter;
@@ -0,0 +1,70 @@
1
+ import { Request, Response, Router } from 'express';
2
+ import APIError, { StatusCodes } from '../../../helpers/api-error';
3
+ import organizationTokenController from '../../controllers/auth/organization-token-controller';
4
+ import identityTokenMiddleware from '../../middlewares/auth/identity-token-middleware';
5
+ import organizationTokenMiddleware from '../../middlewares/auth/organization-token-middleware';
6
+ import userMiddleware from '../../middlewares/users/user-middleware';
7
+
8
+ export class OrganizationTokenRouter {
9
+ router: Router;
10
+
11
+ constructor() {
12
+ this.router = Router();
13
+ this.init();
14
+ }
15
+
16
+ private readonly token = async (req: Request, res: Response) => {
17
+ try {
18
+ const response = await organizationTokenController.token(req[`user`], req.body);
19
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
20
+ } catch (e: any) {
21
+ if (e instanceof APIError) {
22
+ res.status(e.code).json(e.data);
23
+ } else {
24
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
25
+ }
26
+ }
27
+ };
28
+
29
+ private readonly refresh = async (req: Request, res: Response) => {
30
+ try {
31
+ const response = await organizationTokenController.refresh(req[`org_access_token`], req.body);
32
+ res.setHeader(`Cache-Control`, `no-store`).json(response);
33
+ } catch (e: any) {
34
+ if (e instanceof APIError) {
35
+ res.status(e.code).json(e.data);
36
+ } else {
37
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
38
+ }
39
+ }
40
+ };
41
+
42
+ private readonly delete = async (req: Request, res: Response) => {
43
+ try {
44
+ await organizationTokenController.delete(req[`environment`], req[`org_access_token`]);
45
+ res.status(StatusCodes.NO_CONTENT).json();
46
+ } catch (e: any) {
47
+ if (e instanceof APIError) {
48
+ res.status(e.code).json(e.data);
49
+ } else {
50
+ res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ error: e.message || e });
51
+ }
52
+ }
53
+ };
54
+
55
+ private readonly init = () => {
56
+ this.router.post(`/token`, identityTokenMiddleware.exists, identityTokenMiddleware.validate, userMiddleware.active, this.token);
57
+
58
+ this.router.use(organizationTokenMiddleware.exists);
59
+ this.router.post(`/token/refresh`, this.refresh);
60
+
61
+ this.router.use(organizationTokenMiddleware.validate);
62
+ this.router.delete(`/token`, this.delete);
63
+
64
+
65
+ };
66
+ }
67
+
68
+
69
+ const organizationTokenRouter = (new OrganizationTokenRouter()).router;
70
+ export default organizationTokenRouter;