frontend/app/RootComponent.jsx (72 lines of code) (raw):
import React from "react";
import PropTypes from "prop-types";
import LoginButton from "./LoginButton.jsx";
import { Link } from "react-router-dom";
class RootComponent extends React.Component {
static propTypes = {
currentUsername: PropTypes.string,
isLoggedIn: PropTypes.bool.isRequired,
loginErrorDetail: PropTypes.string,
oAuthUri: PropTypes.string.isRequired,
tokenUri: PropTypes.string.isRequired,
clientId: PropTypes.string.isRequired,
resource: PropTypes.string.isRequired,
scope: PropTypes.string.isRequired,
};
constructor(props) {
super(props);
const currentUri = new URL(window.location.href);
this.redirectUri =
currentUri.protocol + "//" + currentUri.host + "/oauth2/callback";
}
doLogout() {
localStorage.clear();
window.location.href = "/";
}
render() {
if (this.props.isLoggedIn) {
return (
<div>
<p className="inline-dialog-content centered">
You are currently logged in as
<i
className="fa fa-user"
style={{ marginRight: "3px", marginLeft: "5px" }}
/>
<span className="emphasis">{this.props.currentUsername}</span>
</p>
<ul className="main-menu-list">
<li className="main-menu-list">
<Link to="/search">Go to file search</Link>
</li>
<li className="main-menu-list">
<Link to="/byproject">Go to project browser</Link>
</li>
</ul>
<button style={{ marginLeft: "1em" }} onClick={this.doLogout}>
Log out
</button>
</div>
);
} else {
return (
<div>
{this.props.loginErrorDetail ? (
<p className="error">{this.props.loginErrorDetail}</p>
) : null}
Click here to log in to VaultDoor:{" "}
<LoginButton
oAuthUri={this.props.oAuthUri}
tokenUri={this.props.tokenUri}
clientId={this.props.clientId}
redirectUri={this.redirectUri}
resource={this.props.resource}
state={this.props.redirectingTo}
scope={this.props.scope}
/>
</div>
);
}
}
}
export default RootComponent;