From 0a89b14ec29e52e806e0aefc069f3f6dfde5c3a2 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 14 Jan 2019 22:02:44 +0000
Subject: [PATCH] Auto-install borg...
---
borgbutler-webapp/src/components/views/config/ConfigurationPage.jsx | 24 +++++++++++
borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java | 7 +++
borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx | 76 ++++++++++++++++++++++---------------
3 files changed, 75 insertions(+), 32 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
index d06e30b..68fbdcf 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -21,6 +21,13 @@
*/
private static final String RESTORE_DIRNAME = "restore";
+ @Getter
+ private String[][] binaries = {
+ {"freebsd64", "FreeBSD 64"},
+ {"linux32", "Linux 32"},
+ {"linux64", "Linux 64"},
+ {"macosx64", "MacOS X 64"}};
+
@JsonIgnore
@Setter(AccessLevel.PACKAGE)
private File workingDir;
diff --git a/borgbutler-webapp/src/components/views/config/ConfigurationPage.jsx b/borgbutler-webapp/src/components/views/config/ConfigurationPage.jsx
index 3a26b4d..715baf8 100644
--- a/borgbutler-webapp/src/components/views/config/ConfigurationPage.jsx
+++ b/borgbutler-webapp/src/components/views/config/ConfigurationPage.jsx
@@ -8,6 +8,7 @@
import ConfigAccountTab from "./ConfigurationAccountTab";
import ConfigServerTab from "./ConfigurationServerTab";
import LoadingOverlay from '../../general/loading/LoadingOverlay';
+import ConfirmModal from '../../general/modal/ConfirmModal';
class ConfigurationPage
extends React
@@ -20,11 +21,13 @@
this.state = {
activeTab: '1',
loading: false,
- reload: false
+ reload: false,
+ confirmModal: false
};
this.onSave = this.onSave.bind(this);
this.onCancel = this.onCancel.bind(this);
+ this.toggleModal = this.toggleModal.bind(this);
}
toggleTab = tab => () => {
@@ -58,6 +61,12 @@
this.setReload();
}
+ toggleModal() {
+ this.setState({
+ confirmModal: !this.state.confirmModal
+ })
+ }
+
render() {
// https://codepen.io/_arpy/pen/xYoyPW
if (this.state.reload) {
@@ -65,6 +74,17 @@
}
return (
<React.Fragment>
+ <ConfirmModal
+ onConfirm={ConfigServerTab.clearAllCaches}
+ title={'Are you sure?'}
+ toggle={this.toggleModal}
+ open={this.state.confirmModal}
+ >
+ Do you really want to clear all caches? All Archive file lists and caches for repo and archive
+ information will be cleared.
+ <br/>
+ This is a safe option but it may take some time to re-fill the caches (on demand) again.
+ </ConfirmModal>
<PageHeader><I18n name={'configuration'}/></PageHeader>
<Nav tabs>
<NavLink
@@ -92,6 +112,8 @@
</TabContent>
<FormGroup>
<FormField length={12}>
+ <FormButton id={'clearAllCaches'} onClick={this.toggleModal}> Clear all caches
+ </FormButton>
<FormButton onClick={this.onCancel}
hintKey="configuration.cancel.hint"><I18n name={'common.cancel'}/>
</FormButton>
diff --git a/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx b/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
index 84f0e2d..3143c7e 100644
--- a/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
+++ b/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
@@ -1,10 +1,20 @@
import React from 'react';
-import {FormButton, FormCheckbox, FormLabelField, FormLabelInputField} from '../../general/forms/FormComponents';
+import {Button} from 'reactstrap';
+import {
+ FormCheckbox,
+ FormField,
+ FormGroup,
+ FormInput,
+ FormLabel,
+ FormLabelField,
+ FormLabelInputField,
+ FormOption,
+ FormSelect
+} from '../../general/forms/FormComponents';
import {getRestServiceUrl} from '../../../utilities/global';
import I18n from '../../general/translation/I18n';
import ErrorAlertGenericRestFailure from '../../general/ErrorAlertGenericRestFailure';
import Loading from '../../general/Loading';
-import ConfirmModal from '../../general/modal/ConfirmModal';
class ConfigServerTab extends React.Component {
loadConfig = () => {
@@ -48,13 +58,12 @@
showDemoRepos: true,
maxArchiveContentCacheCapacityMb: 100,
redirect: false,
- confirmModal: false
+ binary: 'manual'
};
this.handleTextChange = this.handleTextChange.bind(this);
this.handleCheckboxChange = this.handleCheckboxChange.bind(this);
this.loadConfig = this.loadConfig.bind(this);
- this.toggleModal = this.toggleModal.bind(this);
}
componentDidMount() {
@@ -73,7 +82,7 @@
save() {
var config = {
port: this.state.port,
- maxArchiveContentCacheCapacityMb : this.state.maxArchiveContentCacheCapacityMb,
+ maxArchiveContentCacheCapacityMb: this.state.maxArchiveContentCacheCapacityMb,
webDevelopmentMode: this.state.webDevelopmentMode,
showDemoRepos: this.state.showDemoRepos
};
@@ -96,12 +105,6 @@
})
}
- toggleModal() {
- this.setState({
- confirmModal: !this.state.confirmModal
- })
- }
-
render() {
if (this.state.loading) {
return <Loading/>;
@@ -113,27 +116,38 @@
return (
<div>
- <ConfirmModal
- onConfirm={ConfigServerTab.clearAllCaches}
- title={'Are you sure?'}
- toggle={this.toggleModal}
- open={this.state.confirmModal}
- >
- Do you really want to clear all caches? All Archive file lists and caches for repo and archive
- information will be cleared.
- <br/>
- This is a safe option but it may take some time to re-fill the caches (on demand) again.
- </ConfirmModal>
<form>
- <FormLabelField>
- <FormButton id={'clearAllCaches'} onClick={this.toggleModal}> Clear all caches
- </FormButton>
- </FormLabelField>
+ <FormGroup>
+ <FormLabel>{'Borg command'}</FormLabel>
+ <FormField length={2}>
+ <FormSelect
+ value={this.state.binary}
+ name={'binary'}
+ onChange={this.handleTextChange}
+ hint={'Choose your OS and BorgButler will download and use a ready to run borg binary from https://github.com/borgbackup/borg/releases or choose a manual installed version.'}
+ >
+ {this.state.binaries
+ .map((binary, index) => <FormOption label={binary[1]} value={binary[0]}
+ key={index}/>)}
+ <FormOption label={'Manual'} value={'manual'}/>
+ </FormSelect>
+ </FormField>
+ <FormField length={6}>
+ <FormInput name={'borgCommand'} value={this.state.borgCommand}
+ onChange={this.handleTextChange}
+ placeholder="Enter path of borg command"/>
+ </FormField>
+ <FormField length={2}>
+ <Button className={'outline-primary'} onClick={this.onCancel}
+ hint={'Tests the borg version.'}>Test
+ </Button>
+ </FormField>
+ </FormGroup>
<FormLabelInputField label={'Port'} fieldLength={2} type="number" min={0} max={65535}
step={1}
name={'port'} value={this.state.port}
onChange={this.handleTextChange}
- placeholder="Enter port" />
+ placeholder="Enter port"/>
<FormLabelInputField label={'Maximum disc capacity (MB)'} fieldLength={2} type="number" min={50}
max={10000}
step={50}
@@ -141,18 +155,18 @@
value={this.state.maxArchiveContentCacheCapacityMb}
onChange={this.handleTextChange}
placeholder="Enter maximum Capacity"
- hint={`Limits the cache size of archive file lists in the local cache directory: ${this.state.cacheDir}`} />
+ hint={`Limits the cache size of archive file lists in the local cache directory: ${this.state.cacheDir}`}/>
<FormLabelField label={'Show demo repositories'} fieldLength={2}>
<FormCheckbox checked={this.state.showDemoRepos}
hint={'If true, some demo repositories are shown for testing the functionality of BorgButler without any further configuration and running borg backups.'}
name="showDemoRepos"
- onChange={this.handleCheckboxChange} />
+ onChange={this.handleCheckboxChange}/>
</FormLabelField>
- <FormLabelField label={<I18n name={'configuration.webDevelopmentMode'} />} fieldLength={2}>
+ <FormLabelField label={<I18n name={'configuration.webDevelopmentMode'}/>} fieldLength={2}>
<FormCheckbox checked={this.state.webDevelopmentMode}
hintKey={'configuration.webDevelopmentMode.hint'}
name="webDevelopmentMode"
- onChange={this.handleCheckboxChange} />
+ onChange={this.handleCheckboxChange}/>
</FormLabelField>
</form>
</div>
--
Gitblit v1.10.0