| // 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 { Button, Form } from 'react-bootstrap'; |
| import {connect} from 'react-redux'; |
| import PropTypes from 'prop-types'; |
| |
| import { |
| createAdmin |
| } from "./../actions"; |
| |
| |
| export class CreateAdminForm extends React.Component { |
| constructor(props) { |
| super(props); |
| this.state = { |
| username: '', |
| password: '' |
| }; |
| } |
| |
| onChangeUsername(e) { |
| this.setState({username: e.target.value}); |
| } |
| |
| onChangePassword(e) { |
| this.setState({password: e.target.value}); |
| } |
| |
| componentDidMount() { |
| this.usernameField.focus(); |
| } |
| |
| createAdmin(e) { |
| e.preventDefault(); |
| this.props.createAdmin( |
| this.state.username, |
| this.state.password, |
| this.props.loginAfter, |
| this.props.nodes |
| ); |
| } |
| |
| render() { |
| return ( |
| <div className="faux__auth-page"> |
| <h3>Create Admins</h3> |
| |
| <p> |
| Before a server admin is configured, all clients have admin privileges. This is fine when |
| HTTP access is restricted to trusted users. |
| <strong> |
| If end-users will be accessing this |
| CouchDB, you must create an admin account to prevent accidental (or malicious) data |
| loss. |
| </strong> |
| </p> |
| <p> |
| Server admins can create and destroy databases, install and update _design documents, run |
| the test suite, and edit all aspects of CouchDB configuration. |
| </p> |
| |
| <form id="create-admin-form" onSubmit={this.createAdmin.bind(this)}> |
| <div className='row'> |
| <div className='col-12 col-md-5 col-xl-4 mb-3'> |
| <Form.Control type="text" |
| id="username" |
| ref={node => this.usernameField = node} |
| name="name" |
| placeholder="Username" |
| onChange={this.onChangeUsername.bind(this)} /> |
| </div> |
| </div> |
| <div className='row'> |
| <div className='col-12 col-md-5 col-xl-4 mb-3'> |
| <Form.Control type="password" |
| id="password" |
| name="password" |
| placeholder="Password" |
| onChange={this.onChangePassword.bind(this)} /> |
| </div> |
| </div> |
| <div className='row'> |
| <p> |
| Non-admin users have read and write access to all databases, which |
| are controlled by validation. CouchDB can be configured to block all |
| access to anonymous users. |
| </p> |
| <div className='col-12 col-md-5 col-xl-4 mb-3'> |
| <Button id="create-admin" type="submit" variant="cf-primary"> |
| Create Admin |
| </Button> |
| </div> |
| </div> |
| </form> |
| </div> |
| ); |
| } |
| } |
| |
| CreateAdminForm.propTypes = { |
| loginAfter: PropTypes.bool.isRequired |
| }; |
| |
| CreateAdminForm.defaultProps = { |
| loginAfter: false |
| }; |
| |
| const mapStateToProps = ({clusters}) => { |
| return { |
| nodes: clusters.nodes |
| }; |
| }; |
| |
| |
| export default connect( |
| mapStateToProps, |
| {createAdmin} |
| )(CreateAdminForm); |