ProfileCtrl.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import config from 'app/core/config';
  2. import { coreModule, NavModelSrv } from 'app/core/core';
  3. import { dateTime } from '@grafana/data';
  4. import { UserSession } from 'app/types';
  5. import { BackendSrv } from 'app/core/services/backend_srv';
  6. export class ProfileCtrl {
  7. user: any;
  8. oldTheme: any;
  9. teams: any = [];
  10. orgs: any = [];
  11. sessions: object[] = [];
  12. userForm: any;
  13. showTeamsList = false;
  14. showOrgsList = false;
  15. readonlyLoginFields = config.disableLoginForm;
  16. navModel: any;
  17. /** @ngInject */
  18. constructor(private backendSrv: BackendSrv, navModelSrv: NavModelSrv) {
  19. this.getUserSessions();
  20. this.getUserTeams();
  21. this.getUserOrgs();
  22. this.navModel = navModelSrv.getNav('profile', 'profile-settings', 0);
  23. }
  24. getUserSessions() {
  25. this.backendSrv.get('/api/user/auth-tokens').then((sessions: UserSession[]) => {
  26. sessions.reverse();
  27. const found = sessions.findIndex((session: UserSession) => {
  28. return session.isActive;
  29. });
  30. if (found) {
  31. const now = sessions[found];
  32. sessions.splice(found, found);
  33. sessions.unshift(now);
  34. }
  35. this.sessions = sessions.map((session: UserSession) => {
  36. return {
  37. id: session.id,
  38. isActive: session.isActive,
  39. seenAt: dateTime(session.seenAt).fromNow(),
  40. createdAt: dateTime(session.createdAt).format('MMMM DD, YYYY'),
  41. clientIp: session.clientIp,
  42. browser: session.browser,
  43. browserVersion: session.browserVersion,
  44. os: session.os,
  45. osVersion: session.osVersion,
  46. device: session.device,
  47. };
  48. });
  49. });
  50. }
  51. revokeUserSession(tokenId: number) {
  52. this.backendSrv
  53. .post('/api/user/revoke-auth-token', {
  54. authTokenId: tokenId,
  55. })
  56. .then(() => {
  57. this.sessions = this.sessions.filter((session: UserSession) => {
  58. if (session.id === tokenId) {
  59. return false;
  60. }
  61. return true;
  62. });
  63. });
  64. }
  65. getUserTeams() {
  66. this.backendSrv.get('/api/user/teams').then((teams: any) => {
  67. this.teams = teams;
  68. this.showTeamsList = this.teams.length > 0;
  69. });
  70. }
  71. getUserOrgs() {
  72. this.backendSrv.get('/api/user/orgs').then((orgs: any) => {
  73. this.orgs = orgs;
  74. this.showOrgsList = orgs.length > 1;
  75. });
  76. }
  77. setUsingOrg(org: any) {
  78. this.backendSrv.post('/api/user/using/' + org.orgId).then(() => {
  79. window.location.href = config.appSubUrl + '/profile';
  80. });
  81. }
  82. }
  83. coreModule.controller('ProfileCtrl', ProfileCtrl);