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.
		
		
		
		
		
			
		
			
				
					
					
						
							146 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							146 lines
						
					
					
						
							3.3 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| const Fastify = require('fastify')
 | |
| 
 | |
| function build (opts) {
 | |
|   const fastify = Fastify(opts)
 | |
| 
 | |
|   fastify
 | |
|     .register(require('./auth'))
 | |
|     .after(routes)
 | |
| 
 | |
|   fastify.decorate('verifyNumber', verifyNumber)
 | |
|   fastify.decorate('verifyOdd', verifyOdd)
 | |
|   fastify.decorate('verifyBig', verifyBig)
 | |
| 
 | |
|   function verifyNumber (request, reply, done) {
 | |
|     const n = request.body.n
 | |
| 
 | |
|     if (typeof (n) !== 'number') {
 | |
|       request.number = false
 | |
|       return done(new Error('type of `n` is not `number`'))
 | |
|     }
 | |
| 
 | |
|     request.number = true
 | |
|     return done()
 | |
|   }
 | |
| 
 | |
|   function verifyOdd (request, reply, done) {
 | |
|     const n = request.body.n
 | |
| 
 | |
|     if (typeof (n) !== 'number' || n % 2 === 0) {
 | |
|       request.odd = false
 | |
|       return done(new Error('`n` is not odd'))
 | |
|     }
 | |
| 
 | |
|     request.odd = true
 | |
|     return done()
 | |
|   }
 | |
| 
 | |
|   function verifyBig (request, reply, done) {
 | |
|     const n = request.body.n
 | |
| 
 | |
|     if (typeof (n) !== 'number' || n < 100) {
 | |
|       request.big = false
 | |
|       return done(new Error('`n` is not big'))
 | |
|     }
 | |
| 
 | |
|     request.big = true
 | |
|     return done()
 | |
|   }
 | |
| 
 | |
|   function routes () {
 | |
|     fastify.route({
 | |
|       method: 'GET',
 | |
|       url: '/',
 | |
|       handler: (req, reply) => {
 | |
|         reply.send({ hello: 'world' })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/checkand',
 | |
|       preHandler: fastify.auth([fastify.verifyNumber, fastify.verifyOdd], { relation: 'and' }),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({ hello: 'world' })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/checkor',
 | |
|       preHandler: fastify.auth([fastify.verifyOdd, fastify.verifyBig]),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({ hello: 'world' })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/singleor',
 | |
|       preHandler: fastify.auth([fastify.verifyOdd]),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({ hello: 'world' })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/singleand',
 | |
|       preHandler: fastify.auth([fastify.verifyOdd], { relation: 'and' }),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({ hello: 'world' })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/run-all-or',
 | |
|       preHandler: fastify.auth([fastify.verifyOdd, fastify.verifyBig, fastify.verifyNumber], { run: 'all' }),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({
 | |
|           odd: req.odd,
 | |
|           big: req.big,
 | |
|           number: req.number
 | |
|         })
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     fastify.route({
 | |
|       method: 'POST',
 | |
|       url: '/run-all-and',
 | |
|       preHandler: fastify.auth([fastify.verifyOdd, fastify.verifyBig, fastify.verifyNumber], { run: 'all', relation: 'and' }),
 | |
|       handler: (req, reply) => {
 | |
|         req.log.info('Auth route')
 | |
|         reply.send({
 | |
|           odd: req.odd,
 | |
|           big: req.big,
 | |
|           number: req.number
 | |
|         })
 | |
|       }
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   return fastify
 | |
| }
 | |
| 
 | |
| if (require.main === module) {
 | |
|   const fastify = build({
 | |
|     logger: {
 | |
|       level: 'info'
 | |
|     }
 | |
|   })
 | |
|   fastify.listen(3000, '0.0.0.0', err => {
 | |
|     if (err) throw err
 | |
|     console.log(`Server listenting at http://${JSON.stringify(fastify.server.address())}`)
 | |
|   })
 | |
| }
 | |
| 
 | |
| module.exports = build
 |