Get contact form email working
authorNick Downing <downing.nick@gmail.com>
Tue, 9 Oct 2018 10:01:03 +0000 (21:01 +1100)
committerNick Downing <downing.nick@gmail.com>
Tue, 9 Oct 2018 10:01:03 +0000 (21:01 +1100)
config.js
package.json
resources.js
server.js
site.js

index 45c5121..f310910 100644 (file)
--- a/config.js
+++ b/config.js
@@ -9,7 +9,7 @@ let refresh = async () => {
   sites = await resources.get_json('config/sites.json')
   mime_types = await resources.get_json('config/mime_types.json')
   mime_type_html =
-    mime_types.hasOwnProperty('html') ?
+    Object.prototype.hasOwnProperty.call(mime_types, 'html') ?
     mime_types.html :
     mime_type_default
 
index 5cabaf3..9fb4e84 100644 (file)
@@ -8,6 +8,7 @@
     "build_cache": "file:../build_cache.git/build_cache-1.0.0.tgz",
     "commander": "^2.18.0",
     "cookie": "^0.3.1",
+    "emailjs": "^2.2.0",
     "fs": "^0.0.1-security",
     "http": "^0.0.0",
     "https": "^1.0.0",
index 4aae44e..2888968 100644 (file)
@@ -1,4 +1,5 @@
 let BuildCache = require('build_cache')
+let emailjs = require('emailjs')
 let fs = require('fs')
 let JSONCache = require('json_cache')
 let jstemplate = require('jstemplate')
@@ -12,6 +13,17 @@ let fs_mkdir = util.promisify(fs.mkdir)
 let fs_readFile = util.promisify(fs.readFile)
 let yauzl_open = util.promisify(yauzl.open)
 
+let build_cache_email = new BuildCache()
+let get_email = path => build_cache_email.get(
+  path,
+  async result => {
+    console.log('parsing', path)
+    result.value = emailjs.server.connect(
+      JSON.parse(await fs_readFile(path))
+    )
+  }
+)
+
 let build_cache_js = new BuildCache()
 let get_js = path => build_cache_js.get(
   path,
@@ -150,6 +162,7 @@ let try_mkdir = async path => {
 let json_cache = new JSONCache()
 json_cache.diag = true
 
+exports.get_email = get_email
 exports.get_js = get_js
 exports.get_json = get_json
 exports.get_less = get_less
index 14d30ef..beeaa7a 100644 (file)
--- a/server.js
+++ b/server.js
@@ -40,7 +40,7 @@ let app = async (req, res, protocol) => {
       0,
       domain_name.length - port_suffix.length
     )
-    if (!config.sites.hasOwnProperty(domain_name)) {
+    if (!Object.prototype.hasOwnProperty.call(config.sites, domain_name)) {
       console.log('nonexistent site', domain_name)
       die(res)
       return
diff --git a/site.js b/site.js
index 482b1bf..a67c397 100644 (file)
--- a/site.js
+++ b/site.js
@@ -1,6 +1,5 @@
 let assert = require('assert')
 let cookie = require('cookie')
-let crypto = require('crypto')
 let fs = require('fs')
 let config = require('./config')
 let resources = require('./resources')
@@ -76,7 +75,7 @@ let app = async (site, site_root, req, res, protocol) => {
   let temp = file_name.lastIndexOf('.')
   let file_type = temp === -1 ? '' : file_name.substring(temp + 1)
   let mime_type =
-    config.mime_types.hasOwnProperty(file_type) ?
+    Object.prototype.hasOwnProperty.call(config.mime_types, file_type) ?
     config.mime_types[file_type] :
     config.mime_type_default
 
@@ -130,8 +129,10 @@ let app = async (site, site_root, req, res, protocol) => {
         let env = {
           cookies: cookie.parse(req.headers.cookie || ''),
           lang: 'en',
+          method: req.method,
           page: page,
           query: parsed_url.query,
+          read_stream: req,
           resources: resources,
           set_cookie: (key, value, expires, path) => {
             res.setHeader(
@@ -159,6 +160,8 @@ let app = async (site, site_root, req, res, protocol) => {
           switch (type) {
           case undefined:
             return /*await*/ (await resources.get_js(path))(env, out, get)
+          case 'email':
+            return /*await*/ resources.get_email(path)
           case 'js':
             return /*await*/ resources.get_js(path)
           case 'json':
@@ -217,7 +220,7 @@ let app = async (site, site_root, req, res, protocol) => {
   }
 
   let favicons = await resources.get_zip(site_root + '/favicons.zip')
-  if (favicons.hasOwnProperty(page)) {
+  if (Object.prototype.hasOwnProperty.call(favicons, page)) {
     let data = favicons[page]
     console.log(
       site,