From f1629440feae3a49ab17ec7d29b709ff392d6988 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Fri, 4 Dec 2020 17:04:33 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20better=20uuid=20+=20starting=20h?= =?UTF-8?q?ashing=20implementation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #14 --- package.json | 7 +++++-- src/models/CreateUser.ts | 14 ++++++++++---- src/models/User.ts | 10 ++++------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 335f5ce..afc485d 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ ], "license": "CC-BY-NC-SA-4.0", "dependencies": { + "argon2": "^0.27.0", "body-parser": "^1.19.0", "class-transformer": "^0.3.1", "class-validator": "^0.12.2", @@ -39,7 +40,8 @@ "routing-controllers-openapi": "^2.1.0", "swagger-ui-express": "^4.1.5", "typeorm": "^0.2.29", - "typeorm-routing-controllers-extensions": "^0.2.0" + "typeorm-routing-controllers-extensions": "^0.2.0", + "uuid": "^8.3.1" }, "devDependencies": { "@types/cors": "^2.8.8", @@ -49,6 +51,7 @@ "@types/multer": "^1.4.4", "@types/node": "^14.14.9", "@types/swagger-ui-express": "^4.1.2", + "@types/uuid": "^8.3.0", "dotenv-safe": "^8.2.0", "nodemon": "^2.0.6", "sqlite3": "^5.0.0", @@ -61,4 +64,4 @@ "build": "tsc", "docs": "typedoc --out docs src" } -} +} \ No newline at end of file diff --git a/src/models/CreateUser.ts b/src/models/CreateUser.ts index 23cd934..9b57318 100644 --- a/src/models/CreateUser.ts +++ b/src/models/CreateUser.ts @@ -1,8 +1,8 @@ -import { IsInt, IsOptional, IsPhoneNumber, IsString } from 'class-validator'; -import { User } from '../models/User'; -import { getConnectionManager } from 'typeorm'; +import * as argon2 from "argon2"; +import { IsInt, IsOptional, IsPhoneNumber, IsString, IsUUID } from 'class-validator'; +import * as uuid from 'uuid'; import { UserGroupNotFoundError, UsernameOrEmailNeededError } from '../errors/CreateUserErrors'; -import { UserGroup } from './UserGroup'; +import { User } from '../models/User'; export class CreateUser { @IsString() @@ -24,6 +24,8 @@ export class CreateUser { @IsInt() @IsOptional() groupId?: number[] | number + @IsUUID("5") + uuid: string; public async toUser(): Promise { let newUser: User = new User(); @@ -39,12 +41,16 @@ export class CreateUser { throw new UserGroupNotFoundError(); } + const new_uuid = uuid.v4() + newUser.email = this.email newUser.username = this.username newUser.firstname = this.firstname newUser.middlename = this.middlename newUser.lastname = this.lastname + newUser.uuid = new_uuid // TODO: hash password here or in controller/ in User model via setter? + this.password = await argon2.hash(this.password); newUser.password = this.password console.log(newUser) diff --git a/src/models/User.ts b/src/models/User.ts index 94d770e..16f8653 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -1,8 +1,8 @@ -import { Entity, Column, OneToMany, ManyToOne, PrimaryGeneratedColumn, Generated, Unique, JoinTable, ManyToMany } from "typeorm"; -import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, isUUID, } from "class-validator"; -import { UserGroup } from './UserGroup'; +import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, IsUUID } from "class-validator"; +import { Column, Entity, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import { Permission } from './Permission'; import { UserAction } from './UserAction'; +import { UserGroup } from './UserGroup'; /** * Defines a admin user. @@ -20,9 +20,7 @@ export class User { /** * autogenerated uuid */ - @IsOptional() - @IsInt() - @Generated("uuid") + @IsUUID("5") uuid: string; /**