login_ctrl.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import _ from 'lodash';
  2. import coreModule from '../core_module';
  3. import config from 'app/core/config';
  4. import { BackendSrv } from '../services/backend_srv';
  5. export class LoginCtrl {
  6. /** @ngInject */
  7. constructor($scope: any, backendSrv: BackendSrv, $location: any) {
  8. $scope.formModel = {
  9. user: '',
  10. email: '',
  11. password: '',
  12. };
  13. $scope.command = {};
  14. $scope.result = '';
  15. $scope.loggingIn = false;
  16. $scope.oauth = config.oauth;
  17. $scope.oauthEnabled = _.keys(config.oauth).length > 0;
  18. $scope.ldapEnabled = config.ldapEnabled;
  19. $scope.authProxyEnabled = config.authProxyEnabled;
  20. $scope.samlEnabled = config.samlEnabled;
  21. $scope.disableLoginForm = config.disableLoginForm;
  22. $scope.disableUserSignUp = config.disableUserSignUp;
  23. $scope.loginHint = config.loginHint;
  24. $scope.passwordHint = config.passwordHint;
  25. $scope.loginMode = true;
  26. $scope.submitBtnText = 'Log in';
  27. $scope.init = () => {
  28. $scope.$watch('loginMode', $scope.loginModeChanged);
  29. if (config.loginError) {
  30. $scope.appEvent('alert-warning', ['Login Failed', config.loginError]);
  31. }
  32. };
  33. $scope.submit = () => {
  34. if ($scope.loginMode) {
  35. $scope.login();
  36. } else {
  37. $scope.signUp();
  38. }
  39. };
  40. $scope.changeView = () => {
  41. const loginView = document.querySelector('#login-view');
  42. const changePasswordView = document.querySelector('#change-password-view');
  43. loginView.className += ' add';
  44. setTimeout(() => {
  45. loginView.className += ' hidden';
  46. }, 250);
  47. setTimeout(() => {
  48. changePasswordView.classList.remove('hidden');
  49. }, 251);
  50. setTimeout(() => {
  51. changePasswordView.classList.remove('remove');
  52. }, 301);
  53. setTimeout(() => {
  54. document.getElementById('newPassword').focus();
  55. }, 400);
  56. };
  57. $scope.changePassword = () => {
  58. $scope.command.oldPassword = 'admin';
  59. if ($scope.command.newPassword !== $scope.command.confirmNew) {
  60. $scope.appEvent('alert-warning', ['New passwords do not match', '']);
  61. return;
  62. }
  63. backendSrv.put('/api/user/password', $scope.command).then(() => {
  64. $scope.toGrafana();
  65. });
  66. };
  67. $scope.skip = () => {
  68. $scope.toGrafana();
  69. };
  70. $scope.loginModeChanged = (newValue: boolean) => {
  71. $scope.submitBtnText = newValue ? 'Log in' : 'Sign up';
  72. };
  73. $scope.signUp = () => {
  74. if (!$scope.loginForm.$valid) {
  75. return;
  76. }
  77. backendSrv.post('/api/user/signup', $scope.formModel).then((result: any) => {
  78. if (result.status === 'SignUpCreated') {
  79. $location.path('/signup').search({ email: $scope.formModel.email });
  80. } else {
  81. window.location.href = config.appSubUrl + '/';
  82. }
  83. });
  84. };
  85. $scope.login = () => {
  86. delete $scope.loginError;
  87. if (!$scope.loginForm.$valid) {
  88. return;
  89. }
  90. $scope.loggingIn = true;
  91. backendSrv
  92. .post('/login', $scope.formModel)
  93. .then((result: any) => {
  94. $scope.result = result;
  95. if ($scope.formModel.password !== 'admin' || $scope.ldapEnabled || $scope.authProxyEnabled) {
  96. $scope.toGrafana();
  97. return;
  98. } else {
  99. $scope.changeView();
  100. }
  101. })
  102. .catch(() => {
  103. $scope.loggingIn = false;
  104. });
  105. };
  106. $scope.toGrafana = () => {
  107. const params = $location.search();
  108. if (params.redirect && params.redirect[0] === '/') {
  109. window.location.href = config.appSubUrl + params.redirect;
  110. } else if ($scope.result.redirectUrl) {
  111. window.location.href = $scope.result.redirectUrl;
  112. } else {
  113. window.location.href = config.appSubUrl + '/';
  114. }
  115. };
  116. $scope.init();
  117. }
  118. }
  119. coreModule.controller('LoginCtrl', LoginCtrl);