@things-factory/auth-base 8.0.0-beta.1 → 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,100 +0,0 @@
1
- import { ObjectType, InputType, Field, ID, Int } from 'type-graphql'
2
- import { GraphQLEmailAddress } from 'graphql-scalars'
3
- import { ObjectRef } from '@things-factory/shell'
4
- import { User } from './user'
5
-
6
- @ObjectType()
7
- export class PasswordRule {
8
- @Field({ nullable: true })
9
- lowerCase?: boolean
10
-
11
- @Field({ nullable: true })
12
- upperCase?: boolean
13
-
14
- @Field({ nullable: true })
15
- digit?: boolean
16
-
17
- @Field({ nullable: true })
18
- specialCharacter?: boolean
19
-
20
- @Field({ nullable: true })
21
- allowRepeat?: boolean
22
-
23
- @Field({ nullable: true })
24
- useTightPattern?: boolean
25
-
26
- @Field({ nullable: true })
27
- useLoosePattern?: boolean
28
-
29
- @Field({ nullable: true })
30
- tightCharacterLength?: number
31
-
32
- @Field({ nullable: true })
33
- looseCharacterLength?: number
34
- }
35
-
36
- @InputType()
37
- export class NewUser {
38
- @Field()
39
- username: string
40
-
41
- @Field()
42
- name: string
43
-
44
- @Field({ nullable: true })
45
- description?: string
46
-
47
- @Field(type => GraphQLEmailAddress)
48
- email: string
49
-
50
- @Field({ nullable: true })
51
- password?: string
52
-
53
- @Field({ nullable: true })
54
- userType?: string
55
-
56
- @Field(type => [ObjectRef], { nullable: true })
57
- roles?: ObjectRef[]
58
- }
59
-
60
- @InputType()
61
- export class UserPatch {
62
- @Field(type => ID, { nullable: true })
63
- id?: string
64
-
65
- @Field({ nullable: true })
66
- name?: string
67
-
68
- @Field(type => [ObjectRef], { nullable: true })
69
- domains?: [ObjectRef]
70
-
71
- @Field({ nullable: true })
72
- description?: string
73
-
74
- @Field(type => GraphQLEmailAddress, { nullable: true })
75
- email?: string
76
-
77
- @Field({ nullable: true })
78
- password?: string
79
-
80
- @Field({ nullable: true })
81
- status?: string
82
-
83
- @Field(type => [ObjectRef], { nullable: true })
84
- roles?: ObjectRef[]
85
-
86
- @Field({ nullable: true })
87
- userType?: string
88
-
89
- @Field({ nullable: true })
90
- cuFlag?: string
91
- }
92
-
93
- @ObjectType()
94
- export class UserList {
95
- @Field(type => [User], { nullable: true })
96
- items: User[]
97
-
98
- @Field(type => Int, { nullable: true })
99
- total: number
100
- }
@@ -1,381 +0,0 @@
1
- import crypto from 'crypto'
2
- import jwt from 'jsonwebtoken'
3
- import { Directive, Field, ID, ObjectType } from 'type-graphql'
4
- import { GraphQLEmailAddress } from 'graphql-scalars'
5
- import {
6
- Column,
7
- CreateDateColumn,
8
- Entity,
9
- ILike,
10
- Index,
11
- JoinTable,
12
- ManyToMany,
13
- ManyToOne,
14
- OneToMany,
15
- PrimaryGeneratedColumn,
16
- RelationId,
17
- UpdateDateColumn
18
- } from 'typeorm'
19
-
20
- import { config } from '@things-factory/env'
21
- import { Domain, getRepository } from '@things-factory/shell'
22
-
23
- import { validatePasswordByRule } from '../../controllers/utils/password-rule'
24
- import { AuthError } from '../../errors/auth-error'
25
- import { SECRET } from '../../utils/get-secret'
26
- import { Role } from '../role/role'
27
- import { Privilege } from '../privilege/privilege'
28
- import { WebAuthCredential } from '../web-auth-credential/web-auth-credential'
29
- import { UsersAuthProviders } from '../users-auth-providers/users-auth-providers'
30
- import { getDomainsWithPrivilege } from '../../utils/get-user-domains'
31
-
32
- const ORMCONFIG = config.get('ormconfig', {})
33
- const DATABASE_TYPE = ORMCONFIG.type
34
-
35
- const sessionExpirySeconds = Number(config.get('session/expirySeconds')) || '7d'
36
-
37
- export enum UserStatus {
38
- INACTIVE = 'inactive',
39
- ACTIVATED = 'activated',
40
- DELETED = 'deleted',
41
- LOCKED = 'locked',
42
- BANNED = 'banned',
43
- PWD_RESET_REQUIRED = 'password_reset_required'
44
- }
45
-
46
- @Entity()
47
- @Index('ix_user_0', (user: User) => [user.email], {
48
- unique: true
49
- })
50
- @Index('ix_user_1', (user: User) => [user.username], {
51
- unique: true,
52
- where: '"username" IS NOT NULL'
53
- })
54
- @ObjectType()
55
- export class User {
56
- @PrimaryGeneratedColumn('uuid')
57
- @Field(type => ID)
58
- readonly id: string
59
-
60
- @Column({ nullable: true })
61
- @Field({ nullable: true })
62
- username: string
63
-
64
- @Column()
65
- @Field({ nullable: true })
66
- name: string
67
-
68
- @Column({ nullable: true })
69
- @Field({ nullable: true })
70
- description: string
71
-
72
- @ManyToMany(type => Domain)
73
- @JoinTable({ name: 'users_domains' })
74
- @Field(type => [Domain])
75
- domains?: Domain[]
76
-
77
- @Column()
78
- @Field(type => GraphQLEmailAddress)
79
- email: string
80
-
81
- @Directive('@privilege(category: "security", privilege: "query", domainOwnerGranted: true)')
82
- @Column({
83
- nullable: true,
84
- type:
85
- DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
86
- ? 'longtext'
87
- : DATABASE_TYPE == 'oracle'
88
- ? 'clob'
89
- : DATABASE_TYPE == 'mssql'
90
- ? 'nvarchar'
91
- : 'varchar',
92
- length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
93
- })
94
- password: string
95
-
96
- @ManyToMany(type => Role, role => role.users)
97
- @JoinTable({ name: 'users_roles' })
98
- @Field(type => [Role])
99
- roles?: Role[]
100
-
101
- @Column({ nullable: true })
102
- @Field({ nullable: true })
103
- userType: string // default: 'user', enum: 'user', 'application', 'appliance'
104
-
105
- @Column({ nullable: true })
106
- @Field({ nullable: true })
107
- reference: string
108
-
109
- @Directive('@privilege(category: "security", privilege: "query", domainOwnerGranted: true)')
110
- @Column({ nullable: true })
111
- salt: string
112
-
113
- @Column({ nullable: true })
114
- @Field({ nullable: true })
115
- locale: string
116
-
117
- @Directive('@privilege(category: "security", privilege: "query", domainOwnerGranted: true)')
118
- @Column({ nullable: true })
119
- @Field({ nullable: true })
120
- ssoId: string
121
-
122
- @Column({
123
- type:
124
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
125
- ? 'enum'
126
- : DATABASE_TYPE == 'oracle'
127
- ? 'varchar2'
128
- : DATABASE_TYPE == 'mssql'
129
- ? 'nvarchar'
130
- : 'varchar',
131
- enum:
132
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? UserStatus : undefined,
133
- length: DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? undefined : 32,
134
- default: UserStatus.INACTIVE
135
- })
136
- @Field(type => String)
137
- status: UserStatus
138
-
139
- @Column({ type: 'smallint', default: 0 })
140
- failCount: number
141
-
142
- @Column({ nullable: true })
143
- passwordUpdatedAt: Date
144
-
145
- @Field({ nullable: true })
146
- owner: boolean /* should not be a column */
147
-
148
- @OneToMany(() => WebAuthCredential, credential => credential.user)
149
- credentials: WebAuthCredential[]
150
-
151
- @OneToMany(() => UsersAuthProviders, usersAuthProviders => usersAuthProviders.user)
152
- @Field(type => [UsersAuthProviders], { nullable: true })
153
- usersAuthProviders: UsersAuthProviders[]
154
-
155
- @ManyToOne(type => User, { nullable: true })
156
- @Field({ nullable: true })
157
- creator: User
158
-
159
- @RelationId((user: User) => user.creator)
160
- creatorId: string
161
-
162
- @ManyToOne(type => User, { nullable: true })
163
- @Field({ nullable: true })
164
- updater: User
165
-
166
- @RelationId((user: User) => user.updater)
167
- updaterId: string
168
-
169
- @CreateDateColumn()
170
- @Field({ nullable: true })
171
- createdAt: Date
172
-
173
- @UpdateDateColumn()
174
- @Field({ nullable: true })
175
- updatedAt: Date
176
-
177
- /* signing for jsonwebtoken */
178
- async sign(options?) {
179
- var { expiresIn = sessionExpirySeconds } = options || {}
180
-
181
- var user = {
182
- username: this.username || this.email
183
- }
184
-
185
- return await jwt.sign(user, SECRET, {
186
- expiresIn,
187
- issuer: 'hatiolab.com',
188
- subject: 'user'
189
- })
190
- }
191
-
192
- /* validate password through password rule */
193
- static validatePasswordByRule(password, lng) {
194
- validatePasswordByRule(password, lng)
195
- }
196
-
197
- /* generate salt */
198
- static generateSalt() {
199
- return crypto.randomBytes(16).toString('hex')
200
- }
201
-
202
- /* encode password */
203
- static encode(password: string, salt) {
204
- return crypto
205
- .createHmac('sha256', salt || SECRET)
206
- .update(password)
207
- .digest('base64')
208
- }
209
-
210
- /* verify password */
211
- static verify(hashed, password, salt) {
212
- return (
213
- hashed ==
214
- crypto
215
- .createHmac('sha256', salt || SECRET)
216
- .update(password)
217
- .digest('base64') ||
218
- hashed ==
219
- crypto
220
- .createHmac('sha1', salt || SECRET)
221
- .update(password)
222
- .digest('base64')
223
- )
224
- }
225
-
226
- static async checkAuthWithEmail(decoded) {
227
- if (!decoded?.email) {
228
- throw new AuthError({
229
- errorCode: AuthError.ERROR_CODES.USER_NOT_FOUND
230
- })
231
- }
232
-
233
- const repository = getRepository(User)
234
- var user = await repository.findOne({
235
- where: { email: decoded.email },
236
- relations: ['domains'],
237
- cache: true
238
- })
239
-
240
- if (!user)
241
- throw new AuthError({
242
- errorCode: AuthError.ERROR_CODES.USER_NOT_FOUND
243
- })
244
- else {
245
- switch (user.status) {
246
- case UserStatus.INACTIVE:
247
- throw new AuthError({
248
- errorCode: AuthError.ERROR_CODES.USER_NOT_ACTIVATED,
249
- detail: {
250
- email: user.email
251
- }
252
- })
253
- case UserStatus.LOCKED:
254
- throw new AuthError({
255
- errorCode: AuthError.ERROR_CODES.USER_LOCKED,
256
- detail: {
257
- email: user.email
258
- }
259
- })
260
- case UserStatus.DELETED:
261
- throw new AuthError({
262
- errorCode: AuthError.ERROR_CODES.USER_DELETED
263
- })
264
- }
265
-
266
- return user
267
- }
268
- }
269
-
270
- static async checkAuth(decoded) {
271
- // id 는 하위호환성을 위해 단기적으로 유지함
272
- const { id, username } = decoded || {}
273
-
274
- if (!id && !username) {
275
- throw new AuthError({
276
- errorCode: AuthError.ERROR_CODES.USER_NOT_FOUND
277
- })
278
- }
279
-
280
- const repository = getRepository(User)
281
- if (id) {
282
- var user = await repository.findOne({
283
- where: { id },
284
- relations: ['domains', 'credentials'],
285
- cache: true
286
- })
287
- } else {
288
- var user = await repository.findOne({
289
- where: { username },
290
- relations: ['domains', 'credentials'],
291
- cache: true
292
- })
293
-
294
- if (!user && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(username)) {
295
- user = await repository.findOne({
296
- where: {
297
- email: ILike(username)
298
- },
299
- relations: ['domains', 'credentials'],
300
- cache: true
301
- })
302
- }
303
- }
304
-
305
- if (!user)
306
- throw new AuthError({
307
- errorCode: AuthError.ERROR_CODES.USER_NOT_FOUND
308
- })
309
- else {
310
- switch (user.status) {
311
- case UserStatus.INACTIVE:
312
- throw new AuthError({
313
- errorCode: AuthError.ERROR_CODES.USER_NOT_ACTIVATED,
314
- detail: {
315
- email: user.email
316
- }
317
- })
318
- case UserStatus.LOCKED:
319
- throw new AuthError({
320
- errorCode: AuthError.ERROR_CODES.USER_LOCKED,
321
- detail: {
322
- email: user.email
323
- }
324
- })
325
- case UserStatus.DELETED:
326
- throw new AuthError({
327
- errorCode: AuthError.ERROR_CODES.USER_DELETED
328
- })
329
- }
330
-
331
- const { defaultPassword } = config.get('password')
332
-
333
- if (defaultPassword && user.password === this.encode(defaultPassword, user.salt)) {
334
- user.status = UserStatus.PWD_RESET_REQUIRED
335
- }
336
-
337
- return user
338
- }
339
- }
340
-
341
- static async hasPrivilege(privilege: string, category: string, domain: Domain, user: User): Promise<boolean> {
342
- const result = await getRepository(Privilege)
343
- .createQueryBuilder('privilege')
344
- .innerJoin('privilege.roles', 'role')
345
- .innerJoin('role.users', 'user')
346
- .where('privilege.category = :category', { category })
347
- .andWhere('privilege.name = :privilege', { privilege })
348
- .andWhere('user.id = :userId', { userId: user.id })
349
- .andWhere('role.domain.id = :domainId', { domainId: domain.id })
350
- .getCount()
351
-
352
- return result > 0
353
- }
354
-
355
- static async getPrivilegesByDomain(user: User, domain: Domain): Promise<{ category: string; privilege: string }[]> {
356
- const result = await getRepository(User)
357
- .createQueryBuilder('user')
358
- .leftJoinAndSelect('user.roles', 'role')
359
- .leftJoinAndSelect('role.privileges', 'privilege')
360
- .select(['privilege.name AS privilege', 'privilege.category AS category'])
361
- .where('user.id = :userId', { userId: user.id })
362
- .andWhere('role.domain.id = :domainId', { domainId: domain.id })
363
- .orderBy('privilege.category')
364
- .addOrderBy('privilege.name')
365
- .getRawMany()
366
-
367
- const distinct = result.reduce((acc, current) => {
368
- const last = acc[acc.length - 1]
369
- if (!last || last.privilege !== current.privilege || last.category !== current.category) {
370
- acc.push(current)
371
- }
372
- return acc
373
- }, [])
374
-
375
- return distinct
376
- }
377
-
378
- static async getDomainsWithPrivilege(privilege: string, category: string, user: User) {
379
- return getDomainsWithPrivilege(user, privilege, category)
380
- }
381
- }
@@ -1,5 +0,0 @@
1
- import { UsersAuthProviders } from './users-auth-providers'
2
-
3
- export const entities = [UsersAuthProviders]
4
- export const resolvers = []
5
- export const subscribers = []
@@ -1,71 +0,0 @@
1
- import {
2
- CreateDateColumn,
3
- UpdateDateColumn,
4
- DeleteDateColumn,
5
- Entity,
6
- Index,
7
- Column,
8
- RelationId,
9
- ManyToOne,
10
- PrimaryGeneratedColumn,
11
- VersionColumn
12
- } from 'typeorm'
13
- import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
14
-
15
- import { Domain } from '@things-factory/shell'
16
- import { User } from '../user/user'
17
- import { AuthProvider } from '../auth-provider/auth-provider'
18
-
19
- @Entity()
20
- @Index(
21
- 'ix_users_auth_providers_0',
22
- (usersAuthProviders: UsersAuthProviders) => [
23
- usersAuthProviders.domain,
24
- usersAuthProviders.user,
25
- usersAuthProviders.authProvider
26
- ],
27
- { unique: true }
28
- )
29
- @ObjectType({ description: 'Entity for UsersAuthProviders' })
30
- export class UsersAuthProviders {
31
- @PrimaryGeneratedColumn('uuid')
32
- @Field(type => ID)
33
- readonly id: string
34
-
35
- @ManyToOne(type => Domain)
36
- @Field(type => Domain)
37
- domain?: Domain
38
-
39
- @RelationId((usersAuthProviders: UsersAuthProviders) => usersAuthProviders.domain)
40
- domainId?: string
41
-
42
- @ManyToOne(() => User, user => user.usersAuthProviders, {
43
- onDelete: 'CASCADE'
44
- })
45
- @Field(type => User, { nullable: true })
46
- user: User
47
-
48
- @RelationId((usersAuthProviders: UsersAuthProviders) => usersAuthProviders.user)
49
- userId?: string
50
-
51
- @ManyToOne(() => AuthProvider, authProvider => authProvider.usersAuthProviders, {
52
- onDelete: 'CASCADE'
53
- })
54
- @Field(type => AuthProvider, { nullable: true })
55
- authProvider: AuthProvider
56
-
57
- @RelationId((usersAuthProviders: UsersAuthProviders) => usersAuthProviders.authProvider)
58
- authProviderId?: string
59
-
60
- @Column()
61
- @Field({ nullable: true })
62
- ssoId: string
63
-
64
- @CreateDateColumn()
65
- @Field({ nullable: true })
66
- createdAt?: Date
67
-
68
- @UpdateDateColumn()
69
- @Field({ nullable: true })
70
- updatedAt: Date
71
- }
@@ -1,3 +0,0 @@
1
- import { VerificationToken, VerificationTokenType } from './verification-token'
2
-
3
- export const entities = [VerificationToken, VerificationTokenType]
@@ -1,60 +0,0 @@
1
- import { Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm'
2
- import { config } from '@things-factory/env'
3
- import { ObjectType, Field, ID } from 'type-graphql'
4
- const ORMCONFIG = config.get('ormconfig', {})
5
- const DATABASE_TYPE = ORMCONFIG.type
6
-
7
- export enum VerificationTokenType {
8
- ACTIVATION = 'activation',
9
- PASSWORD_RESET = 'password-reset',
10
- UNLOCK = 'unlock',
11
- REQUEST_ACCESS_TOKEN = 'access-token'
12
- }
13
-
14
- @Entity()
15
- @ObjectType()
16
- export class VerificationToken {
17
- @PrimaryColumn()
18
- @Field(type => ID)
19
- userId: string
20
-
21
- @Column({
22
- nullable: false
23
- })
24
- @Field()
25
- token: string
26
-
27
- @Column({
28
- nullable: false,
29
- type:
30
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
31
- ? 'enum'
32
- : DATABASE_TYPE == 'oracle'
33
- ? 'varchar2'
34
- : DATABASE_TYPE == 'mssql'
35
- ? 'nvarchar'
36
- : 'varchar',
37
- enum:
38
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
39
- ? VerificationTokenType
40
- : undefined,
41
- length: DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? undefined : 32,
42
- default: VerificationTokenType.ACTIVATION
43
- })
44
- @Field()
45
- type: VerificationTokenType
46
-
47
- @Column({
48
- nullable: true
49
- })
50
- @Field({ nullable: true })
51
- suppliment: string
52
-
53
- @CreateDateColumn()
54
- @Field()
55
- createdAt: Date
56
-
57
- @UpdateDateColumn()
58
- @Field()
59
- updatedAt: Date
60
- }
@@ -1,3 +0,0 @@
1
- import { WebAuthCredential } from './web-auth-credential'
2
-
3
- export const entities = [WebAuthCredential]
@@ -1,67 +0,0 @@
1
- import { Field, ID } from 'type-graphql'
2
- import {
3
- CreateDateColumn,
4
- UpdateDateColumn,
5
- Entity,
6
- Index,
7
- Column,
8
- RelationId,
9
- ManyToOne,
10
- PrimaryGeneratedColumn
11
- } from 'typeorm'
12
-
13
- import { User } from '../user/user'
14
- import { AuthenticatorTransportFuture } from '@simplewebauthn/server/script/deps'
15
-
16
- @Entity()
17
- @Index(
18
- 'ix_web_auth_credential_0',
19
- (webAuthCredential: WebAuthCredential) => [webAuthCredential.user, webAuthCredential.credentialId],
20
- { unique: true }
21
- )
22
- export class WebAuthCredential {
23
- @PrimaryGeneratedColumn('uuid')
24
- @Field(type => ID)
25
- readonly id: string
26
-
27
- @ManyToOne(type => User, { nullable: true })
28
- @Field(type => User, { nullable: true })
29
- user?: User
30
-
31
- @RelationId((webAuthCredential: WebAuthCredential) => webAuthCredential.user)
32
- userId?: string
33
-
34
- @Column()
35
- @Field({ nullable: true })
36
- credentialId: string
37
-
38
- @Column()
39
- @Field({ nullable: true })
40
- publicKey: string
41
-
42
- @Column()
43
- @Field({ nullable: true })
44
- counter: number
45
-
46
- @CreateDateColumn()
47
- @Field({ nullable: true })
48
- createdAt?: Date
49
-
50
- @UpdateDateColumn()
51
- @Field({ nullable: true })
52
- updatedAt?: Date
53
-
54
- @ManyToOne(type => User, { nullable: true })
55
- @Field(type => User, { nullable: true })
56
- creator?: User
57
-
58
- @RelationId((webAuthCredential: WebAuthCredential) => webAuthCredential.creator)
59
- creatorId?: string
60
-
61
- @ManyToOne(type => User, { nullable: true })
62
- @Field(type => User, { nullable: true })
63
- updater?: User
64
-
65
- @RelationId((webAuthCredential: WebAuthCredential) => webAuthCredential.updater)
66
- updaterId?: string
67
- }