diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index c655ff0c9..bb769f377 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -207,6 +207,7 @@ export class UserResolver { const loginUser = await loginUserRepository.findByEmail(email).catch(() => { throw new Error('No user with this credentials') }) + if (!loginUser.emailChecked) throw new Error('user email not validated') const passwordHash = SecretKeyCryptographyCreateKey(email, password) // return short and long hash const loginUserPassword = BigInt(loginUser.password.toString()) if (loginUserPassword !== passwordHash[0].readBigUInt64LE()) { diff --git a/database/entity/ServerUser.ts b/database/entity/ServerUser.ts new file mode 100644 index 000000000..e776093ac --- /dev/null +++ b/database/entity/ServerUser.ts @@ -0,0 +1,31 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity('server_users') +export class ServerUser extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ length: 50 }) + username: string + + @Column({ type: 'bigint', unsigned: true }) + password: BigInt + + @Column({ length: 50, unique: true }) + email: string + + @Column({ length: 20, default: 'admin' }) + role: string + + @Column({ default: 0 }) + activated: number + + @Column({ name: 'last_login', default: null, nullable: true }) + lastLogin: Date + + @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP' }) + created: Date + + @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP' }) + modified: Date +}