ProfileCtrl.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { coreModule, NavModelSrv } from 'app/core/core';
  2. import { dateTime } from '@grafana/data';
  3. import { UserSession } from 'app/types';
  4. import { BackendSrv } from 'app/core/services/backend_srv';
  5. export class ProfileCtrl {
  6. sessions: object[] = [];
  7. navModel: any;
  8. /** @ngInject */
  9. constructor(private backendSrv: BackendSrv, navModelSrv: NavModelSrv) {
  10. this.getUserSessions();
  11. this.navModel = navModelSrv.getNav('profile', 'profile-settings', 0);
  12. }
  13. getUserSessions() {
  14. this.backendSrv.get('/api/user/auth-tokens').then((sessions: UserSession[]) => {
  15. sessions.reverse();
  16. const found = sessions.findIndex((session: UserSession) => {
  17. return session.isActive;
  18. });
  19. if (found) {
  20. const now = sessions[found];
  21. sessions.splice(found, found);
  22. sessions.unshift(now);
  23. }
  24. this.sessions = sessions.map((session: UserSession) => {
  25. return {
  26. id: session.id,
  27. isActive: session.isActive,
  28. seenAt: dateTime(session.seenAt).fromNow(),
  29. createdAt: dateTime(session.createdAt).format('MMMM DD, YYYY'),
  30. clientIp: session.clientIp,
  31. browser: session.browser,
  32. browserVersion: session.browserVersion,
  33. os: session.os,
  34. osVersion: session.osVersion,
  35. device: session.device,
  36. };
  37. });
  38. });
  39. }
  40. revokeUserSession(tokenId: number) {
  41. this.backendSrv
  42. .post('/api/user/revoke-auth-token', {
  43. authTokenId: tokenId,
  44. })
  45. .then(() => {
  46. this.sessions = this.sessions.filter((session: UserSession) => {
  47. if (session.id === tokenId) {
  48. return false;
  49. }
  50. return true;
  51. });
  52. });
  53. }
  54. }
  55. coreModule.controller('ProfileCtrl', ProfileCtrl);