diff --git a/app.json b/app.json index 4f0a5ef4..b0e60fbc 100644 --- a/app.json +++ b/app.json @@ -3,5 +3,45 @@ "description": "Beautiful, opensource web forms", "repository": "https://github.com/whitef0x0/tellform", "logo": "https://node-js-sample.herokuapp.com/node.svg", - "keywords": ["node", "express", "static", "mean"] + "addons": ["mongolab", "sparkpost"], + "keywords": ["node", "express", "static", "mean"], + "env": { + "IS_HEROKU_INSTALLATION": { + "value": "TRUE" + }, + "SUBDOMAINS_DISABLED": { + "description": "Disable subdomains for user forms", + "value": "TRUE" + }, + "BASE_URL": { + "description": "Set this to your heroku app's URL", + "required": true + }, + "NODE_ENV": { + "description": "Specify whether to run development or production version of the app", + "value": "production", + "required": true + }, + "MAILER_SERVICE_PROVIDER": { + "description": "Which mailer provider are you using? (i.e. SparkPost, Mandrill, etc)", + "value": "Sparkpost", + "required": true + }, + "ADMIN_EMAIL": { + "description": "Email of the default admin account", + "required": true + }, + "ADMIN_USERNAME": { + "description": "Username of the default admin account", + "required": true + }, + "ADMIN_PASSWORD": { + "description": "Password of the default admin account", + "required": true + } + }, + "scripts": { + "predeploy": "grunt build", + "postdeploy": "node scripts/create_admin.js" + } } diff --git a/bower.json b/bower.json index 0c451253..0841501b 100755 --- a/bower.json +++ b/bower.json @@ -46,8 +46,9 @@ }, "resolutions": { "angular-bootstrap": "^0.14.0", - "angular": "1.4.12", - "angular-ui-select": "compiled" + "angular": "1.4.14", + "angular-ui-select": "compiled", + "jspdf": "~1.0.178" }, "overrides": { "BOWER-PACKAGE": { diff --git a/config/env/production.js b/config/env/production.js index f89e2bd9..1de0be53 100755 --- a/config/env/production.js +++ b/config/env/production.js @@ -1,9 +1,9 @@ 'use strict'; module.exports = { - baseUrl: process.env.BASE_URL || 'tellform.com', + baseUrl: process.env.BASE_URL || process.env.HEROKU_APP_NAME + '.herokuapp.com' || 'tellform.com', db: { - uri: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/mean', + uri: process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/mean', }, port: process.env.PORT || 5000, socketUrl: process.env.SOCKET_URL || 'ws.tellform.com', @@ -51,16 +51,16 @@ module.exports = { callbackURL: '/auth/github/callback' }, mailer: { - from: process.env.MAILER_FROM || 'no-reply@tellform.com', + from: process.env.MAILER_FROM || 'testing@' + process.env.SPARKPOST_SANDBOX_DOMAIN || 'no-reply@tellform.com', options: { service: process.env.MAILER_SERVICE_PROVIDER || '', - ssl: false, + /*ssl: false, host: 'smtp.sparkpostmail.com', port: 587, - secure: false, + secure: false,*/ auth: { - user: process.env.MAILER_EMAIL_ID || '', - pass: process.env.MAILER_PASSWORD || '' + user: process.env.SPARKPOST_SMTP_USERNAME || process.env.MAILER_EMAIL_ID || '', + pass: process.env.SPARKPOST_SMTP_PASSWORD || process.env.MAILER_PASSWORD || '' } } } diff --git a/config/socket.io.js b/config/socket.io.js index 4ea8a6b1..c604316b 100644 --- a/config/socket.io.js +++ b/config/socket.io.js @@ -11,9 +11,10 @@ module.exports = function (app, db) { var server = http.createServer(app); var io = socketio(config.socketPort, { transports: ['websocket', 'polling'] }); - var redis = require('socket.io-redis'); - io.adapter(redis( process.env.REDIS_URL || { host: process.env.REDIS_DB_PORT_6379_TCP_ADDR || '127.0.0.1' , port: process.env.REDIS_DB_PORT_6379_TCP_PORT || 6379 })); - + if(process.env.IS_HEROKU_INSTALLATION !== "TRUE"){ + var redis = require('socket.io-redis'); + io.adapter(redis( process.env.REDIS_URL || { host: process.env.REDIS_DB_PORT_6379_TCP_ADDR || '127.0.0.1' , port: process.env.REDIS_DB_PORT_6379_TCP_PORT || 6379 })); + } // Add an event listener to the 'connection' event io.on('connection', function (socket) { config.getGlobbedFiles('./app/sockets/**.js').forEach(function (socketConfiguration) { diff --git a/package.json b/package.json index a434fb6c..b86e96bb 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,8 @@ "init": "node scripts/setup.js" }, "dependencies": { + "multer": "^1.3.0", + "glob": "^7.0.3", "async": "^1.4.2", "async-boolean-expression-evaluator": "^1.1.1", "bcrypt": "^0.8.7", @@ -97,7 +99,6 @@ "coveralls": "^2.11.4", "cross-spawn": "^5.0.0", "del": "^2.2.2", - "glob": "^7.0.3", "grunt-execute": "^0.2.2", "grunt-mocha-istanbul": "^3.0.1", "grunt-mocha-test": "~0.12.1", diff --git a/scripts/create_admin.js b/scripts/create_admin.js new file mode 100644 index 00000000..2f363269 --- /dev/null +++ b/scripts/create_admin.js @@ -0,0 +1,50 @@ +var init = require('../config/init')(), + config = require('../config/config'), + mongoose = require('mongoose'), + chalk = require('chalk'), + fs = require('fs-extra'); + +// Bootstrap db connection +var db = mongoose.connect(config.db.uri, config.db.options, function(err) { + if (err) { + console.error(chalk.red('Could not connect to MongoDB!')); + console.log(chalk.red(err)); + } +}); +mongoose.connection.on('error', function(err) { + console.error(chalk.red('MongoDB connection error: ' + err)); + process.exit(-1); +}); + +// Init the express application +var app = require('../config/express')(db); + +// Bootstrap passport config +require('../config/passport')(); + +var User = mongoose.model('User'); +require('../app/models/user.server.model.js'); + +var email = process.env.ADMIN_EMAIL; +var username = process.env.ADMIN_USERNAME; +var password = process.env.ADMIN_PASSWORD; + +user = new User({ + firstName: 'Admin', + lastName: 'Account', + email: email, + username: username, + password: password, + provider: 'local', + roles: ['admin', 'user'] +}); + +user.save(function (err) { + if (err) return console.error(chalk.red(err)); + console.log(chalk.green('Successfully created user')); + delete email; + delete password; + delete username; + + process.exit(1); +}); diff --git a/scripts/setup.js b/scripts/setup.js index 7a9b9c30..43abff5f 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -70,6 +70,11 @@ var nodemailer_providers = [ 'Zoho' ]; +var bool_options = [ + "TRUE", + "FALSE" +] + var questions = [ { type: 'confirm', @@ -97,6 +102,12 @@ var questions = [ message: 'Do you want to disable signups?', default: false }, + { + type: 'list', + name: 'SUBDOMAINS_DISABLED', + message: 'Do you want to have subdomains? (i.e. are you using a custom domain)', + choices: bool_options + }, { type: 'list', name: 'MAILER_SERVICE_PROVIDER',