mirror of
https://github.com/Sebclem/hassio-nextcloud-backup.git
synced 2024-11-05 09:02:58 +01:00
🔨 Add webdav config
This commit is contained in:
parent
569374358e
commit
fd73ee3176
@ -1,9 +1,17 @@
|
||||
import { config } from "dotenv";
|
||||
import express from "express";
|
||||
import { saveBackupConfig, validateBackupConfig } from "../services/configService.js";
|
||||
import {
|
||||
getBackupConfig,
|
||||
saveBackupConfig,
|
||||
validateBackupConfig,
|
||||
} from "../services/backupConfigService.js";
|
||||
import { getWebdavConfig, saveWebdavConfig, validateWebdavConfig } from "../services/webdavConfigService.js";
|
||||
|
||||
const configRouter = express.Router();
|
||||
|
||||
configRouter.get("/backup", (req, res, next) => {
|
||||
res.json(getBackupConfig());
|
||||
});
|
||||
|
||||
configRouter.put("/backup", (req, res, next) => {
|
||||
validateBackupConfig(req.body)
|
||||
.then(() => {
|
||||
@ -17,4 +25,21 @@ configRouter.put("/backup", (req, res, next) => {
|
||||
});
|
||||
});
|
||||
|
||||
configRouter.get("/webdav", (req, res, next) => {
|
||||
res.json(getWebdavConfig());
|
||||
});
|
||||
|
||||
configRouter.put("/webdav", (req, res, next) => {
|
||||
validateWebdavConfig(req.body)
|
||||
.then(() => {
|
||||
saveWebdavConfig(req.body);
|
||||
res.status(204);
|
||||
res.send();
|
||||
})
|
||||
.catch((error) => {
|
||||
res.status(400);
|
||||
res.json(error.details);
|
||||
});
|
||||
});
|
||||
|
||||
export default configRouter;
|
||||
|
@ -1,8 +1,8 @@
|
||||
import fs from "fs";
|
||||
import Joi from "joi"
|
||||
import logger from "../config/winston.js";
|
||||
import { backupConfigValidation } from "../types/services/backupConfigValidation.js"
|
||||
import { BackupConfig } from "../types/services/backupConfig.js"
|
||||
import backupConfigValidation from "../types/services/backupConfigValidation.js";
|
||||
|
||||
|
||||
const backupConfigPath = "/data/backupConfigV2.json";
|
43
nextcloud_backup/backend/src/services/webdavConfigService.ts
Normal file
43
nextcloud_backup/backend/src/services/webdavConfigService.ts
Normal file
@ -0,0 +1,43 @@
|
||||
import fs from "fs";
|
||||
import Joi from "joi"
|
||||
import logger from "../config/winston.js";
|
||||
import { default_root } from "../tools/pathTools.js";
|
||||
import WebdavConfigValidation from "../types/services/webdavConfigValidation.js";
|
||||
import { WebdavConfig, WebdavEndpointType } from "../types/services/webdavConfig.js"
|
||||
|
||||
|
||||
const webdavConfigPath = "/data/webdavConfigV2.json";
|
||||
|
||||
|
||||
export function validateWebdavConfig(config: WebdavConfig){
|
||||
const validator = Joi.object(WebdavConfigValidation);
|
||||
return validator.validateAsync(config);
|
||||
}
|
||||
|
||||
export function saveWebdavConfig(config: WebdavConfig){
|
||||
fs.writeFileSync(webdavConfigPath, JSON.stringify(config, undefined, 2));
|
||||
}
|
||||
|
||||
export function getWebdavConfig(): WebdavConfig {
|
||||
if (!fs.existsSync(webdavConfigPath)) {
|
||||
logger.warn("Webdav Config file not found, creating default one !")
|
||||
const defaultConfig = getWebdavDefaultConfig();
|
||||
saveWebdavConfig(defaultConfig);
|
||||
return defaultConfig;
|
||||
} else {
|
||||
return JSON.parse(fs.readFileSync(webdavConfigPath).toString());
|
||||
}
|
||||
}
|
||||
|
||||
export function getWebdavDefaultConfig(): WebdavConfig {
|
||||
return {
|
||||
url: "",
|
||||
username: "",
|
||||
password: "",
|
||||
backupDir: default_root,
|
||||
allowSelfSignedCerts: false,
|
||||
webdavEndpoint: {
|
||||
type: WebdavEndpointType.NEXTCLOUD,
|
||||
}
|
||||
}
|
||||
}
|
@ -39,7 +39,7 @@ const AutoCleanConfig = {
|
||||
}),
|
||||
};
|
||||
|
||||
export const backupConfigValidation = {
|
||||
const backupConfigValidation = {
|
||||
nameTemplate: Joi.string().required().not().empty(),
|
||||
cron: Joi.array().items(CronConfigValidation).required(),
|
||||
autoClean: Joi.object({
|
||||
@ -60,3 +60,5 @@ export const backupConfigValidation = {
|
||||
}),
|
||||
}),
|
||||
};
|
||||
|
||||
export default backupConfigValidation;
|
||||
|
17
nextcloud_backup/backend/src/types/services/webdavConfig.ts
Normal file
17
nextcloud_backup/backend/src/types/services/webdavConfig.ts
Normal file
@ -0,0 +1,17 @@
|
||||
export enum WebdavEndpointType {
|
||||
NEXTCLOUD = "NEXTCLOUD",
|
||||
CUSTOM = "CUSTOM"
|
||||
}
|
||||
|
||||
|
||||
export interface WebdavConfig {
|
||||
url: string;
|
||||
username: string;
|
||||
password: string;
|
||||
backupDir: string;
|
||||
allowSelfSignedCerts: boolean
|
||||
webdavEndpoint: {
|
||||
type: WebdavEndpointType;
|
||||
customEndpoint?: string;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
import Joi, { not } from "joi";
|
||||
import { WebdavEndpointType } from "./webdavConfig.js";
|
||||
|
||||
|
||||
const WebdavConfigValidation = {
|
||||
url: Joi.string().not().empty().required(),
|
||||
username: Joi.string().not().empty().required(),
|
||||
password: Joi.string().not().empty().required(),
|
||||
backupDir: Joi.string().required(),
|
||||
allowSelfSignedCerts: Joi.boolean().required(),
|
||||
webdavEndpoint: Joi.object({
|
||||
type: Joi.string().valid(WebdavEndpointType.CUSTOM, WebdavEndpointType.NEXTCLOUD).required(),
|
||||
customEndpoint: Joi.alternatives().conditional("type", {
|
||||
is: WebdavEndpointType.CUSTOM,
|
||||
then: Joi.string().not().empty().required,
|
||||
otherwise: Joi.disallow()
|
||||
})
|
||||
}).required()
|
||||
}
|
||||
|
||||
export default WebdavConfigValidation;
|
Loading…
Reference in New Issue
Block a user