Fix use first accessible library depending on display order, default library id checked on server when authenticating

This commit is contained in:
advplyr 2022-03-27 09:45:28 -05:00
parent 0dd219f303
commit 08e1782253
7 changed files with 22 additions and 24 deletions

View File

@ -1,7 +1,9 @@
export default function ({ store, redirect, route, app }) { export default function ({ store, redirect, route, app }) {
// If the user is not authenticated // If the user is not authenticated
if (!store.state.user.user) { 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}`) return redirect(`/login?redirect=${route.fullPath}`)
} }
} }

View File

@ -48,22 +48,8 @@ export default {
} }
}, },
methods: { methods: {
setUser(user) { setUser(user, defaultLibraryId) {
// If user is not able to access main library, then set current library this.$store.commit('libraries/setCurrentLibrary', defaultLibraryId)
// 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])
// }
this.$store.commit('user/setUser', user) this.$store.commit('user/setUser', user)
}, },
async submitForm() { async submitForm() {
@ -83,7 +69,7 @@ export default {
if (authRes && authRes.error) { if (authRes && authRes.error) {
this.error = authRes.error this.error = authRes.error
} else if (authRes) { } else if (authRes) {
this.setUser(authRes.user) this.setUser(authRes.user, authRes.userDefaultLibraryId)
} }
this.processing = false this.processing = false
}, },
@ -101,7 +87,7 @@ export default {
} }
}) })
.then((res) => { .then((res) => {
this.setUser(res.user) this.setUser(res.user, res.userDefaultLibraryId)
this.processing = false this.processing = false
}) })
.catch((error) => { .catch((error) => {

View File

@ -120,7 +120,7 @@ class Auth {
if (password) { if (password) {
return res.status(401).send('Invalid root password (hint: there is none)') return res.status(401).send('Invalid root password (hint: there is none)')
} else { } 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) var compare = await bcrypt.compare(password, user.pash)
if (compare) { if (compare) {
res.json({ res.json({
user: user.toJSONForBrowser() user: user.toJSONForBrowser(),
userDefaultLibraryId: user.getDefaultLibraryId(this.db.libraries)
}) })
} else { } else {
Logger.debug(`[Auth] Failed login attempt ${req.rateLimit.current} of ${req.rateLimit.limit}`) Logger.debug(`[Auth] Failed login attempt ${req.rateLimit.current} of ${req.rateLimit.limit}`)

View File

@ -146,6 +146,7 @@ class Db {
}) })
var p3 = this.librariesDb.select(() => true).then((results) => { var p3 = this.librariesDb.select(() => true).then((results) => {
this.libraries = results.data.map(l => new Library(l)) 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`) Logger.info(`[DB] ${this.libraries.length} Libraries Loaded`)
}) })
var p4 = this.settingsDb.select(() => true).then((results) => { var p4 = this.settingsDb.select(() => true).then((results) => {

View File

@ -381,9 +381,10 @@ class LibraryController {
} }
if (hasUpdates) { 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 { } 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()) var libraries = this.db.libraries.map(lib => lib.toJSON())

View File

@ -168,7 +168,7 @@ class MiscController {
Logger.error('Invalid user in authorize') Logger.error('Invalid user in authorize')
return res.sendStatus(401) return res.sendStatus(401)
} }
res.json({ user: req.user }) res.json({ user: req.user, userDefaultLibraryId: req.user.getDefaultLibraryId(this.db.libraries) })
} }
getAllTags(req, res) { getAllTags(req, res) {

View File

@ -223,6 +223,13 @@ class User {
return hasUpdates 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) { getMostRecentItemProgress(libraryItems) {
if (!this.mediaProgress.length) return null if (!this.mediaProgress.length) return null
var lip = this.mediaProgress.map(lip => lip.toJSON()) var lip = this.mediaProgress.map(lip => lip.toJSON())