/*
* This file is part of caronte (https://github.com/eciavatta/caronte).
* Copyright (c) 2020 Emiliano Ciavatta.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
import React, {Component} from 'react';
import './common.scss';
import './ConfigurationPane.scss';
import LinkPopover from "../objects/LinkPopover";
import {Col, Container, Row} from "react-bootstrap";
import InputField from "../fields/InputField";
import TextField from "../fields/TextField";
import ButtonField from "../fields/ButtonField";
import CheckField from "../fields/CheckField";
import {createCurlCommand} from "../../utils";
import Table from "react-bootstrap/Table";
import validation from "../../validation";
import backend from "../../backend";
class ConfigurationPane extends Component {
constructor(props) {
super(props);
this.state = {
settings: {
"config": {
"server_address": "",
"flag_regex": "",
"auth_required": false
},
"accounts": {
}
},
newUsername: "",
newPassword: ""
};
}
saveSettings = () => {
if (this.validateSettings(this.state.settings)) {
backend.post("/setup", this.state.settings).then(_ => {
this.props.onConfigured();
}).catch(res => {
this.setState({setupStatusCode: res.status, setupResponse: JSON.stringify(res.json)});
});
}
};
validateSettings = (settings) => {
let valid = true;
if (!validation.isValidAddress(settings.config.server_address, true)) {
this.setState({serverAddressError: "invalid ip_address"});
valid = false;
}
if (settings.config.flag_regex.length < 8) {
this.setState({flagRegexError: "flag_regex.length < 8"});
valid = false;
}
return valid;
};
updateParam = (callback) => {
callback(this.state.settings);
this.setState({settings: this.state.settings});
};
addAccount = () => {
if (this.state.newUsername.length !== 0 && this.state.newPassword.length !== 0) {
const settings = this.state.settings;
settings.accounts[this.state.newUsername] = this.state.newPassword;
this.setState({
newUsername: "",
newPassword: "",
settings: settings
});
} else {
this.setState({
newUsernameActive: this.state.newUsername.length === 0,
newPasswordActive: this.state.newPassword.length === 0
});
}
};
render() {
const settings = this.state.settings;
const curlCommand = createCurlCommand("/setup", "POST", settings);
const accounts = Object.entries(settings.accounts).map(([username, password]) =>
{username} |
|
this.updateParam((s) => delete s.accounts[username]) }/> |
).concat(
this.setState({newUsername: v})} /> |
this.setState({newPassword: v})} /> |
|
);
return (
POST /setup
this.updateParam((s) => s.config.server_address = v)} />
this.updateParam((s) => s.config.flag_regex = v)}
error={this.state.flagRegexError} />
this.updateParam((s) => s.config.auth_required = v)}/>
accounts:
username |
password |
actions |
{accounts}
);
}
}
export default ConfigurationPane;