summaryrefslogtreecommitdiff
path: root/server/controllers
diff options
context:
space:
mode:
authorJoseph Ditton <jditton.atomic@gmail.com>2021-11-20 18:18:58 -0700
committerJoseph Ditton <jditton.atomic@gmail.com>2021-11-20 18:18:58 -0700
commit63c02f62aa3c57f72602a9efe89dc0780d6d3079 (patch)
treedc0a4ef57732ceb3f917b6415ea044ef02ad6f81 /server/controllers
parent674f1e04439fb1d8293f9788707093b83a1f3f1c (diff)
downloadlocchat-63c02f62aa3c57f72602a9efe89dc0780d6d3079.tar.gz
locchat-63c02f62aa3c57f72602a9efe89dc0780d6d3079.zip
basic login boilerplatre
Diffstat (limited to 'server/controllers')
-rw-r--r--server/controllers/sessions.controller.ts43
-rw-r--r--server/controllers/user.controller.ts0
-rw-r--r--server/controllers/users.controller.ts50
3 files changed, 82 insertions, 11 deletions
diff --git a/server/controllers/sessions.controller.ts b/server/controllers/sessions.controller.ts
index 884ad3c..3b179ad 100644
--- a/server/controllers/sessions.controller.ts
+++ b/server/controllers/sessions.controller.ts
@@ -1,7 +1,17 @@
-import { Body, Controller, Post, Res } from '@nestjs/common';
-import { UsersService } from 'server/providers/services/users.service';
-import { SignInDto } from '../dto/sign_in.dto';
+import {
+ Body,
+ Controller,
+ HttpException,
+ HttpStatus,
+ Post,
+ Res,
+} from '@nestjs/common';
import { Response } from 'express';
+import * as jwt from 'jsonwebtoken';
+import { UsersService } from 'server/providers/services/users.service';
+import { SignInDto } from 'server/dto/sign_in.dto';
+
+
// this is kind of a misnomer because we are doing token based auth
// instead of session based auth
@Controller()
@@ -9,19 +19,30 @@ export class SessionsController {
constructor(private usersService: UsersService) {}
@Post('/sign_in')
- async signIn(@Body() body: SignInDto, @Res() res: Response) {
- console.log("DO I GET RAN?")
- const verified = await this.usersService.verify(
+ async signIn(
+ @Body() body: SignInDto,
+ @Res({ passthrough: true }) res: Response,
+ ) {
+ const { verified, user } = await this.usersService.verify(
body.username,
body.password,
);
if (!verified) {
- res.status(400);
- console.log("here too??")
- res.json({ message: 'Invalid email or password' });
- return;
+ throw new HttpException(
+ 'Invalid email or password.',
+ HttpStatus.BAD_REQUEST,
+ );
}
- res.json({ success: true });
+ // 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 { token };
}
}
diff --git a/server/controllers/user.controller.ts b/server/controllers/user.controller.ts
deleted file mode 100644
index e69de29..0000000
--- a/server/controllers/user.controller.ts
+++ /dev/null
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,
+ );
+ }
+ }
+}