@things-factory/auth-base 8.0.0-beta.0 → 8.0.0-beta.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.
Files changed (142) hide show
  1. package/package.json +6 -6
  2. package/client/actions/auth.ts +0 -24
  3. package/client/auth.ts +0 -272
  4. package/client/bootstrap.ts +0 -47
  5. package/client/directive/privileged.ts +0 -28
  6. package/client/index.ts +0 -4
  7. package/client/profiled.ts +0 -83
  8. package/client/reducers/auth.ts +0 -31
  9. package/client/verify-webauthn.ts +0 -86
  10. package/server/constants/error-code.ts +0 -22
  11. package/server/constants/error-message.ts +0 -0
  12. package/server/constants/max-age.ts +0 -1
  13. package/server/controllers/auth.ts +0 -5
  14. package/server/controllers/change-pwd.ts +0 -100
  15. package/server/controllers/checkin.ts +0 -21
  16. package/server/controllers/delete-user.ts +0 -71
  17. package/server/controllers/invitation.ts +0 -163
  18. package/server/controllers/profile.ts +0 -55
  19. package/server/controllers/reset-password.ts +0 -126
  20. package/server/controllers/signin.ts +0 -98
  21. package/server/controllers/signup.ts +0 -72
  22. package/server/controllers/unlock-user.ts +0 -62
  23. package/server/controllers/utils/make-invitation-token.ts +0 -5
  24. package/server/controllers/utils/make-verification-token.ts +0 -4
  25. package/server/controllers/utils/password-rule.ts +0 -120
  26. package/server/controllers/utils/save-invitation-token.ts +0 -10
  27. package/server/controllers/utils/save-verification-token.ts +0 -12
  28. package/server/controllers/verification.ts +0 -84
  29. package/server/errors/auth-error.ts +0 -24
  30. package/server/errors/index.ts +0 -2
  31. package/server/errors/user-domain-not-match-error.ts +0 -29
  32. package/server/index.ts +0 -37
  33. package/server/middlewares/authenticate-401-middleware.ts +0 -114
  34. package/server/middlewares/domain-authenticate-middleware.ts +0 -78
  35. package/server/middlewares/graphql-authenticate-middleware.ts +0 -13
  36. package/server/middlewares/index.ts +0 -67
  37. package/server/middlewares/jwt-authenticate-middleware.ts +0 -84
  38. package/server/middlewares/signin-middleware.ts +0 -55
  39. package/server/middlewares/webauthn-middleware.ts +0 -126
  40. package/server/migrations/1548206416130-SeedUser.ts +0 -60
  41. package/server/migrations/1566805283882-SeedPrivilege.ts +0 -28
  42. package/server/migrations/index.ts +0 -9
  43. package/server/router/auth-checkin-router.ts +0 -113
  44. package/server/router/auth-private-process-router.ts +0 -114
  45. package/server/router/auth-public-process-router.ts +0 -314
  46. package/server/router/auth-signin-router.ts +0 -55
  47. package/server/router/auth-signup-router.ts +0 -95
  48. package/server/router/index.ts +0 -9
  49. package/server/router/oauth2/index.ts +0 -2
  50. package/server/router/oauth2/oauth2-authorize-router.ts +0 -81
  51. package/server/router/oauth2/oauth2-router.ts +0 -165
  52. package/server/router/oauth2/oauth2-server.ts +0 -262
  53. package/server/router/oauth2/passport-oauth2-client-password.ts +0 -87
  54. package/server/router/oauth2/passport-refresh-token.ts +0 -87
  55. package/server/router/path-base-domain-router.ts +0 -8
  56. package/server/router/site-root-router.ts +0 -48
  57. package/server/router/webauthn-router.ts +0 -149
  58. package/server/routes.ts +0 -80
  59. package/server/service/app-binding/app-binding-mutation.ts +0 -22
  60. package/server/service/app-binding/app-binding-query.ts +0 -92
  61. package/server/service/app-binding/app-binding-types.ts +0 -11
  62. package/server/service/app-binding/app-binding.ts +0 -17
  63. package/server/service/app-binding/index.ts +0 -4
  64. package/server/service/appliance/appliance-mutation.ts +0 -113
  65. package/server/service/appliance/appliance-query.ts +0 -76
  66. package/server/service/appliance/appliance-types.ts +0 -56
  67. package/server/service/appliance/appliance.ts +0 -133
  68. package/server/service/appliance/index.ts +0 -6
  69. package/server/service/application/application-mutation.ts +0 -104
  70. package/server/service/application/application-query.ts +0 -98
  71. package/server/service/application/application-types.ts +0 -76
  72. package/server/service/application/application.ts +0 -216
  73. package/server/service/application/index.ts +0 -6
  74. package/server/service/auth-provider/auth-provider-mutation.ts +0 -159
  75. package/server/service/auth-provider/auth-provider-parameter-spec.ts +0 -24
  76. package/server/service/auth-provider/auth-provider-query.ts +0 -88
  77. package/server/service/auth-provider/auth-provider-type.ts +0 -67
  78. package/server/service/auth-provider/auth-provider.ts +0 -155
  79. package/server/service/auth-provider/index.ts +0 -7
  80. package/server/service/domain-generator/domain-generator-mutation.ts +0 -117
  81. package/server/service/domain-generator/domain-generator-types.ts +0 -46
  82. package/server/service/domain-generator/index.ts +0 -3
  83. package/server/service/granted-role/granted-role-mutation.ts +0 -156
  84. package/server/service/granted-role/granted-role-query.ts +0 -60
  85. package/server/service/granted-role/granted-role.ts +0 -27
  86. package/server/service/granted-role/index.ts +0 -6
  87. package/server/service/index.ts +0 -90
  88. package/server/service/invitation/index.ts +0 -6
  89. package/server/service/invitation/invitation-mutation.ts +0 -78
  90. package/server/service/invitation/invitation-query.ts +0 -33
  91. package/server/service/invitation/invitation-types.ts +0 -11
  92. package/server/service/invitation/invitation.ts +0 -63
  93. package/server/service/login-history/index.ts +0 -5
  94. package/server/service/login-history/login-history-query.ts +0 -51
  95. package/server/service/login-history/login-history-type.ts +0 -12
  96. package/server/service/login-history/login-history.ts +0 -45
  97. package/server/service/partner/index.ts +0 -6
  98. package/server/service/partner/partner-mutation.ts +0 -61
  99. package/server/service/partner/partner-query.ts +0 -102
  100. package/server/service/partner/partner-types.ts +0 -11
  101. package/server/service/partner/partner.ts +0 -57
  102. package/server/service/password-history/index.ts +0 -3
  103. package/server/service/password-history/password-history.ts +0 -16
  104. package/server/service/privilege/index.ts +0 -6
  105. package/server/service/privilege/privilege-directive.ts +0 -77
  106. package/server/service/privilege/privilege-mutation.ts +0 -92
  107. package/server/service/privilege/privilege-query.ts +0 -94
  108. package/server/service/privilege/privilege-types.ts +0 -60
  109. package/server/service/privilege/privilege.ts +0 -102
  110. package/server/service/role/index.ts +0 -6
  111. package/server/service/role/role-mutation.ts +0 -109
  112. package/server/service/role/role-query.ts +0 -155
  113. package/server/service/role/role-types.ts +0 -81
  114. package/server/service/role/role.ts +0 -72
  115. package/server/service/user/domain-query.ts +0 -24
  116. package/server/service/user/index.ts +0 -7
  117. package/server/service/user/user-mutation.ts +0 -482
  118. package/server/service/user/user-query.ts +0 -145
  119. package/server/service/user/user-types.ts +0 -100
  120. package/server/service/user/user.ts +0 -381
  121. package/server/service/users-auth-providers/index.ts +0 -5
  122. package/server/service/users-auth-providers/users-auth-providers.ts +0 -71
  123. package/server/service/verification-token/index.ts +0 -3
  124. package/server/service/verification-token/verification-token.ts +0 -60
  125. package/server/service/web-auth-credential/index.ts +0 -3
  126. package/server/service/web-auth-credential/web-auth-credential.ts +0 -67
  127. package/server/templates/account-unlock-email.ts +0 -65
  128. package/server/templates/invitation-email.ts +0 -66
  129. package/server/templates/reset-password-email.ts +0 -65
  130. package/server/templates/verification-email.ts +0 -66
  131. package/server/types.ts +0 -21
  132. package/server/utils/accepts.ts +0 -11
  133. package/server/utils/access-token-cookie.ts +0 -61
  134. package/server/utils/check-permission.ts +0 -52
  135. package/server/utils/check-user-belongs-domain.ts +0 -19
  136. package/server/utils/check-user-has-role.ts +0 -29
  137. package/server/utils/encrypt-state.ts +0 -22
  138. package/server/utils/get-aes-256-key.ts +0 -13
  139. package/server/utils/get-domain-from-hostname.ts +0 -7
  140. package/server/utils/get-domain-users.ts +0 -38
  141. package/server/utils/get-secret.ts +0 -13
  142. package/server/utils/get-user-domains.ts +0 -112
