New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

auto-cms-server

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

auto-cms-server - npm Package Compare versions

Comparing version 0.4.0 to 0.5.0

public/transparent-grid.svg

109

dist/server.js

@@ -12,2 +12,6 @@ "use strict";

const fs_1 = require("fs");
const mime_detect_1 = require("mime-detect");
const format_1 = require("@beenotung/tslib/format");
const formidable_1 = require("formidable");
const bytes_1 = __importDefault(require("bytes"));
console.log('Project Directory:', env_1.env.SITE_DIR);

@@ -28,3 +32,3 @@ let app = (0, express_1.default)();

req.session.save();
res.redirect('/');
res.redirect('/auto-cms');
});

@@ -36,6 +40,16 @@ app.post('/auto-cms/logout', express_1.default.urlencoded({ extended: false }), (req, res, next) => {

});
app.post('/auto-cms/save', session_1.guardCMS, express_1.default.text({
let parse_html_middleware = express_1.default.text({
type: 'text/html',
limit: env_1.env.FILE_SIZE_LIMIT,
}), (req, res, next) => {
});
let maxFileSize = bytes_1.default.parse(env_1.env.FILE_SIZE_LIMIT);
let createUploadForm = (options) => new formidable_1.Formidable({
uploadDir: options.dir,
filename: () => options.filename,
multiples: false,
allowEmptyFiles: false,
maxFileSize,
filter: part => part.name == 'file',
});
app.put('/auto-cms/file', session_1.guardCMS, (req, res, next) => {
let pathname = req.header('X-Pathname');

@@ -47,8 +61,18 @@ if (!pathname) {

}
let file = resolveSiteFile(pathname);
if (!file) {
res.status(400);
res.json({ error: 'target file not found' });
if (req.headers['content-type'] == 'text/html') {
next();
return;
}
let dir = (0, path_1.resolve)((0, path_1.join)(site_dir, (0, path_1.dirname)(pathname)));
let filename = (0, path_1.basename)(pathname);
let form = createUploadForm({ dir, filename });
form.parse(req, (err, fields, files) => {
if (err) {
next(err);
return;
}
res.json({});
});
}, parse_html_middleware, (req, res, next) => {
let pathname = req.header('X-Pathname');
let content = req.body.trim();

@@ -60,5 +84,36 @@ if (!content) {

}
let file = resolveSiteFile(pathname);
if (!file) {
res.status(400);
res.json({ error: 'target file not found' });
return;
}
(0, fs_1.writeFileSync)(file, content + '\n');
res.json({});
});
app.delete('/auto-cms/file', session_1.guardCMS, (req, res, next) => {
let pathname = req.header('X-Pathname');
if (!pathname) {
res.status(400);
res.json({ error: 'missing X-Pathname in header' });
return;
}
let file = resolveSiteFile(pathname);
if (!file) {
res.status(400);
res.json({ error: 'target file not found' });
return;
}
(0, fs_1.unlinkSync)(file);
res.json({});
});
app.get('/auto-cms/images', session_1.guardCMS, (req, res, next) => {
let dir = scanImageDir(site_dir);
res.json({ dir });
});
let cms_transparent_grid_file = (0, path_1.resolve)(__dirname, '..', 'public', 'transparent-grid.svg');
app.get('/auto-cms/transparent-grid.svg', session_1.guardCMS, (req, res, next) => {
res.setHeader('Content-Type', 'image/svg+xml');
res.sendFile(cms_transparent_grid_file);
});
let cms_js_file = (0, path_1.resolve)(__dirname, '..', 'public', 'auto-cms.js');

@@ -75,2 +130,3 @@ app.get('/auto-cms.js', session_1.guardCMS, (req, res, next) => {

function resolveSiteFile(pathname) {
pathname = decodeURIComponent(pathname);
try {

@@ -96,3 +152,42 @@ let file = (0, path_1.resolve)((0, path_1.join)(site_dir, pathname));

}
function scanImageDir(dir) {
let result = {
url: dir.replace(site_dir, ''),
name: (0, path_1.basename)(dir),
images: [],
dirs: [],
total_image_count: 0,
};
let filenames = (0, fs_1.readdirSync)(dir);
for (let filename of filenames) {
let file = (0, path_1.join)(dir, filename);
let stat = (0, fs_1.statSync)(file);
if (stat.isDirectory()) {
let dir = scanImageDir(file);
if (dir.total_image_count > 0) {
result.total_image_count += dir.total_image_count;
result.dirs.push(dir);
}
}
else if (stat.isFile()) {
let mime = (0, mime_detect_1.detectFilenameMime)(filename);
if (!mime.startsWith('image/'))
continue;
let url_dir = dir.replace(site_dir, '');
result.images.push({
dir: url_dir,
filename,
size: (0, format_1.format_byte)(stat.size),
url: (0, path_1.join)(url_dir, filename),
});
result.total_image_count++;
}
}
return result;
}
app.use((req, res, next) => {
if (req.method !== 'GET') {
next();
return;
}
try {

@@ -99,0 +194,0 @@ let file = resolveSiteFile(req.path);

{
"name": "auto-cms-server",
"version": "0.4.0",
"version": "0.5.0",
"description": "Auto turn any webpage into editable CMS without coding.",

@@ -41,11 +41,17 @@ "keywords": [

"dependencies": {
"@beenotung/tslib": "^23.2.0",
"bytes": "^3.1.2",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"express-session": "^1.17.3",
"formidable": "^3.5.1",
"listening-on": "^2.0.9",
"mime-detect": "^1.2.0",
"populate-env": "^2.0.0"
},
"devDependencies": {
"@types/bytes": "^3.1.4",
"@types/express": "^4.17.21",
"@types/express-session": "^1.17.10",
"@types/formidable": "^3.4.5",
"@types/node": "^20.11.4",

@@ -52,0 +58,0 @@ "esbuild": "^0.19.11",

4

public/auto-cms.js

@@ -298,4 +298,4 @@ "use strict";

button.textContent = "Saving";
fetch("/auto-cms/save", {
method: "POST",
fetch("/auto-cms/file", {
method: "PUT",
headers: {

@@ -302,0 +302,0 @@ "Content-Type": "text/html",

@@ -16,4 +16,11 @@ # auto-cms

- video
- [ ] media upload
- [x] media management
- view
- upload
- delete
- [ ] style editing
- text alignment
- text color
- font size
- font family
- [x] SEO settings

@@ -20,0 +27,0 @@ - title

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc