mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Add:API endpoint to get users online and open listening sessions #1125
This commit is contained in:
		
							parent
							
								
									abb4137d4c
								
							
						
					
					
						commit
						fdf67e17a0
					
				| @ -83,7 +83,7 @@ class Server { | ||||
|     this.cronManager = new CronManager(this.db, this.scanner, this.podcastManager) | ||||
| 
 | ||||
|     // Routers
 | ||||
|     this.apiRouter = new ApiRouter(this.db, this.auth, this.scanner, this.playbackSessionManager, this.abMergeManager, this.coverManager, this.backupManager, this.watcher, this.cacheManager, this.podcastManager, this.audioMetadataManager, this.rssFeedManager, this.cronManager, this.notificationManager, this.taskManager, this.emitter.bind(this), this.clientEmitter.bind(this)) | ||||
|     this.apiRouter = new ApiRouter(this.db, this.auth, this.scanner, this.playbackSessionManager, this.abMergeManager, this.coverManager, this.backupManager, this.watcher, this.cacheManager, this.podcastManager, this.audioMetadataManager, this.rssFeedManager, this.cronManager, this.notificationManager, this.taskManager, this.getUsersOnline.bind(this), this.emitter.bind(this), this.clientEmitter.bind(this)) | ||||
|     this.hlsRouter = new HlsRouter(this.db, this.auth, this.playbackSessionManager, this.emitter.bind(this)) | ||||
|     this.staticRouter = new StaticRouter(this.db) | ||||
| 
 | ||||
| @ -95,8 +95,7 @@ class Server { | ||||
|     this.clients = {} | ||||
|   } | ||||
| 
 | ||||
|   get usersOnline() { | ||||
|     // TODO: Map open user sessions
 | ||||
|   getUsersOnline() { | ||||
|     return Object.values(this.clients).filter(c => c.user).map(client => { | ||||
|       return client.user.toJSONForPublic(this.playbackSessionManager.sessions, this.db.libraryItems) | ||||
|     }) | ||||
| @ -481,7 +480,7 @@ class Server { | ||||
|       backups: (this.backupManager.backups || []).map(b => b.toJSON()) | ||||
|     } | ||||
|     if (user.type === 'root') { | ||||
|       initialPayload.usersOnline = this.usersOnline | ||||
|       initialPayload.usersOnline = this.getUsersOnline() | ||||
|     } | ||||
|     client.socket.emit('init', initialPayload) | ||||
|   } | ||||
|  | ||||
| @ -183,6 +183,19 @@ class UserController { | ||||
|     res.json(this.userJsonWithItemProgressDetails(user, !req.user.isRoot)) | ||||
|   } | ||||
| 
 | ||||
|   // POST: api/users/online (admin)
 | ||||
|   async getOnlineUsers(req, res) { | ||||
|     if (!req.user.isAdminOrUp) { | ||||
|       return res.sendStatus(404) | ||||
|     } | ||||
|     const usersOnline = this.getUsersOnline() | ||||
| 
 | ||||
|     res.json({ | ||||
|       usersOnline, | ||||
|       openSessions: this.playbackSessionManager.sessions | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   middleware(req, res, next) { | ||||
|     if (!req.user.isAdminOrUp && req.user.id !== req.params.id) { | ||||
|       return res.sendStatus(403) | ||||
|  | ||||
| @ -26,7 +26,7 @@ const Series = require('../objects/entities/Series') | ||||
| const FileSystemController = require('../controllers/FileSystemController') | ||||
| 
 | ||||
| class ApiRouter { | ||||
|   constructor(db, auth, scanner, playbackSessionManager, abMergeManager, coverManager, backupManager, watcher, cacheManager, podcastManager, audioMetadataManager, rssFeedManager, cronManager, notificationManager, taskManager, emitter, clientEmitter) { | ||||
|   constructor(db, auth, scanner, playbackSessionManager, abMergeManager, coverManager, backupManager, watcher, cacheManager, podcastManager, audioMetadataManager, rssFeedManager, cronManager, notificationManager, taskManager, getUsersOnline, emitter, clientEmitter) { | ||||
|     this.db = db | ||||
|     this.auth = auth | ||||
|     this.scanner = scanner | ||||
| @ -42,6 +42,7 @@ class ApiRouter { | ||||
|     this.cronManager = cronManager | ||||
|     this.notificationManager = notificationManager | ||||
|     this.taskManager = taskManager | ||||
|     this.getUsersOnline = getUsersOnline | ||||
|     this.emitter = emitter | ||||
|     this.clientEmitter = clientEmitter | ||||
| 
 | ||||
| @ -113,6 +114,7 @@ class ApiRouter { | ||||
|     //
 | ||||
|     this.router.post('/users', UserController.middleware.bind(this), UserController.create.bind(this)) | ||||
|     this.router.get('/users', UserController.middleware.bind(this), UserController.findAll.bind(this)) | ||||
|     this.router.get('/users/online', UserController.getOnlineUsers.bind(this)) | ||||
|     this.router.get('/users/:id', UserController.middleware.bind(this), UserController.findOne.bind(this)) | ||||
|     this.router.patch('/users/:id', UserController.middleware.bind(this), UserController.update.bind(this)) | ||||
|     this.router.delete('/users/:id', UserController.middleware.bind(this), UserController.delete.bind(this)) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user