mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { handleLogin, handleTokenRevocation } from '@server/lib/auth'
 | |
| import * as RateLimit from 'express-rate-limit'
 | |
| import { CONFIG } from '@server/initializers/config'
 | |
| import * as express from 'express'
 | |
| import { Hooks } from '@server/lib/plugins/hooks'
 | |
| import { asyncMiddleware, authenticate } from '@server/middlewares'
 | |
| import { ScopedToken } from '@shared/models/users/user-scoped-token'
 | |
| import { v4 as uuidv4 } from 'uuid'
 | |
| 
 | |
| const tokensRouter = express.Router()
 | |
| 
 | |
| const loginRateLimiter = RateLimit({
 | |
|   windowMs: CONFIG.RATES_LIMIT.LOGIN.WINDOW_MS,
 | |
|   max: CONFIG.RATES_LIMIT.LOGIN.MAX
 | |
| })
 | |
| 
 | |
| tokensRouter.post('/token',
 | |
|   loginRateLimiter,
 | |
|   handleLogin,
 | |
|   tokenSuccess
 | |
| )
 | |
| 
 | |
| tokensRouter.post('/revoke-token',
 | |
|   authenticate,
 | |
|   asyncMiddleware(handleTokenRevocation)
 | |
| )
 | |
| 
 | |
| tokensRouter.get('/scoped-tokens',
 | |
|   authenticate,
 | |
|   getScopedTokens
 | |
| )
 | |
| 
 | |
| tokensRouter.post('/scoped-tokens',
 | |
|   authenticate,
 | |
|   asyncMiddleware(renewScopedTokens)
 | |
| )
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| export {
 | |
|   tokensRouter
 | |
| }
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| function tokenSuccess (req: express.Request) {
 | |
|   const username = req.body.username
 | |
| 
 | |
|   Hooks.runAction('action:api.user.oauth2-got-token', { username, ip: req.ip })
 | |
| }
 | |
| 
 | |
| function getScopedTokens (req: express.Request, res: express.Response) {
 | |
|   const user = res.locals.oauth.token.user
 | |
| 
 | |
|   return res.json({
 | |
|     feedToken: user.feedToken
 | |
|   } as ScopedToken)
 | |
| }
 | |
| 
 | |
| async function renewScopedTokens (req: express.Request, res: express.Response) {
 | |
|   const user = res.locals.oauth.token.user
 | |
| 
 | |
|   user.feedToken = uuidv4()
 | |
|   await user.save()
 | |
| 
 | |
|   return res.json({
 | |
|     feedToken: user.feedToken
 | |
|   } as ScopedToken)
 | |
| }
 |