diff --git a/client/components/modals/AccountModal.vue b/client/components/modals/AccountModal.vue index a09de35d..ddad3cd3 100644 --- a/client/components/modals/AccountModal.vue +++ b/client/components/modals/AccountModal.vue @@ -14,13 +14,17 @@
+
-
- +
+
-
+
+ +
+

{{ $strings.LabelEnable }}

@@ -257,7 +261,6 @@ export default { if (account.type === 'root' && !account.isActive) return this.processing = true - console.log('Calling update', account) this.$axios .$patch(`/api/users/${this.account.id}`, account) .then((data) => { @@ -329,6 +332,7 @@ export default { if (this.account) { this.newUser = { username: this.account.username, + email: this.account.email, password: this.account.password, type: this.account.type, isActive: this.account.isActive, @@ -337,9 +341,9 @@ export default { itemTagsSelected: [...(this.account.itemTagsSelected || [])] } } else { - this.fetchAllTags() this.newUser = { username: null, + email: null, password: null, type: 'user', isActive: true, diff --git a/client/components/tables/UsersTable.vue b/client/components/tables/UsersTable.vue index cfcf3f47..863012b5 100644 --- a/client/components/tables/UsersTable.vue +++ b/client/components/tables/UsersTable.vue @@ -129,7 +129,6 @@ export default { this.users = res.users.sort((a, b) => { return a.createdAt - b.createdAt }) - console.log('Loaded users', this.users) }) .catch((error) => { console.error('Failed', error) diff --git a/server/controllers/UserController.js b/server/controllers/UserController.js index a3f70e20..2695a7a0 100644 --- a/server/controllers/UserController.js +++ b/server/controllers/UserController.js @@ -115,6 +115,13 @@ class UserController { } } + /** + * PATCH: /api/users/:id + * Update user + * + * @param {import('express').Request} req + * @param {import('express').Response} res + */ async update(req, res) { const user = req.reqUser @@ -126,6 +133,7 @@ class UserController { var account = req.body var shouldUpdateToken = false + // When changing username create a new API token if (account.username !== undefined && account.username !== user.username) { const usernameExists = await Database.userModel.getUserByUsername(account.username) if (usernameExists) { diff --git a/server/models/User.js b/server/models/User.js index 6f457aa5..bf22a3a5 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -59,6 +59,7 @@ class User extends Model { id: userExpanded.id, oldUserId: userExpanded.extraData?.oldUserId || null, username: userExpanded.username, + email: userExpanded.email || null, pash: userExpanded.pash, type: userExpanded.type, token: userExpanded.token, @@ -96,6 +97,7 @@ class User extends Model { return { id: oldUser.id, username: oldUser.username, + email: oldUser.email || null, pash: oldUser.pash || null, type: oldUser.type || null, token: oldUser.token || null, diff --git a/server/objects/user/User.js b/server/objects/user/User.js index 1ed74bb2..a9c9c767 100644 --- a/server/objects/user/User.js +++ b/server/objects/user/User.js @@ -7,6 +7,7 @@ class User { this.id = null this.oldUserId = null // TODO: Temp for keeping old access tokens this.username = null + this.email = null this.pash = null this.type = null this.token = null @@ -76,6 +77,7 @@ class User { id: this.id, oldUserId: this.oldUserId, username: this.username, + email: this.email, pash: this.pash, type: this.type, token: this.token, @@ -97,6 +99,7 @@ class User { id: this.id, oldUserId: this.oldUserId, username: this.username, + email: this.email, type: this.type, token: (this.type === 'root' && hideRootToken) ? '' : this.token, mediaProgress: this.mediaProgress ? this.mediaProgress.map(li => li.toJSON()) : [], @@ -140,6 +143,7 @@ class User { this.id = user.id this.oldUserId = user.oldUserId this.username = user.username + this.email = user.email || null this.pash = user.pash this.type = user.type this.token = user.token @@ -184,7 +188,7 @@ class User { update(payload) { var hasUpdates = false // Update the following keys: - const keysToCheck = ['pash', 'type', 'username', 'isActive'] + const keysToCheck = ['pash', 'type', 'username', 'email', 'isActive'] keysToCheck.forEach((key) => { if (payload[key] !== undefined) { if (key === 'isActive' || payload[key]) { // pash, type, username must evaluate to true (cannot be null or empty)