]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/middlewares/oauth.ts
Use video abuse filters on client side
[github/Chocobozzz/PeerTube.git] / server / middlewares / oauth.ts
index 1d193d467455b675f5a4d4e117555ff56649b17b..9d0eaa51f277dbbbbb60cb52ac06145eb90e3500 100644 (file)
@@ -1,20 +1,13 @@
 import * as express from 'express'
-import * as OAuthServer from 'express-oauth-server'
-import 'express-validator'
-import { OAUTH_LIFETIME } from '../initializers'
 import { logger } from '../helpers/logger'
 import { Socket } from 'socket.io'
 import { getAccessToken } from '../lib/oauth-model'
+import { oAuthServer } from '@server/lib/auth'
 
-const oAuthServer = new OAuthServer({
-  useErrorHandler: true,
-  accessTokenLifetime: OAUTH_LIFETIME.ACCESS_TOKEN,
-  refreshTokenLifetime: OAUTH_LIFETIME.REFRESH_TOKEN,
-  model: require('../lib/oauth-model')
-})
+function authenticate (req: express.Request, res: express.Response, next: express.NextFunction, authenticateInQuery = false) {
+  const options = authenticateInQuery ? { allowBearerTokensInQueryString: true } : {}
 
-function authenticate (req: express.Request, res: express.Response, next: express.NextFunction) {
-  oAuthServer.authenticate()(req, res, err => {
+  oAuthServer.authenticate(options)(req, res, err => {
     if (err) {
       logger.warn('Cannot authenticate.', { err })
 
@@ -35,6 +28,8 @@ function authenticateSocket (socket: Socket, next: (err?: any) => void) {
 
   logger.debug('Checking socket access token %s.', accessToken)
 
+  if (!accessToken) return next(new Error('No access token provided'))
+
   getAccessToken(accessToken)
     .then(tokenDB => {
       const now = new Date()
@@ -47,18 +42,17 @@ function authenticateSocket (socket: Socket, next: (err?: any) => void) {
 
       return next()
     })
+    .catch(err => logger.error('Cannot get access token.', { err }))
 }
 
-function authenticatePromiseIfNeeded (req: express.Request, res: express.Response) {
+function authenticatePromiseIfNeeded (req: express.Request, res: express.Response, authenticateInQuery = false) {
   return new Promise(resolve => {
     // Already authenticated? (or tried to)
     if (res.locals.oauth && res.locals.oauth.token.User) return resolve()
 
     if (res.locals.authenticated === false) return res.sendStatus(401)
 
-    authenticate(req, res, () => {
-      return resolve()
-    })
+    authenticate(req, res, () => resolve(), authenticateInQuery)
   })
 }
 
@@ -70,27 +64,11 @@ function optionalAuthenticate (req: express.Request, res: express.Response, next
   return next()
 }
 
-function token (req: express.Request, res: express.Response, next: express.NextFunction) {
-  return oAuthServer.token()(req, res, err => {
-    if (err) {
-      return res.status(err.status)
-        .json({
-          error: err.message,
-          code: err.name
-        })
-        .end()
-    }
-
-    return next()
-  })
-}
-
 // ---------------------------------------------------------------------------
 
 export {
   authenticate,
   authenticateSocket,
   authenticatePromiseIfNeeded,
-  optionalAuthenticate,
-  token
+  optionalAuthenticate
 }