import { Router } from 'oak'; import { CGGService } from 'cgg/Application.ts'; import { createUserSessionToken } from 'lib/jwt.ts'; import { USER_TOKEN } from 'common/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));