diff --git a/nextcloud_backup/rootfs/opt/nextcloud_backup/routes/api.js b/nextcloud_backup/rootfs/opt/nextcloud_backup/routes/api.js index 9dded00..c5e698a 100644 --- a/nextcloud_backup/rootfs/opt/nextcloud_backup/routes/api.js +++ b/nextcloud_backup/rootfs/opt/nextcloud_backup/routes/api.js @@ -4,12 +4,14 @@ const moment = require('moment'); const statusTools = require('../tools/status'); const WebdavTools = require('../tools/webdavTools') const webdav = new WebdavTools().getInstance(); + const hassioApiTools = require('../tools/hassioApiTools'); const settingsTools = require('../tools/settingsTools'); + router.get('/status', (req, res, next) => { let status = statusTools.getStatus(); res.json(status); @@ -44,12 +46,17 @@ router.get('/formated-remote-manual', function(req, res, next) { router.post('/nextcloud-settings', function(req, res, next){ - console.log("ok"); let settings = req.body; - if(settings.host !== null && settings.host !== "" && settings.username !== null && settings.password !== null){ - settingsTools.setSettings(settings); - res.status(201); - res.send(); + if(settings.ssl != null && settings.host != null && settings.host != "" && settings.username != null && settings.password != null){ + webdav.setConf(settings); + webdav.confIsValid().then(()=>{ + res.status(201); + res.send(); + }).catch((err)=>{ + res.status(406); + res.json({message: err}); + }); + } else{ res.status(400); @@ -57,5 +64,16 @@ router.post('/nextcloud-settings', function(req, res, next){ } }); +router.get('/nextcloud-settings', function(req, res, next){ + let conf = webdav.getConf(); + if(conf == null){ + res.status(404); + res.send(); + } + else{ + res.json(conf); + } +}); + module.exports = router; \ No newline at end of file diff --git a/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/hassioApiTools.js b/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/hassioApiTools.js index 74aa17d..e55c05e 100644 --- a/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/hassioApiTools.js +++ b/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/hassioApiTools.js @@ -3,7 +3,7 @@ const statusTools = require('./status'); // !!! FOR DEV PURPOSE ONLY !!! //put token here for dev (ssh port tunelling 'sudo ssh -L 80:hassio:80 root@`hassoi_ip`' + put 127.0.0.1 hassio into host) -const fallbackToken = "75c7a712290f47a7513ee75a24072f2a5f44745d9b9c4e1f9fe6d44e55da2715e7c4341de239ec1c79a5f7178dd4376e27a98ebb7b4b029a" +const fallbackToken = "3afd4f8440830816e32fd490bd4f98b2423c4d9dff1432a0d57f581c43ec2bf1d1fa9468fc162732f8e95ae524c59ceed0f8e2b8a948d170" function getSnapshots() { diff --git a/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/webdavTools.js b/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/webdavTools.js index f13f070..96efec5 100644 --- a/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/webdavTools.js +++ b/nextcloud_backup/rootfs/opt/nextcloud_backup/tools/webdavTools.js @@ -11,6 +11,7 @@ class WebdavTools { init(ssl, host, username, password) { return new Promise((resolve, reject) => { + let status = statusTools.getStatus(); console.log("Initilizing and checking webdav client...") let url = (ssl ? "https" : "http") + "://" + host + endpoint; try { @@ -22,21 +23,24 @@ class WebdavTools { status.error_code = null; statusTools.setStatus(status); } + console.log("Nextcloud connection: \x1b[32mSuccess !\x1b[0m"); resolve(); }).catch((error) => { - status.status = "Error"; + status.status = "error"; status.error_code = 3; status.message = "Can't connect to Nextcloud (" + error + ") !" statusTools.setStatus(status); this.client = null; + console.error("Can't connect to Nextcloud (" + error + ") !"); reject("Can't connect to Nextcloud (" + error + ") !"); }); } catch (err) { - status.status = "Error"; + status.status = "error"; status.error_code = 3; status.message = "Can't connect to Nextcloud (" + err + ") !" statusTools.setStatus(status); this.client = null; + console.error("Can't connect to Nextcloud (" + err + ") !"); reject("Can't connect to Nextcloud (" + err + ") !"); } @@ -46,20 +50,24 @@ class WebdavTools { confIsValid() { return new Promise((resolve, reject) => { let status = statusTools.getStatus(); - let conf = this.loadConf(); + let conf = this.getConf(); if (conf !== null) { - if (conf.ssl !== null && conf.host !== null && conf !== null && conf !== null) { + if (conf.ssl !== null && conf.host !== null && conf.username !== null && conf.password !== null) { if (status.error_code == 2) { status.status = "idle"; status.message = null; status.error_code = null; statusTools.setStatus(status); } - //TODO init connection - resolve(); + this.init(conf.ssl, conf.host, conf.username, conf.password).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + } else { - status.status = "Error"; + status.status = "error"; status.error_code = 2; status.message = "Nextcloud config invalid !" statusTools.setStatus(status); @@ -67,7 +75,7 @@ class WebdavTools { } } else { - status.status = "Error"; + status.status = "error"; status.error_code = 2; status.message = "Nextcloud config not found !" statusTools.setStatus(status); @@ -77,7 +85,7 @@ class WebdavTools { }); } - loadConf() { + getConf() { if (fs.existsSync(configPath)) { let content = JSON.parse(fs.readFileSync(configPath)); return content; @@ -85,6 +93,11 @@ class WebdavTools { else return null; } + + setConf(conf){ + fs.writeFileSync(configPath, JSON.stringify(conf)); + } + } diff --git a/nextcloud_backup/rootfs/opt/nextcloud_backup/views/index.ejs b/nextcloud_backup/rootfs/opt/nextcloud_backup/views/index.ejs index 74a5c4e..2673c79 100644 --- a/nextcloud_backup/rootfs/opt/nextcloud_backup/views/index.ejs +++ b/nextcloud_backup/rootfs/opt/nextcloud_backup/views/index.ejs @@ -86,7 +86,8 @@
@@ -156,6 +157,23 @@
+
+
+ +
+
+
+
+
SSL
+
+ +
+ +
+
@@ -186,8 +204,65 @@