@@ -1,314 +0,0 @@
1
- import Router from 'koa-router'
2
- import { ILike } from 'typeorm'
3
-
4
- import { config } from '@things-factory/env'
5
- import { getRepository, getSiteRootPath } from '@things-factory/shell'
6
-
7
- import { resendInvitationEmail } from '../controllers/invitation'
8
- import { resetPassword, sendPasswordResetEmail } from '../controllers/reset-password'
9
- import { unlockUser } from '../controllers/unlock-user'
10
- import { resendVerificationEmail, verify } from '../controllers/verification'
11
- import { User } from '../service/user/user'
12
- import { accepts } from '../utils/accepts'
13
- import { clearAccessTokenCookie } from '../utils/access-token-cookie'
14
-
15
- const disableUserSignupProcess = config.get('disableUserSignupProcess', false)
16
- const disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)
17
- const languages = config.get('i18n/languages', false)
18
- const passwordRule = config.get('password') || {
19
- lowerCase: true,
20
- upperCase: true,
21
- digit: true,
22
- specialCharacter: true,
23
- allowRepeat: false,
24
- useTightPattern: true,
25
- useLoosePattern: false,
26
- tightCharacterLength: 8,
27
- looseCharacterLength: 15
28
- }
29
-
30
- export const authPublicProcessRouter = new Router({
31
- prefix: '/auth'
32
- })
33
-
34
- authPublicProcessRouter.post('/join', async (context, next) => {
35
- const { username } = context.request.body || {}
36
-
37
- const repository = getRepository(User)
38
-
39
- var user = await repository.findOne({
40
- where: { username },
41
- relations: ['domains']
42
- })
43
-
44
- if (!user && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(username)) {
45
- user = await repository.findOne({
46
- where: { email: ILike(username) },
47
- relations: ['domains']
48
- })
49
- }
50
-
51
- if (user) {
52
- context.redirect(`/auth/signin?username=${username}`)
53
- } else {
54
- context.redirect(`/auth/signup?username=${username}`)
55
- }
56
- })
57
-
58
- authPublicProcessRouter.all('/signout', async (context, next) => {
59
- const { header, t } = context
60
- clearAccessTokenCookie(context)
61
-
62
- context.body = t('text.signout successfully')
63
-
64
- if (accepts(header.accept, ['text/html', '*/*'])) {
65
- context.redirect(getSiteRootPath(context))
66
- }
67
- })
68
-
69
- authPublicProcessRouter.get('/forgot-password', async (context, next) => {
70
- const { email } = context.request.query
71
-
72
- await context.render('auth-page', {
73
- pageElement: 'forgot-password',
74
- elementScript: '/auth/forgot-password.js',
75
- data: {
76
- email,
77
- disableUserSignupProcess,
78
- disableUserFavoredLanguage,
79
- languages
80
- }
81
- })
82
- })
83
-
84
- authPublicProcessRouter.get('/reset-password', async (context, next) => {
85
- const { token } = context.request.query
86
-
87
- await context.render('auth-page', {
88
- pageElement: 'reset-password',
89
- elementScript: '/auth/reset-password.js',
90
- data: {
91
- token,
92
- passwordRule,
93
- disableUserSignupProcess,
94
- disableUserFavoredLanguage,
95
- languages
96
- }
97
- })
98
- })
99
-
100
- authPublicProcessRouter.get('/unlock-user', async (context, next) => {
101
- const { token } = context.request.query
102
-
103
- await context.render('auth-page', {
104
- pageElement: 'unlock-user',
105
- elementScript: '/auth/unlock-user.js',
106
- data: {
107
- token,
108
- disableUserSignupProcess,
109
- disableUserFavoredLanguage,
110
- languages
111
- }
112
- })
113
- })
114
-
115
- authPublicProcessRouter.get('/activate/:email', async (context, next) => {
116
- const { email } = context.params
117
-
118
- await context.render('auth-page', {
119
- pageElement: 'auth-activate',
120
- elementScript: '/auth/activate.js',
121
- data: {
122
- email,
123
- disableUserSignupProcess,
124
- disableUserFavoredLanguage,
125
- languages
126
- }
127
- })
128
- })
129
-
130
- authPublicProcessRouter.get('/verify/:token', async (context, next) => {
131
- const { header, t } = context
132
- var token = context.params.token
133
-
134
- await verify(token)
135
-
136
- var message = t('text.user activated successfully')
137
-
138
- context.body = message
139
-
140
- if (accepts(header.accept, ['text/html', '*/*'])) {
141
- await context.render('auth-page', {
142
- pageElement: 'auth-result',
143
- elementScript: '/auth/result.js',
144
- data: {
145
- message,
146
- disableUserSignupProcess,
147
- disableUserFavoredLanguage,
148
- languages
149
- }
150
- })
151
- }
152
- })
153
-
154
- authPublicProcessRouter.post('/resend-verification-email', async (context, next) => {
155
- const { t } = context
156
- const { email } = context.request.body
157
-
158
- var succeed = await resendVerificationEmail(email, context)
159
- var message = t('text.verification email sent')
160
-
161
- if (succeed) {
162
- context.status = 200
163
- context.body = message
164
- }
165
- })
166
-
167
- authPublicProcessRouter.post('/resend-invitation-email', async (context, next) => {
168
- const { t } = context
169
- const { email, reference, type } = context.request.body
170
-
171
- var succeed = await resendInvitationEmail(
172
- {
173
- email,
174
- reference,
175
- type
176
- },
177
- context
178
- )
179
-
180
- var message = t('text.invitation email sent')
181
-
182
- if (succeed) {
183
- context.status = 200
184
- context.body = message
185
- }
186
- })
187
-
188
- authPublicProcessRouter.post('/forgot-password', async (context, next) => {
189
- const { t } = context
190
- const { email } = context.request.body
191
-
192
- if (!email) return next()
193
-
194
- const userRepo = getRepository(User)
195
- const user = await userRepo.findOne({
196
- where: {
197
- email
198
- }
199
- })
200
-
201
- const succeed = await sendPasswordResetEmail({
202
- user,
203
- context
204
- })
205
-
206
- if (succeed) {
207
- context.status = 200
208
- context.body = t('text.password reset email sent')
209
- }
210
- })
211
-
212
- authPublicProcessRouter.post('/reset-password', async (context, next) => {
213
- const { header, t } = context
214
- const { password, token } = context.request.body
215
-
216
- try {
217
- if (!(token && password)) {
218
- let message = t('error.token or password is invalid')
219
-
220
- context.status = 404
221
- context.body = {
222
- message
223
- }
224
-
225
- if (accepts(header.accept, ['text/html', '*/*'])) {
226
- await context.render('auth-page', {
227
- pageElement: 'reset-password',
228
- elementScript: '/auth/reset-password.js',
229
- data: {
230
- token,
231
- message,
232
- passwordRule,
233
- disableUserSignupProcess,
234
- disableUserFavoredLanguage,
235
- languages
236
- }
237
- })
238
- }
239
-
240
- return
241
- }
242
-
243
- await resetPassword(token, password, context)
244
-
245
- var message = t('text.password changed successfully')
246
- context.body = message
247
-
248
- clearAccessTokenCookie(context)
249
-
250
- if (accepts(header.accept, ['text/html', '*/*'])) {
251
- await context.render('auth-page', {
252
- pageElement: 'auth-result',
253
- elementScript: '/auth/result.js',
254
- data: {
255
- message,
256
- disableUserSignupProcess,
257
- disableUserFavoredLanguage,
258
- languages
259
- }
260
- })
261
- }
262
- } catch (e) {
263
- context.status = 404
264
- context.body = e.message
265
-
266
- if (accepts(header.accept, ['text/html', '*/*'])) {
267
- await context.render('auth-page', {
268
- pageElement: 'reset-password',
269
- elementScript: '/auth/reset-password.js',
270
- data: {
271
- token,
272
- message: e.message,
273
- passwordRule,
274
- disableUserSignupProcess,
275
- disableUserFavoredLanguage,
276
- languages
277
- }
278
- })
279
- }
280
- }
281
- })
282
-
283
- authPublicProcessRouter.post('/unlock-user', async (context, next) => {
284
- const { header, t } = context
285
- const { password, token } = context.request.body
286
-
287
- if (!(token || password)) {
288
- context.status = 404
289
- context.body = t('error.token or password is invalid')
290
-
291
- return
292
- }
293
-
294
- var succeed = await unlockUser(token, password)
295
-
296
- if (succeed) {
297
- context.body = t('text.password reset succeed')
298
-
299
- clearAccessTokenCookie(context)
300
- }
301
-
302
- if (accepts(header.accept, ['text/html', '*/*'])) {
303
- await context.render('auth-page', {
304
- pageElement: 'auth-result',
305
- elementScript: '/auth/result.js',
306
- data: {
307
- message: t('text.account is reactivated'),
308
- disableUserSignupProcess,
309
- disableUserFavoredLanguage,
310
- languages
311
- }
312
- })
313
- }
314
- })
@@ -1,55 +0,0 @@
1
- import Router from 'koa-router'
2
-
3
- import { config } from '@things-factory/env'
4
- import { signinMiddleware } from '../middlewares'
5
- import { accepts } from '../utils/accepts'
6
- import { setAccessTokenCookie } from '../utils/access-token-cookie'
7
-
8
- const disableUserSignupProcess = config.get('disableUserSignupProcess', false)
9
- const disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)
10
- const languages = config.get('i18n/languages', false)
11
-
12
- const SSOConfig = config.get('sso', {} as any)
13
- const SSOLinks = Object.values(SSOConfig)
14
- .filter(({ link, title }) => link && title)
15
- .map(({ link, title }) => {
16
- return { link, title }
17
- })
18
-
19
- export const authSigninRouter = new Router()
20
-
21
- authSigninRouter.get('/auth/signin', async (context, next) => {
22
- const { redirect_to, username } = context.query
23
-
24
- await context.render('auth-page', {
25
- pageElement: 'auth-signin',
26
- elementScript: '/auth/signin.js',
27
- data: {
28
- username,
29
- redirectTo: redirect_to,
30
- ssoLinks: SSOLinks,
31
- disableUserSignupProcess,
32
- disableUserFavoredLanguage,
33
- languages
34
- }
35
- })
36
- })
37
-
38
- authSigninRouter.post('/auth/signin', signinMiddleware, async (context, next) => {
39
- const { request, t } = context
40
- const { token, domain } = context.state
41
- const { body: reqBody, header } = request
42
-
43
- if (!accepts(header.accept, ['text/html', '*/*'])) {
44
- context.body = token
45
- return
46
- }
47
-
48
- var redirectTo = `/auth/checkin${domain ? '/' + domain.subdomain : ''}?redirect_to=${encodeURIComponent(
49
- reqBody.redirectTo || '/'
50
- )}`
51
-
52
- setAccessTokenCookie(context, token)
53
-
54
- context.redirect(redirectTo)
55
- })
@@ -1,95 +0,0 @@
1
- import Router from 'koa-router'
2
-
3
- import { config } from '@things-factory/env'
4
-
5
- import { signup } from '../controllers/signup'
6
- import { accepts } from '../utils/accepts'
7
- import { setAccessTokenCookie } from '../utils/access-token-cookie'
8
-
9
- const disableUserSignupProcess = config.get('disableUserSignupProcess', false)
10
- const disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)
11
- const languages = config.get('i18n/languages', false)
12
-
13
- const passwordRule = config.get('password') || {
14
- lowerCase: true,
15
- upperCase: true,
16
- digit: true,
17
- specialCharacter: true,
18
- allowRepeat: false,
19
- useTightPattern: true,
20
- useLoosePattern: false,
21
- tightCharacterLength: 8,
22
- looseCharacterLength: 15
23
- }
24
-
25
- export const authSignupRouter = new Router()
26
-
27
- if (!disableUserSignupProcess) {
28
- authSignupRouter.get('/auth/signup', async (context, next) => {
29
- const { email } = context.query
30
-
31
- await context.render('auth-page', {
32
- pageElement: 'auth-signup',
33
- elementScript: '/auth/signup.js',
34
- data: {
35
- email,
36
- passwordRule,
37
- disableUserSignupProcess,
38
- disableUserFavoredLanguage,
39
- languages
40
- }
41
- })
42
- })
43
-
44
- authSignupRouter.post('/auth/signup', async (context, next) => {
45
- const { header, t } = context
46
- const { domain } = context.state
47
- const user = context.request.body
48
-
49
- // try {
50
- const { token } = await signup(
51
- {
52
- ...user,
53
- context,
54
- domain
55
- },
56
- true
57
- )
58
-
59
- const message = t('text.user registered successfully')
60
- context.body = {
61
- message,
62
- token
63
- }
64
-
65
- setAccessTokenCookie(context, token)
66
-
67
- if (accepts(header.accept, ['text/html', '*/*'])) {
68
- await context.render('auth-page', {
69
- pageElement: 'auth-result',
70
- elementScript: '/auth/result.js',
71
- data: {
72
- message,
73
- disableUserSignupProcess,
74
- disableUserFavoredLanguage,
75
- languages
76
- }
77
- })
78
- }
79
- // } catch (e) {
80
- // context.status = 401
81
- // context.body = e.message
82
-
83
- // if (accepts(header.accept, ['text/html', '*/*'])) {
84
- // await context.render('auth-page', {
85
- // pageElement: 'auth-signup',
86
- // elementScript: '/auth/signup.js',
87
- // data: {
88
- // message: e instanceof AuthError ? t(`error.${e.message}`) : e.message,
89
- // passwordRule
90
- // }
91
- // })
92
- // }
93
- // }
94
- })
95
- }
@@ -1,9 +0,0 @@
1
- export * from './auth-private-process-router'
2
- export * from './auth-public-process-router'
3
- export * from './path-base-domain-router'
4
- export * from './site-root-router'
5
- export * from './oauth2'
6
- export * from './auth-checkin-router'
7
- export * from './auth-signin-router'
8
- export * from './auth-signup-router'
9
- export * from './webauthn-router'
@@ -1,2 +0,0 @@
1
- export * from './oauth2-authorize-router'
2
- export * from './oauth2-router'
@@ -1,81 +0,0 @@
1
- import Router from 'koa-router'
2
-
3
- import { getRepository } from '@things-factory/shell'
4
- import { config } from '@things-factory/env'
5
-
6
- import { Application } from '../../service/application/application'
7
- import { NonClient, server as oauth2orizeServer } from './oauth2-server'
8
-
9
- export const oauth2AuthorizeRouter = new Router()
10
-
11
- const disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)
12
- const languages = config.get('i18n/languages', false)
13
-
14
- // user authorization endpoint
15
- //
16
- // `authorization` middleware accepts a `validate` callback which is
17
- // responsible for validating the client making the authorization request. In
18
- // doing so, is recommended that the `redirectURI` be checked against a
19
- // registered value, although security requirements may vary accross
20
- // implementations. Once validated, the `done` callback must be invoked with
21
- // a `client` instance, as well as the `redirectURI` to which the user will be
22
- // redirected after an authorization decision is obtained.
23
- //
24
- // This middleware simply initializes a new authorization transaction. It is
25
- // the application's responsibility to authenticate the user and render a dialog
26
- // to obtain their approval (displaying details about the client requesting
27
- // authorization). We accomplish that here by routing through `ensureLoggedIn()`
28
- // first, and rendering the `dialog` view.
29
-
30
- oauth2AuthorizeRouter.get(
31
- '/authorize',
32
- oauth2orizeServer.authorize(async function (clientID, redirectURI) {
33
- const client = await getRepository(Application).findOneBy({
34
- appKey: clientID
35
- })
36
- // CONFIRM-ME redirectUrl 의 허용 범위는 ?
37
- // if (!client.redirectUrl != redirectURI) {
38
- // return false
39
- // }
40
-
41
- return [client || NonClient, redirectURI]
42
- }),
43
- async function (context, next) {
44
- const { oauth2, user, domain } = context.state
45
-
46
- let pageElement: string = 'oauth2-decision'
47
- let elementScript: string = '/oauth2/oauth2-decision-page.js'
48
-
49
- if (oauth2.client.id === NonClient.id) {
50
- pageElement = 'oauth2-decision-error'
51
- elementScript = '/oauth2/oauth2-decision-error-page.js'
52
- }
53
-
54
- try {
55
- await context.render('oauth2-page', {
56
- pageElement,
57
- elementScript,
58
- data: {
59
- domain,
60
- oauth2: {
61
- ...oauth2,
62
- user: {
63
- id: oauth2.user.id,
64
- name: oauth2.user.name,
65
- email: oauth2.user.email
66
- }
67
- },
68
- disableUserFavoredLanguage,
69
- languages
70
- }
71
- })
72
- // await context.render(decisionPage, {
73
- // domain: domain,
74
- // ...oauth2, // client, redirectURI, req { type, clientID, redirectURI, scope, state}, user, transactionID, info, locals
75
- // availableScopes
76
- // })
77
- } catch (e) {
78
- throw e
79
- }
80
- }
81
- )