diff options
Diffstat (limited to 'server/controllers/users.controller.ts')
-rw-r--r-- | server/controllers/users.controller.ts | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/server/controllers/users.controller.ts b/server/controllers/users.controller.ts new file mode 100644 index 0000000..773b110 --- /dev/null +++ b/server/controllers/users.controller.ts @@ -0,0 +1,50 @@ +import { + Body, + Controller, + HttpException, + HttpStatus, + Post, + Res, +} from '@nestjs/common'; +import bcrypt from 'bcrypt'; +import { Response } from 'express'; +import * as jwt from 'jsonwebtoken'; +import { CreateUserDto } from 'server/dto/create_user.dto'; +import { User } from 'server/entities/user.entity'; +import { UsersService } from 'server/providers/services/users.service'; + +@Controller() +export class UsersController { + constructor(private usersService: UsersService) {} + + @Post('/users') + async create( + @Body() userPayload: CreateUserDto, + @Res({ passthrough: true }) res: Response, + ) { + const newUser = new User(); + newUser.email = userPayload.email; + newUser.name = userPayload.name; + newUser.password_hash = await bcrypt.hash(userPayload.password, 10); + + try { + const user = await this.usersService.create(newUser); + // assume signup and write cookie + // Write JWT to cookie and send with response. + const token = jwt.sign( + { + user_id: user.id, + }, + process.env.ENCRYPTION_KEY, + { expiresIn: '1h' }, + ); + res.cookie('_token', token); + return { user, token }; + } catch (e) { + throw new HttpException( + `User creation failed. ${e.message}`, + HttpStatus.BAD_REQUEST, + ); + } + } +} |