diff --git a/app.js b/app.js index 4c4fe56e37..7183bccbf1 100644 --- a/app.js +++ b/app.js @@ -6,9 +6,17 @@ const logger = require('morgan'); const mongoose = require('mongoose'); const indexRouter = require('./routes/index'); +const authRouter = require('./routes/auth'); +const sitesRouter = require('./routes/site-routes'); + +// 2 librerias necesarias para session /cookie => instalar!!! +const session = require("express-session"); +const MongoStore = require("connect-mongo")(session); + const app = express(); + mongoose.connect('mongodb://localhost/basic-auth', { keepAlive: true, useNewUrlParser: true, @@ -24,7 +32,22 @@ app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); +//creamos la cookie session para saber si hay usuario ya logeado(poner antes de todas las rutas!!!!) +app.use(session({ + secret: "basic-auth-secret", + cookie: { maxAge: 60000 }, + store: new MongoStore({ + mongooseConnection: mongoose.connection, + ttl: 24 * 60 * 60 // 1 day + }) +})); + + app.use('/', indexRouter); +app.use('/auth', authRouter); +app.use('/site', sitesRouter); + + // -- 404 and error handler diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000000..c3e3c261b8 --- /dev/null +++ b/models/User.js @@ -0,0 +1,13 @@ +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; + +const userSchema = new Schema({ + username: String, + password: String + }, { + 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..7ed7d4e144 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,23 +1666,11 @@ "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 - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -1799,9 +1786,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 +1943,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 +2154,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 +2287,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 +2359,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 +2505,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 +2669,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 +2695,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 +2815,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 +2838,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 +2862,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/routes/auth.js b/routes/auth.js new file mode 100644 index 0000000000..37cfa8ec9a --- /dev/null +++ b/routes/auth.js @@ -0,0 +1,127 @@ +const express = require("express"); +const router = express.Router(); + +//Add the model +const User = require("../models/User"); + +//requerimos bcrypt para encriptar los passwords +const bcrypt = require("bcryptjs"); +const bcryptSalt = 10; + +/* GET home page */ +router.get("/", (req, res, next) => { + res.render("auth-home"); +}); + + +////////////////////SIGNUP////////////////////////////// +//Route del signup: +router.get("/signup", (req, res, next) => { + res.render("auth/signup"); +}); + +// Recibimos datos del formulario signup +//genera el salt y hace un hash del password +//Crea un objeto User y redigire +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("auth/signup", { + errorMessage: "The fields can't be empty" + }); + return; + } + + //busco en la BD si existe el username + User.findOne({ username: username }) + .then(user => { + if (user !== null) { + res.render("auth/signup", { + errorMessage: "The username can't be repeated!" + }); + return; + } + + /* const salt = bcrypt.genSaltSync(bcryptSalt); + const hashPass = bcrypt.hashSync(password, salt); */ + + User.create({ + username: username, + password: hashPass + }) + .then(() => { + res.redirect("/"); + }) + .catch(error => { + console.log(error); + }); + }) + .catch(error => { + next(error); + }); + }); + +////////////////LOGIN//////////////////// +//Route del login: +router.get("/login", (req, res, next) => { + res.render("auth/login"); +}); + +router.post("/login", (req, res, next) => { + + const theUsername = req.body.username; + const thePassword = req.body.password; + + if (theUsername === "" || thePassword === "") { + res.render("auth/login", { + errorMessage: "Please enter both, username and password to sign up." + }); + return; + } + +// buscamos en la BD si existe un username con los datos del user que vienen del form +// si no lo encuentra, nos dice que el user no existe +// sino, nos devuelve el user +// usamos el método compareSync para hacer hash del form input y compararlo con el password guardado en la BD + User.findOne({ "username": theUsername }) + .then(user => { + if (!user) { + res.render("auth/login", { + errorMessage: "The username doesn't exist." + }); + return; + } + + if (bcrypt.compareSync(thePassword, user.password)) { + // Save the login in the session! + //the request object has a property called session where we can add the values we want to store on it. In this case, we are setting it up with the user’s information. + // session is a cookie to keep the user data cuando esta logeado + req.session.currentUser = user; + res.redirect("/site/secret"); + } else { + res.render("auth/login", { + errorMessage: "Incorrect password" + }); + } + }) + .catch(error => { + next(error); + }) +}); + +/////////////////LOG OUT/////////////////////////// +//para destrozar la session (methodo de session) porque el usario no hizo nada durante 24h y se borre la session de la BD +router.get("/logout", (req, res, next) => { + req.session.destroy((err) => { + // cannot access session here + res.redirect("/login"); + }); + }); + + + +module.exports = router; \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index f2d4e52ad3..d0c31c0df4 100644 --- a/routes/index.js +++ b/routes/index.js @@ -6,4 +6,9 @@ router.get('/', (req, res, next) => { res.render('index', { title: 'Express' }); }); +////////////////SECRET//////////////////// +//Route de secret: + + + module.exports = router; diff --git a/routes/site-routes.js b/routes/site-routes.js new file mode 100644 index 0000000000..1f950174b9 --- /dev/null +++ b/routes/site-routes.js @@ -0,0 +1,27 @@ +const express = require("express"); +const router = express.Router(); + +//renderiza la pantalla home.hbs: +/* router.get("/", (req, res, next) => { + res.render("home"); +}); */ + +// MIDDLEWARE/ Verificamos si el usuario tiene una session activa, de ser asi lo redirigimos en la siguiente ruta en este caso /secret +//en caso contario, redirigimos al usario 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("/auth/login"); + } +}); + +//renderizamos la plantilla secret.hbs +//descontruimos en la variable username el username de req.session.currentUser +router.get("/secret", (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/auth-home.hbs b/views/auth-home.hbs new file mode 100644 index 0000000000..d3c7ccd5bc --- /dev/null +++ b/views/auth-home.hbs @@ -0,0 +1,3 @@ +

Auth home

+signup +login diff --git a/views/auth/login.hbs b/views/auth/login.hbs new file mode 100644 index 0000000000..5da82f79f3 --- /dev/null +++ b/views/auth/login.hbs @@ -0,0 +1,17 @@ +

Login

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

Don't have an account? Sign up +

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

Have an account? Login +

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

You are in a session! {{username}}

+
+ +Logout \ No newline at end of file