mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 10:27:01 -04: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) |     this.cronManager = new CronManager(this.db, this.scanner, this.podcastManager) | ||||||
| 
 | 
 | ||||||
|     // Routers
 |     // 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.hlsRouter = new HlsRouter(this.db, this.auth, this.playbackSessionManager, this.emitter.bind(this)) | ||||||
|     this.staticRouter = new StaticRouter(this.db) |     this.staticRouter = new StaticRouter(this.db) | ||||||
| 
 | 
 | ||||||
| @ -95,8 +95,7 @@ class Server { | |||||||
|     this.clients = {} |     this.clients = {} | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   get usersOnline() { |   getUsersOnline() { | ||||||
|     // TODO: Map open user sessions
 |  | ||||||
|     return Object.values(this.clients).filter(c => c.user).map(client => { |     return Object.values(this.clients).filter(c => c.user).map(client => { | ||||||
|       return client.user.toJSONForPublic(this.playbackSessionManager.sessions, this.db.libraryItems) |       return client.user.toJSONForPublic(this.playbackSessionManager.sessions, this.db.libraryItems) | ||||||
|     }) |     }) | ||||||
| @ -481,7 +480,7 @@ class Server { | |||||||
|       backups: (this.backupManager.backups || []).map(b => b.toJSON()) |       backups: (this.backupManager.backups || []).map(b => b.toJSON()) | ||||||
|     } |     } | ||||||
|     if (user.type === 'root') { |     if (user.type === 'root') { | ||||||
|       initialPayload.usersOnline = this.usersOnline |       initialPayload.usersOnline = this.getUsersOnline() | ||||||
|     } |     } | ||||||
|     client.socket.emit('init', initialPayload) |     client.socket.emit('init', initialPayload) | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -183,6 +183,19 @@ class UserController { | |||||||
|     res.json(this.userJsonWithItemProgressDetails(user, !req.user.isRoot)) |     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) { |   middleware(req, res, next) { | ||||||
|     if (!req.user.isAdminOrUp && req.user.id !== req.params.id) { |     if (!req.user.isAdminOrUp && req.user.id !== req.params.id) { | ||||||
|       return res.sendStatus(403) |       return res.sendStatus(403) | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ const Series = require('../objects/entities/Series') | |||||||
| const FileSystemController = require('../controllers/FileSystemController') | const FileSystemController = require('../controllers/FileSystemController') | ||||||
| 
 | 
 | ||||||
| class ApiRouter { | 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.db = db | ||||||
|     this.auth = auth |     this.auth = auth | ||||||
|     this.scanner = scanner |     this.scanner = scanner | ||||||
| @ -42,6 +42,7 @@ class ApiRouter { | |||||||
|     this.cronManager = cronManager |     this.cronManager = cronManager | ||||||
|     this.notificationManager = notificationManager |     this.notificationManager = notificationManager | ||||||
|     this.taskManager = taskManager |     this.taskManager = taskManager | ||||||
|  |     this.getUsersOnline = getUsersOnline | ||||||
|     this.emitter = emitter |     this.emitter = emitter | ||||||
|     this.clientEmitter = clientEmitter |     this.clientEmitter = clientEmitter | ||||||
| 
 | 
 | ||||||
| @ -113,6 +114,7 @@ class ApiRouter { | |||||||
|     //
 |     //
 | ||||||
|     this.router.post('/users', UserController.middleware.bind(this), UserController.create.bind(this)) |     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', 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.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.patch('/users/:id', UserController.middleware.bind(this), UserController.update.bind(this)) | ||||||
|     this.router.delete('/users/:id', UserController.middleware.bind(this), UserController.delete.bind(this)) |     this.router.delete('/users/:id', UserController.middleware.bind(this), UserController.delete.bind(this)) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user