proxy auth users don't get a token

otherwise, they will stay logged in even after the proxy auth has
disabled them (with the saved token in the local store)
This commit is contained in:
Igor Serebryany 2023-10-06 15:11:45 -07:00
parent a85ae7467c
commit 20356a17d8
No known key found for this signature in database
GPG key ID: 0AF607692FD9EB24
2 changed files with 23 additions and 10 deletions

View file

@ -63,7 +63,7 @@ class Auth {
} }
if (token == null && proxyUsername == null) { if (token == null && proxyUsername == null) {
Logger.error('Api called without a token and proxy auth is disabled', req.path) Logger.error('Api called without a token and no proxy auth provided', req.path)
return res.sendStatus(401) return res.sendStatus(401)
} }
@ -158,6 +158,8 @@ class Auth {
email, email,
type: 'user', type: 'user',
isActive: true, isActive: true,
token: null,
isFromProxy: true,
} }
return await this.createUser(account) return await this.createUser(account)
@ -178,7 +180,11 @@ class Auth {
account.pash = await this.hashPass(password) account.pash = await this.hashPass(password)
account.token = await this.generateAccessToken({ userId: account.id, username }) // proxy users don't get a token
if (!account.isFromProxy) {
account.token = await this.generateAccessToken({ userId: account.id, username })
}
account.createdAt = Date.now() account.createdAt = Date.now()
const newUser = new User(account) const newUser = new User(account)

View file

@ -24,6 +24,8 @@ class User {
this.librariesAccessible = [] // Library IDs (Empty if ALL libraries) this.librariesAccessible = [] // Library IDs (Empty if ALL libraries)
this.itemTagsSelected = [] // Empty if ALL item tags accessible this.itemTagsSelected = [] // Empty if ALL item tags accessible
this.isFromProxy = false // whether the user was authenticated in the proxy layer
if (user) { if (user) {
this.construct(user) this.construct(user)
} }
@ -90,7 +92,8 @@ class User {
createdAt: this.createdAt, createdAt: this.createdAt,
permissions: this.permissions, permissions: this.permissions,
librariesAccessible: [...this.librariesAccessible], librariesAccessible: [...this.librariesAccessible],
itemTagsSelected: [...this.itemTagsSelected] itemTagsSelected: [...this.itemTagsSelected],
isFromProxy: this.isFromProxy,
} }
} }
@ -111,7 +114,8 @@ class User {
createdAt: this.createdAt, createdAt: this.createdAt,
permissions: this.permissions, permissions: this.permissions,
librariesAccessible: [...this.librariesAccessible], librariesAccessible: [...this.librariesAccessible],
itemTagsSelected: [...this.itemTagsSelected] itemTagsSelected: [...this.itemTagsSelected],
isFromProxy: this.isFromProxy,
} }
if (minimal) { if (minimal) {
delete json.mediaProgress delete json.mediaProgress
@ -183,6 +187,9 @@ class User {
this.librariesAccessible = [...(user.librariesAccessible || [])] this.librariesAccessible = [...(user.librariesAccessible || [])]
this.itemTagsSelected = [...(user.itemTagsSelected || [])] this.itemTagsSelected = [...(user.itemTagsSelected || [])]
this.isFromProxy = false
} }
update(payload) { update(payload) {
@ -261,7 +268,7 @@ class User {
/** /**
* Get first available library id for user * Get first available library id for user
* *
* @param {string[]} libraryIds * @param {string[]} libraryIds
* @returns {string|null} * @returns {string|null}
*/ */
@ -332,9 +339,9 @@ class User {
/** /**
* Checks if a user can access a library item * Checks if a user can access a library item
* @param {string} libraryId * @param {string} libraryId
* @param {boolean} explicit * @param {boolean} explicit
* @param {string[]} tags * @param {string[]} tags
*/ */
checkCanAccessLibraryItemWithData(libraryId, explicit, tags) { checkCanAccessLibraryItemWithData(libraryId, explicit, tags) {
if (!this.checkCanAccessLibrary(libraryId)) return false if (!this.checkCanAccessLibrary(libraryId)) return false
@ -398,7 +405,7 @@ class User {
/** /**
* Number of podcast episodes not finished for library item * Number of podcast episodes not finished for library item
* Note: libraryItem passed in from libraryHelpers is not a LibraryItem class instance * Note: libraryItem passed in from libraryHelpers is not a LibraryItem class instance
* @param {LibraryItem|object} libraryItem * @param {LibraryItem|object} libraryItem
* @returns {number} * @returns {number}
*/ */
getNumEpisodesIncompleteForPodcast(libraryItem) { getNumEpisodesIncompleteForPodcast(libraryItem) {
@ -413,4 +420,4 @@ class User {
return numEpisodesIncomplete return numEpisodesIncomplete
} }
} }
module.exports = User module.exports = User