@trap_stevo/vault-link
Version:
Unlock the ultimate gateway to secure file and directory access. VaultLink transforms your files into guarded, time-sensitive links—sealed, tamper-proof, and effortlessly shareable. Elevate your storage game with unparalleled precision and flexibility, tu
82 lines (81 loc) • 2.06 kB
JavaScript
const express = require("express");
const {
parseExpiration
} = require("./HUDManagers/VaultLinkUtilitiesManager");
const createLinkGateway = require("./linkGateway");
const VaultLink = require("./vaultLink");
let vaultLinkInstancePort = null;
let vaultLinkInstance = null;
const linkGenerator = {
"directory": (vaultLink, path, options) => {
return vaultLink.createLinkForDirectory(path, options);
},
"file": (vaultLink, path, options) => {
return vaultLink.createLinkForFile(path, options);
}
};
function addVaultLinkEndpoint(app, vaultLink) {
app.get("/generate-vault-link", (req, ress) => {
const {
path,
type,
expiration,
userID,
sessionID
} = req.query;
if (!path || !type) {
return ress.status(400).json({
error: "Path and type required."
});
}
const options = {
expiration: expiration ? expiration : "1h",
extraMetadata: {
userID,
sessionID
},
recursive: type === "directory"
};
let link;
if (linkGenerator[type]) {
link = linkGenerator[type](vaultLink, path, options);
} else {
return ress.status(400).json({
error: `Invalid type. Use "file" or "directory".`
});
}
ress.json(link);
return;
});
}
;
function closeVaultLink() {
if (vaultLinkInstance) {
vaultLinkInstance.close(() => {
console.log(`VaultLink instance ~ ${vaultLinkInstancePort} closed.`);
vaultLinkInstancePort = null;
vaultLinkInstance = null;
});
return;
}
console.log("No operational VaultLink instance.");
}
;
function launchVaultLink(config, port = 8269) {
const app = express();
const vaultLink = new VaultLink(config);
addVaultLinkEndpoint(app, vaultLink);
app.use(createLinkGateway(config));
vaultLinkInstance = app.listen(port, "0.0.0.0", () => {
console.log(`VaultLink operational ~ ${port}`);
vaultLinkInstancePort = port;
});
return vaultLink;
}
;
module.exports = {
VaultLink,
launchVaultLink,
closeVaultLink
};
;