Skip to content

Commit

Permalink
Refactor local server
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmerfield committed Jan 31, 2025
1 parent 68d9248 commit 88f2da9
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 140 deletions.
110 changes: 110 additions & 0 deletions app/configure-local-blogs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
const User = require("models/user");
const Blog = require("models/blog");
const config = require("config");
const format = require("url").format;

const email = "[email protected]";
const password = "password";

function establishTestUser () {
return new Promise((resolve, reject) => {
User.getByEmail(email, function (err, user) {
if (err) return reject(err);
if (user) return resolve(user);
User.hashPassword(password, function (err, passwordHash) {
if (err) return reject(err);
User.create(email, passwordHash, {}, {}, function (err, newUser) {
if (err) return reject(err);
resolve(newUser);
});
});
});
});
}

function establishTestBlog(user) {
return new Promise((resolve, reject) => {
if (user.blogs.length > 0) return resolve(user);

Blog.create(user.uid, { handle: "example" }, (err, blog) => {
if (err) return reject(err);
user.blogs.push(blog.id);
resolve(user);
});
});
}

const configureBlog = (blogID) => {
return new Promise((resolve, reject) => {
Blog.get({ id: blogID }, (err, blog) => {
if (err) return reject(err);
Blog.set(blogID, { forceSSL: false, client: "local" }, (err) => {
if (err) return reject(err);
resolve(blog);
});
});
});
};

function configureBlogs(user) {
return new Promise((resolve, reject) => {


const configureAllBlogs = async () => {

let blog;

for (const blogID of user.blogs) {
blog = await configureBlog(blogID);
}

return blog;
};

configureAllBlogs()
.then((blog) => {
User.generateAccessToken({ uid: user.uid }, (err, token) => {
if (err) return reject(err);

const url = format({
protocol: "https",
host: config.host,
pathname: "/sites/log-in",
query: { token: token }
});

console.log("Local server capabilities:");
console.log("- twitter embeds " + !!config.twitter.consumer_secret);
console.log("- markdown with pandoc " + !!config.pandoc.bin);
console.log("- .docx conversion " + !!config.pandoc.bin);
console.log("- .odt conversion " + !!config.pandoc.bin);
console.log("- dropbox client " + !!config.dropbox.app.key);
console.log("- persistent dashboard sessions " + !!config.session.secret);

console.log();
console.log(`Visit your dashboard:`);
console.log(url);
console.log();

console.log(`Visit your blog:`);
console.log(`https://${blog.handle}.${config.host}`);
console.log();

console.log(`Open your blog's folder:`);
console.log("./data/blogs/" + blog.id);
console.log();

resolve(user);
});
})
.catch(reject);
});
}

const main = async function (){
const user = await establishTestUser();
await establishTestBlog(user);
await configureBlogs(user);
}

module.exports = config.environment === "development" ? main : () => {};
115 changes: 0 additions & 115 deletions app/local.js

This file was deleted.

24 changes: 23 additions & 1 deletion app/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ const redis = require("models/redis");
const client = new redis();
const documentation = require("./documentation/build");
const templates = require("./templates");
const folders = require("./templates/folders");
const async = require("async");
const clfdate = require("helper/clfdate");
const configureLocalBlogs = require("./configure-local-blogs");

const log = (...arguments) =>
console.log.apply(null, [clfdate(), "Setup:", ...arguments]);
Expand Down Expand Up @@ -58,6 +60,16 @@ function main (callback) {
await documentation({ watch: config.environment === "development" });
log("Built documentation");
},

async function () {

if (config.environment === "production") {
log("Building folders");
await folders();
log("Built folders");
}
},

function (callback) {
// we only want to build the templates in development
// in production we run node app/setup.js to build the documentation
Expand All @@ -71,7 +83,17 @@ function main (callback) {
callback();
}
);
}
},

async function () {

if (config.environment === "development") {
log("Configuring local blogs");
await configureLocalBlogs();
log("Configured local blogs");
}
},

],
callback
);
Expand Down
44 changes: 21 additions & 23 deletions app/templates/folders/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const localPath = require("helper/localPath");
const sync = require("sync");
const fix = require("sync/fix");

const FOLDER_ACCOUNT_EMAIL = config.admin.email || "example@example.com";
const FOLDER_ACCOUNT_EMAIL = config.admin.email || "folders@example.com";

const updates = {
bjorn: {
Expand Down Expand Up @@ -72,34 +72,32 @@ const updates = {
}
};

function main (options, callback) {
if (callback === undefined && typeof options === "function") {
callback = options;
options = {};
}
function main (options = {}) {
return new Promise((resolve, reject) => {

loadFoldersToBuild(DIR, function (err, folders) {
if (err) return callback(err);
loadFoldersToBuild(DIR, function (err, folders) {
if (err) return reject(err);

if (options.filter) folders = folders.filter(options.filter);
if (options.filter) folders = folders.filter(options.filter);

setupUser(function (err, user, url) {
if (err) return callback(err);
setupUser(function (err, user, url) {
if (err) return reject(err);

console.log(
"Established user " + user.email + " to manage demonstration blogs"
);
setupBlogs(user, folders, function (err) {
if (err) return callback(err);
console.log(
"Established user " + user.email + " to manage demonstration blogs"
);
setupBlogs(user, folders, function (err) {
if (err) return reject(err);

folders.forEach(function (folder) {
console.log("http://" + basename(folder) + "." + config.host);
console.log("Folder:", folder);
console.log();
});
folders.forEach(function (folder) {
console.log("http://" + basename(folder) + "." + config.host);
console.log("Folder:", folder);
console.log();
});

console.log("Dashboard:\n" + url);
callback(null);
console.log("Dashboard:\n" + url);
resolve();
});
});
});
});
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ services:
# inside docker, resolving the host to the correct IP
extra_hosts:
- "${BLOT_HOST}:${HOST_IP}"
command: npx nodemon /usr/src/app/app/local.js --watch /usr/src/app/app -e js,html,css --ignore /usr/src/app/app/documentation/data --ignore /usr/src/app/app/documentation/output --ignore /usr/src/app/app/views --ignore /usr/src/app/app/views-built --ignore /usr/src/app/app/clients/*/views
command: npx nodemon /usr/src/app/app/index.js --watch /usr/src/app/app -e js,html,css --ignore /usr/src/app/app/documentation/data --ignore /usr/src/app/app/documentation/output --ignore /usr/src/app/app/views --ignore /usr/src/app/app/views-built --ignore /usr/src/app/app/clients/*/views

redis:
image: "redis:alpine"
Expand Down

0 comments on commit 88f2da9

Please sign in to comment.