jolocom-wallet.entity.ts 1.16 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
import {
  BaseEntity,
  Entity,
  PrimaryGeneratedColumn,
  Column,
  OneToOne,
  JoinColumn,
  OneToMany,
} from 'typeorm';
import { randomBytes } from 'crypto';

import { Organization } from '../../organizations/organization.entity';
import { JolocomCredentialType } from './jolocom-credential-type.entity';

const JOLOCOM_WALLET_SEED_BYTES = 32;
const JOLOCOM_WALLET_PASSWORD_BYTES = 16;

@Entity()
export class JolocomWallet extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ update: false })
  encryptedSeedHex: string;

  @Column({ update: false })
  password: string;

  @OneToOne(() => Organization)
  @JoinColumn()
  organization: Organization;

  @OneToMany(
    () => JolocomCredentialType,
    credentialOffer => credentialOffer.wallet,
  )
  credentialOffers: JolocomCredentialType[];

  static randomPassword() {
    return randomBytes(JOLOCOM_WALLET_PASSWORD_BYTES).toString('hex');
  }

  static randomSeed() {
    return randomBytes(JOLOCOM_WALLET_SEED_BYTES);
  }

  get encryptedSeed(): Buffer {
    return Buffer.from(this.encryptedSeedHex, 'hex');
  }

  set encryptedSeed(seed: Buffer) {
    this.encryptedSeedHex = seed.toString('hex');
  }
}