QuickURL/fileHandler.js

77 lines
No EOL
1.9 KiB
JavaScript

const path = require("path"),
chokidar = require("chokidar"),
fs = require("fs")
var paths = {
static: path.join(__dirname, "static"),
postUrl: path.join(__dirname, "resources/html/postUrl.html"),
redirWarn: path.join(__dirname, "resources/html/redirWarn.html"),
data: path.join(__dirname, "data"),
config: path.join(__dirname, "data/config.json"),
defaultConfig: path.join(__dirname, "resources/json/config.json"),
urls: path.join(__dirname, "data/urls.json")
}
if (!fs.existsSync(paths.data)) {
fs.mkdirSync(paths.data)
}
module.exports = {
paths,
config: undefined,
urls: [],
writeUrls: function (props) {
var urls = module.exports.urls
props.shortCode = 0
for (var i in urls) {
props.shortCode = urls[i].shortCode + 1
}
if (props.shortCode > 100000) {
props.shortCode = 0
}
urls.push(props)
var expirePoint = 0
for (var i in urls) {
var url = urls[i]
if (url.expire < Date.now()) {
expirePoint = i
continue
}
}
urls.splice(0, expirePoint)
fs.writeFileSync(paths.urls, JSON.stringify(module.exports.urls))
return props
}
}
if (!fs.existsSync(paths.config)) {
fs.writeFileSync(paths.config, "{}")
}
var currentConfig = JSON.parse(fs.readFileSync(paths.config))
var defaultConfig = JSON.parse(fs.readFileSync(paths.defaultConfig))
currentConfig = Object.assign({}, defaultConfig, currentConfig)
fs.writeFileSync(paths.config, JSON.stringify(currentConfig))
var watcher = chokidar.watch(paths.data)
function dataUpdate() {
module.exports.config = JSON.parse(fs.readFileSync(paths.config))
}
watcher
.on("change", dataUpdate)
.on("add", dataUpdate)
if (!fs.existsSync(paths.urls)) {
fs.writeFileSync(paths.urls, "[]")
}
module.exports.urls = JSON.parse(fs.readFileSync(paths.urls))