'use strict'; const router = require('express').Router(); const {AuthToken} = require('>/models'); function ownToken(token, req){ if(!token || token.username !== req.user.username){ let error = new Error('AuthTokenNotFound'); error.name = 'AuthTokenNotFound'; error.message = 'Token not found'; error.status = 404; throw error; } return token; } router.get('/', async function(req, res, next){ try{ return res.json(await AuthToken.findAll({where:{ username: req.user.username }})); }catch(error){ next(error); } }); router.post('/', async function(req, res, next){ try{ return res.json(await AuthToken.create({...req.body, username: req.user.username})); }catch(error){ console.error(error) next(error); } }); router.get('/user/:username', async function(req, res, next){ try{ if(req.params.username !== req.user.username){ let error = new Error('AuthTokenNotFound'); error.name = 'AuthTokenNotFound'; error.message = 'Token not found'; error.status = 404; throw error; } return res.json(await AuthToken.findAll({where:{ username: req.params.username }})); }catch(error){ next(error); } }); router.get('/:token', async function(req, res, next){ try{ let token = ownToken(await AuthToken.findByPk(req.params.token), req); token.dataValues.user = await token.getUser() return res.json(token); }catch(error){ next(error); } }); router.put('/:token', async function(req, res, next){ try{ let token = ownToken(await AuthToken.findByPk(req.params.token), req); await token.update(req.body); return res.json(token); }catch(error){ next(error); } }); router.delete('/:token', async function(req, res, next){ try{ let token = ownToken(await AuthToken.findByPk(req.params.token), req); await token.destroy(); return res.json({'deleted': true}); }catch(error){ next(error); } }); module.exports = router;