ProfileCtrl.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. orgs: any = [];
  10. sessions: object[] = [];
  11. userForm: any;
  12. showOrgsList = false;
  13. readonlyLoginFields = config.disableLoginForm;
  14. navModel: any;
  15. /** @ngInject */
  16. constructor(private backendSrv: BackendSrv, navModelSrv: NavModelSrv) {
  17. this.getUserSessions();
  18. this.getUserOrgs();
  19. this.navModel = navModelSrv.getNav('profile', 'profile-settings', 0);
  20. }
  21. getUserSessions() {
  22. this.backendSrv.get('/api/user/auth-tokens').then((sessions: UserSession[]) => {
  23. sessions.reverse();
  24. const found = sessions.findIndex((session: UserSession) => {
  25. return session.isActive;
  26. });
  27. if (found) {
  28. const now = sessions[found];
  29. sessions.splice(found, found);
  30. sessions.unshift(now);
  31. }
  32. this.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. revokeUserSession(tokenId: number) {
  49. this.backendSrv
  50. .post('/api/user/revoke-auth-token', {
  51. authTokenId: tokenId,
  52. })
  53. .then(() => {
  54. this.sessions = this.sessions.filter((session: UserSession) => {
  55. if (session.id === tokenId) {
  56. return false;
  57. }
  58. return true;
  59. });
  60. });
  61. }
  62. getUserOrgs() {
  63. this.backendSrv.get('/api/user/orgs').then((orgs: any) => {
  64. this.orgs = orgs;
  65. this.showOrgsList = orgs.length > 1;
  66. });
  67. }
  68. setUsingOrg(org: any) {
  69. this.backendSrv.post('/api/user/using/' + org.orgId).then(() => {
  70. window.location.href = config.appSubUrl + '/profile';
  71. });
  72. }
  73. }
  74. coreModule.controller('ProfileCtrl', ProfileCtrl);