/* * MinIO Cloud Storage (C) 2016, 2018 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React from "react" import { connect } from "react-redux" import classNames from "classnames" import logo from "../../img/logo.svg" import Alert from "../alert/Alert" import * as actionsAlert from "../alert/actions" import InputGroup from "./InputGroup" import web from "../web" import { Redirect, Link } from "react-router-dom" import qs from "query-string" import storage from "local-storage-fallback" import history from "../history" export class Login extends React.Component { constructor(props) { super(props) this.state = { accessKey: "", secretKey: "", discoveryDoc: {} } } // Handle field changes accessKeyChange(e) { this.setState({ accessKey: e.target.value }) } secretKeyChange(e) { this.setState({ secretKey: e.target.value }) } handleSubmit(event) { event.preventDefault() const { showAlert, clearAlert, history } = this.props let message = "" if (this.state.accessKey === "") { message = "Access Key cannot be empty" } if (this.state.secretKey === "") { message = "Secret Key cannot be empty" } if (message) { showAlert("danger", message) return } web .Login({ username: this.state.accessKey, password: this.state.secretKey }) .then(res => { // Clear alerts from previous login attempts clearAlert() history.push("/") }) .catch(e => { showAlert("danger", e.message) }) } componentWillMount() { const { clearAlert } = this.props // Clear out any stale message in the alert of previous page clearAlert() document.body.classList.add("is-guest") } componentDidMount() { web.GetDiscoveryDoc().then(({ DiscoveryDoc }) => { this.setState({ discoveryDoc: DiscoveryDoc }) }) } componentWillUnmount() { document.body.classList.remove("is-guest") } render() { const { clearAlert, alert } = this.props if (web.LoggedIn()) { return } let alertBox = // Make sure you don't show a fading out alert box on the initial web-page load. if (!alert.message) alertBox = "" return (
{alertBox}
{this.state.discoveryDoc && this.state.discoveryDoc.authorization_endpoint && ( )}
{window.location.host}
) } } const mapDispatchToProps = dispatch => { return { showAlert: (type, message) => dispatch(actionsAlert.set({ type: type, message: message })), clearAlert: () => dispatch(actionsAlert.clear()) } } export default connect( state => state, mapDispatchToProps )(Login)