]> source.dussan.org Git - nextcloud-server.git/commitdiff
enh(settings): Load from disabled users endpoint
authorChristopher Ng <chrng8@gmail.com>
Thu, 31 Aug 2023 00:45:16 +0000 (17:45 -0700)
committerChristopher Ng <chrng8@gmail.com>
Fri, 1 Dec 2023 01:15:12 +0000 (17:15 -0800)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
apps/settings/src/components/UserList.vue
apps/settings/src/store/users.js

index 5c7e9ba4dda6c0fc9927ce17a9d3f2f48233fbe2..92c823e8bc5e58edb9a9ab95bd7b90bb5bdd2944 100644 (file)
@@ -223,6 +223,14 @@ export default {
                        return this.$store.getters.getUsersLimit
                },
 
+               disabledUsersOffset() {
+                       return this.$store.getters.getDisabledUsersOffset
+               },
+
+               disabledUsersLimit() {
+                       return this.$store.getters.getDisabledUsersLimit
+               },
+
                usersCount() {
                        return this.users.length
                },
@@ -297,12 +305,19 @@ export default {
                async loadUsers() {
                        this.loading.users = true
                        try {
-                               await this.$store.dispatch('getUsers', {
-                                       offset: this.usersOffset,
-                                       limit: this.usersLimit,
-                                       group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',
-                                       search: this.searchQuery,
-                               })
+                               if (this.selectedGroup === 'disabled') {
+                                       await this.$store.dispatch('getDisabledUsers', {
+                                               offset: this.disabledUsersOffset,
+                                               limit: this.disabledUsersLimit,
+                                       })
+                               } else {
+                                       await this.$store.dispatch('getUsers', {
+                                               offset: this.usersOffset,
+                                               limit: this.usersLimit,
+                                               group: this.selectedGroup,
+                                               search: this.searchQuery,
+                                       })
+                               }
                                logger.debug(`${this.users.length} total user(s) loaded`)
                        } catch (error) {
                                logger.error('Failed to load users', { error })
index b031f768fd1ad837e79fde6ef598e98384c16927..2682415a01636eaf6a9660df26989857ca41417e 100644 (file)
@@ -63,6 +63,8 @@ const state = {
        minPasswordLength: 0,
        usersOffset: 0,
        usersLimit: 25,
+       disabledUsersOffset: 0,
+       disabledUsersLimit: 25,
        userCount: 0,
        showConfig: {
                showStoragePath: false,
@@ -83,6 +85,9 @@ const mutations = {
                state.usersOffset += state.usersLimit
                state.users = users
        },
+       updateDisabledUsers(state, _usersObj) {
+               state.disabledUsersOffset += state.disabledUsersLimit
+       },
        setPasswordPolicyMinLength(state, length) {
                state.minPasswordLength = length !== '' ? length : 0
        },
@@ -237,6 +242,7 @@ const mutations = {
        resetUsers(state) {
                state.users = []
                state.usersOffset = 0
+               state.disabledUsersOffset = 0
        },
 
        setShowConfig(state, { key, value }) {
@@ -264,6 +270,12 @@ const getters = {
        getUsersLimit(state) {
                return state.usersLimit
        },
+       getDisabledUsersOffset(state) {
+               return state.disabledUsersOffset
+       },
+       getDisabledUsersLimit(state) {
+               return state.disabledUsersLimit
+       },
        getUserCount(state) {
                return state.userCount
        },
@@ -373,6 +385,30 @@ const actions = {
                        })
        },
 
+       /**
+        * Get disabled users with full details
+        *
+        * @param {object} context store context
+        * @param {object} options destructuring object
+        * @param {number} options.offset List offset to request
+        * @param {number} options.limit List number to return from offset
+        * @return {Promise<number>}
+        */
+       async getDisabledUsers(context, { offset, limit }) {
+               const url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })
+               try {
+                       const response = await api.get(url)
+                       const usersCount = Object.keys(response.data.ocs.data.users).length
+                       if (usersCount > 0) {
+                               context.commit('appendUsers', response.data.ocs.data.users)
+                               context.commit('updateDisabledUsers', response.data.ocs.data.users)
+                       }
+                       return usersCount
+               } catch (error) {
+                       context.commit('API_FAILURE', error)
+               }
+       },
+
        getGroups(context, { offset, limit, search }) {
                search = typeof search === 'string' ? search : ''
                const limitParam = limit === -1 ? '' : `&limit=${limit}`