From b2a2b9d2056ecdd0288718d316c213dd6c2c445f Mon Sep 17 00:00:00 2001 From: Suraputt Suntimitr Date: Mon, 31 Oct 2016 19:33:32 +0700 Subject: [PATCH] email --- webmail/.editorconfig | 13 +++++++++++++ webmail/.eslintignore | 1 + webmail/.eslintrc | 3 +++ webmail/.gitignore | 19 +++++++++++++++++++ webmail/.yo-rc.json | 3 +++ webmail/client/README.md | 3 +++ webmail/common/models/emails.js | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/common/models/emails.json | 37 +++++++++++++++++++++++++++++++++++++ webmail/common/models/emailsenter.js | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/common/models/emailsenter.json | 37 +++++++++++++++++++++++++++++++++++++ webmail/config/config.yml | 36 ++++++++++++++++++++++++++++++++++++ webmail/logs/2016/Oct/20_oct_16.log.json | 10 ++++++++++ webmail/logs/2016/Oct/21_oct_16.log.json | 247 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/logs/2016/Oct/25_oct_16.log.json | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/logs/2016/Oct/26_oct_16.info.json | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/logs/2016/Oct/26_oct_16.log.json | 44 ++++++++++++++++++++++++++++++++++++++++++++ webmail/logs/dir.json | 1 + webmail/logs/error.json | 1 + webmail/logs/history.json | 1 + webmail/logs/info.json | 1 + webmail/logs/log.json | 1 + webmail/logs/warning.json | 1 + webmail/package.json | 38 ++++++++++++++++++++++++++++++++++++++ webmail/server/boot/authentication.js | 6 ++++++ webmail/server/boot/root.js | 8 ++++++++ webmail/server/component-config.json | 5 +++++ webmail/server/config.json | 23 +++++++++++++++++++++++ webmail/server/datasources.json | 16 ++++++++++++++++ webmail/server/middleware.development.json | 10 ++++++++++ webmail/server/middleware.json | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ webmail/server/model-config.json | 43 +++++++++++++++++++++++++++++++++++++++++++ webmail/server/server.js | 34 ++++++++++++++++++++++++++++++++++ 32 files changed, 1273 insertions(+), 0 deletions(-) create mode 100644 webmail/.editorconfig create mode 100644 webmail/.eslintignore create mode 100644 webmail/.eslintrc create mode 100644 webmail/.gitignore create mode 100644 webmail/.yo-rc.json create mode 100644 webmail/client/README.md create mode 100644 webmail/common/models/emails.js create mode 100644 webmail/common/models/emails.json create mode 100644 webmail/common/models/emailsenter.js create mode 100644 webmail/common/models/emailsenter.json create mode 100644 webmail/config/config.yml create mode 100644 webmail/logs/2016/Oct/20_oct_16.log.json create mode 100644 webmail/logs/2016/Oct/21_oct_16.log.json create mode 100644 webmail/logs/2016/Oct/25_oct_16.log.json create mode 100644 webmail/logs/2016/Oct/26_oct_16.info.json create mode 100644 webmail/logs/2016/Oct/26_oct_16.log.json create mode 100644 webmail/logs/dir.json create mode 100644 webmail/logs/error.json create mode 100644 webmail/logs/history.json create mode 100644 webmail/logs/info.json create mode 100644 webmail/logs/log.json create mode 100644 webmail/logs/warning.json create mode 100644 webmail/package.json create mode 100644 webmail/server/boot/authentication.js create mode 100644 webmail/server/boot/root.js create mode 100644 webmail/server/component-config.json create mode 100644 webmail/server/config.json create mode 100644 webmail/server/datasources.json create mode 100644 webmail/server/middleware.development.json create mode 100644 webmail/server/middleware.json create mode 100644 webmail/server/model-config.json create mode 100644 webmail/server/server.js diff --git a/webmail/.editorconfig b/webmail/.editorconfig new file mode 100644 index 0000000..3ee22e5 --- /dev/null +++ b/webmail/.editorconfig @@ -0,0 +1,13 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/webmail/.eslintignore b/webmail/.eslintignore new file mode 100644 index 0000000..44f3970 --- /dev/null +++ b/webmail/.eslintignore @@ -0,0 +1 @@ +/client/ \ No newline at end of file diff --git a/webmail/.eslintrc b/webmail/.eslintrc new file mode 100644 index 0000000..a6e5297 --- /dev/null +++ b/webmail/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "loopback" +} \ No newline at end of file diff --git a/webmail/.gitignore b/webmail/.gitignore new file mode 100644 index 0000000..aff1045 --- /dev/null +++ b/webmail/.gitignore @@ -0,0 +1,19 @@ +*.csv +*.dat +*.iml +*.log +*.out +*.pid +*.seed +*.sublime-* +*.swo +*.swp +*.tgz +*.xml +.DS_Store +.idea +.project +.strong-pm +coverage +node_modules +npm-debug.log diff --git a/webmail/.yo-rc.json b/webmail/.yo-rc.json new file mode 100644 index 0000000..02f3fc1 --- /dev/null +++ b/webmail/.yo-rc.json @@ -0,0 +1,3 @@ +{ + "generator-loopback": {} +} \ No newline at end of file diff --git a/webmail/client/README.md b/webmail/client/README.md new file mode 100644 index 0000000..dd00c9e --- /dev/null +++ b/webmail/client/README.md @@ -0,0 +1,3 @@ +## Client + +This is the place for your application front-end files. diff --git a/webmail/common/models/emails.js b/webmail/common/models/emails.js new file mode 100644 index 0000000..9600c23 --- /dev/null +++ b/webmail/common/models/emails.js @@ -0,0 +1,158 @@ +var console = process.console; +var moment = require('moment'); +var app = require('../../server/server'); + +module.exports = function(Emails) { + Emails.disableRemoteMethod('find', true); + Emails.disableRemoteMethod('findById', true); + Emails.disableRemoteMethod('findOne', true); + Emails.disableRemoteMethod('create', true); + + Emails.getEmail= function (app_id,cb){ + Emails.find({where: {"app_id": app_id,"deleted_at":null}}, function (err, res) { + if(err){ + var response = { + "resultCode": "50000", + "resultDescription": "System error" + }; + console.tag("output").time().file().log(response); + cb(null,response); + }else{ + if(res.length){ + console.tag("query output").time().file().log(res); + var response = { + "resultCode" : "20000", + "resultDescription": "Success", + "data":{ + "user_id": res + } + }; + console.tag("output").time().file().log(response); + cb(null,response); + }else { + var response = { + "resultCode": "40400", + "resultDescription": "data not found" + }; + console.tag("output").time().file().log(response); + console.log(cb); + cb(null, response); + } + } + }); + }; + + Emails.postEmail = function (req,cb) { + console.tag("input").time().file().log(req); + Emails.create(req,function (err,res) { + if(err){ + var response = { + "resultCode" : "50000", + "resultDescription": "System Error" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + else{ + var response = { + "resultCode" : "20000", + "resultDescription": "Success" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + }); + } + + Emails.putEmail = function (req,cb) { + console.tag("input").time().file().log(req); + var m_r = app.models.emails; + var d_r = m_r.dataSource; + var date = new Date(); + var time = moment(date).format("YYYY-MM-DDTHH:mm:ss"); + var sql = "UPDATE scmail SET modified_at ='" + time + "',email ='" + req.email + "' WHERE id = '" + req.id + "'"; + console.tag("query").time().file().log(sql); + d_r.connector.execute(sql,function (err,res) { + if(err){ + var response = { + "resultCode" : "50000", + "resultDescription": "System Error" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + else{ + var response = { + "resultCode" : "20000", + "resultDescription": "Success" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + }); + } + + Emails.deleteEmail= function (req,cb){ + var m_r = app.models.emails; + var d_r = m_r.dataSource; + var date = new Date(); + var time = moment(date).format("YYYY-MM-DDTHH:mm:ss"); + var sql = "UPDATE scmail SET deleted_at ='" + time + "' WHERE id = '" + req.id + "'"; + console.tag("query").time().file().log(sql); + d_r.connector.execute(sql,function (err,res) { + if(err){ + var response = { + "resultCode" : "50000", + "resultDescription": "System Error" + }; + console.tag("output").time().file().log(response); + console.log(err); + cb(null, response); + } + else{ + var response = { + "resultCode" : "20000", + "resultDescription": "Success" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + }); + } + + Emails.remoteMethod('getEmail', + { + http:{path:'/:app_id',verb:'get'}, + accepts: {arg: 'app_id',type: 'string', + http: function(ctx) { + // ctx is LoopBack Context object + + // 1. Get the HTTP request object as provided by Express + var req = ctx.req; + // 2. Get 'a' and 'b' from query string or form data and return their sum. + return req.params.app_id; + } + }, + returns: {arg: 'return', type: 'object',root:true} + }); + + + Emails.remoteMethod('postEmail', + { + http: {path: '/', verb: 'post'}, + accepts: {arg: 'username', type: 'object', http: {source: 'body'}}, + returns: {arg: "return", type: 'object',root:true} + }); + Emails.remoteMethod('putEmail', + { + http: {path: '/updateEmail', verb: 'put'}, + accepts: {arg: 'req', type: 'object', http: {source: 'body'}}, + returns: {arg: "return", type: 'object',root:true} + }); + Emails.remoteMethod('deleteEmail', + { + http: {path: '/deleteEmail', verb: 'put'}, + accepts: {arg: 'req', type: 'object', http: {source: 'body'}}, + returns: {arg: "return", type: 'object',root:true} + }); +}; diff --git a/webmail/common/models/emails.json b/webmail/common/models/emails.json new file mode 100644 index 0000000..b49429c --- /dev/null +++ b/webmail/common/models/emails.json @@ -0,0 +1,37 @@ +{ + "name": "emails", + "plural": "email", + "base": "PersistedModel", + "idInjection": true, + "options": { + "validateUpsert": true, + "mysql": { + "table": "scmail" + } + }, + "properties": { + "id": { + "type": "number", + "id": true + }, + "app_id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "created_at": { + "type": "date" + }, + "modified_at": { + "type": "date" + }, + "deleted_at": { + "type": "date" + } + }, + "validations": [], + "relations": {}, + "acls": [], + "methods": {} +} diff --git a/webmail/common/models/emailsenter.js b/webmail/common/models/emailsenter.js new file mode 100644 index 0000000..4dc86c3 --- /dev/null +++ b/webmail/common/models/emailsenter.js @@ -0,0 +1,168 @@ +var console = process.console; +var nodemailer = require('nodemailer'); +var smtpTransport = require('nodemailer-smtp-transport'); +var yaml_config = require('node-yaml-config'); +var config = yaml_config.load('./config/config.yml'); + +module.exports = function(Emailsenter) { + Emailsenter.disableRemoteMethod('find', true); + Emailsenter.disableRemoteMethod('findById', true); + Emailsenter.disableRemoteMethod('findOne', true); + Emailsenter.disableRemoteMethod('create', true); + + //send mail without app_id + Emailsenter.postWithoutApp_id = function (req,cb) { + //check input data + console.tag("input").time().file().log(req); + + //set nodemailer + smtpTransport = nodemailer.createTransport(smtpTransport({ + host: "smtp.gmail.com", + secureConnection: false, + port: 587, + auth: { + user: config.email.username, + pass: config.email.password + } + })); + + + //set defult response + var response = { + "resultCode": "50000", + "resultDescription": "mail error: Missing or Invalid Param" + }; + + //set mail + var mailOptions = { + to: req.header.to, + subject: req.header.subject, + text: req.body.text, + attachments: req.body.attachments, + cc: '', + bcc: '' + }; + + //send + if (mailOptions) { + smtpTransport.sendMail(mailOptions, function(error, resp) { + if (error) { + var response = { + "resultCode": "50000", + "resultDescription": "System error" + }; + console.tag("output").time().file().log(response); + cb(null,response); + } else { + var response = { + "resultCode": "20000", + "resultDescription": "Success" + }; + console.tag("output").time().file().log(response); + cb(null,response); + } + }); + }else{ + console.tag("output").time().file().log(response); + cb(null,response); + } + }//send mail without app_id(END) + + //send mail without app_id + Emailsenter.postWithApp_id = function (req,cb) { + //check input data + console.tag("input").time().file().log(req); + + Emailsenter.find({where: {"app_id": req.app_id,"delete_at":null}}, function (err, res) { + if (err) {//error by database + var response = { + "resultCode": "50000", + "resultDescription": "System error" + }; + console.tag("output").time().file().log(response); + cb(null, response); + } + else {//found database + if (res.length) {// found data by query + //check responsedata by query + console.tag("query output").time().file().log(res); + + //set to in email with app_id + for(var i =0;i