diff --git a/app.js b/app.js index 4c4fe56e37..df9f8d9c61 100644 --- a/app.js +++ b/app.js @@ -4,6 +4,9 @@ const path = require('path'); const cookieParser = require('cookie-parser'); const logger = require('morgan'); const mongoose = require('mongoose'); +const session = require("express-session"); +const MongoStore = require("connect-mongo")(session); + const indexRouter = require('./routes/index'); @@ -14,6 +17,21 @@ mongoose.connect('mongodb://localhost/basic-auth', { useNewUrlParser: true, reconnectTries: Number.MAX_VALUE }); +//justo despues de conexion con mongoose poner el middleware de session sino no funciona +// secret: Used to sign the session ID cookie (required) +// cookie: Object for the session ID cookie. In this case, we only set the maxAge attribute, which configures the expiration date of the cookie (in milliseconds). +// store: Sets the session store instance. In this case, we create a new instance of connect-mongo, so we can store the session information in our Mongo database. + +app.use(session({ + secret: "basic-auth-secret", + cookie: { maxAge: 60000 }, + store: new MongoStore({ + mongooseConnection: mongoose.connection, + ttl: 24 * 60 * 60 // 1 day + }) +})); + + // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); @@ -26,6 +44,11 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); +const usersRouter = require("./routes/site-routes") +app.use('/user', usersRouter); + + + // -- 404 and error handler // NOTE: requires a views/not-found.ejs template diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000000..7ccd670431 --- /dev/null +++ b/models/User.js @@ -0,0 +1,13 @@ +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; + +const userSchema = new Schema({ + username: {type:String, required:true}, + password: {type:String, required:true} +}, { + timestamps: true +}); + +const User = mongoose.model("User", userSchema); + +module.exports = User; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0eb3ea0d51..3a26fac108 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,22 +18,6 @@ "negotiator": "0.6.1" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -104,11 +88,6 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -187,6 +166,11 @@ "safe-buffer": "5.1.2" } }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "binary-extensions": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", @@ -297,27 +281,11 @@ "unset-value": "^1.0.0" } }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true - }, "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -378,25 +346,6 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "optional": true - } - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -419,6 +368,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -442,6 +397,14 @@ "xdg-basedir": "^3.0.0" } }, + "connect-mongo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.0.0.tgz", + "integrity": "sha512-Y95urWNGrAoKY2w31s7Q9Gs/W3qdMCshUIeDTgulssHi6KueYtz4XrbV3kcnQaR8EcBQvooNNX7aOaAJDgudag==", + "requires": { + "mongodb": "^3.1.0" + } + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -512,12 +475,6 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "optional": true - }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -701,6 +658,48 @@ "vary": "~1.1.2" } }, + "express-session": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1389,14 +1388,14 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "handlebars": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", - "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.5.tgz", + "integrity": "sha512-I16T/l8X9DV3sEkY9sK9lsPRgDsj82ayBY/4pAZyP2BcX5WeRM3O06bw9kIs2GLrHvFB/DNzWWJyFvof8wQGqw==", "requires": { - "async": "^1.4.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" } }, "has-flag": { @@ -1434,12 +1433,12 @@ } }, "hbs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.1.tgz", - "integrity": "sha1-S/2YZQ3IydrESzyprfnAmOi8M7Y=", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.6.tgz", + "integrity": "sha512-KFt3Y4zOvVQOp84TmqVaFTpBTYO1sVenBoBY712MI3vPkKxVoO6AsuEyDayIRPRAHRYZHHWnmc4spFa8fhQpLw==", "requires": { - "handlebars": "4.0.5", - "walk": "2.3.9" + "handlebars": "4.3.5", + "walk": "2.3.14" } }, "http-errors": { @@ -1667,22 +1666,9 @@ "package-json": "^4.0.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true - }, "lodash": { "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "optional": true + "resolved": "" }, "lowercase-keys": { "version": "1.0.1", @@ -1799,9 +1785,9 @@ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -1956,6 +1942,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, "nodemon": { "version": "1.18.10", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz", @@ -2162,6 +2153,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -2290,15 +2286,6 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2371,9 +2358,9 @@ } }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -2517,12 +2504,9 @@ } }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { "version": "0.5.2", @@ -2684,29 +2668,22 @@ } }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.3.tgz", + "integrity": "sha512-KfQUgOqTkLp2aZxrMbCuKCDGW9slFYu2A23A36Gs7sGzTLcRBDORdOi5E21KWHFIfkY8kzgi/Pr1cXCh0yIp5g==", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - } + "commander": "~2.20.3", + "source-map": "~0.6.1" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } }, "undefsafe": { "version": "2.0.2", @@ -2717,35 +2694,14 @@ } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-string": { @@ -2858,9 +2814,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "walk": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", - "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", "requires": { "foreachasync": "^3.0.0" } @@ -2881,12 +2837,6 @@ "string-width": "^2.1.1" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -2911,18 +2861,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } } } } diff --git a/package.json b/package.json index 2109314f81..d2c4eda3fa 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,13 @@ "start-dev": "nodemon ./bin/www" }, "dependencies": { + "bcryptjs": "^2.4.3", + "connect-mongo": "^3.0.0", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.16.0", - "hbs": "~4.0.1", + "express-session": "^1.17.0", + "hbs": "^4.0.6", "http-errors": "~1.6.2", "mongoose": "^5.4.12", "morgan": "~1.9.0", diff --git a/public/images/funnycat.jpg b/public/images/funnycat.jpg new file mode 100644 index 0000000000..7757bec43c Binary files /dev/null and b/public/images/funnycat.jpg differ diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 9453385b99..880b6ec0c9 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -6,3 +6,47 @@ body { a { color: #00B7FF; } + +#form { + margin: 30px auto; + width: 380px; +} + +#form label { + color: #666; + display: inline-block; + margin-bottom: 10px; + text-align: center; + width: 100%; +} + +#form input, +#form button { + box-sizing: border-box; + font-size: 14px; + outline: 0; + padding: 4px; + width: 100%; + margin-bottom: 20px; +} + +#form button { + background: #43a3e6; + border: 1px solid #43a3e6; + border-radius: 4px; + color: #fff; + cursor: pointer; + display: inline-block; + font-size: 14px; + padding: 8px 16px; + text-decoration: none; + text-transform: uppercase; + transition: .3s ease background; + width: 100%; +} + +#form button:hover { + background: #fff; + color: #43a3e6; + transition: .3s ease background; +} \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index f2d4e52ad3..ba2783ab0c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,9 +1,109 @@ const express = require('express'); const router = express.Router(); +const bcrypt = require("bcryptjs"); +const bcryptSalt = 10; + +const User = require("../models/User"); + + /* GET home page. */ router.get('/', (req, res, next) => { res.render('index', { title: 'Express' }); }); +router.get('/main', (req,res,next)=>{ + res.render("main") +}); + + +router.get("/signup", (req, res, next) => { + res.render("signup"); +}); + +router.post("/signup", (req, res, next) => { + const { username, password } = req.body; + const salt = bcrypt.genSaltSync(bcryptSalt); + const hashPass = bcrypt.hashSync(password, salt); + + // validamos si los valores de los inputs llegan vacĂ­os + + if (username === "" || password === "") { + res.render("signup", { + errorMessage: "Indicate a username and a password to sign up" + }); + return; + } + + //busco en la BD si existe el username + + User.findOne({ username: username }) + .then(user => { + if (user !== null) { + res.render("signup", { + errorMessage: "The username already exists!" + }); + return; + } + + const salt = bcrypt.genSaltSync(bcryptSalt); + const hashPass = bcrypt.hashSync(password, salt); + + User.create({ + username, + password: hashPass + }) + .then(() => { + res.redirect("/"); + }) + .catch(error => { + console.log(error); + }); + }) + .catch(error => { + next(error); + }); +}); + + +router.get("/login", (req, res, next) => { + res.render("login"); +}); + + +router.post("/login", (req, res, next) => { + const theUsername = req.body.username; + const thePassword = req.body.password; + + if (theUsername === "" || thePassword === "") { + res.render("login", { + errorMessage: "Please enter both, username and password to sign up." + }); + return; + } + + User.findOne({ "username": theUsername }) + .then(user => { + if (!user) { + res.render("login", { + errorMessage: "The username doesn't exist." + }); + return; + } + if (bcrypt.compareSync(thePassword, user.password)) { + // Save the login in the session! + req.session.currentUser = user; + res.redirect("/user/private"); + } else { + res.render("login", { + errorMessage: "Incorrect password" + }); + } + }) + .catch(error => { + next(error); + }) +}); + + module.exports = router; diff --git a/routes/site-routes.js b/routes/site-routes.js new file mode 100644 index 0000000000..99d0fe68e5 --- /dev/null +++ b/routes/site-routes.js @@ -0,0 +1,28 @@ +const express = require("express"); +const router = express.Router(); + +//renderiz ala plantilla home.hbs +router.get("/", (req, res, next) => { + res.render("home"); +}); + + +// verificamiso si el usuario tiene una session activa, de ser asi, lo redirigimos a la siguiente ruta +// en este caso, /secret, en caso contrario redirigimos al usuario a /login +router.use((req, res, next) => { + if (req.session.currentUser) { // <== if there's user in the session (user is logged in) + next(); // ==> go to the next route + } else { + res.redirect("/login"); + } +}); + +// renderizamos la plantilla secret.hbs con el username , deconstruimos en la variable username el username de request +// session de currentUser + +router.get("/private", (req, res, next) => { + const {username} = req.session.currentUser + res.render("secret", {username}); +}); + +module.exports = router; \ No newline at end of file diff --git a/views/login.hbs b/views/login.hbs new file mode 100644 index 0000000000..254f13ae46 --- /dev/null +++ b/views/login.hbs @@ -0,0 +1,20 @@ +
+

Login

+ + + + + + + + {{#if errorMessage }} +
{{ errorMessage }}
+ {{/if}} + + + +

+ Don't have an account? Sign up +

+ +
\ No newline at end of file diff --git a/views/main.hbs b/views/main.hbs new file mode 100644 index 0000000000..80baed7eaa --- /dev/null +++ b/views/main.hbs @@ -0,0 +1,2 @@ +

FUNNY CAT

+ \ No newline at end of file diff --git a/views/secret.hbs b/views/secret.hbs new file mode 100644 index 0000000000..21d9466b9e --- /dev/null +++ b/views/secret.hbs @@ -0,0 +1,5 @@ +
+

You are in a session! {{username}}

+
+

+Logout \ No newline at end of file diff --git a/views/signup.hbs b/views/signup.hbs new file mode 100644 index 0000000000..37179b6bf5 --- /dev/null +++ b/views/signup.hbs @@ -0,0 +1,17 @@ +
+ +
+ + + + +
+ + + + +
+ +{{#if errorMessage}} +
{{ errorMessage }}
+{{/if}} \ No newline at end of file