mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Fix use first accessible library depending on display order, default library id checked on server when authenticating
This commit is contained in:
		
							parent
							
								
									0dd219f303
								
							
						
					
					
						commit
						08e1782253
					
				@ -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}`)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -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) => {
 | 
				
			||||||
 | 
				
			|||||||
@ -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}`)
 | 
				
			||||||
 | 
				
			|||||||
@ -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) => {
 | 
				
			||||||
 | 
				
			|||||||
@ -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())
 | 
				
			||||||
 | 
				
			|||||||
@ -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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -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())
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user