import { hash } from '@node-rs/argon2'; import { IsOptional, IsString } from 'class-validator'; import crypto from 'crypto'; import * as uuid from 'uuid'; import { StatsClient } from '../../entities/StatsClient'; /** * This classed is used to create a new StatsClient entity from a json body (post request). */ export class CreateStatsClient { /** * The new client's description. */ @IsString() @IsOptional() description?: string; /** * Converts this to a StatsClient entity. */ public async toEntity(): Promise { let newClient: StatsClient = new StatsClient(); newClient.description = this.description; let newUUID = uuid.v4().toUpperCase(); newClient.prefix = crypto.createHash("sha3-512").update(newUUID).digest('hex').substring(0, 7).toUpperCase(); newClient.key = await hash(newClient.prefix + "." + newUUID); newClient.cleartextkey = newClient.prefix + "." + newUUID; return newClient; } }