You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

51 lines
1.2 KiB

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