import { Router } from 'https://deno.land/x/opine@1.5.3/mod.ts'
|
|
import { validate, required } from 'https://deno.land/x/validasaur@v0.15.0/mod.ts'
|
|
import { uuid } from '../rules/uuid.ts'
|
|
|
|
import UserRepository from '../repositories/user.ts'
|
|
|
|
const router = Router()
|
|
|
|
/**
|
|
* check every route for single bucket
|
|
*
|
|
* @param request
|
|
* @param response
|
|
* @param next
|
|
* @return
|
|
*/
|
|
async function usersMiddleware(request: any, response: any, next: any)
|
|
{
|
|
// max for id
|
|
request.params.id = request.params.id.slice(0, 128)
|
|
|
|
// only dash, numbers & letters are allowed
|
|
request.params.id = request.params.id.replace(/[^a-z0-9-]/gi, '')
|
|
|
|
const [ valid, errors ] = await validate(request.params, {
|
|
id: [ uuid ]
|
|
})
|
|
|
|
// if invalid send 404
|
|
if (!valid) {
|
|
response
|
|
.setStatus(404)
|
|
.send()
|
|
}
|
|
|
|
// getting
|
|
const userRepository = new UserRepository()
|
|
const user = await userRepository.db.findOne({ '_id': request.params.id })
|
|
|
|
// if not exists send 404
|
|
if (!user) {
|
|
response
|
|
.setStatus(404)
|
|
.send()
|
|
}
|
|
|
|
response.locals.user = user
|
|
next()
|
|
}
|
|
|
|
export default usersMiddleware
|