50 lines
1.6 KiB
TypeScript

import { Router } from 'oak';
import { CGGService } from 'cgg/Application.ts';
import { createUserSessionToken } from 'lib/jwt.ts';
import { USER_TOKEN } from '../constsAndEnums.ts';
import { User } from './data.ts';
import { bodyExists } from '../middleware/bodyExists.ts';
const app = new CGGService({ prefix: '/users' });
app.route(new Router()
.post('/signup', bodyExists, async ctx => {
const userData = await ctx.request.body({ type: 'json' }).value;
console.log(userData);
const user = new User({
username: userData.username
});
user.password = await (user as any).generateHash(userData.password);
await user.save();
ctx.response.status = 200;
})
.post('/signin', bodyExists, async ctx => {
const userData = await ctx.request.body({ type: 'json' }).value;
const user = await User.findOne({username: userData.username});
const pwValid = user && await (user as any).validatePassword(userData.password);
if (user && pwValid) {
ctx.cookies.set(USER_TOKEN, await createUserSessionToken({username: user.username}))
ctx.response.body = `User ${user.username} signed in`;
} else {
ctx.response.status = 403;
ctx.response.body = "How dare you???"
}
})
.get('/me', ctx => {
ctx.response.body = ctx.state.user?.username || 'You are not signed in';
})
.get('/:id', ctx => {
ctx.response.body = ctx.params.id;
})
)
// .post('/signup', ctx => {
// // ctx.
// }))
// app.route(routes)
// app.use(routes.routes());
// app.use(routes.allowedMethods());
app.start();
console.log('User service running on ' + Deno.args.at(0));