import { Entity, Column, PrimaryGeneratedColumn, ManyToOne, OneToMany, OneToOne } from 'typeorm'; export enum UserRole { ADMIN = 2, USER = 1, DISABLED = 0 } export enum tfaTypes { NONE = 0, EMAIL = 1, TOTP = 2 } @Entity() export class INode { @PrimaryGeneratedColumn() id: number; @Column() isFile: boolean; @Column() name: string; @Column({ nullable: true }) size: number; @Column({ nullable: true }) parentId: number; @ManyToOne(() => INode, (node) => node.children) parent: Promise; @OneToMany(() => INode, (node) => node.parent) children: Promise; @Column({ nullable: true }) ownerId: number; @ManyToOne(() => User) owner: Promise; } @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column({ default: false }) isGitlabUser: boolean; @Column() name: string; @Column() password: string; @Column({ type: 'int', default: UserRole.DISABLED, transformer: { from: (db: number): UserRole => db, to: (role: UserRole): number => role } }) role: UserRole; @Column({ nullable: true }) rootId: number; @OneToOne(() => INode) root: Promise; @Column({ type: 'int', default: tfaTypes.NONE, transformer: { from: (db: number): tfaTypes => db, to: (type: tfaTypes): number => type } }) tfaType: tfaTypes; @Column({ nullable: true }) tfaSecret: string; @Column({ nullable: true }) gitlabAT: string; @Column({ nullable: true }) gitlabRT: string; } @Entity() export class JWTToken { @PrimaryGeneratedColumn() id: number; @Column() ownerId: number; @Column({ nullable: true }) exp: number; }