2017-12-20 12:33:33 +01:00
|
|
|
import config from 'app/core/config';
|
|
|
|
|
import coreModule from 'app/core/core_module';
|
|
|
|
|
import Remarkable from 'remarkable';
|
|
|
|
|
import _ from 'lodash';
|
2016-02-13 17:55:49 -08:00
|
|
|
|
|
|
|
|
export class OrgUsersCtrl {
|
2017-12-13 13:16:44 +01:00
|
|
|
unfiltered: any;
|
2016-02-13 17:55:49 -08:00
|
|
|
users: any;
|
|
|
|
|
pendingInvites: any;
|
|
|
|
|
editor: any;
|
2017-06-02 14:00:42 +02:00
|
|
|
navModel: any;
|
2017-07-31 14:39:33 +02:00
|
|
|
externalUserMngLinkUrl: string;
|
|
|
|
|
externalUserMngLinkName: string;
|
|
|
|
|
externalUserMngInfo: string;
|
2017-12-13 13:16:44 +01:00
|
|
|
canInvite: boolean;
|
|
|
|
|
searchQuery: string;
|
|
|
|
|
showInvites: boolean;
|
2016-02-13 17:55:49 -08:00
|
|
|
|
|
|
|
|
/** @ngInject */
|
2017-09-21 16:40:18 +02:00
|
|
|
constructor(private $scope, private backendSrv, navModelSrv, $sce) {
|
2017-12-20 12:33:33 +01:00
|
|
|
this.navModel = navModelSrv.getNav('cfg', 'users', 0);
|
2017-03-20 11:18:29 +01:00
|
|
|
|
2016-02-13 17:55:49 -08:00
|
|
|
this.get();
|
2017-07-31 14:39:33 +02:00
|
|
|
this.externalUserMngLinkUrl = config.externalUserMngLinkUrl;
|
|
|
|
|
this.externalUserMngLinkName = config.externalUserMngLinkName;
|
2017-12-21 08:39:31 +01:00
|
|
|
this.canInvite = !config.disableLoginForm && !config.externalUserMngLinkName;
|
2017-07-31 14:39:33 +02:00
|
|
|
|
|
|
|
|
// render external user management info markdown
|
|
|
|
|
if (config.externalUserMngInfo) {
|
|
|
|
|
this.externalUserMngInfo = new Remarkable({
|
2017-12-20 12:33:33 +01:00
|
|
|
linkTarget: '__blank',
|
2017-07-31 14:39:33 +02:00
|
|
|
}).render(config.externalUserMngInfo);
|
|
|
|
|
}
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get() {
|
2017-12-20 12:33:33 +01:00
|
|
|
this.backendSrv.get('/api/org/users').then(users => {
|
2017-12-19 16:06:54 +01:00
|
|
|
this.users = users;
|
|
|
|
|
this.unfiltered = users;
|
|
|
|
|
});
|
2017-12-20 12:33:33 +01:00
|
|
|
this.backendSrv.get('/api/org/invites').then(pendingInvites => {
|
2017-12-19 16:06:54 +01:00
|
|
|
this.pendingInvites = pendingInvites;
|
|
|
|
|
});
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
2017-12-13 13:16:44 +01:00
|
|
|
onQueryUpdated() {
|
2018-08-26 17:14:40 +02:00
|
|
|
const regex = new RegExp(this.searchQuery, 'ig');
|
2017-12-13 13:16:44 +01:00
|
|
|
this.users = _.filter(this.unfiltered, item => {
|
|
|
|
|
return regex.test(item.email) || regex.test(item.login);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-13 17:55:49 -08:00
|
|
|
updateOrgUser(user) {
|
2017-12-20 12:33:33 +01:00
|
|
|
this.backendSrv.patch('/api/org/users/' + user.userId, user);
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removeUser(user) {
|
2017-12-20 12:33:33 +01:00
|
|
|
this.$scope.appEvent('confirm-modal', {
|
|
|
|
|
title: 'Delete',
|
|
|
|
|
text: 'Are you sure you want to delete user ' + user.login + '?',
|
|
|
|
|
yesText: 'Delete',
|
|
|
|
|
icon: 'fa-warning',
|
2016-02-13 18:21:18 -08:00
|
|
|
onConfirm: () => {
|
|
|
|
|
this.removeUserConfirmed(user);
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
2016-02-13 18:21:18 -08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removeUserConfirmed(user) {
|
2017-12-21 08:39:31 +01:00
|
|
|
this.backendSrv.delete('/api/org/users/' + user.userId).then(this.get.bind(this));
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
revokeInvite(invite, evt) {
|
|
|
|
|
evt.stopPropagation();
|
2017-12-21 08:39:31 +01:00
|
|
|
this.backendSrv.patch('/api/org/invites/' + invite.code + '/revoke').then(this.get.bind(this));
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
copyInviteToClipboard(evt) {
|
|
|
|
|
evt.stopPropagation();
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-13 13:16:44 +01:00
|
|
|
getInviteUrl(invite) {
|
|
|
|
|
return invite.url;
|
|
|
|
|
}
|
2016-02-13 17:55:49 -08:00
|
|
|
}
|
|
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
coreModule.controller('OrgUsersCtrl', OrgUsersCtrl);
|