require('dotenv').config(); const { createClient } = require('webdav'); const fs = require('fs'); const path = require('path'); // init db const low = require('lowdb'); const FileSync = require('lowdb/adapters/FileSync'); const adapter = new FileSync('db.json'); const db = low(adapter); // db.defaults({ files: [], count: 0}).write(); // create webdav-client const client = createClient( process.env.WEBDAV_URL, { username: process.env.WEBDAV_USER, password: process.env.WEBDAV_PW } ); async function listDir(dir = process.env.WEBFRAME_PATH) { const directoryItems = await client.getDirectoryContents(dir); return directoryItems; } function dlFile(file, dir = process.env.WEBFRAME_PATH) { return client.createReadStream(dir+'/'+file).pipe(fs.createWriteStream('./files/'+file)); } client.exists(process.env.WEBFRAME_PATH).then(async data => { if (data) { const list = await listDir(process.env.WEBFRAME_PATH); list.forEach(file => { // if (!fs.existsSync('./files/'+file.basename)) { const inDb = db.get('files').find({ basename: file.basename }).value() !== undefined ? true : false; if (!inDb) { dlFile(file.basename); db.get('files').push(file).write(); db.update('count', n => n + 1).write(); } }); } }); // webserver const express = require('express'); const app = express(); app.use('/files', express.static(path.join(__dirname, 'files'))); app.get('/api/files', (req, res) => { res.json(db.get('files').value()); }); app.use('*', express.static(path.join(__dirname, 'public'))); app.listen(process.env.PORT, () => console.log(`Example app listening at http://localhost:${process.env.PORT}`));