|
@@ -1,12 +1,15 @@
|
|
|
import _ from 'lodash';
|
|
import _ from 'lodash';
|
|
|
|
|
+import { dateTime } from '@grafana/ui';
|
|
|
import { BackendSrv } from 'app/core/services/backend_srv';
|
|
import { BackendSrv } from 'app/core/services/backend_srv';
|
|
|
import { NavModelSrv } from 'app/core/core';
|
|
import { NavModelSrv } from 'app/core/core';
|
|
|
import { User } from 'app/core/services/context_srv';
|
|
import { User } from 'app/core/services/context_srv';
|
|
|
|
|
+import { UserSession } from 'app/types';
|
|
|
|
|
|
|
|
export default class AdminEditUserCtrl {
|
|
export default class AdminEditUserCtrl {
|
|
|
/** @ngInject */
|
|
/** @ngInject */
|
|
|
constructor($scope: any, $routeParams: any, backendSrv: BackendSrv, $location: any, navModelSrv: NavModelSrv) {
|
|
constructor($scope: any, $routeParams: any, backendSrv: BackendSrv, $location: any, navModelSrv: NavModelSrv) {
|
|
|
$scope.user = {};
|
|
$scope.user = {};
|
|
|
|
|
+ $scope.sessions = [];
|
|
|
$scope.newOrg = { name: '', role: 'Editor' };
|
|
$scope.newOrg = { name: '', role: 'Editor' };
|
|
|
$scope.permissions = {};
|
|
$scope.permissions = {};
|
|
|
$scope.navModel = navModelSrv.getNav('admin', 'global-users', 0);
|
|
$scope.navModel = navModelSrv.getNav('admin', 'global-users', 0);
|
|
@@ -14,6 +17,7 @@ export default class AdminEditUserCtrl {
|
|
|
$scope.init = () => {
|
|
$scope.init = () => {
|
|
|
if ($routeParams.id) {
|
|
if ($routeParams.id) {
|
|
|
$scope.getUser($routeParams.id);
|
|
$scope.getUser($routeParams.id);
|
|
|
|
|
+ $scope.getUserSessions($routeParams.id);
|
|
|
$scope.getUserOrgs($routeParams.id);
|
|
$scope.getUserOrgs($routeParams.id);
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
@@ -26,6 +30,48 @@ export default class AdminEditUserCtrl {
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ $scope.getUserSessions = (id: number) => {
|
|
|
|
|
+ backendSrv.get('/api/admin/users/' + id + '/auth-tokens').then((sessions: UserSession[]) => {
|
|
|
|
|
+ sessions.reverse();
|
|
|
|
|
+
|
|
|
|
|
+ $scope.sessions = sessions.map((session: UserSession) => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ id: session.id,
|
|
|
|
|
+ isActive: session.isActive,
|
|
|
|
|
+ seenAt: dateTime(session.seenAt).fromNow(),
|
|
|
|
|
+ createdAt: dateTime(session.createdAt).format('MMMM DD, YYYY'),
|
|
|
|
|
+ clientIp: session.clientIp,
|
|
|
|
|
+ browser: session.browser,
|
|
|
|
|
+ browserVersion: session.browserVersion,
|
|
|
|
|
+ os: session.os,
|
|
|
|
|
+ osVersion: session.osVersion,
|
|
|
|
|
+ device: session.device,
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ $scope.revokeUserSession = (tokenId: number) => {
|
|
|
|
|
+ backendSrv
|
|
|
|
|
+ .post('/api/admin/users/' + $scope.user_id + '/revoke-auth-token', {
|
|
|
|
|
+ authTokenId: tokenId,
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ $scope.sessions = $scope.sessions.filter((session: UserSession) => {
|
|
|
|
|
+ if (session.id === tokenId) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ $scope.revokeAllUserSessions = (tokenId: number) => {
|
|
|
|
|
+ backendSrv.post('/api/admin/users/' + $scope.user_id + '/logout').then(() => {
|
|
|
|
|
+ $scope.sessions = [];
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
$scope.setPassword = () => {
|
|
$scope.setPassword = () => {
|
|
|
if (!$scope.passwordForm.$valid) {
|
|
if (!$scope.passwordForm.$valid) {
|
|
|
return;
|
|
return;
|