hatchyt
Version:
Hatch your next idea.
105 lines (83 loc) • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _database = require('../database');
var _database2 = _interopRequireDefault(_database);
var _authenticate = require('../middleware/authenticate');
var _authenticate2 = _interopRequireDefault(_authenticate);
var _express = require('express');
var _express2 = _interopRequireDefault(_express);
var _publish = require('./publish');
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var siteRouter = _express2.default.Router();
siteRouter.use(_authenticate2.default);
function editSite(req, res) {
_database2.default.get('SELECT id, domain, title, script, markup, style, config FROM sites WHERE id = ?', [req.params.site], function (err, row) {
if (err) {
res.send(err);
} else {
_database2.default.all('SELECT id, name, text from templates', function (err, templates) {
res.render('editor', { site: row, templates: templates });
});
}
});
}
function deleteSite(req, res) {
res.redirect('/');
_database2.default.get('SELECT domain from sites WHERE id = ?', [req.params.site], function (err, row) {
_database2.default.exec('\n DELETE from sites WHERE domain=\'' + row.domain + '\';\n DELETE from tracking WHERE domain=\'' + row.domain + '\';\n DELETE from signups WHERE domain=\'' + row.domain + '\';\n ');
});
}
function createSite(req, res) {
var domain = (0, _publish.parseRoot)(req.body.domain);
_fs2.default.stat('output/' + domain, function (err, stats) {
if (err) {
_fs2.default.mkdir('.hatchyt/output/' + domain, function (e) {
if (!e) _fs2.default.symlink('' + domain, '.hatchyt/output/www.' + domain, function (e) {
if (e) throw new Error('Could not create symlink');
});
});
}
});
_database2.default.run('INSERT INTO sites (domain, title) VALUES (?, ?)', [domain.domain, domain.domain], function (e) {
console.log(e ? e : 'Inserted site:' + this.lastID);
res.redirect('/site/' + this.lastID + '/');
});
}
function trackSite(req, res) {
res.cookie('tracked', 'true', { maxAge: '86400000' });
res.send();
if (/preview$/.test(req.headers.referer)) return null;
_database2.default.run('INSERT INTO tracking (domain, referer, ip_address) VALUES (?, ?, ?)', [req.hostname, req.query.ref, req.ip], function (e) {});
}
function signupSite(req, res) {
res.send();
if (req.body.name) return;
var domain = req.hostname;
var email = req.body.email;
var misc = JSON.stringify(req.body);
_database2.default.run('INSERT INTO signups (domain, email, misc) VALUES (?, ?, ?)', [domain, email, misc], function (e) {});
}
// Wire up the site routes
siteRouter.post('/new', createSite);
siteRouter.get('/:site/', editSite);
siteRouter.get('/:site/delete/', deleteSite);
siteRouter.get('/test/:site/', function (req, res) {
var domain = req.params.site;
res.sendFile('index.html', { root: _path2.default.join(process.cwd(), '.hatchyt', 'output', domain) }, function (e) {
if (e) {
res.status(404).send('Not found.');
}
}); // TODO: fetch root path from settings, someday
});
exports.default = {
signupSite: signupSite,
trackSite: trackSite,
routes: siteRouter
};
//# sourceMappingURL=site.js.map