From ffe50d94752217001778a8e682ccd6dad18deecb Mon Sep 17 00:00:00 2001 From: Osama-you Date: Sun, 14 Feb 2021 18:40:28 +0200 Subject: [PATCH 01/65] add checkEmail and getUserKindergartenInfo query Relates #17 --- server/database/queries/index.js | 8 +++++++- server/database/queries/users/checkEmail.js | 11 +++++++++++ .../queries/users/getUserKindergartenInfo.js | 12 ++++++++++++ server/database/queries/users/index.js | 4 ++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 server/database/queries/users/checkEmail.js create mode 100644 server/database/queries/users/getUserKindergartenInfo.js diff --git a/server/database/queries/index.js b/server/database/queries/index.js index 4813b96..40d55b3 100644 --- a/server/database/queries/index.js +++ b/server/database/queries/index.js @@ -5,7 +5,11 @@ const { getKindergartenId, getKindergartenSearch, } = require('./kindergarten'); -const { getUsersQuery } = require('./users'); +const { + getUsersQuery, + checkEmail, + getUserKindergartenInfo, +} = require('./users'); const { getLocationsQuery } = require('./locations'); module.exports = { @@ -17,4 +21,6 @@ module.exports = { getCommentsQuery, getUsersQuery, getLocationsQuery, + checkEmail, + getUserKindergartenInfo, }; diff --git a/server/database/queries/users/checkEmail.js b/server/database/queries/users/checkEmail.js new file mode 100644 index 0000000..3f35160 --- /dev/null +++ b/server/database/queries/users/checkEmail.js @@ -0,0 +1,11 @@ +const { connection } = require('../../data'); + +const checkEmail = ({ email }) => { + const sql = { + text: 'SELECT * FROM users WHERE email = $1', + values: [email], + }; + return connection.query(sql); +}; + +module.exports = checkEmail; diff --git a/server/database/queries/users/getUserKindergartenInfo.js b/server/database/queries/users/getUserKindergartenInfo.js new file mode 100644 index 0000000..b33ad9c --- /dev/null +++ b/server/database/queries/users/getUserKindergartenInfo.js @@ -0,0 +1,12 @@ +const { connection } = require('../../data'); + +const getUserKindergartenInfo = ({ userId }) => { + const sql = { + text: + "SELECT id, kindergarten_name FROM kindergartens WHERE user_id = $1 AND WHERE kindergartens.request_status = 'approved' AND kindergartens.is_enable = 'true';", + values: [userId], + }; + return connection.query(sql); +}; + +module.exports = getUserKindergartenInfo; diff --git a/server/database/queries/users/index.js b/server/database/queries/users/index.js index 7ab5f27..677cc8d 100644 --- a/server/database/queries/users/index.js +++ b/server/database/queries/users/index.js @@ -1,5 +1,9 @@ const getUsersQuery = require('./getUsers'); +const checkEmail = require('./checkEmail'); +const getUserKindergartenInfo = require('./getUserKindergartenInfo'); module.exports = { getUsersQuery, + checkEmail, + getUserKindergartenInfo, }; From 2df8f8bb603faaa4a493d710090f4515a844b035 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Sun, 14 Feb 2021 19:13:32 +0200 Subject: [PATCH 02/65] init login router and craete jwt in utils Relates #17 --- package-lock.json | 426 +++++++++++++++++++++++++++--- package.json | 1 + server/controllers/index.js | 3 +- server/controllers/users/index.js | 2 + server/controllers/users/login.js | 29 ++ server/router/user.js | 3 +- server/utils/jwt.js | 24 ++ 7 files changed, 445 insertions(+), 43 deletions(-) create mode 100644 server/controllers/users/login.js create mode 100644 server/utils/jwt.js diff --git a/package-lock.json b/package-lock.json index f190611..061f6ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -984,8 +984,7 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", @@ -1133,6 +1132,44 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1326,8 +1363,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -1384,6 +1420,15 @@ } } }, + "bcrypt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", + "integrity": "sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg==", + "requires": { + "node-addon-api": "^3.0.0", + "node-pre-gyp": "0.15.0" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1455,7 +1500,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1624,6 +1668,11 @@ "readdirp": "~3.5.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1691,6 +1740,11 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -1762,8 +1816,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -1823,6 +1876,11 @@ "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -1885,8 +1943,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cross-env": { "version": "7.0.3", @@ -1993,8 +2050,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -2070,6 +2126,11 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2080,6 +2141,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3115,11 +3181,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3168,11 +3229,18 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.1", @@ -3193,6 +3261,54 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3250,7 +3366,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3375,6 +3490,11 @@ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3509,6 +3629,14 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3553,7 +3681,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3567,8 +3694,7 @@ "ini": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "ip-regex": { "version": "2.1.0", @@ -3847,8 +3973,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -4855,7 +4980,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4863,8 +4987,31 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } }, "mixin-deep": { "version": "1.3.2", @@ -4887,6 +5034,14 @@ } } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4922,6 +5077,31 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -4933,6 +5113,11 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4960,6 +5145,47 @@ "which": "^2.0.2" } }, + "node-pre-gyp": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", + "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.3", + "needle": "^2.5.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "nodemon": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", @@ -5057,6 +5283,29 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -5074,6 +5323,22 @@ } } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -5086,6 +5351,11 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -5200,7 +5470,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -5228,12 +5497,31 @@ "word-wrap": "~1.2.3" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", "dev": true }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -5348,8 +5636,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -5601,8 +5888,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -5709,7 +5995,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5720,8 +6005,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -6184,6 +6468,11 @@ } } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -6260,8 +6549,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.1", @@ -6314,8 +6602,7 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "sisteransi": { "version": "1.0.5", @@ -6823,6 +7110,27 @@ } } }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, "term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", @@ -7343,6 +7651,43 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -7372,8 +7717,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", diff --git a/package.json b/package.json index d2e7d51..b273c8a 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ }, "homepage": "https://github.com/GSG-G9/Rawdaty#readme", "dependencies": { + "bcrypt": "^5.0.0", "compression": "^1.7.4", "cookie-parser": "^1.4.5", "cross-env": "^7.0.3", diff --git a/server/controllers/index.js b/server/controllers/index.js index 1bb425d..5bde831 100644 --- a/server/controllers/index.js +++ b/server/controllers/index.js @@ -5,7 +5,7 @@ const { getSpecificKindergarten, kindergartenSearch, } = require('./kindergarten'); -const { getUsers } = require('./users'); +const { getUsers, login } = require('./users'); const { getLocations } = require('./locations'); module.exports = { @@ -18,4 +18,5 @@ module.exports = { getComments, getLocations, kindergartenSearch, + login, }; diff --git a/server/controllers/users/index.js b/server/controllers/users/index.js index 5c5c7b5..560a4f9 100644 --- a/server/controllers/users/index.js +++ b/server/controllers/users/index.js @@ -1,5 +1,7 @@ const getUsers = require('./getUsers'); +const login = require('./login'); module.exports = { getUsers, + login, }; diff --git a/server/controllers/users/login.js b/server/controllers/users/login.js new file mode 100644 index 0000000..8296753 --- /dev/null +++ b/server/controllers/users/login.js @@ -0,0 +1,29 @@ +const { compare } = require('bcrypt'); +const { sign } = require('../../utils/jwt'); +const { checkEmail } = require('../../database/queries'); + +const login = async (req, res, next) => { + try { + const { email, password } = req.body; + const { rows: user } = await checkEmail({ email }); + + if (!user[0]) { + return next(); + } + const { id: userId, password: userPassword } = user[0]; + + const isPassword = await compare(password, userPassword); + if (!isPassword) { + return next(); + } + + const token = await sign({ userId }); + res.cookie('token', token, { httpOnly: true }); + + return res.json({ statusCode: 200, message: 'logged in successfully' }); + } catch (err) { + return next(err); + } +}; + +module.exports = login; diff --git a/server/router/user.js b/server/router/user.js index 1e1a5b7..59341eb 100644 --- a/server/router/user.js +++ b/server/router/user.js @@ -1,7 +1,8 @@ const router = require('express').Router(); -const { getUsers } = require('../controllers'); +const { getUsers, login } = require('../controllers'); router.get('/users', getUsers); +router.get('/login', login); module.exports = router; diff --git a/server/utils/jwt.js b/server/utils/jwt.js new file mode 100644 index 0000000..6af7b65 --- /dev/null +++ b/server/utils/jwt.js @@ -0,0 +1,24 @@ +const jwt = require('jsonwebtoken'); + +const { SECRET_TOKEN } = process.env; +const sign = (payload) => + new Promise((resolve, reject) => { + jwt.sign(payload, SECRET_TOKEN, (err, token) => { + if (err) { + return reject(err); + } + return resolve(token); + }); + }); + +const verify = (token) => + new Promise((resolve, reject) => { + jwt.verify(token, SECRET_TOKEN, (err, decoded) => { + if (err) { + return reject(err); + } + return resolve(decoded); + }); + }); + +module.exports = { sign, verify }; From 91a17e13d56ef8717e1a420445be53a11fe46b22 Mon Sep 17 00:00:00 2001 From: Alaa Sahloub Date: Mon, 15 Feb 2021 09:33:48 +0200 Subject: [PATCH 03/65] create addkindergarten query in the addKindergarten file Relates #18 --- .../queries/kindergarten/addKindergarten.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 server/database/queries/kindergarten/addKindergarten.js diff --git a/server/database/queries/kindergarten/addKindergarten.js b/server/database/queries/kindergarten/addKindergarten.js new file mode 100644 index 0000000..d9405cc --- /dev/null +++ b/server/database/queries/kindergarten/addKindergarten.js @@ -0,0 +1,34 @@ +const { connection } = require('../../data'); + +const addKindergarten = ( + kindergartenName, + coverImage, + description, + phoneNumber, + latitude, + longitude, + minPrice, + maxPrice, + periods, + imagesGallery +) => { + const sql = { + text: + 'INSERT INTO kindergarten (kindergarten_name, cover_image, description, phone_number, latitude, longitude, min_price, max_price, periods, images_gallery) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9 , $10) ', + values: [ + kindergartenName, + coverImage, + description, + phoneNumber, + latitude, + longitude, + minPrice, + maxPrice, + periods, + imagesGallery, + ], + }; + return connection.query(sql); +}; + +module.exports = addKindergarten; From 8f8c50f0b963f4756311a6a1d8ff6d4069302525 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 09:43:28 +0200 Subject: [PATCH 04/65] change passwords in rawdatyFake Relates #17 --- server/database/data/rawdatyFake.sql | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/server/database/data/rawdatyFake.sql b/server/database/data/rawdatyFake.sql index 9e166aa..726e52d 100644 --- a/server/database/data/rawdatyFake.sql +++ b/server/database/data/rawdatyFake.sql @@ -1,26 +1,26 @@ /* ADD USER */ INSERT INTO users(user_name,email,password,is_admin) -VALUES ('المسؤول','admin@admin.com','admin','true'); +VALUES ('المسؤول','admin@admin.com','$2a$10$8iyzRQbJhj/EnVSwD7mXoelUd80.QF/41S.B0bqUqu8qq15/1AmOa','true'); INSERT INTO users(user_name,email,password) -VALUES ('حلا محمد حسن','hala@hala.com','hala'); +VALUES ('حلا محمد حسن','hala@hala.com','$2a$10$qrXOMDcuIfE.ykS1N4dBf.VpRruKZDD91Z4eJIv8q2qvJi69h5DCS'); INSERT INTO users(user_name,email,password) -VALUES ('اسراء احمد يوسف','israa@israa.com','israa'); +VALUES ('اسراء احمد يوسف','israa@israa.com','$2a$10$OaTQK7evKwJIqOhccJ6KR.Bk0YU8B6wqS0jUwMz4vMvmSYv98pDaG'); INSERT INTO users(user_name,email,password) -VALUES ('اسامة وائل ','osama@osam.com','osama'); +VALUES ('اسامة وائل ','osama@osam.com','$2a$10$6oFh67M4ADKgj82STxVZ3u0n8z.aPsMAQcCfwNQh3xCy9sughwhbu'); INSERT INTO users(user_name,email,password) -VALUES ('الاء عماد','alaa@alaa.com','alaa'); +VALUES ('الاء عماد','alaa@alaa.com','$2a$10$vd4kMcPWBVos/Iz0KZt7E.jPIJic1YEvITyx74MLO21Wmo9ueLBiq'); INSERT INTO users(user_name,email,password) -VALUES ('علاء عاصم','alser@alser.com','alser'); +VALUES ('علاء عاصم','alser@alser.com','$2a$10$B2.ew28gFq49DHLxjswsCOlsfi/6G8avmpps2esl24jK8ai2qo2H.'); INSERT INTO users(user_name,email,password) -VALUES ('محمد حسن محمد','moh@moh.com','moh'); +VALUES ('محمد حسن محمد','moh@moh.com','$2a$10$KdOb.S0X9cGRvGkim./Ju.RiXp4l24gTT24Aum/QT8cxdCKQACzam'); INSERT INTO users(user_name,email,password) -VALUES ('يوسف احمد يوسف','yousef@you.com','you'); +VALUES ('يوسف احمد يوسف','yousef@you.com','$2a$10$b4J4lAky4j4g6RmJ3cl6wulXhBpj7ib.9BJO.RrDW.0M.NKPatH2u'); INSERT INTO users(user_name,email,password) -VALUES ('حنان احمد','hanan@hanan.com','hanan'); +VALUES ('حنان احمد','hanan@hanan.com','$2a$10$f.y2z.pAAoeFvvB2/rUNduMLBlZOKigsTusRee4BCB0BKbiDIHBO2'); INSERT INTO users(user_name,email,password) -VALUES ('هند محمد علي','hend@hend.com','hend'); +VALUES ('هند محمد علي','hend@hend.com','$2a$10$f4BPhKCNLxEJjYc9vWxaGOaVBNqSDeGMXnNLvPkkBDKDT/MRJsfMi'); INSERT INTO users(user_name,email,password) -VALUES ('وفاء ابراهيم','wafaa@wafaa.com','wafa'); +VALUES ('وفاء ابراهيم','wafaa@wafaa.com','$2a$10$2aMX0qv10XIZXYkh3F31h.iyMMRUC9gVq3qMCJLUsKMgqGHAdQ/wy'); /* ADD LOCATIONS */ INSERT INTO locations(location_sub,location_main ) VALUES ('الرمال الجنوبي','غزة'); From f92769aa36c8f51149b89195c7d97da1729e1eb1 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 09:45:09 +0200 Subject: [PATCH 05/65] make jwt work as promise Relates #17 --- server/utils/jwt.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/utils/jwt.js b/server/utils/jwt.js index 6af7b65..2c3bca1 100644 --- a/server/utils/jwt.js +++ b/server/utils/jwt.js @@ -1,6 +1,7 @@ const jwt = require('jsonwebtoken'); const { SECRET_TOKEN } = process.env; + const sign = (payload) => new Promise((resolve, reject) => { jwt.sign(payload, SECRET_TOKEN, (err, token) => { From eba82c0355a268f9981791875bdc0a4df88474e0 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 09:46:05 +0200 Subject: [PATCH 06/65] add antd & boomify into cSpell.words Relates #17 --- .vscode/settings.json | 6 +++++- server/router/user.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e76803..d07f83f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,6 +11,10 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": false, "files.eol": "\n", - "cSpell.words": ["Rawdaty"], + "cSpell.words": [ + "Rawdaty", + "antd", + "boomify" + ], "prettier.singleQuote": true } diff --git a/server/router/user.js b/server/router/user.js index 59341eb..f100dc6 100644 --- a/server/router/user.js +++ b/server/router/user.js @@ -3,6 +3,6 @@ const router = require('express').Router(); const { getUsers, login } = require('../controllers'); router.get('/users', getUsers); -router.get('/login', login); +router.post('/login', login); module.exports = router; From ad4bdb785478dbfb997f5d60f9837c59b5aa5f3a Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 09:48:15 +0200 Subject: [PATCH 07/65] add the error into login Relates #17 --- server/controllers/users/login.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/controllers/users/login.js b/server/controllers/users/login.js index 8296753..9ec3808 100644 --- a/server/controllers/users/login.js +++ b/server/controllers/users/login.js @@ -1,20 +1,22 @@ const { compare } = require('bcrypt'); const { sign } = require('../../utils/jwt'); +const boomify = require('../../utils/boomify'); const { checkEmail } = require('../../database/queries'); const login = async (req, res, next) => { try { const { email, password } = req.body; - const { rows: user } = await checkEmail({ email }); + const { rows: user } = await checkEmail({ email }); if (!user[0]) { - return next(); + return next(boomify(400, 'Login Error', 'Bad Request')); } + const { id: userId, password: userPassword } = user[0]; const isPassword = await compare(password, userPassword); if (!isPassword) { - return next(); + return next(boomify(400, 'Login Error', 'Bad Request')); } const token = await sign({ userId }); From 800928e62ca17be7bd51c1a1e5dd0a97bf615144 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 09:49:21 +0200 Subject: [PATCH 08/65] create verifyUser inside middlewares/middlewares Realtes #17 --- .../middlewares/authentication/verifyUser.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 server/middlewares/authentication/verifyUser.js diff --git a/server/middlewares/authentication/verifyUser.js b/server/middlewares/authentication/verifyUser.js new file mode 100644 index 0000000..2d7eef6 --- /dev/null +++ b/server/middlewares/authentication/verifyUser.js @@ -0,0 +1,20 @@ +const { verify } = require('../../utils/jwt'); +const boomify = require('../../utils/boomify'); + +const verifyUser = async (req, res, next) => { + const { token } = req.cookies; + if (token) { + try { + const { decoded } = await verify(token); + req.user = decoded; + next(); + } catch (error) { + res.clearCookie('token'); + res.status(401).json(boomify(401, 'unauthorized', 'unauthorized')); + } + } else { + res.status(401).json(boomify(401, 'unauthorized', 'unauthorized')); + } +}; + +module.exports = verifyUser; From 5f5346309072c1144838b5971a6853dc8c40526f Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 10:02:11 +0200 Subject: [PATCH 09/65] use next in error Relates #17 --- .../authentication/verifyUser.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename server/{middlewares => middleware}/authentication/verifyUser.js (68%) diff --git a/server/middlewares/authentication/verifyUser.js b/server/middleware/authentication/verifyUser.js similarity index 68% rename from server/middlewares/authentication/verifyUser.js rename to server/middleware/authentication/verifyUser.js index 2d7eef6..9636a1a 100644 --- a/server/middlewares/authentication/verifyUser.js +++ b/server/middleware/authentication/verifyUser.js @@ -6,14 +6,14 @@ const verifyUser = async (req, res, next) => { if (token) { try { const { decoded } = await verify(token); - req.user = decoded; + req.userId = decoded; next(); } catch (error) { res.clearCookie('token'); - res.status(401).json(boomify(401, 'unauthorized', 'unauthorized')); + next(boomify(401, 'Unauthorized Error', 'unauthorized User')); } } else { - res.status(401).json(boomify(401, 'unauthorized', 'unauthorized')); + next(boomify(401, 'Unauthorized Error', 'unauthorized User')); } }; From ef59dfb3d2b05664a004f5e2ff17bbe3ce9f1705 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 10:17:08 +0200 Subject: [PATCH 10/65] remove getUserKindergartenInfo Relates #17 --- server/database/queries/index.js | 7 +------ .../queries/users/getUserKindergartenInfo.js | 12 ------------ server/database/queries/users/index.js | 2 -- 3 files changed, 1 insertion(+), 20 deletions(-) delete mode 100644 server/database/queries/users/getUserKindergartenInfo.js diff --git a/server/database/queries/index.js b/server/database/queries/index.js index 40d55b3..a1c09fb 100644 --- a/server/database/queries/index.js +++ b/server/database/queries/index.js @@ -5,11 +5,7 @@ const { getKindergartenId, getKindergartenSearch, } = require('./kindergarten'); -const { - getUsersQuery, - checkEmail, - getUserKindergartenInfo, -} = require('./users'); +const { getUsersQuery, checkEmail } = require('./users'); const { getLocationsQuery } = require('./locations'); module.exports = { @@ -22,5 +18,4 @@ module.exports = { getUsersQuery, getLocationsQuery, checkEmail, - getUserKindergartenInfo, }; diff --git a/server/database/queries/users/getUserKindergartenInfo.js b/server/database/queries/users/getUserKindergartenInfo.js deleted file mode 100644 index b33ad9c..0000000 --- a/server/database/queries/users/getUserKindergartenInfo.js +++ /dev/null @@ -1,12 +0,0 @@ -const { connection } = require('../../data'); - -const getUserKindergartenInfo = ({ userId }) => { - const sql = { - text: - "SELECT id, kindergarten_name FROM kindergartens WHERE user_id = $1 AND WHERE kindergartens.request_status = 'approved' AND kindergartens.is_enable = 'true';", - values: [userId], - }; - return connection.query(sql); -}; - -module.exports = getUserKindergartenInfo; diff --git a/server/database/queries/users/index.js b/server/database/queries/users/index.js index 677cc8d..93fd103 100644 --- a/server/database/queries/users/index.js +++ b/server/database/queries/users/index.js @@ -1,9 +1,7 @@ const getUsersQuery = require('./getUsers'); const checkEmail = require('./checkEmail'); -const getUserKindergartenInfo = require('./getUserKindergartenInfo'); module.exports = { getUsersQuery, checkEmail, - getUserKindergartenInfo, }; From 38988e91c59702d1c130209baaba2bb4b439c6ea Mon Sep 17 00:00:00 2001 From: Israa91 Date: Mon, 15 Feb 2021 10:31:02 +0200 Subject: [PATCH 11/65] create the file structure and sql query relates #14 --- server/controllers/index.js | 3 ++- server/controllers/users/addUsers.js | 22 +++++++++++++++++++ server/controllers/users/index.js | 2 ++ server/database/queries/index.js | 3 ++- .../database/queries/users/addUsersQuery.js | 12 ++++++++++ server/database/queries/users/index.js | 2 ++ server/router/user.js | 3 ++- server/utils/validation/addUserSchema.js | 13 +++++++++++ server/utils/validation/index.js | 2 ++ 9 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 server/controllers/users/addUsers.js create mode 100644 server/database/queries/users/addUsersQuery.js create mode 100644 server/utils/validation/addUserSchema.js diff --git a/server/controllers/index.js b/server/controllers/index.js index 1bb425d..2d85f66 100644 --- a/server/controllers/index.js +++ b/server/controllers/index.js @@ -5,7 +5,7 @@ const { getSpecificKindergarten, kindergartenSearch, } = require('./kindergarten'); -const { getUsers } = require('./users'); +const { getUsers, addUsers } = require('./users'); const { getLocations } = require('./locations'); module.exports = { @@ -18,4 +18,5 @@ module.exports = { getComments, getLocations, kindergartenSearch, + addUsers, }; diff --git a/server/controllers/users/addUsers.js b/server/controllers/users/addUsers.js new file mode 100644 index 0000000..0bcd438 --- /dev/null +++ b/server/controllers/users/addUsers.js @@ -0,0 +1,22 @@ +// const { addUsersQuery } = require('../../database/queries'); + +const addUsers = async () => { + try { + // const { userName, email, password, confirmedPassword } = req.body; + // await addCommentSchema.validate( + // { userName, comment, rating, kindergartenId }, + // req.params, + // { + // abortEarly: false, + // } + // ); + } catch (error) { + // next( + // error.name === 'ValidationError' + // ? boomify(400, 'Validation Error', error.errors) + // : error + // ); + } +}; + +module.exports = addUsers; diff --git a/server/controllers/users/index.js b/server/controllers/users/index.js index 5c5c7b5..2d7c495 100644 --- a/server/controllers/users/index.js +++ b/server/controllers/users/index.js @@ -1,5 +1,7 @@ const getUsers = require('./getUsers'); +const addUsers = require('./addUsers'); module.exports = { getUsers, + addUsers, }; diff --git a/server/database/queries/index.js b/server/database/queries/index.js index 4813b96..84fce44 100644 --- a/server/database/queries/index.js +++ b/server/database/queries/index.js @@ -5,7 +5,7 @@ const { getKindergartenId, getKindergartenSearch, } = require('./kindergarten'); -const { getUsersQuery } = require('./users'); +const { getUsersQuery, addUsersQuery } = require('./users'); const { getLocationsQuery } = require('./locations'); module.exports = { @@ -17,4 +17,5 @@ module.exports = { getCommentsQuery, getUsersQuery, getLocationsQuery, + addUsersQuery, }; diff --git a/server/database/queries/users/addUsersQuery.js b/server/database/queries/users/addUsersQuery.js new file mode 100644 index 0000000..2101bfc --- /dev/null +++ b/server/database/queries/users/addUsersQuery.js @@ -0,0 +1,12 @@ +const connection = require('../../data/connection'); + +const addUsersQuery = (userName, email, password) => { + const sql = { + text: + 'INSERT INTO users(user_name,email,password) VALUES($1 ,$2 ,$3) returning *;', + values: [userName, email, password], + }; + return connection.query(sql); +}; + +module.exports = addUsersQuery; diff --git a/server/database/queries/users/index.js b/server/database/queries/users/index.js index 7ab5f27..a30d7a1 100644 --- a/server/database/queries/users/index.js +++ b/server/database/queries/users/index.js @@ -1,5 +1,7 @@ const getUsersQuery = require('./getUsers'); +const addUsersQuery = require('./addUsersQuery'); module.exports = { getUsersQuery, + addUsersQuery, }; diff --git a/server/router/user.js b/server/router/user.js index 1e1a5b7..636914f 100644 --- a/server/router/user.js +++ b/server/router/user.js @@ -1,7 +1,8 @@ const router = require('express').Router(); -const { getUsers } = require('../controllers'); +const { getUsers, addUsers } = require('../controllers'); router.get('/users', getUsers); +router.post('/signup', addUsers); module.exports = router; diff --git a/server/utils/validation/addUserSchema.js b/server/utils/validation/addUserSchema.js new file mode 100644 index 0000000..3a4150f --- /dev/null +++ b/server/utils/validation/addUserSchema.js @@ -0,0 +1,13 @@ +const { object, string, ref } = require('yup'); + +const addUserSchema = object({ + username: string().min(5).required(), + email: string().email().required(), + password: string().min(8).required(), + confirmPassword: string().oneOf( + [ref('password'), null], + 'Passwords must match' + ), +}); + +module.exports = addUserSchema; diff --git a/server/utils/validation/index.js b/server/utils/validation/index.js index 74a8aaf..7e26b0d 100644 --- a/server/utils/validation/index.js +++ b/server/utils/validation/index.js @@ -1,9 +1,11 @@ const kindergartenSearchSchema = require('./kindergartenSearchSchema'); const kindergartenIdSchema = require('./kindergartenIdSchema'); const addCommentSchema = require('./addCommentSchema'); +const addUserSchema = require('./addUserSchema'); module.exports = { kindergartenIdSchema, addCommentSchema, kindergartenSearchSchema, + addUserSchema, }; From 70eda5999247de2c14c1dbff117daacdbabce5ad Mon Sep 17 00:00:00 2001 From: Alaa Alser Date: Mon, 15 Feb 2021 10:56:05 +0200 Subject: [PATCH 12/65] create delete query Relates #5 --- server/database/queries/index.js | 2 ++ .../queries/kindergarten/deleteKindergarten.js | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 server/database/queries/kindergarten/deleteKindergarten.js diff --git a/server/database/queries/index.js b/server/database/queries/index.js index 4813b96..7a08efc 100644 --- a/server/database/queries/index.js +++ b/server/database/queries/index.js @@ -4,6 +4,7 @@ const { getKindergartenById, getKindergartenId, getKindergartenSearch, + deleteKindergartenQuery, } = require('./kindergarten'); const { getUsersQuery } = require('./users'); const { getLocationsQuery } = require('./locations'); @@ -14,6 +15,7 @@ module.exports = { getKindergartenById, addCommentsQuery, getKindergartenId, + deleteKindergartenQuery, getCommentsQuery, getUsersQuery, getLocationsQuery, diff --git a/server/database/queries/kindergarten/deleteKindergarten.js b/server/database/queries/kindergarten/deleteKindergarten.js new file mode 100644 index 0000000..dd46144 --- /dev/null +++ b/server/database/queries/kindergarten/deleteKindergarten.js @@ -0,0 +1,11 @@ +const { connection } = require('../../data'); + +const deleteKindergartenQuery = (kindergartenId) => { + const sql = { + text: 'DELETE * FROM kindergarten WHERE kindergartens.id=$1 CASCADE', + values: [kindergartenId], + }; + return connection.query(sql); +}; + +module.exports = deleteKindergartenQuery; From 7daf0a3de67c4c9f301d86a0f31f90728ac63136 Mon Sep 17 00:00:00 2001 From: Osama-you Date: Mon, 15 Feb 2021 11:09:42 +0200 Subject: [PATCH 13/65] add the left image Relates #30 --- client/src/App/index.js | 9 +++++++-- client/src/Pages/LoginPage/index.js | 15 +++++++++++++++ client/src/Pages/LoginPage/style.css | 6 ++++++ client/src/assets/img/login&signUp.png | Bin 0 -> 958383 bytes 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 client/src/Pages/LoginPage/index.js create mode 100644 client/src/Pages/LoginPage/style.css create mode 100644 client/src/assets/img/login&signUp.png diff --git a/client/src/App/index.js b/client/src/App/index.js index 893304e..a342794 100644 --- a/client/src/App/index.js +++ b/client/src/App/index.js @@ -3,17 +3,22 @@ import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; import NavBar from '../Components/Layout/Navbar'; import Footer from '../Components/Layout/Footer'; import Home from '../Pages/HomePage'; +import LoginPage from '../Pages/LoginPage'; + import './style.css'; const App = () => ( - + + + + +