diff --git a/server/models/fields.js b/server/models/fields.js index 28f034bc..1fef2b09 100644 --- a/server/models/fields.js +++ b/server/models/fields.js @@ -550,6 +550,9 @@ async function create(context, listId, entity) { table.index(columnName); } }); + + // Altough this is a reference to another list, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource + await knex.schema.raw('ALTER TABLE `subscription__' + listId + '` ADD `source_' + columnName +'` int(11) DEFAULT NULL'); } return id; diff --git a/server/setup/knex/migrations/20170506102634_v1_to_v2.js b/server/setup/knex/migrations/20170506102634_v1_to_v2.js index eade6768..73d20291 100644 --- a/server/setup/knex/migrations/20170506102634_v1_to_v2.js +++ b/server/setup/knex/migrations/20170506102634_v1_to_v2.js @@ -250,6 +250,7 @@ async function migrateSubscriptions(knex) { const info = await knex('subscription__' + list.id).columnInfo(); for (const field of fields) { if (field.column != null) { + // Altough this is a reference to another list, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource await knex.schema.raw('ALTER TABLE `subscription__' + list.id + '` ADD `source_' + field.column +'` int(11) DEFAULT NULL'); } @@ -1007,7 +1008,7 @@ async function migrateCampaigns(knex) { ' `ip` varchar(100) CHARACTER SET ascii DEFAULT NULL,\n' + ' `device_type` varchar(50) DEFAULT NULL,\n' + ' `country` varchar(2) CHARACTER SET ascii DEFAULT NULL,\n' + - ' `count` int(11) unsigned NOT NULL DEFAULT \'1\',\n' + + ' `count` int(10) unsigned NOT NULL DEFAULT \'1\',\n' + ' `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n' + ' PRIMARY KEY (`campaign`, `list`,`subscription`,`link`),\n' + ' KEY `created_index` (`created`)\n' + @@ -1174,8 +1175,8 @@ async function migrateTriggers(knex) { await knex.schema.raw('CREATE TABLE `trigger_messages` (\n' + ' `trigger` int(10) unsigned NOT NULL,\n' + - ' `list` int(11) unsigned NOT NULL,\n' + - ' `subscription` int(11) unsigned NOT NULL,\n' + + ' `list` int(10) unsigned NOT NULL,\n' + + ' `subscription` int(10) unsigned NOT NULL,\n' + ' `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n' + ' PRIMARY KEY (`trigger`, `list`,`subscription`)\n' + ') ENGINE=InnoDB DEFAULT CHARSET=utf8;\n'); diff --git a/server/setup/mailtrain-apache-sample.conf b/server/setup/mailtrain-apache-sample.conf new file mode 100644 index 00000000..4cad7448 --- /dev/null +++ b/server/setup/mailtrain-apache-sample.conf @@ -0,0 +1,101 @@ +# This example sets up virtual domains for mailtrain protected by HTTPS (including redirect from http to https) +# Note that you will need mod_proxy and mod_ssl modules installed and enabled + +# This setup assumes three DNS names: +# - mail.example.org - public endpoint used for subscriptions, campaign images, etc. +# - mailtrain.example.org - UI for administration and send out emails +# - sbox.mailtrain.example.org - sandbox for templates (to prevent potential XSS attacks in templates) + +# It is OK to point all the three DNS entries to the same IP address + +# You will need to customize this for your setup. In the least, this means: +# - replace "example.org" with your domain +# - point to your certificate (look for /etc/letsencrypt/live/mail.example.org in the config below) + + + ServerName mail.example.org + + ServerSignature Off + + RewriteEngine On + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + + ErrorLog logs/mail.example.org_redirect_error.log + LogLevel warn + + + + ServerName mailtrain.example.org + + ServerSignature Off + + RewriteEngine On + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + + ErrorLog logs/mailtrain.example.org_redirect_error.log + LogLevel warn + + + + ServerName sbox.mailtrain.example.org + + ServerSignature Off + + RewriteEngine On + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + + ErrorLog logs/sbox.mailtrain.example.org_redirect_error.log + LogLevel warn + + + + ServerName mail.example.org:443 + + ErrorLog logs/mail.example.org_ssl_error.log + TransferLog logs/mail.example.org_ssl_access.log + LogLevel warn + + SSLEngine on + SSLCertificateFile /etc/letsencrypt/live/mail.example.org/cert.pem + SSLCertificateKeyFile /etc/letsencrypt/live/mail.example.org/privkey.pem + SSLCertificateChainFile /etc/letsencrypt/live/mail.example.org/chain.pem + + ProxyPreserveHost On + ProxyPass "/" "http://127.0.0.1:3004/" + ProxyPassReverse "/" "http://127.0.0.1:3004/" + + + + ServerName mailtrain.example.org:443 + + ErrorLog logs/mailtrain.example.org_ssl_error.log + TransferLog logs/mailtrain.example.org_ssl_access.log + LogLevel warn + + SSLEngine on + SSLCertificateFile /etc/letsencrypt/live/mail.example.org/cert.pem + SSLCertificateKeyFile /etc/letsencrypt/live/mail.example.org/privkey.pem + SSLCertificateChainFile /etc/letsencrypt/live/mail.example.org/chain.pem + + ProxyPreserveHost On + ProxyPass "/" "http://127.0.0.1:3000/" + ProxyPassReverse "/" "http://127.0.0.1:3000/" + + + + ServerName sbox.mailtrain.example.org:443 + + ErrorLog logs/sbox.mailtrain.example.org_ssl_error.log + TransferLog logs/sbox.mailtrain.example.org_ssl_access.log + LogLevel warn + + SSLEngine on + SSLCertificateFile /etc/letsencrypt/live/mail.example.org/cert.pem + SSLCertificateKeyFile /etc/letsencrypt/live/mail.example.org/privkey.pem + SSLCertificateChainFile /etc/letsencrypt/live/mail.example.org/chain.pem + + ProxyPreserveHost On + ProxyPass "/" "http://127.0.0.1:3003/" + ProxyPassReverse "/" "http://127.0.0.1:3003/" + + diff --git a/server/setup/mailtrain-apache.conf b/server/setup/mailtrain-apache.conf deleted file mode 100644 index 8f0e9146..00000000 --- a/server/setup/mailtrain-apache.conf +++ /dev/null @@ -1,12 +0,0 @@ -# This example sets up mailtrain.org/www.mailtrain.org virtual domains -# for Apache2 and proxies requests for these domains to localhost port 3000 - -# Using mod_proxy is not enabled by default, so you probably need to do this yourself - - - ProxyPreserveHost On - ProxyPass "/" "http://127.0.0.1:3000/" - ProxyPassReverse "/" "http://127.0.0.1:3000/" - ServerName mailtrain.org - ServerAlias www.mailtrain.org -