From 08e1782253f2d95677bf522955bcebc15a86aeeb Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 27 Mar 2022 09:45:28 -0500 Subject: [PATCH] Fix use first accessible library depending on display order, default library id checked on server when authenticating --- client/middleware/authenticated.js | 4 +++- client/pages/login.vue | 22 ++++------------------ server/Auth.js | 5 +++-- server/Db.js | 1 + server/controllers/LibraryController.js | 5 +++-- server/controllers/MiscController.js | 2 +- server/objects/user/User.js | 7 +++++++ 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/client/middleware/authenticated.js b/client/middleware/authenticated.js index bee2bffd..d1af3263 100644 --- a/client/middleware/authenticated.js +++ b/client/middleware/authenticated.js @@ -1,7 +1,9 @@ export default function ({ store, redirect, route, app }) { // If the user is not authenticated if (!store.state.user.user) { - if (route.name === 'batch' || route.name === 'index') return redirect('/login') + if (route.name === 'batch' || route.name === 'index') { + return redirect('/login') + } return redirect(`/login?redirect=${route.fullPath}`) } } \ No newline at end of file diff --git a/client/pages/login.vue b/client/pages/login.vue index 62231a8b..7d5094e4 100644 --- a/client/pages/login.vue +++ b/client/pages/login.vue @@ -48,22 +48,8 @@ export default { } }, methods: { - setUser(user) { - // If user is not able to access main library, then set current library - // var userLibrariesAccessible = this.$store.getters['user/getLibrariesAccessible'] - var userCanAccessAll = user.permissions ? !!user.permissions.accessAllLibraries : false - if (!userCanAccessAll) { - var accessibleLibraries = user.librariesAccessible || [] - console.log('Setting user without all library access', accessibleLibraries) - if (accessibleLibraries.length && !accessibleLibraries.includes('main')) { - console.log('Setting current library', accessibleLibraries[0]) - this.$store.commit('libraries/setCurrentLibrary', accessibleLibraries[0]) - } - } - // if (userLibrariesAccessible.length && !userLibrariesAccessible.includes('main')) { - // this.$store.commit('libraries/setCurrentLibrary', userLibrariesAccessible[0]) - // } - + setUser(user, defaultLibraryId) { + this.$store.commit('libraries/setCurrentLibrary', defaultLibraryId) this.$store.commit('user/setUser', user) }, async submitForm() { @@ -83,7 +69,7 @@ export default { if (authRes && authRes.error) { this.error = authRes.error } else if (authRes) { - this.setUser(authRes.user) + this.setUser(authRes.user, authRes.userDefaultLibraryId) } this.processing = false }, @@ -101,7 +87,7 @@ export default { } }) .then((res) => { - this.setUser(res.user) + this.setUser(res.user, res.userDefaultLibraryId) this.processing = false }) .catch((error) => { diff --git a/server/Auth.js b/server/Auth.js index 256222da..4fd68a16 100644 --- a/server/Auth.js +++ b/server/Auth.js @@ -120,7 +120,7 @@ class Auth { if (password) { return res.status(401).send('Invalid root password (hint: there is none)') } else { - return res.json({ user: user.toJSONForBrowser() }) + return res.json({ user: user.toJSONForBrowser(), userDefaultLibraryId: user.getDefaultLibraryId(this.db.libraries) }) } } @@ -128,7 +128,8 @@ class Auth { var compare = await bcrypt.compare(password, user.pash) if (compare) { res.json({ - user: user.toJSONForBrowser() + user: user.toJSONForBrowser(), + userDefaultLibraryId: user.getDefaultLibraryId(this.db.libraries) }) } else { Logger.debug(`[Auth] Failed login attempt ${req.rateLimit.current} of ${req.rateLimit.limit}`) diff --git a/server/Db.js b/server/Db.js index 46e06017..2ff44582 100644 --- a/server/Db.js +++ b/server/Db.js @@ -146,6 +146,7 @@ class Db { }) var p3 = this.librariesDb.select(() => true).then((results) => { this.libraries = results.data.map(l => new Library(l)) + this.libraries.sort((a, b) => a.displayOrder - b.displayOrder) Logger.info(`[DB] ${this.libraries.length} Libraries Loaded`) }) var p4 = this.settingsDb.select(() => true).then((results) => { diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index 28c21473..ac71fe68 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -381,9 +381,10 @@ class LibraryController { } if (hasUpdates) { - Logger.info(`[LibraryController] Updated library display orders`) + this.db.libraries.sort((a, b) => a.displayOrder - b.displayOrder) + Logger.debug(`[LibraryController] Updated library display orders`) } else { - Logger.info(`[LibraryController] Library orders were up to date`) + Logger.debug(`[LibraryController] Library orders were up to date`) } var libraries = this.db.libraries.map(lib => lib.toJSON()) diff --git a/server/controllers/MiscController.js b/server/controllers/MiscController.js index df1219ed..4f35ff43 100644 --- a/server/controllers/MiscController.js +++ b/server/controllers/MiscController.js @@ -168,7 +168,7 @@ class MiscController { Logger.error('Invalid user in authorize') return res.sendStatus(401) } - res.json({ user: req.user }) + res.json({ user: req.user, userDefaultLibraryId: req.user.getDefaultLibraryId(this.db.libraries) }) } getAllTags(req, res) { diff --git a/server/objects/user/User.js b/server/objects/user/User.js index a471a256..3946fefc 100644 --- a/server/objects/user/User.js +++ b/server/objects/user/User.js @@ -223,6 +223,13 @@ class User { return hasUpdates } + getDefaultLibraryId(libraries) { + // Libraries should already be in ascending display order, find first accessible + var firstAccessibleLibrary = libraries.find(lib => this.checkCanAccessLibrary(lib.id)) + if (!firstAccessibleLibrary) return null + return firstAccessibleLibrary.id + } + getMostRecentItemProgress(libraryItems) { if (!this.mediaProgress.length) return null var lip = this.mediaProgress.map(lip => lip.toJSON())