Files
grafana/public/app/core/components/Login/LoginCtrl.tsx
Ashley Harrison 3cf95d7eee Chore: fix some anys pt.2 (#53928)
* correctly type some more any's

* undo this change for now...
2022-08-22 16:51:33 +01:00

152 lines
3.5 KiB
TypeScript

import React, { PureComponent } from 'react';
import { AppEvents } from '@grafana/data';
import { getBackendSrv } from '@grafana/runtime';
import appEvents from 'app/core/app_events';
import config from 'app/core/config';
const isOauthEnabled = () => {
return !!config.oauth && Object.keys(config.oauth).length > 0;
};
export interface FormModel {
user: string;
password: string;
email: string;
}
interface Props {
resetCode?: string;
children: (props: {
isLoggingIn: boolean;
changePassword: (pw: string) => void;
isChangingPassword: boolean;
skipPasswordChange: Function;
login: (data: FormModel) => void;
disableLoginForm: boolean;
disableUserSignUp: boolean;
isOauthEnabled: boolean;
loginHint: string;
passwordHint: string;
}) => JSX.Element;
}
interface State {
isLoggingIn: boolean;
isChangingPassword: boolean;
}
export class LoginCtrl extends PureComponent<Props, State> {
result: any = {};
constructor(props: Props) {
super(props);
this.state = {
isLoggingIn: false,
isChangingPassword: false,
};
if (config.loginError) {
appEvents.emit(AppEvents.alertWarning, ['Login Failed', config.loginError]);
}
}
changePassword = (password: string) => {
const pw = {
newPassword: password,
confirmNew: password,
oldPassword: 'admin',
};
if (this.props.resetCode) {
const resetModel = {
code: this.props.resetCode,
newPassword: password,
confirmPassword: password,
};
getBackendSrv()
.post('/api/user/password/reset', resetModel)
.then(() => {
this.toGrafana();
});
} else {
getBackendSrv()
.put('/api/user/password', pw)
.then(() => {
this.toGrafana();
})
.catch((err) => console.error(err));
}
};
login = (formModel: FormModel) => {
this.setState({
isLoggingIn: true,
});
getBackendSrv()
.post('/login', formModel)
.then((result) => {
this.result = result;
if (formModel.password !== 'admin' || config.ldapEnabled || config.authProxyEnabled) {
this.toGrafana();
return;
} else {
this.changeView();
}
})
.catch(() => {
this.setState({
isLoggingIn: false,
});
});
};
changeView = () => {
this.setState({
isChangingPassword: true,
});
};
toGrafana = () => {
// Use window.location.href to force page reload
if (this.result.redirectUrl) {
if (config.appSubUrl !== '' && !this.result.redirectUrl.startsWith(config.appSubUrl)) {
window.location.assign(config.appSubUrl + this.result.redirectUrl);
} else {
window.location.assign(this.result.redirectUrl);
}
} else {
window.location.assign(config.appSubUrl + '/');
}
};
render() {
const { children } = this.props;
const { isLoggingIn, isChangingPassword } = this.state;
const { login, toGrafana, changePassword } = this;
const { loginHint, passwordHint, disableLoginForm, disableUserSignUp } = config;
return (
<>
{children({
isOauthEnabled: isOauthEnabled(),
loginHint,
passwordHint,
disableLoginForm,
disableUserSignUp,
login,
isLoggingIn,
changePassword,
skipPasswordChange: toGrafana,
isChangingPassword,
})}
</>
);
}
}
export default LoginCtrl;