Skip to content

Commit

Permalink
First commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
petersirka committed Sep 1, 2016
0 parents commit a15d4cc
Show file tree
Hide file tree
Showing 63 changed files with 6,635 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
themes/default/.DS_Store
sftpc-config.json
29 changes: 29 additions & 0 deletions config
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name : Blog Engine
description : Blog engine
version : 1.0.0
author : Totaljs.com Ltd

// A relative URL address into the blog management
manager-url : /$manager

// Hidden super admin in the form username:password
manager-superadmin : admin:admin

// Custom SMTP settings
mail.smtp : YOUR.SMTPSERVER.COM
// mail.smtp.options : {"user":"","password":"","timeout":2000}

// Gmail SMTP settings
// mail.smtp : smtp.gmail.com
// mail.smtp.options : {"port":465,"secure":true,"user":"ENTER_YOUR_EMAIL","password":"ENTER_YOUR_PASSWORD","rejectUnauthorized":true}

// Office365 SMTP settings
// mail.smtp : smtp.office365.com
// mail.smtp.options : {"port":587,"secure":false,"user":"ENTER_YOUR_EMAIL","password":"ENTER_YOUR_PASSWORD","tls":{"ciphers":"SSLv3"}}

// Image convertor for resizing of pictures
// Default image converter: im = ImageMagick, gm = GraphicsMagick
default-image-converter : gm

// Default theme
default-theme : default
67 changes: 67 additions & 0 deletions controllers/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// This API uses the website

exports.install = function() {
// COMMON
F.route('/api/ping/', json_ping);

// COMMENTS
F.route('/api/comments/{id}/', json_comments_query, ['*Comment']);
F.route('/api/comments/', json_comments_save, ['post', '*CommentForm']);

// NEWSLETTER
F.route('/api/newsletter/', json_save, ['post', '*Newsletter']);

// CONTACTFORM
F.route('/api/contact/', json_save, ['post', '*Contact']);
};

// ==========================================================================
// COMMON
// ==========================================================================

function json_ping() {
var self = this;
self.plain('null');
}

// ==========================================================================
// BLOGS
// ==========================================================================

function json_blogs_query() {
var self = this;
self.query.max = 10;
self.query.draft = false;
self.$query(self, self.callback());
}

// ==========================================================================
// COMMENTS
// ==========================================================================

function json_comments_query(id) {
var self = this;
self.memorize('comments' + id, '1 minute', function() {
self.query.idblog = id;
self.query.max = 50;
self.query.approved = true;
self.$query(self, self.callback());
});
}

function json_comments_save() {
var self = this;
self.$async(self.callback(), 1).$workflow('check', self).$save(self).$workflow('notify', self);
}

// ==========================================================================
// NEWSLETTER, CONTACTFORM
// ==========================================================================

// Appends a new email into the newsletter list
function json_save() {
var self = this;
self.body.language = self.language || '';
self.body.ip = self.ip;
self.body.$save(self.callback());
}
69 changes: 69 additions & 0 deletions controllers/blogs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
exports.install = function() {
F.route('#blogs', view_blogs, ['*Blog']);
F.route('#category', view_blogs_category, ['*Blog']);
F.route('#detail', view_blogs_detail, ['*Blog']);
F.route('/rss/', rss, ['*Blog']);
};

function view_blogs() {
var self = this;
self.query.max = 10;
self.query.draft = false;
self.$query(self, self.callback('all'));
}

function view_blogs_category(category) {
var self = this;

self.repository.category = F.global.blogs.findItem('linker', category);

if (!self.repository.category)
return throw404();

self.query.category = category;
self.query.max = 10;
self.query.draft = false;
self.$query(self, self.callback('category'));
}

function view_blogs_detail(category, linker) {
var self = this;

self.repository.category = F.global.blogs.findItem('linker', category);
if (!self.repository.category)
return throw404();

self.memorize('detail.{0}.{1}'.format(category, linker), '5 minutes', DEBUG, function() {

self.query.linker = linker;
self.query.category = category;

self.$get(self, function(err, response) {

if (err || !response)
return self.throw404(err);

if (!self.robot) {
NOSQL('blogs').counter.hit(response.id);
MODULE('webcounter').increment('blogs');
}

response.body = markdown(response.body);
self.view('detail', response);
});
});
}

function rss() {
var self = this;
self.query.max = 30;
self.query.draft = false;
self.$query(self, function(err, docs) {
var builder = [];
for (var i = 0, length = docs.items.length; i < length; i++) {
var doc = docs.items[i];
builder.push('<item><title>{0}</title><link>{1}/</link><description>{2}</description><pubDate>{3}</pubDate></item>'.format(doc.name.encode(), self.hostname(self.sitemap_url('detail', doc.category_linker, doc.linker)), doc.perex.encode(), doc.datecreated));
}
self.content('<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0"><channel><title>bufferwall</title><link>{0}</link><description>{1}</description>{2}</channel></rss>'.format(self.hostname(), F.config.description, builder.join('')), 'text/xml');
});
}
48 changes: 48 additions & 0 deletions controllers/default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
exports.install = function() {
// COMMON
F.route('/', view_homepage, ['*Blog']);
F.route('#contact', 'contact');

// FILES
F.file('/download/', file_read);
};

// ==========================================================================
// COMMON
// ==========================================================================

// Homepage
function view_homepage() {
var self = this;
self.query.max = 10;
self.query.draft = false;
self.$query(self, self.callback('index'));
}

// ==========================================================================
// FILES
// ==========================================================================

function file_read(req, res) {

var id = req.split[1].replace('.' + req.extension, '');

F.exists(req, res, function(next, filename) {
DB('files').binary.read(id, function(err, stream, header) {

if (err) {
next();
return res.throw404();
}

var writer = require('fs').createWriteStream(filename);

CLEANUP(writer, function() {
res.file(filename);
next();
});

stream.pipe(writer);
});
});
}
Loading

0 comments on commit a15d4cc

Please sign in to comment.