summaryrefslogtreecommitdiff
path: root/server/controllers/users.controller.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/users.controller.ts')
-rw-r--r--server/controllers/users.controller.ts50
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,
+ );
+ }
+ }
+}