login_ctrl.ts 3.7 KB

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