12872c4a5a2776bc16560e6678d0b8cacc0ccb76
[oweals/peertube.git] / server / middlewares / oauth.ts
1 import 'express-validator'
2 import * as express from 'express'
3 import * as OAuthServer from 'express-oauth-server'
4 import { logger } from '../helpers/logger'
5 import { OAUTH_LIFETIME } from '../initializers'
6
7 const oAuthServer = new OAuthServer({
8   accessTokenLifetime: OAUTH_LIFETIME.ACCESS_TOKEN,
9   refreshTokenLifetime: OAUTH_LIFETIME.REFRESH_TOKEN,
10   model: require('../lib/oauth-model')
11 })
12
13 function authenticate (req: express.Request, res: express.Response, next: express.NextFunction) {
14   oAuthServer.authenticate()(req, res, err => {
15     if (err) {
16       logger.error('Cannot authenticate.', err)
17       return res.sendStatus(500)
18     }
19
20     if (res.statusCode === 401 || res.statusCode === 400 || res.statusCode === 503) {
21       return res.json({
22         error: 'Authentication failed.'
23       }).end()
24     }
25
26     return next()
27   })
28 }
29
30 function token (req: express.Request, res: express.Response, next: express.NextFunction) {
31   return oAuthServer.token()(req, res, next)
32 }
33
34 // ---------------------------------------------------------------------------
35
36 export {
37   authenticate,
38   token
39 }