50 lines
1.6 KiB
TypeScript
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));
|