webframe/index.js
2020-07-16 18:42:30 +02:00

57 lines
1.7 KiB
JavaScript

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}`));