import React, { Component } from 'react';
import { Redirect } from 'react-router-dom';
import {
Brand,
Button,
Level,
LevelItem,
Login,
LoginBox,
LoginBoxHeader,
LoginBoxBody,
LoginFooter,
LoginHeaderBrand,
TextInput,
} from '@patternfly/react-core';
import TowerLogo from '../components/TowerLogo';
import api from '../api';
const LOGIN_ERROR_MESSAGE = 'Invalid username or password. Please try again.';
class LoginPage extends Component {
constructor (props) {
super(props);
this.state = {
username: '',
password: '',
error: '',
loading: false,
};
}
componentWillUnmount () {
this.unmounting = true; // todo: state management
}
safeSetState = obj => !this.unmounting && this.setState(obj);
handleUsernameChange = value => this.safeSetState({ username: value, error: '' });
handlePasswordChange = value => this.safeSetState({ password: value, error: '' });
handleSubmit = async event => {
const { username, password, loading } = this.state;
event.preventDefault();
if (!loading) {
this.safeSetState({ loading: true });
try {
await api.login(username, password);
} catch (error) {
if (error.response.status === 401) {
this.safeSetState({ error: LOGIN_ERROR_MESSAGE });
}
} finally {
this.safeSetState({ loading: false });
}
}
}
render () {
const { username, password, loading, error } = this.state;
const { logo, loginInfo } = this.props;
if (api.isAuthenticated()) {
return ();
}
return (
{logo ? : }
)}
footer={{ loginInfo }}
>
Welcome to Ansible Tower! Please Sign In.
);
}
}
export default LoginPage;