From 22623d9709f8d54befcff5f76b84e56ab224191b Mon Sep 17 00:00:00 2001 From: Eliot Date: Mon, 13 Feb 2017 13:13:07 -0500 Subject: [PATCH 1/9] Preparing for npm publish --- README.md | 18 ++++++------------ package.json | 32 ++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 42d59b8..09aab65 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ This codebase has two criteria: * DB Setup I am sadly a WSL user (Yes, Windows, Subsystem, (for) Linux), so I can't run post-install pg-init scripts. So step 1 is make a new psql database named `meme-magic`. Thats it. - - If you wanted a DB named whatever you want it to be named + + If you wanted a DB named whatever you want it to be named go to `server/db/db` and modify line 7's `const memeDB = WhateverYouWant`. * Secrets @@ -27,12 +27,6 @@ This codebase has two criteria: SessionKey: 'WhateverYouWant' };` - * AFrame w/ React/Redux or just React/Redux - - Go to `./browser/react/containers/index.js` -> From there you will see this logic: - - Just switch it to export whichever beginning plate you would like to use. - As of 2/11/17 - AFrame and React now play nice together in the base. `SpacePlane` is the WebVR component, just eliminate it if you desire no AFrame. That's it. Enjoy. @@ -40,17 +34,17 @@ That's it. Enjoy. ## Some Known Confusion I have had some annoying experiences with socket leakage and Node. Until I get around to having Redis be a part of the backend to deal with enabling more than 25 sockets per Node instance - I have a mechanism set up to ensure each user (being a person) only gets 1 socket per IP. *This means that if you try to open two tabs of your project on the same machine - you get Rick Rolled away from my site.* To disable such beautiful functionality simply go to `./browser/sockets/index.js`. You will see some well commented code about a certain socket event named `KickTroll` - just change its behavior to anything else or remove it. - + The only other one I can remember at present is the requirement to enter `y` or `n` on intialization of the DB to decide whether to force sync the DB. This too can easily be removed in the root directory `./app.js`: ``` const syncTruth = getYesNo(chalk.cyan('Rick, do you wanna get savage on this database? (Force Sync)')); - // If you want to disable this - change syncTruth to: + // If you want to disable this - change syncTruth to: // const syncTruth = false : wont ever forceSync. - // or + // or // const syncTruth = true : will always forceSync. - + startDB(syncTruth) .then(() => server.on('request', myServer)) .then(() => ioInit(server)) diff --git a/package.json b/package.json index 6894f1b..a53232d 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,17 @@ { "name": "meme-magic", - "version": "0.0.1", - "description": "A medium sized back-end boiler plate, with very little done on the front.", + "version": "0.1.0", + "description": "A A-Frame, React, Redux front-end with Sessions, Websockets, SQL, and Authentication built into the backend.", "main": "app.js", "scripts": { "start": "webpack -w & nodemon --watch server -e js,html babelify.js" }, + "engines": { + "node": ">=7.0.0" + }, "author": "Eliot Szwajkowski", - "license": "ISC", + "email": "eliotpszw@gmail.com", + "license": "Apache-2.0", "dependencies": { "aframe": "^0.5.0", "axios": "^0.15.3", @@ -58,5 +62,25 @@ "standard": "^8.5.0", "volleyball": "^1.4.1", "webpack": "^1.13.3" - } + }, + "devDependencies": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/leafoflegend/MemeMagic.git" + }, + "keywords": [ + "AFrame", + "React", + "Redux", + "Postgres", + "Sockets", + "Boiler", + "Plate", + "Sessions", + "Authentication" + ], + "bugs": { + "url": "https://github.com/leafoflegend/MemeMagic/issues" + }, + "homepage": "https://github.com/leafoflegend/MemeMagic#readme" } From d39ec5c59bca0bef1d61e6046176bdc08840562a Mon Sep 17 00:00:00 2001 From: Eliot Date: Mon, 13 Feb 2017 14:07:33 -0500 Subject: [PATCH 2/9] post-install script added for npm --- package.json | 3 ++- post-install.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 post-install.js diff --git a/package.json b/package.json index a53232d..222c06e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "A A-Frame, React, Redux front-end with Sessions, Websockets, SQL, and Authentication built into the backend.", "main": "app.js", "scripts": { - "start": "webpack -w & nodemon --watch server -e js,html babelify.js" + "start": "webpack -w & nodemon --watch server -e js,html babelify.js", + "postinstall": "node ./post-install.js" }, "engines": { "node": ">=7.0.0" diff --git a/post-install.js b/post-install.js new file mode 100644 index 0000000..892c19f --- /dev/null +++ b/post-install.js @@ -0,0 +1 @@ +console.log("Please read the README.md, there are two additional steps required before this will work. Adding a secrets.js that exports a SessionKey string, and making a DB named 'meme-magic', or modify the code to have a DB named whatever you like."); From 966f92e5c73f42579fb56a4e07ef01d1a990f865 Mon Sep 17 00:00:00 2001 From: Eliot Date: Mon, 13 Feb 2017 14:12:28 -0500 Subject: [PATCH 3/9] minor text fixes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 222c06e..fdb9a59 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "meme-magic", "version": "0.1.0", - "description": "A A-Frame, React, Redux front-end with Sessions, Websockets, SQL, and Authentication built into the backend.", + "description": "An A-Frame, React, Redux front-end with Sessions, Websockets, SQL, and Authentication built into the backend.", "main": "app.js", "scripts": { "start": "webpack -w & nodemon --watch server -e js,html babelify.js", From f3ae557ba0b7e01813de95b3af80c0844041ffc3 Mon Sep 17 00:00:00 2001 From: Eliot Date: Mon, 13 Feb 2017 14:15:15 -0500 Subject: [PATCH 4/9] version update for npm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fdb9a59..e0f46dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meme-magic", - "version": "0.1.0", + "version": "0.1.1", "description": "An A-Frame, React, Redux front-end with Sessions, Websockets, SQL, and Authentication built into the backend.", "main": "app.js", "scripts": { From 2e38279497997a50439a1b988024367820e6562d Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 25 Feb 2017 14:06:31 -0500 Subject: [PATCH 5/9] removed babelify, updated package to run babel from script --- babelify.js | 3 --- package.json | 15 ++++++++------- 2 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 babelify.js diff --git a/babelify.js b/babelify.js deleted file mode 100644 index 64f3554..0000000 --- a/babelify.js +++ /dev/null @@ -1,3 +0,0 @@ -// This enables babel in node. -require('babel-register'); -require('./app'); diff --git a/package.json b/package.json index 6894f1b..a0b30f2 100644 --- a/package.json +++ b/package.json @@ -4,20 +4,21 @@ "description": "A medium sized back-end boiler plate, with very little done on the front.", "main": "app.js", "scripts": { - "start": "webpack -w & nodemon --watch server -e js,html babelify.js" + "start": "webpack -w & nodemon app.js --exec babel-node --presets es2015" }, "author": "Eliot Szwajkowski", "license": "ISC", "dependencies": { "aframe": "^0.5.0", "axios": "^0.15.3", - "babel": "^6.5.2", - "babel-core": "^6.18.2", - "babel-loader": "^6.2.8", + "babel": "^6.23.0", + "babel-cli": "^6.23.0", + "babel-core": "^6.23.1", + "babel-loader": "^6.3.2", "babel-plugin-transform-object-rest-spread": "^6.20.2", - "babel-preset-es2015": "^6.18.0", - "babel-preset-react": "^6.16.0", - "babel-register": "^6.18.0", + "babel-preset-es2015": "^6.22.0", + "babel-preset-react": "^6.23.0", + "babel-register": "^6.23.0", "bluebird": "^3.4.6", "body-parser": "^1.15.2", "chalk": "^1.1.3", From 1073201e3f5fbfef4144e185779197befc07a898 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 25 Feb 2017 14:25:39 -0500 Subject: [PATCH 6/9] added build and serve for production version --- .gitignore | 3 +- package.json | 6 +- prodServer/index.js | 45 ++++++++++ prodServer/server/authentication/index.js | 55 ++++++++++++ prodServer/server/configure/app-variables.js | 28 ++++++ prodServer/server/configure/index.js | 42 +++++++++ prodServer/server/configure/parsing.js | 59 +++++++++++++ prodServer/server/configure/security/index.js | 37 ++++++++ prodServer/server/configure/security/local.js | 33 +++++++ prodServer/server/configure/static.js | 33 +++++++ prodServer/server/db/db.js | 27 ++++++ prodServer/server/db/index.js | 30 +++++++ prodServer/server/db/models/index.js | 29 ++++++ prodServer/server/db/models/memes.js | 24 +++++ prodServer/server/db/models/trolls.js | 24 +++++ prodServer/server/db/models/users.js | 88 +++++++++++++++++++ prodServer/server/index.js | 61 +++++++++++++ prodServer/server/routes/index.js | 40 +++++++++ prodServer/server/routes/memes.js | 28 ++++++ prodServer/server/routes/sessions.js | 32 +++++++ prodServer/server/routes/trolls.js | 32 +++++++ prodServer/server/routes/users.js | 55 ++++++++++++ prodServer/server/sessions/index.js | 27 ++++++ prodServer/server/sockets/index.js | 76 ++++++++++++++++ prodServer/server/utils/index.js | 33 +++++++ app.js => serverES6/index.js | 0 .../server}/authentication/index.js | 0 .../server}/configure/app-variables.js | 0 .../server}/configure/index.js | 0 .../server}/configure/parsing.js | 0 .../server}/configure/security/index.js | 0 .../server}/configure/security/local.js | 0 .../server}/configure/static.js | 0 {server => serverES6/server}/db/db.js | 0 {server => serverES6/server}/db/index.js | 0 .../server}/db/models/index.js | 0 .../server}/db/models/memes.js | 0 .../server}/db/models/trolls.js | 0 .../server}/db/models/users.js | 0 {server => serverES6/server}/index.js | 0 {server => serverES6/server}/routes/index.js | 0 {server => serverES6/server}/routes/memes.js | 0 .../server}/routes/sessions.js | 0 {server => serverES6/server}/routes/trolls.js | 0 {server => serverES6/server}/routes/users.js | 0 .../server}/sessions/index.js | 0 {server => serverES6/server}/sockets/index.js | 0 {server => serverES6/server}/utils/index.js | 0 48 files changed, 944 insertions(+), 3 deletions(-) create mode 100644 prodServer/index.js create mode 100644 prodServer/server/authentication/index.js create mode 100644 prodServer/server/configure/app-variables.js create mode 100644 prodServer/server/configure/index.js create mode 100644 prodServer/server/configure/parsing.js create mode 100644 prodServer/server/configure/security/index.js create mode 100644 prodServer/server/configure/security/local.js create mode 100644 prodServer/server/configure/static.js create mode 100644 prodServer/server/db/db.js create mode 100644 prodServer/server/db/index.js create mode 100644 prodServer/server/db/models/index.js create mode 100644 prodServer/server/db/models/memes.js create mode 100644 prodServer/server/db/models/trolls.js create mode 100644 prodServer/server/db/models/users.js create mode 100644 prodServer/server/index.js create mode 100644 prodServer/server/routes/index.js create mode 100644 prodServer/server/routes/memes.js create mode 100644 prodServer/server/routes/sessions.js create mode 100644 prodServer/server/routes/trolls.js create mode 100644 prodServer/server/routes/users.js create mode 100644 prodServer/server/sessions/index.js create mode 100644 prodServer/server/sockets/index.js create mode 100644 prodServer/server/utils/index.js rename app.js => serverES6/index.js (100%) rename {server => serverES6/server}/authentication/index.js (100%) rename {server => serverES6/server}/configure/app-variables.js (100%) rename {server => serverES6/server}/configure/index.js (100%) rename {server => serverES6/server}/configure/parsing.js (100%) rename {server => serverES6/server}/configure/security/index.js (100%) rename {server => serverES6/server}/configure/security/local.js (100%) rename {server => serverES6/server}/configure/static.js (100%) rename {server => serverES6/server}/db/db.js (100%) rename {server => serverES6/server}/db/index.js (100%) rename {server => serverES6/server}/db/models/index.js (100%) rename {server => serverES6/server}/db/models/memes.js (100%) rename {server => serverES6/server}/db/models/trolls.js (100%) rename {server => serverES6/server}/db/models/users.js (100%) rename {server => serverES6/server}/index.js (100%) rename {server => serverES6/server}/routes/index.js (100%) rename {server => serverES6/server}/routes/memes.js (100%) rename {server => serverES6/server}/routes/sessions.js (100%) rename {server => serverES6/server}/routes/trolls.js (100%) rename {server => serverES6/server}/routes/users.js (100%) rename {server => serverES6/server}/sessions/index.js (100%) rename {server => serverES6/server}/sockets/index.js (100%) rename {server => serverES6/server}/utils/index.js (100%) diff --git a/.gitignore b/.gitignore index a905d4c..e8f3c65 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules secrets.js public -TODO.txt \ No newline at end of file +dist +TODO.txt diff --git a/package.json b/package.json index a0b30f2..7b5658b 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,11 @@ "name": "meme-magic", "version": "0.0.1", "description": "A medium sized back-end boiler plate, with very little done on the front.", - "main": "app.js", + "main": "serverES6/index.js", "scripts": { - "start": "webpack -w & nodemon app.js --exec babel-node --presets es2015" + "build": "webpack && babel serverES6 -d prodServer --presets es2015", + "serve": "node prodServer", + "start": "webpack -w & nodemon serverES6 --exec babel-node --presets es2015" }, "author": "Eliot Szwajkowski", "license": "ISC", diff --git a/prodServer/index.js b/prodServer/index.js new file mode 100644 index 0000000..e526151 --- /dev/null +++ b/prodServer/index.js @@ -0,0 +1,45 @@ +'use strict'; + +var _server = require('./server'); + +var _server2 = _interopRequireDefault(_server); + +var _http = require('http'); + +var _http2 = _interopRequireDefault(_http); + +var _db = require('./server/db'); + +var _db2 = _interopRequireDefault(_db); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _sockets = require('./server/sockets'); + +var _sockets2 = _interopRequireDefault(_sockets); + +var _cliInteract = require('cli-interact'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var server = _http2.default.createServer(); +var _Port = 3001; + +var syncTruth = (0, _cliInteract.getYesNo)(_chalk2.default.cyan('Rick, do you wanna get savage on this database? (Force Sync)')); + +// If you want to remove the syncTruth, change syncTruth to true or false manually. + +// The order of initializing the backend. +(0, _db2.default)(syncTruth).then(function () { + return server.on('request', _server2.default); +}).then(function () { + return (0, _sockets2.default)(server); +}).catch(function (err) { + return console.error(err); +}).finally(function () { + return server.listen(_Port, function () { + return console.log(_chalk2.default.magenta('Meme magic has begun on Port ' + _Port)); + }); +}); \ No newline at end of file diff --git a/prodServer/server/authentication/index.js b/prodServer/server/authentication/index.js new file mode 100644 index 0000000..464f37e --- /dev/null +++ b/prodServer/server/authentication/index.js @@ -0,0 +1,55 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _passport = require('passport'); + +var _passport2 = _interopRequireDefault(_passport); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + + +// The login route. +router.post('/login', function (req, res, next) { + console.log(_chalk2.default.green('We got a new order for perfectly salted fries!')); + // The passport callback function. + var authorizeUser = function authorizeUser(err, user) { + if (err) return next(err); + if (!user) { + console.log(_chalk2.default.red('We would never sell fries of that quality.')); + return res.status(401).send({ message: 'Failed login attempt.' }); + } + + // Login time! + req.logIn(user, function () { + console.log(_chalk2.default.green('Perfect fries delivered to a hungry customer.')); + res.status(200).send({ + user: user.cleanHands() + }); + }); + }; + + // Pass passport the authentication function. + _passport2.default.authenticate('local', authorizeUser)(req, res, next); +}); + +// Logout route. +router.get('/logout', function (req, res) { + console.log(_chalk2.default.green('User Logout Performed.')); + req.logout(); + res.status(200).send({ message: 'Successfully logged out.' }); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/configure/app-variables.js b/prodServer/server/configure/app-variables.js new file mode 100644 index 0000000..5285a95 --- /dev/null +++ b/prodServer/server/configure/app-variables.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _volleyball = require('volleyball'); + +var _volleyball2 = _interopRequireDefault(_volleyball); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var rootPath = _path2.default.join(__dirname, '../../'); +var indexPath = _path2.default.join(rootPath, './browser/app.html'); +var faviconPath = _path2.default.join(rootPath, './browser/favicon/favicon.ico'); + +// Configure my built in properties. + +exports.default = function (app) { + app.setValue('projectRoot', rootPath); + app.setValue('indexPath', indexPath); + app.setValue('faviconPath', faviconPath); + app.setValue('log', _volleyball2.default); +}; \ No newline at end of file diff --git a/prodServer/server/configure/index.js b/prodServer/server/configure/index.js new file mode 100644 index 0000000..3a79264 --- /dev/null +++ b/prodServer/server/configure/index.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _appVariables = require('./app-variables'); + +var _appVariables2 = _interopRequireDefault(_appVariables); + +var _parsing = require('./parsing'); + +var _parsing2 = _interopRequireDefault(_parsing); + +var _static = require('./static'); + +var _static2 = _interopRequireDefault(_static); + +var _security = require('./security'); + +var _security2 = _interopRequireDefault(_security); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (app, _db) { + // Force the context of this. + app.setValue = app.set.bind(app); + // Make a function that gets the path to this app. + app.getValue = function (path) { + return app.get(path); + }; + + // Use the two above functions to give myself properties. + (0, _appVariables2.default)(app); + // Give myself a logging ability. + app.use(app.getValue('log')); + + // Configure my static routes, security, and parsing abilities. + (0, _parsing2.default)(app, _db); + (0, _security2.default)(app, _db); + (0, _static2.default)(app); +}; \ No newline at end of file diff --git a/prodServer/server/configure/parsing.js b/prodServer/server/configure/parsing.js new file mode 100644 index 0000000..35ba5ef --- /dev/null +++ b/prodServer/server/configure/parsing.js @@ -0,0 +1,59 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _bodyParser = require('body-parser'); + +var _bodyParser2 = _interopRequireDefault(_bodyParser); + +var _expressSession = require('express-session'); + +var _expressSession2 = _interopRequireDefault(_expressSession); + +var _connectSessionSequelize = require('connect-session-sequelize'); + +var _connectSessionSequelize2 = _interopRequireDefault(_connectSessionSequelize); + +var _secrets = require('../../secrets'); + +var _secrets2 = _interopRequireDefault(_secrets); + +var _passport = require('passport'); + +var _passport2 = _interopRequireDefault(_passport); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SequelizeStore = (0, _connectSessionSequelize2.default)(_expressSession2.default.Store); + +exports.default = function (app, _db) { + // Enable body parser. + app.use(_bodyParser2.default.json()); + app.use(_bodyParser2.default.urlencoded({ extended: true })); + + // Create and sync my Session Storage. + // TO-DO - Look into doing this without a library. + var sessionStore = new SequelizeStore({ db: _db }); + sessionStore.sync(); + + // Create a date a year from now. + var aYearFromNow = new Date(); + aYearFromNow.setYear(aYearFromNow.getFullYear() + 1); + + // Instantiate the use of the session store. + app.use((0, _expressSession2.default)({ + secret: _secrets2.default.SessionKey, + store: sessionStore, + resave: false, + saveUninitialized: true, + cookie: { + expires: aYearFromNow + } + })); + + // Enable passport. + app.use(_passport2.default.initialize()); + app.use(_passport2.default.session()); +}; \ No newline at end of file diff --git a/prodServer/server/configure/security/index.js b/prodServer/server/configure/security/index.js new file mode 100644 index 0000000..b70dd8c --- /dev/null +++ b/prodServer/server/configure/security/index.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _passport = require('passport'); + +var _passport2 = _interopRequireDefault(_passport); + +var _local = require('./local'); + +var _local2 = _interopRequireDefault(_local); + +var _utils = require('../../utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (app, _db) { + // Get the User model. + var User = _db.model('user'); + + // We only give an encrypted User ID to the browser. + _passport2.default.serializeUser(function (user, done) { + done(null, user.id); + }); + + // We use the ID given to the browser to set the req.user. + _passport2.default.deserializeUser(function (id, done) { + User.findById(id).then(function (user) { + var formattedUser = (0, _utils.packMyFries)(user); + done(null, formattedUser); + }).catch(done); + }); + + (0, _local2.default)(app, _db, User); +}; \ No newline at end of file diff --git a/prodServer/server/configure/security/local.js b/prodServer/server/configure/security/local.js new file mode 100644 index 0000000..d18e85e --- /dev/null +++ b/prodServer/server/configure/security/local.js @@ -0,0 +1,33 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _passport = require('passport'); + +var _passport2 = _interopRequireDefault(_passport); + +var _passportLocal = require('passport-local'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (app, _db, User) { + // This is the local strategy for security. + var LocalStrategy = function LocalStrategy(email, password, done) { + User.findOne({ + where: { + Email: email + } + }).then(function (user) { + // Verify the password attempt. + if (!user || !user.verifySaltiness(password)) done(null, false);else done(null, user); + }).catch(done); + }; + + // Enable this Local Strategy. + _passport2.default.use(new _passportLocal.Strategy({ + usernameField: 'Email', + passwordField: 'Password' + }, LocalStrategy)); +}; \ No newline at end of file diff --git a/prodServer/server/configure/static.js b/prodServer/server/configure/static.js new file mode 100644 index 0000000..e538f14 --- /dev/null +++ b/prodServer/server/configure/static.js @@ -0,0 +1,33 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _serveFavicon = require('serve-favicon'); + +var _serveFavicon2 = _interopRequireDefault(_serveFavicon); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Serve up my chosen static files as well as my favicon. +exports.default = function (app) { + var root = app.getValue('projectRoot'); + + var npmPath = _path2.default.join(root, './node_modules'); + var browserPath = _path2.default.join(root, './browser'); + var publicPath = _path2.default.join(root, './public'); + + app.use(_express2.default.static(npmPath)); + app.use(_express2.default.static(browserPath)); + app.use(_express2.default.static(publicPath)); + app.use((0, _serveFavicon2.default)(app.getValue('faviconPath'))); +}; \ No newline at end of file diff --git a/prodServer/server/db/db.js b/prodServer/server/db/db.js new file mode 100644 index 0000000..f30a1e7 --- /dev/null +++ b/prodServer/server/db/db.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _sequelize = require('sequelize'); + +var _sequelize2 = _interopRequireDefault(_sequelize); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var memeDB = 'meme-magic'; + +console.log(_chalk2.default.yellow('Hey Rick!')); + +var _db = new _sequelize2.default(memeDB, null, null, { host: 'localhost', logging: false, dialect: 'postgres', native: true }); + +exports.default = _db; \ No newline at end of file diff --git a/prodServer/server/db/index.js b/prodServer/server/db/index.js new file mode 100644 index 0000000..9f64ac6 --- /dev/null +++ b/prodServer/server/db/index.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _db = require('./db'); + +var _db2 = _interopRequireDefault(_db); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _models = require('./models'); + +var _models2 = _interopRequireDefault(_models); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// The exported function that takes a param as to whether or not to sync the db. +exports.default = function () { + var sync = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + return _db2.default.sync({ force: sync }).then(function () { + if (sync) console.log(_chalk2.default.cyan('Rick, that was brutal! (Force Sync Complete)'));else console.log(_chalk2.default.green('Hey, Morty, I got the hardest working Memes in the universe - try not to ruin it, alright Morty? (Your Memes Have Been Synced)')); + }).catch(function (err) { + return console.error(err); + }); +}; \ No newline at end of file diff --git a/prodServer/server/db/models/index.js b/prodServer/server/db/models/index.js new file mode 100644 index 0000000..26a147f --- /dev/null +++ b/prodServer/server/db/models/index.js @@ -0,0 +1,29 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _memes = require('./memes'); + +var _memes2 = _interopRequireDefault(_memes); + +var _trolls = require('./trolls'); + +var _trolls2 = _interopRequireDefault(_trolls); + +var _users = require('./users'); + +var _users2 = _interopRequireDefault(_users); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Instantiate M-to-M relationship. +_trolls2.default.belongsToMany(_memes2.default, { through: 'TrollMemes' }); +_memes2.default.belongsToMany(_trolls2.default, { through: 'TrollMemes' }); + +exports.default = { + Meme: _memes2.default, + Troll: _trolls2.default, + User: _users2.default +}; \ No newline at end of file diff --git a/prodServer/server/db/models/memes.js b/prodServer/server/db/models/memes.js new file mode 100644 index 0000000..344f9ae --- /dev/null +++ b/prodServer/server/db/models/memes.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _db = require('../db'); + +var _db2 = _interopRequireDefault(_db); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Type = _db2.default.Sequelize; + +exports.default = _db2.default.define('meme', { + Title: { + type: Type.STRING, + allowNull: false + }, + imageURL: { + type: Type.STRING, + allowNull: false + } +}); \ No newline at end of file diff --git a/prodServer/server/db/models/trolls.js b/prodServer/server/db/models/trolls.js new file mode 100644 index 0000000..155bfe1 --- /dev/null +++ b/prodServer/server/db/models/trolls.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _db = require('../db'); + +var _db2 = _interopRequireDefault(_db); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Type = _db2.default.Sequelize; + +exports.default = _db2.default.define('troll', { + Title: { + type: Type.STRING, + allowNull: false + }, + imageURL: { + type: Type.STRING, + allowNull: false + } +}); \ No newline at end of file diff --git a/prodServer/server/db/models/users.js b/prodServer/server/db/models/users.js new file mode 100644 index 0000000..5484a05 --- /dev/null +++ b/prodServer/server/db/models/users.js @@ -0,0 +1,88 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _db = require('../db'); + +var _db2 = _interopRequireDefault(_db); + +var _utils = require('../../utils'); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _crypto = require('crypto'); + +var _crypto2 = _interopRequireDefault(_crypto); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Type = _db2.default.Sequelize; + +exports.default = _db2.default.define('user', { + // Actual Name + Name: { + type: Type.STRING, + allowNull: false + }, + // Username + Username: { + type: Type.STRING, + allowNull: false + }, + // User E-Mail + Email: { + type: Type.STRING, + allowNull: false + }, + // User SHA-1 Password + Password: { + type: Type.STRING + }, + // User Salt + Salt: { + type: Type.STRING + } +}, { + instanceMethods: { + // Returns user info, except password and salt. + cleanHands: function cleanHands() { + console.log(_chalk2.default.cyan('Cleaning hands...')); + return (0, _utils.packMyFries)(this); + }, + // Verifies password match. + verifySaltiness: function verifySaltiness(passAttempt) { + console.log(_chalk2.default.green('Verifying saltiness...')); + var isSaltyEnough = this.Model.deepFry(passAttempt, this.Salt) === this.Password; + if (isSaltyEnough) console.log(_chalk2.default.green('Perfectly salted fries confirmed.'));else console.log(_chalk2.default.red('Fries need more salt.')); + return isSaltyEnough; + } + }, + classMethods: { + // Generates Salt. + saltShaker: function saltShaker() { + console.log(_chalk2.default.green('Shaking some salt...')); + return _crypto2.default.randomBytes(16).toString('base64'); + }, + // Encrypts user info. + deepFry: function deepFry(plainText, salt) { + console.log(_chalk2.default.red('Deep frying...')); + var hash = _crypto2.default.createHash('sha1'); + hash.update(plainText); + hash.update(salt); + return hash.digest('hex'); + } + }, + // Hooks to always salt and encrypt. + hooks: { + beforeCreate: _utils.saltMyFries, + beforeUpdate: _utils.saltMyFries + } +}); \ No newline at end of file diff --git a/prodServer/server/index.js b/prodServer/server/index.js new file mode 100644 index 0000000..4bb4d2d --- /dev/null +++ b/prodServer/server/index.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _db2 = require('./db/db'); + +var _db3 = _interopRequireDefault(_db2); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _configure = require('./configure'); + +var _configure2 = _interopRequireDefault(_configure); + +var _sessions = require('./sessions'); + +var _sessions2 = _interopRequireDefault(_sessions); + +var _routes = require('./routes'); + +var _routes2 = _interopRequireDefault(_routes); + +var _authentication = require('./authentication'); + +var _authentication2 = _interopRequireDefault(_authentication); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var app = (0, _express2.default)(); + + +(0, _configure2.default)(app, _db3.default); +(0, _sessions2.default)(app); + +app.use('/auth', _authentication2.default); +app.use('/api', _routes2.default); + +app.get('/*', function (req, res) { + if (req.session.socketData) { + console.log(_chalk2.default.magenta('A user @ ' + req.session.socketData.address + ' just visited the site.')); + } + res.sendFile(app.getValue('indexPath')); +}); + +app.use(function (err, req, res, next) { + console.error(err, typeof next === 'undefined' ? 'undefined' : _typeof(next)); + console.error(err.stack); + res.status(err.status || 500).send(err.message || 'Internal server error.'); +}); + +exports.default = app; \ No newline at end of file diff --git a/prodServer/server/routes/index.js b/prodServer/server/routes/index.js new file mode 100644 index 0000000..da5632d --- /dev/null +++ b/prodServer/server/routes/index.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _memes = require('./memes'); + +var _memes2 = _interopRequireDefault(_memes); + +var _trolls = require('./trolls'); + +var _trolls2 = _interopRequireDefault(_trolls); + +var _sessions = require('./sessions'); + +var _sessions2 = _interopRequireDefault(_sessions); + +var _users = require('./users'); + +var _users2 = _interopRequireDefault(_users); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + +router.use('/memes', _memes2.default); +router.use('/trolls', _trolls2.default); +router.use('/sessions', _sessions2.default); +router.use('/users', _users2.default); + +router.use(function (req, res) { + res.status(404).end(); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/memes.js b/prodServer/server/routes/memes.js new file mode 100644 index 0000000..dd642d5 --- /dev/null +++ b/prodServer/server/routes/memes.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _memes = require('../db/models/memes'); + +var _memes2 = _interopRequireDefault(_memes); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + +router.get('/', function (req, res, next) { + console.log(_chalk2.default.green('You are looking for Memes eh?')); + res.json({ url: 'www.reddit.com' }); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/sessions.js b/prodServer/server/routes/sessions.js new file mode 100644 index 0000000..966d0af --- /dev/null +++ b/prodServer/server/routes/sessions.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + + +router.route('/').get(function (req, res, next) { + res.status(200).json({ session: req.session }); +}).put(function (req, res, next) { + // Pretty straightforward route for the front end to update welcomeText. + console.log(_chalk2.default.magenta('Storing Test Session Data...')); + var welcomeText = req.body.welcomeText; + + req.session.welcomeText = welcomeText; + + res.status(200).json({ Message: 'Success' }); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/trolls.js b/prodServer/server/routes/trolls.js new file mode 100644 index 0000000..c5ad37f --- /dev/null +++ b/prodServer/server/routes/trolls.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _trolls = require('../db/models/trolls'); + +var _trolls2 = _interopRequireDefault(_trolls); + +var _memes = require('../db/models/memes'); + +var _memes2 = _interopRequireDefault(_memes); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + +router.get('/', function (req, res, next) { + console.log(_chalk2.default.green('You are looking for Trolls eh?')); + res.json({ aTroll: 'Joe Biden' }); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/users.js b/prodServer/server/routes/users.js new file mode 100644 index 0000000..bd3c714 --- /dev/null +++ b/prodServer/server/routes/users.js @@ -0,0 +1,55 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _users = require('../db/models/users'); + +var _users2 = _interopRequireDefault(_users); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var router = _express2.default.Router(); + + +// Signup Route +router.post('/signup', function (req, res, next) { + // Check if E-Mail is already being used. + _users2.default.find({ + where: { + Email: req.body.Email + } + }) + // If it is already being used, error, otherwise create. + .then(function (userExists) { + if (!userExists) { + console.log(_chalk2.default.green('Yo dog, were making friends!')); + _users2.default.create({ + Username: req.body.Username, + Email: req.body.Email, + Password: req.body.Password, + Name: req.body.Name + }).then(function (createdUser) { + return res.status(200).send({ message: 'User created!' }); + }); + } else { + console.log(_chalk2.default.red('Someone tried to impersonate Rick again, but I know a C-137 when I see one.')); + return res.status(401).send({ message: 'That email is already being used.' }); + } + }).catch(next); +}); + +router.get('/me', function (req, res, next) { + if (req.user) res.status(200).send({ Me: req.user });else res.status(400).send({ Me: 'A girl has no name.' }); +}); + +exports.default = router; \ No newline at end of file diff --git a/prodServer/server/sessions/index.js b/prodServer/server/sessions/index.js new file mode 100644 index 0000000..fe09f47 --- /dev/null +++ b/prodServer/server/sessions/index.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _parseurl = require('parseurl'); + +var _parseurl2 = _interopRequireDefault(_parseurl); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/* + Very basic use of session configuration that simply monitors your views to any URL. +*/ +exports.default = function (app) { + app.use(function (req, res, next) { + var views = req.session.views; + + if (!views) views = req.session.views = {}; + + var pathname = (0, _parseurl2.default)(req).pathname; + views[pathname] = (views[pathname] || 0) + 1; + + next(); + }); +}; \ No newline at end of file diff --git a/prodServer/server/sockets/index.js b/prodServer/server/sockets/index.js new file mode 100644 index 0000000..5219931 --- /dev/null +++ b/prodServer/server/sockets/index.js @@ -0,0 +1,76 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _socket = require('socket.io'); + +var _socket2 = _interopRequireDefault(_socket); + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var currentSockets = []; +var totalConnections = 0; + +var IO = null; + +// Essentially filters through all of the sockets and ensures that we have no duplicate sockets. +var refreshSockets = function refreshSockets(socket) { + currentSockets = currentSockets.filter(function (e) { + return e.id !== socket.id; + }); +}; + +exports.default = function (server) { + if (server == undefined) return IO; + if (IO) return IO; + + IO = (0, _socket2.default)(server); + + IO.on('connection', function (socket) { + totalConnections++; + socket.name = 'memeLover' + totalConnections; + // Snatch a users IP. + var ipAddress = socket.request.connection.remoteAddress; + + // If no sockets have the same IP, begin initialization. + if (!currentSockets.some(function (e) { + return e.address == ipAddress; + })) { + // Create the data we are interested in. + var currentSocket = { + id: socket.id, + name: socket.name, + time: new Date(), + address: ipAddress + }; + // Push it into an array of all active sockets. + currentSockets.push(currentSocket); + console.log(_chalk2.default.magenta(socket.name + ' wants Memes REAL-TIME.')); + // Begin intialization of sessions. + socket.emit('InitUser', currentSocket); + } else { + // If this IP already exists, then lets deal with it differently. + console.log(_chalk2.default.red(socket.name + ' is already being delivered Memes.')); + console.log(_chalk2.default.red('Rick, I don\'t like this guy.')); + // Knock this socket out of our currently active sockets. + refreshSockets(socket); + // Emit an event that punishes said user. + socket.emit('KickTroll'); + // Disconnect the socket. + socket.disconnect(); + } + + socket.on('disconnect', function () { + // If a user leaves, please alert us. + console.log(_chalk2.default.magenta(socket.name + ' has had enough memes.')); + // Then remove them from currently active users. + refreshSockets(socket); + }); + }); +}; \ No newline at end of file diff --git a/prodServer/server/utils/index.js b/prodServer/server/utils/index.js new file mode 100644 index 0000000..5b0a6ec --- /dev/null +++ b/prodServer/server/utils/index.js @@ -0,0 +1,33 @@ +'use strict'; + +// Backend Utils File + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.packMyFries = exports.saltMyFries = undefined; + +var _chalk = require('chalk'); + +var _chalk2 = _interopRequireDefault(_chalk); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// For salting the user model. +var saltMyFries = exports.saltMyFries = function saltMyFries(user) { + console.log(_chalk2.default.cyan('Trying to find salt...')); + if (user.changed('Password')) { + console.log(_chalk2.default.cyan('Salting Fries.')); + user.Salt = user.Model.saltShaker(); + user.Password = user.Model.deepFry(user.Password, user.Salt); + } +}; + +// Cleans a user instance of valuable information. +var packMyFries = exports.packMyFries = function packMyFries(user) { + return _lodash2.default.omit(user.toJSON(), ['Password', 'Salt']); +}; \ No newline at end of file diff --git a/app.js b/serverES6/index.js similarity index 100% rename from app.js rename to serverES6/index.js diff --git a/server/authentication/index.js b/serverES6/server/authentication/index.js similarity index 100% rename from server/authentication/index.js rename to serverES6/server/authentication/index.js diff --git a/server/configure/app-variables.js b/serverES6/server/configure/app-variables.js similarity index 100% rename from server/configure/app-variables.js rename to serverES6/server/configure/app-variables.js diff --git a/server/configure/index.js b/serverES6/server/configure/index.js similarity index 100% rename from server/configure/index.js rename to serverES6/server/configure/index.js diff --git a/server/configure/parsing.js b/serverES6/server/configure/parsing.js similarity index 100% rename from server/configure/parsing.js rename to serverES6/server/configure/parsing.js diff --git a/server/configure/security/index.js b/serverES6/server/configure/security/index.js similarity index 100% rename from server/configure/security/index.js rename to serverES6/server/configure/security/index.js diff --git a/server/configure/security/local.js b/serverES6/server/configure/security/local.js similarity index 100% rename from server/configure/security/local.js rename to serverES6/server/configure/security/local.js diff --git a/server/configure/static.js b/serverES6/server/configure/static.js similarity index 100% rename from server/configure/static.js rename to serverES6/server/configure/static.js diff --git a/server/db/db.js b/serverES6/server/db/db.js similarity index 100% rename from server/db/db.js rename to serverES6/server/db/db.js diff --git a/server/db/index.js b/serverES6/server/db/index.js similarity index 100% rename from server/db/index.js rename to serverES6/server/db/index.js diff --git a/server/db/models/index.js b/serverES6/server/db/models/index.js similarity index 100% rename from server/db/models/index.js rename to serverES6/server/db/models/index.js diff --git a/server/db/models/memes.js b/serverES6/server/db/models/memes.js similarity index 100% rename from server/db/models/memes.js rename to serverES6/server/db/models/memes.js diff --git a/server/db/models/trolls.js b/serverES6/server/db/models/trolls.js similarity index 100% rename from server/db/models/trolls.js rename to serverES6/server/db/models/trolls.js diff --git a/server/db/models/users.js b/serverES6/server/db/models/users.js similarity index 100% rename from server/db/models/users.js rename to serverES6/server/db/models/users.js diff --git a/server/index.js b/serverES6/server/index.js similarity index 100% rename from server/index.js rename to serverES6/server/index.js diff --git a/server/routes/index.js b/serverES6/server/routes/index.js similarity index 100% rename from server/routes/index.js rename to serverES6/server/routes/index.js diff --git a/server/routes/memes.js b/serverES6/server/routes/memes.js similarity index 100% rename from server/routes/memes.js rename to serverES6/server/routes/memes.js diff --git a/server/routes/sessions.js b/serverES6/server/routes/sessions.js similarity index 100% rename from server/routes/sessions.js rename to serverES6/server/routes/sessions.js diff --git a/server/routes/trolls.js b/serverES6/server/routes/trolls.js similarity index 100% rename from server/routes/trolls.js rename to serverES6/server/routes/trolls.js diff --git a/server/routes/users.js b/serverES6/server/routes/users.js similarity index 100% rename from server/routes/users.js rename to serverES6/server/routes/users.js diff --git a/server/sessions/index.js b/serverES6/server/sessions/index.js similarity index 100% rename from server/sessions/index.js rename to serverES6/server/sessions/index.js diff --git a/server/sockets/index.js b/serverES6/server/sockets/index.js similarity index 100% rename from server/sockets/index.js rename to serverES6/server/sockets/index.js diff --git a/server/utils/index.js b/serverES6/server/utils/index.js similarity index 100% rename from server/utils/index.js rename to serverES6/server/utils/index.js From 25a38bc884561e90a01c99e802c016af95c5a76d Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 25 Feb 2017 14:26:44 -0500 Subject: [PATCH 7/9] remove built server files --- package.json | 4 +- prodServer/index.js | 45 ---------- prodServer/server/authentication/index.js | 55 ------------ prodServer/server/configure/app-variables.js | 28 ------ prodServer/server/configure/index.js | 42 --------- prodServer/server/configure/parsing.js | 59 ------------- prodServer/server/configure/security/index.js | 37 -------- prodServer/server/configure/security/local.js | 33 ------- prodServer/server/configure/static.js | 33 ------- prodServer/server/db/db.js | 27 ------ prodServer/server/db/index.js | 30 ------- prodServer/server/db/models/index.js | 29 ------ prodServer/server/db/models/memes.js | 24 ----- prodServer/server/db/models/trolls.js | 24 ----- prodServer/server/db/models/users.js | 88 ------------------- prodServer/server/index.js | 61 ------------- prodServer/server/routes/index.js | 40 --------- prodServer/server/routes/memes.js | 28 ------ prodServer/server/routes/sessions.js | 32 ------- prodServer/server/routes/trolls.js | 32 ------- prodServer/server/routes/users.js | 55 ------------ prodServer/server/sessions/index.js | 27 ------ prodServer/server/sockets/index.js | 76 ---------------- prodServer/server/utils/index.js | 33 ------- 24 files changed, 2 insertions(+), 940 deletions(-) delete mode 100644 prodServer/index.js delete mode 100644 prodServer/server/authentication/index.js delete mode 100644 prodServer/server/configure/app-variables.js delete mode 100644 prodServer/server/configure/index.js delete mode 100644 prodServer/server/configure/parsing.js delete mode 100644 prodServer/server/configure/security/index.js delete mode 100644 prodServer/server/configure/security/local.js delete mode 100644 prodServer/server/configure/static.js delete mode 100644 prodServer/server/db/db.js delete mode 100644 prodServer/server/db/index.js delete mode 100644 prodServer/server/db/models/index.js delete mode 100644 prodServer/server/db/models/memes.js delete mode 100644 prodServer/server/db/models/trolls.js delete mode 100644 prodServer/server/db/models/users.js delete mode 100644 prodServer/server/index.js delete mode 100644 prodServer/server/routes/index.js delete mode 100644 prodServer/server/routes/memes.js delete mode 100644 prodServer/server/routes/sessions.js delete mode 100644 prodServer/server/routes/trolls.js delete mode 100644 prodServer/server/routes/users.js delete mode 100644 prodServer/server/sessions/index.js delete mode 100644 prodServer/server/sockets/index.js delete mode 100644 prodServer/server/utils/index.js diff --git a/package.json b/package.json index 7b5658b..99afd6b 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "serverES6/index.js", "scripts": { "build": "webpack && babel serverES6 -d prodServer --presets es2015", - "serve": "node prodServer", - "start": "webpack -w & nodemon serverES6 --exec babel-node --presets es2015" + "start": "node prodServer", + "dev": "webpack -w & nodemon serverES6 --exec babel-node --presets es2015" }, "author": "Eliot Szwajkowski", "license": "ISC", diff --git a/prodServer/index.js b/prodServer/index.js deleted file mode 100644 index e526151..0000000 --- a/prodServer/index.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var _server = require('./server'); - -var _server2 = _interopRequireDefault(_server); - -var _http = require('http'); - -var _http2 = _interopRequireDefault(_http); - -var _db = require('./server/db'); - -var _db2 = _interopRequireDefault(_db); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _sockets = require('./server/sockets'); - -var _sockets2 = _interopRequireDefault(_sockets); - -var _cliInteract = require('cli-interact'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var server = _http2.default.createServer(); -var _Port = 3001; - -var syncTruth = (0, _cliInteract.getYesNo)(_chalk2.default.cyan('Rick, do you wanna get savage on this database? (Force Sync)')); - -// If you want to remove the syncTruth, change syncTruth to true or false manually. - -// The order of initializing the backend. -(0, _db2.default)(syncTruth).then(function () { - return server.on('request', _server2.default); -}).then(function () { - return (0, _sockets2.default)(server); -}).catch(function (err) { - return console.error(err); -}).finally(function () { - return server.listen(_Port, function () { - return console.log(_chalk2.default.magenta('Meme magic has begun on Port ' + _Port)); - }); -}); \ No newline at end of file diff --git a/prodServer/server/authentication/index.js b/prodServer/server/authentication/index.js deleted file mode 100644 index 464f37e..0000000 --- a/prodServer/server/authentication/index.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _passport = require('passport'); - -var _passport2 = _interopRequireDefault(_passport); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - - -// The login route. -router.post('/login', function (req, res, next) { - console.log(_chalk2.default.green('We got a new order for perfectly salted fries!')); - // The passport callback function. - var authorizeUser = function authorizeUser(err, user) { - if (err) return next(err); - if (!user) { - console.log(_chalk2.default.red('We would never sell fries of that quality.')); - return res.status(401).send({ message: 'Failed login attempt.' }); - } - - // Login time! - req.logIn(user, function () { - console.log(_chalk2.default.green('Perfect fries delivered to a hungry customer.')); - res.status(200).send({ - user: user.cleanHands() - }); - }); - }; - - // Pass passport the authentication function. - _passport2.default.authenticate('local', authorizeUser)(req, res, next); -}); - -// Logout route. -router.get('/logout', function (req, res) { - console.log(_chalk2.default.green('User Logout Performed.')); - req.logout(); - res.status(200).send({ message: 'Successfully logged out.' }); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/configure/app-variables.js b/prodServer/server/configure/app-variables.js deleted file mode 100644 index 5285a95..0000000 --- a/prodServer/server/configure/app-variables.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _volleyball = require('volleyball'); - -var _volleyball2 = _interopRequireDefault(_volleyball); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var rootPath = _path2.default.join(__dirname, '../../'); -var indexPath = _path2.default.join(rootPath, './browser/app.html'); -var faviconPath = _path2.default.join(rootPath, './browser/favicon/favicon.ico'); - -// Configure my built in properties. - -exports.default = function (app) { - app.setValue('projectRoot', rootPath); - app.setValue('indexPath', indexPath); - app.setValue('faviconPath', faviconPath); - app.setValue('log', _volleyball2.default); -}; \ No newline at end of file diff --git a/prodServer/server/configure/index.js b/prodServer/server/configure/index.js deleted file mode 100644 index 3a79264..0000000 --- a/prodServer/server/configure/index.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _appVariables = require('./app-variables'); - -var _appVariables2 = _interopRequireDefault(_appVariables); - -var _parsing = require('./parsing'); - -var _parsing2 = _interopRequireDefault(_parsing); - -var _static = require('./static'); - -var _static2 = _interopRequireDefault(_static); - -var _security = require('./security'); - -var _security2 = _interopRequireDefault(_security); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (app, _db) { - // Force the context of this. - app.setValue = app.set.bind(app); - // Make a function that gets the path to this app. - app.getValue = function (path) { - return app.get(path); - }; - - // Use the two above functions to give myself properties. - (0, _appVariables2.default)(app); - // Give myself a logging ability. - app.use(app.getValue('log')); - - // Configure my static routes, security, and parsing abilities. - (0, _parsing2.default)(app, _db); - (0, _security2.default)(app, _db); - (0, _static2.default)(app); -}; \ No newline at end of file diff --git a/prodServer/server/configure/parsing.js b/prodServer/server/configure/parsing.js deleted file mode 100644 index 35ba5ef..0000000 --- a/prodServer/server/configure/parsing.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bodyParser = require('body-parser'); - -var _bodyParser2 = _interopRequireDefault(_bodyParser); - -var _expressSession = require('express-session'); - -var _expressSession2 = _interopRequireDefault(_expressSession); - -var _connectSessionSequelize = require('connect-session-sequelize'); - -var _connectSessionSequelize2 = _interopRequireDefault(_connectSessionSequelize); - -var _secrets = require('../../secrets'); - -var _secrets2 = _interopRequireDefault(_secrets); - -var _passport = require('passport'); - -var _passport2 = _interopRequireDefault(_passport); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SequelizeStore = (0, _connectSessionSequelize2.default)(_expressSession2.default.Store); - -exports.default = function (app, _db) { - // Enable body parser. - app.use(_bodyParser2.default.json()); - app.use(_bodyParser2.default.urlencoded({ extended: true })); - - // Create and sync my Session Storage. - // TO-DO - Look into doing this without a library. - var sessionStore = new SequelizeStore({ db: _db }); - sessionStore.sync(); - - // Create a date a year from now. - var aYearFromNow = new Date(); - aYearFromNow.setYear(aYearFromNow.getFullYear() + 1); - - // Instantiate the use of the session store. - app.use((0, _expressSession2.default)({ - secret: _secrets2.default.SessionKey, - store: sessionStore, - resave: false, - saveUninitialized: true, - cookie: { - expires: aYearFromNow - } - })); - - // Enable passport. - app.use(_passport2.default.initialize()); - app.use(_passport2.default.session()); -}; \ No newline at end of file diff --git a/prodServer/server/configure/security/index.js b/prodServer/server/configure/security/index.js deleted file mode 100644 index b70dd8c..0000000 --- a/prodServer/server/configure/security/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _passport = require('passport'); - -var _passport2 = _interopRequireDefault(_passport); - -var _local = require('./local'); - -var _local2 = _interopRequireDefault(_local); - -var _utils = require('../../utils'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (app, _db) { - // Get the User model. - var User = _db.model('user'); - - // We only give an encrypted User ID to the browser. - _passport2.default.serializeUser(function (user, done) { - done(null, user.id); - }); - - // We use the ID given to the browser to set the req.user. - _passport2.default.deserializeUser(function (id, done) { - User.findById(id).then(function (user) { - var formattedUser = (0, _utils.packMyFries)(user); - done(null, formattedUser); - }).catch(done); - }); - - (0, _local2.default)(app, _db, User); -}; \ No newline at end of file diff --git a/prodServer/server/configure/security/local.js b/prodServer/server/configure/security/local.js deleted file mode 100644 index d18e85e..0000000 --- a/prodServer/server/configure/security/local.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _passport = require('passport'); - -var _passport2 = _interopRequireDefault(_passport); - -var _passportLocal = require('passport-local'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (app, _db, User) { - // This is the local strategy for security. - var LocalStrategy = function LocalStrategy(email, password, done) { - User.findOne({ - where: { - Email: email - } - }).then(function (user) { - // Verify the password attempt. - if (!user || !user.verifySaltiness(password)) done(null, false);else done(null, user); - }).catch(done); - }; - - // Enable this Local Strategy. - _passport2.default.use(new _passportLocal.Strategy({ - usernameField: 'Email', - passwordField: 'Password' - }, LocalStrategy)); -}; \ No newline at end of file diff --git a/prodServer/server/configure/static.js b/prodServer/server/configure/static.js deleted file mode 100644 index e538f14..0000000 --- a/prodServer/server/configure/static.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _serveFavicon = require('serve-favicon'); - -var _serveFavicon2 = _interopRequireDefault(_serveFavicon); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Serve up my chosen static files as well as my favicon. -exports.default = function (app) { - var root = app.getValue('projectRoot'); - - var npmPath = _path2.default.join(root, './node_modules'); - var browserPath = _path2.default.join(root, './browser'); - var publicPath = _path2.default.join(root, './public'); - - app.use(_express2.default.static(npmPath)); - app.use(_express2.default.static(browserPath)); - app.use(_express2.default.static(publicPath)); - app.use((0, _serveFavicon2.default)(app.getValue('faviconPath'))); -}; \ No newline at end of file diff --git a/prodServer/server/db/db.js b/prodServer/server/db/db.js deleted file mode 100644 index f30a1e7..0000000 --- a/prodServer/server/db/db.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _sequelize = require('sequelize'); - -var _sequelize2 = _interopRequireDefault(_sequelize); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var memeDB = 'meme-magic'; - -console.log(_chalk2.default.yellow('Hey Rick!')); - -var _db = new _sequelize2.default(memeDB, null, null, { host: 'localhost', logging: false, dialect: 'postgres', native: true }); - -exports.default = _db; \ No newline at end of file diff --git a/prodServer/server/db/index.js b/prodServer/server/db/index.js deleted file mode 100644 index 9f64ac6..0000000 --- a/prodServer/server/db/index.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _db = require('./db'); - -var _db2 = _interopRequireDefault(_db); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _models = require('./models'); - -var _models2 = _interopRequireDefault(_models); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// The exported function that takes a param as to whether or not to sync the db. -exports.default = function () { - var sync = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - return _db2.default.sync({ force: sync }).then(function () { - if (sync) console.log(_chalk2.default.cyan('Rick, that was brutal! (Force Sync Complete)'));else console.log(_chalk2.default.green('Hey, Morty, I got the hardest working Memes in the universe - try not to ruin it, alright Morty? (Your Memes Have Been Synced)')); - }).catch(function (err) { - return console.error(err); - }); -}; \ No newline at end of file diff --git a/prodServer/server/db/models/index.js b/prodServer/server/db/models/index.js deleted file mode 100644 index 26a147f..0000000 --- a/prodServer/server/db/models/index.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _memes = require('./memes'); - -var _memes2 = _interopRequireDefault(_memes); - -var _trolls = require('./trolls'); - -var _trolls2 = _interopRequireDefault(_trolls); - -var _users = require('./users'); - -var _users2 = _interopRequireDefault(_users); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Instantiate M-to-M relationship. -_trolls2.default.belongsToMany(_memes2.default, { through: 'TrollMemes' }); -_memes2.default.belongsToMany(_trolls2.default, { through: 'TrollMemes' }); - -exports.default = { - Meme: _memes2.default, - Troll: _trolls2.default, - User: _users2.default -}; \ No newline at end of file diff --git a/prodServer/server/db/models/memes.js b/prodServer/server/db/models/memes.js deleted file mode 100644 index 344f9ae..0000000 --- a/prodServer/server/db/models/memes.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _db = require('../db'); - -var _db2 = _interopRequireDefault(_db); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Type = _db2.default.Sequelize; - -exports.default = _db2.default.define('meme', { - Title: { - type: Type.STRING, - allowNull: false - }, - imageURL: { - type: Type.STRING, - allowNull: false - } -}); \ No newline at end of file diff --git a/prodServer/server/db/models/trolls.js b/prodServer/server/db/models/trolls.js deleted file mode 100644 index 155bfe1..0000000 --- a/prodServer/server/db/models/trolls.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _db = require('../db'); - -var _db2 = _interopRequireDefault(_db); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Type = _db2.default.Sequelize; - -exports.default = _db2.default.define('troll', { - Title: { - type: Type.STRING, - allowNull: false - }, - imageURL: { - type: Type.STRING, - allowNull: false - } -}); \ No newline at end of file diff --git a/prodServer/server/db/models/users.js b/prodServer/server/db/models/users.js deleted file mode 100644 index 5484a05..0000000 --- a/prodServer/server/db/models/users.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _db = require('../db'); - -var _db2 = _interopRequireDefault(_db); - -var _utils = require('../../utils'); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _crypto = require('crypto'); - -var _crypto2 = _interopRequireDefault(_crypto); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Type = _db2.default.Sequelize; - -exports.default = _db2.default.define('user', { - // Actual Name - Name: { - type: Type.STRING, - allowNull: false - }, - // Username - Username: { - type: Type.STRING, - allowNull: false - }, - // User E-Mail - Email: { - type: Type.STRING, - allowNull: false - }, - // User SHA-1 Password - Password: { - type: Type.STRING - }, - // User Salt - Salt: { - type: Type.STRING - } -}, { - instanceMethods: { - // Returns user info, except password and salt. - cleanHands: function cleanHands() { - console.log(_chalk2.default.cyan('Cleaning hands...')); - return (0, _utils.packMyFries)(this); - }, - // Verifies password match. - verifySaltiness: function verifySaltiness(passAttempt) { - console.log(_chalk2.default.green('Verifying saltiness...')); - var isSaltyEnough = this.Model.deepFry(passAttempt, this.Salt) === this.Password; - if (isSaltyEnough) console.log(_chalk2.default.green('Perfectly salted fries confirmed.'));else console.log(_chalk2.default.red('Fries need more salt.')); - return isSaltyEnough; - } - }, - classMethods: { - // Generates Salt. - saltShaker: function saltShaker() { - console.log(_chalk2.default.green('Shaking some salt...')); - return _crypto2.default.randomBytes(16).toString('base64'); - }, - // Encrypts user info. - deepFry: function deepFry(plainText, salt) { - console.log(_chalk2.default.red('Deep frying...')); - var hash = _crypto2.default.createHash('sha1'); - hash.update(plainText); - hash.update(salt); - return hash.digest('hex'); - } - }, - // Hooks to always salt and encrypt. - hooks: { - beforeCreate: _utils.saltMyFries, - beforeUpdate: _utils.saltMyFries - } -}); \ No newline at end of file diff --git a/prodServer/server/index.js b/prodServer/server/index.js deleted file mode 100644 index 4bb4d2d..0000000 --- a/prodServer/server/index.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _db2 = require('./db/db'); - -var _db3 = _interopRequireDefault(_db2); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _configure = require('./configure'); - -var _configure2 = _interopRequireDefault(_configure); - -var _sessions = require('./sessions'); - -var _sessions2 = _interopRequireDefault(_sessions); - -var _routes = require('./routes'); - -var _routes2 = _interopRequireDefault(_routes); - -var _authentication = require('./authentication'); - -var _authentication2 = _interopRequireDefault(_authentication); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var app = (0, _express2.default)(); - - -(0, _configure2.default)(app, _db3.default); -(0, _sessions2.default)(app); - -app.use('/auth', _authentication2.default); -app.use('/api', _routes2.default); - -app.get('/*', function (req, res) { - if (req.session.socketData) { - console.log(_chalk2.default.magenta('A user @ ' + req.session.socketData.address + ' just visited the site.')); - } - res.sendFile(app.getValue('indexPath')); -}); - -app.use(function (err, req, res, next) { - console.error(err, typeof next === 'undefined' ? 'undefined' : _typeof(next)); - console.error(err.stack); - res.status(err.status || 500).send(err.message || 'Internal server error.'); -}); - -exports.default = app; \ No newline at end of file diff --git a/prodServer/server/routes/index.js b/prodServer/server/routes/index.js deleted file mode 100644 index da5632d..0000000 --- a/prodServer/server/routes/index.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _memes = require('./memes'); - -var _memes2 = _interopRequireDefault(_memes); - -var _trolls = require('./trolls'); - -var _trolls2 = _interopRequireDefault(_trolls); - -var _sessions = require('./sessions'); - -var _sessions2 = _interopRequireDefault(_sessions); - -var _users = require('./users'); - -var _users2 = _interopRequireDefault(_users); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - -router.use('/memes', _memes2.default); -router.use('/trolls', _trolls2.default); -router.use('/sessions', _sessions2.default); -router.use('/users', _users2.default); - -router.use(function (req, res) { - res.status(404).end(); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/memes.js b/prodServer/server/routes/memes.js deleted file mode 100644 index dd642d5..0000000 --- a/prodServer/server/routes/memes.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _memes = require('../db/models/memes'); - -var _memes2 = _interopRequireDefault(_memes); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - -router.get('/', function (req, res, next) { - console.log(_chalk2.default.green('You are looking for Memes eh?')); - res.json({ url: 'www.reddit.com' }); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/sessions.js b/prodServer/server/routes/sessions.js deleted file mode 100644 index 966d0af..0000000 --- a/prodServer/server/routes/sessions.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - - -router.route('/').get(function (req, res, next) { - res.status(200).json({ session: req.session }); -}).put(function (req, res, next) { - // Pretty straightforward route for the front end to update welcomeText. - console.log(_chalk2.default.magenta('Storing Test Session Data...')); - var welcomeText = req.body.welcomeText; - - req.session.welcomeText = welcomeText; - - res.status(200).json({ Message: 'Success' }); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/trolls.js b/prodServer/server/routes/trolls.js deleted file mode 100644 index c5ad37f..0000000 --- a/prodServer/server/routes/trolls.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _trolls = require('../db/models/trolls'); - -var _trolls2 = _interopRequireDefault(_trolls); - -var _memes = require('../db/models/memes'); - -var _memes2 = _interopRequireDefault(_memes); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - -router.get('/', function (req, res, next) { - console.log(_chalk2.default.green('You are looking for Trolls eh?')); - res.json({ aTroll: 'Joe Biden' }); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/routes/users.js b/prodServer/server/routes/users.js deleted file mode 100644 index bd3c714..0000000 --- a/prodServer/server/routes/users.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _express = require('express'); - -var _express2 = _interopRequireDefault(_express); - -var _users = require('../db/models/users'); - -var _users2 = _interopRequireDefault(_users); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var router = _express2.default.Router(); - - -// Signup Route -router.post('/signup', function (req, res, next) { - // Check if E-Mail is already being used. - _users2.default.find({ - where: { - Email: req.body.Email - } - }) - // If it is already being used, error, otherwise create. - .then(function (userExists) { - if (!userExists) { - console.log(_chalk2.default.green('Yo dog, were making friends!')); - _users2.default.create({ - Username: req.body.Username, - Email: req.body.Email, - Password: req.body.Password, - Name: req.body.Name - }).then(function (createdUser) { - return res.status(200).send({ message: 'User created!' }); - }); - } else { - console.log(_chalk2.default.red('Someone tried to impersonate Rick again, but I know a C-137 when I see one.')); - return res.status(401).send({ message: 'That email is already being used.' }); - } - }).catch(next); -}); - -router.get('/me', function (req, res, next) { - if (req.user) res.status(200).send({ Me: req.user });else res.status(400).send({ Me: 'A girl has no name.' }); -}); - -exports.default = router; \ No newline at end of file diff --git a/prodServer/server/sessions/index.js b/prodServer/server/sessions/index.js deleted file mode 100644 index fe09f47..0000000 --- a/prodServer/server/sessions/index.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _parseurl = require('parseurl'); - -var _parseurl2 = _interopRequireDefault(_parseurl); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* - Very basic use of session configuration that simply monitors your views to any URL. -*/ -exports.default = function (app) { - app.use(function (req, res, next) { - var views = req.session.views; - - if (!views) views = req.session.views = {}; - - var pathname = (0, _parseurl2.default)(req).pathname; - views[pathname] = (views[pathname] || 0) + 1; - - next(); - }); -}; \ No newline at end of file diff --git a/prodServer/server/sockets/index.js b/prodServer/server/sockets/index.js deleted file mode 100644 index 5219931..0000000 --- a/prodServer/server/sockets/index.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _socket = require('socket.io'); - -var _socket2 = _interopRequireDefault(_socket); - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var currentSockets = []; -var totalConnections = 0; - -var IO = null; - -// Essentially filters through all of the sockets and ensures that we have no duplicate sockets. -var refreshSockets = function refreshSockets(socket) { - currentSockets = currentSockets.filter(function (e) { - return e.id !== socket.id; - }); -}; - -exports.default = function (server) { - if (server == undefined) return IO; - if (IO) return IO; - - IO = (0, _socket2.default)(server); - - IO.on('connection', function (socket) { - totalConnections++; - socket.name = 'memeLover' + totalConnections; - // Snatch a users IP. - var ipAddress = socket.request.connection.remoteAddress; - - // If no sockets have the same IP, begin initialization. - if (!currentSockets.some(function (e) { - return e.address == ipAddress; - })) { - // Create the data we are interested in. - var currentSocket = { - id: socket.id, - name: socket.name, - time: new Date(), - address: ipAddress - }; - // Push it into an array of all active sockets. - currentSockets.push(currentSocket); - console.log(_chalk2.default.magenta(socket.name + ' wants Memes REAL-TIME.')); - // Begin intialization of sessions. - socket.emit('InitUser', currentSocket); - } else { - // If this IP already exists, then lets deal with it differently. - console.log(_chalk2.default.red(socket.name + ' is already being delivered Memes.')); - console.log(_chalk2.default.red('Rick, I don\'t like this guy.')); - // Knock this socket out of our currently active sockets. - refreshSockets(socket); - // Emit an event that punishes said user. - socket.emit('KickTroll'); - // Disconnect the socket. - socket.disconnect(); - } - - socket.on('disconnect', function () { - // If a user leaves, please alert us. - console.log(_chalk2.default.magenta(socket.name + ' has had enough memes.')); - // Then remove them from currently active users. - refreshSockets(socket); - }); - }); -}; \ No newline at end of file diff --git a/prodServer/server/utils/index.js b/prodServer/server/utils/index.js deleted file mode 100644 index 5b0a6ec..0000000 --- a/prodServer/server/utils/index.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -// Backend Utils File - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.packMyFries = exports.saltMyFries = undefined; - -var _chalk = require('chalk'); - -var _chalk2 = _interopRequireDefault(_chalk); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// For salting the user model. -var saltMyFries = exports.saltMyFries = function saltMyFries(user) { - console.log(_chalk2.default.cyan('Trying to find salt...')); - if (user.changed('Password')) { - console.log(_chalk2.default.cyan('Salting Fries.')); - user.Salt = user.Model.saltShaker(); - user.Password = user.Model.deepFry(user.Password, user.Salt); - } -}; - -// Cleans a user instance of valuable information. -var packMyFries = exports.packMyFries = function packMyFries(user) { - return _lodash2.default.omit(user.toJSON(), ['Password', 'Salt']); -}; \ No newline at end of file From 6639166176ffc0d2f7db6388868eeeaed27138b6 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 25 Feb 2017 14:27:19 -0500 Subject: [PATCH 8/9] added prodServer to gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e8f3c65..0589dbd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ node_modules secrets.js public -dist +prodServer TODO.txt From 2ecd04f76d69a307149326f9b483dc574e07c4a5 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 25 Feb 2017 14:37:07 -0500 Subject: [PATCH 9/9] update readme --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c263dd0..4359569 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,12 @@ This codebase has two criteria: * DB Setup I am sadly a WSL user (Yes, Windows, Subsystem, (for) Linux), so I can't run post-install pg-init scripts. So step 1 is make a new psql database named `meme-magic`. Thats it. - - If you wanted a DB named whatever you want it to be named go to `server/db/db` and modify line 7's `const memeDB = WhateverYouWant`. + + If you wanted a DB named whatever you want it to be named go to `serverES6/server/db/db` and modify line 7's `const memeDB = WhateverYouWant`. * Secrets - Make a `secrets.js` file in the root directory. It should contain: + Make a `secrets.js` file in the `serverES6` directory. It should contain: `export default { SessionKey: 'WhateverYouWant' @@ -34,17 +34,17 @@ That's it. Enjoy. ## Some Known Confusion I have had some annoying experiences with socket leakage and Node. Until I get around to having Redis be a part of the backend to deal with enabling more than 25 sockets per Node instance - I have a mechanism set up to ensure each user (being a person) only gets 1 socket per IP. *This means that if you try to open two tabs of your project on the same machine - you get Rick Rolled away from my site.* To disable such beautiful functionality simply go to `./browser/sockets/index.js`. You will see some well commented code about a certain socket event named `KickTroll` - just change its behavior to anything else or remove it. - + The only other one I can remember at present is the requirement to enter `y` or `n` on intialization of the DB to decide whether to force sync the DB. This too can easily be removed in the root directory `./app.js`: ``` const syncTruth = getYesNo(chalk.cyan('Rick, do you wanna get savage on this database? (Force Sync)')); - // If you want to disable this - change syncTruth to: + // If you want to disable this - change syncTruth to: // const syncTruth = false : wont ever forceSync. - // or + // or // const syncTruth = true : will always forceSync. - + startDB(syncTruth) .then(() => server.on('request', myServer)) .then(() => ioInit(server)) @@ -52,6 +52,10 @@ startDB(syncTruth) .finally(() => server.listen(_Port, () => console.log(chalk.magenta(`Meme magic has begun on Port ${_Port}`)))); ``` +## Dev and Production Scripts + +Use ```npm run dev``` while in development, which will run Webpack and Nodemon watchers. For production, use ```npm run build``` to build once with Webpack and Babel, then ```npm start``` to serve the built files. + ## Tests Tests are incoming.