33 lines
1020 B
TypeScript
33 lines
1020 B
TypeScript
import * as argon2 from "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<StatsClient> {
|
|
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 argon2.hash(newClient.prefix + "." + newUUID);
|
|
newClient.cleartextkey = newClient.prefix + "." + newUUID;
|
|
|
|
return newClient;
|
|
}
|
|
} |