]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/middlewares/oauth.ts
Add quota used in users list
[github/Chocobozzz/PeerTube.git] / server / middlewares / oauth.ts
index 31ae1e000984c2878f4980f36cb7fc01bcbe4904..5233b66bd10ed29cfa5957a1b00169240497ceea 100644 (file)
@@ -1,34 +1,58 @@
-import OAuthServer = require('express-oauth-server')
-
-const constants = require('../initializers/constants')
-const logger = require('../helpers/logger')
+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'
 
 const oAuthServer = new OAuthServer({
-  accessTokenLifetime: constants.OAUTH_LIFETIME.ACCESS_TOKEN,
-  refreshTokenLifetime: constants.OAUTH_LIFETIME.REFRESH_TOKEN,
+  useErrorHandler: true,
+  accessTokenLifetime: OAUTH_LIFETIME.ACCESS_TOKEN,
+  refreshTokenLifetime: OAUTH_LIFETIME.REFRESH_TOKEN,
   model: require('../lib/oauth-model')
 })
 
-function authenticate (req, res, next) {
-  oAuthServer.authenticate()(req, res, function (err) {
+function authenticate (req: express.Request, res: express.Response, next: express.NextFunction) {
+  oAuthServer.authenticate()(req, res, err => {
     if (err) {
-      logger.error('Cannot authenticate.', { error: err })
-      return res.sendStatus(500)
+      logger.warn('Cannot authenticate.', { err })
+
+      return res.status(err.status)
+        .json({
+          error: 'Token is invalid.',
+          code: err.name
+        })
+        .end()
     }
 
-    if (res.statusCode === 401 || res.statusCode === 400 || res.statusCode === 503) return res.end()
-
     return next()
   })
 }
 
-function token (req, res, next) {
-  return oAuthServer.token()(req, res, next)
+function optionalAuthenticate (req: express.Request, res: express.Response, next: express.NextFunction) {
+  if (req.header('authorization')) return authenticate(req, res, 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,
+  optionalAuthenticate,
   token
 }