AdminEditUserCtrl.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import _ from 'lodash';
  2. import { dateTime } from '@grafana/ui';
  3. import { BackendSrv } from 'app/core/services/backend_srv';
  4. import { NavModelSrv } from 'app/core/core';
  5. import { User } from 'app/core/services/context_srv';
  6. import { UserSession } from 'app/types';
  7. export default class AdminEditUserCtrl {
  8. /** @ngInject */
  9. constructor($scope: any, $routeParams: any, backendSrv: BackendSrv, $location: any, navModelSrv: NavModelSrv) {
  10. $scope.user = {};
  11. $scope.sessions = [];
  12. $scope.newOrg = { name: '', role: 'Editor' };
  13. $scope.permissions = {};
  14. $scope.navModel = navModelSrv.getNav('admin', 'global-users', 0);
  15. $scope.init = () => {
  16. if ($routeParams.id) {
  17. $scope.getUser($routeParams.id);
  18. $scope.getUserSessions($routeParams.id);
  19. $scope.getUserOrgs($routeParams.id);
  20. }
  21. };
  22. $scope.getUser = (id: number) => {
  23. backendSrv.get('/api/users/' + id).then((user: User) => {
  24. $scope.user = user;
  25. $scope.user_id = id;
  26. $scope.permissions.isGrafanaAdmin = user.isGrafanaAdmin;
  27. });
  28. };
  29. $scope.getUserSessions = (id: number) => {
  30. backendSrv.get('/api/admin/users/' + id + '/auth-tokens').then((sessions: UserSession[]) => {
  31. sessions.reverse();
  32. $scope.sessions = sessions.map((session: UserSession) => {
  33. return {
  34. id: session.id,
  35. isActive: session.isActive,
  36. seenAt: dateTime(session.seenAt).fromNow(),
  37. createdAt: dateTime(session.createdAt).format('MMMM DD, YYYY'),
  38. clientIp: session.clientIp,
  39. browser: session.browser,
  40. browserVersion: session.browserVersion,
  41. os: session.os,
  42. osVersion: session.osVersion,
  43. device: session.device,
  44. };
  45. });
  46. });
  47. };
  48. $scope.revokeUserSession = (tokenId: number) => {
  49. backendSrv
  50. .post('/api/admin/users/' + $scope.user_id + '/revoke-auth-token', {
  51. authTokenId: tokenId,
  52. })
  53. .then(() => {
  54. $scope.sessions = $scope.sessions.filter((session: UserSession) => {
  55. if (session.id === tokenId) {
  56. return false;
  57. }
  58. return true;
  59. });
  60. });
  61. };
  62. $scope.revokeAllUserSessions = (tokenId: number) => {
  63. backendSrv.post('/api/admin/users/' + $scope.user_id + '/logout').then(() => {
  64. $scope.sessions = [];
  65. });
  66. };
  67. $scope.setPassword = () => {
  68. if (!$scope.passwordForm.$valid) {
  69. return;
  70. }
  71. const payload = { password: $scope.password };
  72. backendSrv.put('/api/admin/users/' + $scope.user_id + '/password', payload).then(() => {
  73. $location.path('/admin/users');
  74. });
  75. };
  76. $scope.updatePermissions = () => {
  77. const payload = $scope.permissions;
  78. backendSrv.put('/api/admin/users/' + $scope.user_id + '/permissions', payload).then(() => {
  79. $location.path('/admin/users');
  80. });
  81. };
  82. $scope.create = () => {
  83. if (!$scope.userForm.$valid) {
  84. return;
  85. }
  86. backendSrv.post('/api/admin/users', $scope.user).then(() => {
  87. $location.path('/admin/users');
  88. });
  89. };
  90. $scope.getUserOrgs = (id: number) => {
  91. backendSrv.get('/api/users/' + id + '/orgs').then((orgs: any) => {
  92. $scope.orgs = orgs;
  93. });
  94. };
  95. $scope.update = () => {
  96. if (!$scope.userForm.$valid) {
  97. return;
  98. }
  99. backendSrv.put('/api/users/' + $scope.user_id, $scope.user).then(() => {
  100. $location.path('/admin/users');
  101. });
  102. };
  103. $scope.updateOrgUser = (orgUser: { orgId: string }) => {
  104. backendSrv.patch('/api/orgs/' + orgUser.orgId + '/users/' + $scope.user_id, orgUser).then(() => {});
  105. };
  106. $scope.removeOrgUser = (orgUser: { orgId: string }) => {
  107. backendSrv.delete('/api/orgs/' + orgUser.orgId + '/users/' + $scope.user_id).then(() => {
  108. $scope.getUser($scope.user_id);
  109. $scope.getUserOrgs($scope.user_id);
  110. });
  111. };
  112. $scope.orgsSearchCache = [];
  113. $scope.searchOrgs = (queryStr: any, callback: any) => {
  114. if ($scope.orgsSearchCache.length > 0) {
  115. callback(_.map($scope.orgsSearchCache, 'name'));
  116. return;
  117. }
  118. backendSrv.get('/api/orgs', { query: '' }).then((result: any) => {
  119. $scope.orgsSearchCache = result;
  120. callback(_.map(result, 'name'));
  121. });
  122. };
  123. $scope.addOrgUser = () => {
  124. if (!$scope.addOrgForm.$valid) {
  125. return;
  126. }
  127. const orgInfo: any = _.find($scope.orgsSearchCache, {
  128. name: $scope.newOrg.name,
  129. });
  130. if (!orgInfo) {
  131. return;
  132. }
  133. $scope.newOrg.loginOrEmail = $scope.user.login;
  134. backendSrv.post('/api/orgs/' + orgInfo.id + '/users/', $scope.newOrg).then(() => {
  135. $scope.getUser($scope.user_id);
  136. $scope.getUserOrgs($scope.user_id);
  137. });
  138. };
  139. $scope.init();
  140. }
  141. }