summaryrefslogtreecommitdiffstats
path: root/settings/src/store/users.js
diff options
context:
space:
mode:
Diffstat (limited to 'settings/src/store/users.js')
-rw-r--r--settings/src/store/users.js420
1 files changed, 420 insertions, 0 deletions
diff --git a/settings/src/store/users.js b/settings/src/store/users.js
new file mode 100644
index 00000000000..f349c7b4a06
--- /dev/null
+++ b/settings/src/store/users.js
@@ -0,0 +1,420 @@
+import api from './api';
+
+const orderGroups = function(groups, orderBy) {
+ /* const SORT_USERCOUNT = 1;
+ * const SORT_GROUPNAME = 2;
+ * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34
+ */
+ if (orderBy === 1) {
+ return groups.sort((a, b) => a.usercount < b.usercount);
+ } else {
+ return groups.sort((a, b) => a.name.localeCompare(b.name));
+ }
+};
+
+const state = {
+ users: [],
+ groups: [],
+ orderBy: 1,
+ minPasswordLength: 0,
+ usersOffset: 0,
+ usersLimit: 25,
+ userCount: 0
+};
+
+const mutations = {
+ appendUsers(state, usersObj) {
+ // convert obj to array
+ let users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]));
+ state.usersOffset += state.usersLimit;
+ state.users = users;
+ },
+ setPasswordPolicyMinLength(state, length) {
+ state.minPasswordLength = length!=='' ? length : 0;
+ },
+ initGroups(state, {groups, orderBy, userCount}) {
+ state.groups = groups;
+ state.orderBy = orderBy;
+ state.userCount = userCount;
+ state.groups = orderGroups(state.groups, state.orderBy);
+ },
+ addGroup(state, gid) {
+ try {
+ state.groups.push({
+ id: gid,
+ name: gid,
+ usercount: 0 // user will be added after the creation
+ });
+ state.groups = orderGroups(state.groups, state.orderBy);
+ } catch (e) {
+ console.log('Can\'t create group', e);
+ }
+ },
+ removeGroup(state, gid) {
+ let groupIndex = state.groups.findIndex(groupSearch => groupSearch.id == gid);
+ if (groupIndex >= 0) {
+ state.groups.splice(groupIndex, 1);
+ }
+ },
+ addUserGroup(state, { userid, gid }) {
+ let group = state.groups.find(groupSearch => groupSearch.id == gid);
+ if (group) {
+ group.usercount++; // increase count
+ }
+ let groups = state.users.find(user => user.id == userid).groups;
+ groups.push(gid);
+ state.groups = orderGroups(state.groups, state.orderBy);
+ },
+ removeUserGroup(state, { userid, gid }) {
+ let group = state.groups.find(groupSearch => groupSearch.id == gid);
+ if (group) {
+ group.usercount--; // lower count
+ }
+ let groups = state.users.find(user => user.id == userid).groups;
+ groups.splice(groups.indexOf(gid),1);
+ state.groups = orderGroups(state.groups, state.orderBy);
+ },
+ addUserSubAdmin(state, { userid, gid }) {
+ let groups = state.users.find(user => user.id == userid).subadmin;
+ groups.push(gid);
+ },
+ removeUserSubAdmin(state, { userid, gid }) {
+ let groups = state.users.find(user => user.id == userid).subadmin;
+ groups.splice(groups.indexOf(gid),1);
+ },
+ deleteUser(state, userid) {
+ let userIndex = state.users.findIndex(user => user.id == userid);
+ state.users.splice(userIndex, 1);
+ },
+ addUserData(state, response) {
+ state.users.push(response.data.ocs.data);
+ },
+ enableDisableUser(state, { userid, enabled }) {
+ state.users.find(user => user.id == userid).enabled = enabled;
+ // increment or not
+ state.groups.find(group => group.id == 'disabled').usercount += enabled ? -1 : 1;
+ state.userCount += enabled ? 1 : -1;
+ console.log(enabled);
+ },
+ setUserData(state, { userid, key, value }) {
+ if (key === 'quota') {
+ let humanValue = OC.Util.computerFileSize(value);
+ state.users.find(user => user.id == userid)[key][key] = humanValue?humanValue:value;
+ } else {
+ state.users.find(user => user.id == userid)[key] = value;
+ }
+ },
+
+ /**
+ * Reset users list
+ */
+ resetUsers(state) {
+ state.users = [];
+ state.usersOffset = 0;
+ }
+};
+
+const getters = {
+ getUsers(state) {
+ return state.users;
+ },
+ getGroups(state) {
+ return state.groups;
+ },
+ getPasswordPolicyMinLength(state) {
+ return state.minPasswordLength;
+ },
+ getUsersOffset(state) {
+ return state.usersOffset;
+ },
+ getUsersLimit(state) {
+ return state.usersLimit;
+ },
+ getUserCount(state) {
+ return state.userCount;
+ }
+};
+
+const actions = {
+
+ /**
+ * Get all users with full details
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {int} options.offset List offset to request
+ * @param {int} options.limit List number to return from offset
+ * @param {string} options.search Search amongst users
+ * @param {string} options.group Get users from group
+ * @returns {Promise}
+ */
+ getUsers(context, { offset, limit, search, group }) {
+ search = typeof search === 'string' ? search : '';
+ group = typeof group === 'string' ? group : '';
+ if (group !== '') {
+ return api.get(OC.linkToOCS(`cloud/groups/${group}/users/details?offset=${offset}&limit=${limit}&search=${search}`, 2))
+ .then((response) => {
+ if (Object.keys(response.data.ocs.data.users).length > 0) {
+ context.commit('appendUsers', response.data.ocs.data.users);
+ return true;
+ }
+ return false;
+ })
+ .catch((error) => context.commit('API_FAILURE', error));
+ }
+
+ return api.get(OC.linkToOCS(`cloud/users/details?offset=${offset}&limit=${limit}&search=${search}`, 2))
+ .then((response) => {
+ if (Object.keys(response.data.ocs.data.users).length > 0) {
+ context.commit('appendUsers', response.data.ocs.data.users);
+ return true;
+ }
+ return false;
+ })
+ .catch((error) => context.commit('API_FAILURE', error));
+ },
+
+ /**
+ * Get all users with full details
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {int} options.offset List offset to request
+ * @param {int} options.limit List number to return from offset
+ * @returns {Promise}
+ */
+ getUsersFromList(context, { offset, limit, search }) {
+ search = typeof search === 'string' ? search : '';
+ return api.get(OC.linkToOCS(`cloud/users/details?offset=${offset}&limit=${limit}&search=${search}`, 2))
+ .then((response) => {
+ if (Object.keys(response.data.ocs.data.users).length > 0) {
+ context.commit('appendUsers', response.data.ocs.data.users);
+ return true;
+ }
+ return false;
+ })
+ .catch((error) => context.commit('API_FAILURE', error));
+ },
+
+ /**
+ * Get all users with full details from a groupid
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {int} options.offset List offset to request
+ * @param {int} options.limit List number to return from offset
+ * @returns {Promise}
+ */
+ getUsersFromGroup(context, { groupid, offset, limit }) {
+ return api.get(OC.linkToOCS(`cloud/users/${groupid}/details?offset=${offset}&limit=${limit}`, 2))
+ .then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))
+ .catch((error) => context.commit('API_FAILURE', error));
+ },
+
+
+ getPasswordPolicyMinLength(context) {
+ if(oc_capabilities.password_policy && oc_capabilities.password_policy.minLength) {
+ context.commit('setPasswordPolicyMinLength', oc_capabilities.password_policy.minLength);
+ return oc_capabilities.password_policy.minLength;
+ }
+ return false;
+ },
+
+ /**
+ * Add group
+ *
+ * @param {Object} context
+ * @param {string} gid Group id
+ * @returns {Promise}
+ */
+ addGroup(context, gid) {
+ return api.requireAdmin().then((response) => {
+ return api.post(OC.linkToOCS(`cloud/groups`, 2), {groupid: gid})
+ .then((response) => context.commit('addGroup', gid))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Remove group
+ *
+ * @param {Object} context
+ * @param {string} gid Group id
+ * @returns {Promise}
+ */
+ removeGroup(context, gid) {
+ return api.requireAdmin().then((response) => {
+ return api.delete(OC.linkToOCS(`cloud/groups/${gid}`, 2))
+ .then((response) => context.commit('removeGroup', gid))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { gid, error }));
+ },
+
+ /**
+ * Add user to group
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.gid Group id
+ * @returns {Promise}
+ */
+ addUserGroup(context, { userid, gid }) {
+ return api.requireAdmin().then((response) => {
+ return api.post(OC.linkToOCS(`cloud/users/${userid}/groups`, 2), { groupid: gid })
+ .then((response) => context.commit('addUserGroup', { userid, gid }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Remove user from group
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.gid Group id
+ * @returns {Promise}
+ */
+ removeUserGroup(context, { userid, gid }) {
+ return api.requireAdmin().then((response) => {
+ return api.delete(OC.linkToOCS(`cloud/users/${userid}/groups`, 2), { groupid: gid })
+ .then((response) => context.commit('removeUserGroup', { userid, gid }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Add user to group admin
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.gid Group id
+ * @returns {Promise}
+ */
+ addUserSubAdmin(context, { userid, gid }) {
+ return api.requireAdmin().then((response) => {
+ return api.post(OC.linkToOCS(`cloud/users/${userid}/subadmins`, 2), { groupid: gid })
+ .then((response) => context.commit('addUserSubAdmin', { userid, gid }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Remove user from group admin
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.gid Group id
+ * @returns {Promise}
+ */
+ removeUserSubAdmin(context, { userid, gid }) {
+ return api.requireAdmin().then((response) => {
+ return api.delete(OC.linkToOCS(`cloud/users/${userid}/subadmins`, 2), { groupid: gid })
+ .then((response) => context.commit('removeUserSubAdmin', { userid, gid }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Delete a user
+ *
+ * @param {Object} context
+ * @param {string} userid User id
+ * @returns {Promise}
+ */
+ deleteUser(context, { userid }) {
+ return api.requireAdmin().then((response) => {
+ return api.delete(OC.linkToOCS(`cloud/users/${userid}`, 2))
+ .then((response) => context.commit('deleteUser', userid))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Add a user
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.password User password
+ * @param {string} options.email User email
+ * @param {string} options.groups User groups
+ * @param {string} options.subadmin User subadmin groups
+ * @param {string} options.quota User email
+ * @returns {Promise}
+ */
+ addUser({commit, dispatch}, { userid, password, email, groups, subadmin, quota, language }) {
+ return api.requireAdmin().then((response) => {
+ return api.post(OC.linkToOCS(`cloud/users`, 2), { userid, password, email, groups, subadmin, quota, language })
+ .then((response) => dispatch('addUserData', userid))
+ .catch((error) => {throw error;});
+ }).catch((error) => commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Get user data and commit addition
+ *
+ * @param {Object} context
+ * @param {string} userid User id
+ * @returns {Promise}
+ */
+ addUserData(context, userid) {
+ return api.requireAdmin().then((response) => {
+ return api.get(OC.linkToOCS(`cloud/users/${userid}`, 2))
+ .then((response) => context.commit('addUserData', response))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /** Enable or disable user
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {boolean} options.enabled User enablement status
+ * @returns {Promise}
+ */
+ enableDisableUser(context, { userid, enabled = true }) {
+ let userStatus = enabled ? 'enable' : 'disable';
+ return api.requireAdmin().then((response) => {
+ return api.put(OC.linkToOCS(`cloud/users/${userid}/${userStatus}`, 2))
+ .then((response) => context.commit('enableDisableUser', { userid, enabled }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ },
+
+ /**
+ * Edit user data
+ *
+ * @param {Object} context
+ * @param {Object} options
+ * @param {string} options.userid User id
+ * @param {string} options.key User field to edit
+ * @param {string} options.value Value of the change
+ * @returns {Promise}
+ */
+ setUserData(context, { userid, key, value }) {
+ let allowedEmpty = ['email', 'displayname'];
+ if (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {
+ // We allow empty email or displayname
+ if (typeof value === 'string' &&
+ (
+ (allowedEmpty.indexOf(key) === -1 && value.length > 0) ||
+ allowedEmpty.indexOf(key) !== -1
+ )
+ ) {
+ return api.requireAdmin().then((response) => {
+ return api.put(OC.linkToOCS(`cloud/users/${userid}`, 2), { key: key, value: value })
+ .then((response) => context.commit('setUserData', { userid, key, value }))
+ .catch((error) => {throw error;});
+ }).catch((error) => context.commit('API_FAILURE', { userid, error }));
+ }
+ }
+ return Promise.reject(new Error('Invalid request data'));
+ }
+};
+
+export default { state, mutations, getters, actions }; \ No newline at end of file