From 575c765700d004900703c066a9a4a88559974fbd Mon Sep 17 00:00:00 2001 From: Marcelo Date: Sat, 11 Jul 2020 00:27:19 -0300 Subject: [PATCH] login feature --- app.js | 11 +++ config/auth.js | 40 +++++++++ models/Bug.js | 4 +- models/User.js | 38 ++++++++ package-lock.json | 32 +++++++ package.json | 3 + public/css/style.css | 107 +++++++++++++++++++++++ public/img/avatar1.png | Bin 10744 -> 0 bytes public/img/avatar2.png | Bin 8490 -> 0 bytes public/img/avatar3.png | Bin 8229 -> 0 bytes public/img/avatar5.png | Bin 7712 -> 0 bytes public/img/avatar6.png | Bin 7677 -> 0 bytes public/img/login.png | Bin 0 -> 9321 bytes public/img/region.jpg | Bin 28857 -> 0 bytes public/js/lib.js | 12 ++- routes/bug.js | 15 +--- routes/login.js | 39 +++++++++ views/admin/dashboard.handlebars | 5 +- views/bug/addBug.handlebars | 26 +++--- views/bug/bugs.handlebars | 131 +++++++++++++++++----------- views/bug/solveIssue.handlebars | 2 +- views/feature/feature.handlebars | 131 +++++++++++++++++----------- views/feature/solveIssue.handlebars | 2 +- views/layouts/main.handlebars | 4 +- views/login/login.handlebars | 26 ++++++ views/partials/_msg.handlebars | 4 + views/partials/_navbar.handlebars | 15 +++- 27 files changed, 504 insertions(+), 143 deletions(-) create mode 100644 config/auth.js create mode 100644 models/User.js delete mode 100644 public/img/avatar1.png delete mode 100644 public/img/avatar2.png delete mode 100644 public/img/avatar3.png delete mode 100644 public/img/avatar5.png delete mode 100644 public/img/avatar6.png create mode 100644 public/img/login.png delete mode 100644 public/img/region.jpg create mode 100644 routes/login.js create mode 100644 views/login/login.handlebars diff --git a/app.js b/app.js index ba9f41a..8c61328 100644 --- a/app.js +++ b/app.js @@ -7,6 +7,8 @@ const { allowInsecurePrototypeAccess, } = require("@handlebars/allow-prototype-access"); const path = require(`path`); +const passport = require(`passport`); +require(`./config/auth`)(passport); const session = require("express-session"); const flash = require("connect-flash"); const SERVER_PORT = process.env.PORT || 8787; @@ -15,10 +17,13 @@ const feature = require(`./routes/feature`); const admin = require(`./routes/admin`); const bug = require(`./routes/bug`); const api = require(`./routes/api`); +const login = require(`./routes/login`); app.use( session({ secret: "trackpath", resave: false, saveUninitialized: true }) ); +app.use(passport.initialize()); +app.use(passport.session()); app.use(flash()); app.use((req, res, next) => { console.log("ACESSANDO MIDDLEWARE..."); @@ -36,6 +41,7 @@ app.use((req, res, next) => { res.locals.success_msg = req.flash("success_msg"); res.locals.error_msg = req.flash("error_msg"); + res.locals.error = req.flash("error"); next(); }); @@ -56,6 +62,11 @@ app.use(`/feature`, feature); app.use(`/admin`, admin); app.use(`/bug`, bug); app.use(`/api`, api); +app.use(`/login`, login); + +app.get("/", (req, res) => { + res.redirect("/login"); +}); app.listen(SERVER_PORT, () => { console.log("Server listening on port " + SERVER_PORT); diff --git a/config/auth.js b/config/auth.js new file mode 100644 index 0000000..9733f1d --- /dev/null +++ b/config/auth.js @@ -0,0 +1,40 @@ +//import localStrategy from `passport-local`; +const localStrategy = require(`passport-local`).Strategy; +const bcrypt = require(`bcryptjs`); +const User = require(`../models/User`); + +module.exports = (passport) => { + passport.use( + new localStrategy({ usernameField: `email` }, (email, password, done) => { + User.findByEmail(email) + .then((user) => { + if (!user) { + return done(null, false, { message: "account not found" }); + } + + bcrypt.compare(password, user.password, (err, samePsw) => { + if (samePsw) { + return done(null, user); + } else { + return done(null, false, { message: "Incorrect password" }); + } + }); + }) + .catch(() => {}); + }) + ); + + passport.serializeUser((user, done) => { + done(null, user.id); + }); + + passport.deserializeUser((id, done) => { + User.findByPk(id) + .then((user) => { + done(null, user); + }) + .catch((e) => { + console.log("err: " + e); + }); + }); +}; diff --git a/models/Bug.js b/models/Bug.js index 0eee61e..3f7465c 100644 --- a/models/Bug.js +++ b/models/Bug.js @@ -6,8 +6,8 @@ const create = (bug) => { let sql = `INSERT INTO bugs (Title, Summary, EstimatedHours, DeliveryDate, CreatedAt, ProjectID, StatusID, SeverityID, PriorityID) VALUES - ("${bug.Title}", "${bug.Summary}", "${bug.EstimatedHours}", STR_TO_DATE('${bug.DeliveryDate}', '%Y-%m-%d'), - STR_TO_DATE('${bug.CreatedAt}', '%Y-%m-%d'), "${bug.ProjectID}", "${bug.StatusID}", "${bug.SeverityID}", "${bug.PriorityID}")`; + ("${bug.Title}", "${bug.Summary}", "${bug.EstimatedTime}", STR_TO_DATE('${bug.DeliveryDate}', '%Y-%m-%d'), + STR_TO_DATE('${bug.CreatedAt}', '%Y-%m-%d'), "${bug.projectID}", "${bug.StatusID}", "${bug.SeverityID}", "${bug.PriorityID}")`; connection.query(sql, (err, result) => { err ? reject() : resolve(result); diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000..17ba312 --- /dev/null +++ b/models/User.js @@ -0,0 +1,38 @@ +const connection = require("../db/connection"); +const mysql = require("mysql"); + +const create = (user) => { + return new Promise((resolve, reject) => { + sql = `insert into users (name, email, isAdmin, password ) values ('${user.name}', '${user.email}', ${user.isAdmin}, '${user.password}')`; + + connection.query(sql, (err, result) => { + err ? reject(err) : resolve(result); + }); + }); +}; + +const findByEmail = (email) => { + return new Promise((resolve, reject) => { + sql = `select * from users where email = ${mysql.escape(email)}`; + + connection.query(sql, (err, result) => { + err ? reject(err) : resolve(result[0]); + }); + }); +}; + +const findByPk = (id) => { + return new Promise((resolve, reject) => { + sql = `select * from users where id = ${mysql.escape(id)}`; + + connection.query(sql, (err, result) => { + err ? reject(err) : resolve(result[0]); + }); + }); +}; + +module.exports = { + create: create, + findByEmail: findByEmail, + findByPk: findByPk, +}; diff --git a/package-lock.json b/package-lock.json index 708d175..ec3b53a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,6 +48,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "bignumber.js": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", @@ -636,6 +641,28 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -646,6 +673,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "pg": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/pg/-/pg-8.2.1.tgz", diff --git a/package.json b/package.json index 824c123..e188f6c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "main": "app.js", "dependencies": { "@handlebars/allow-prototype-access": "^1.0.3", + "bcryptjs": "^2.4.3", "body-parser": "^1.19.0", "connect-flash": "^0.1.1", "express": "^4.17.1", @@ -12,6 +13,8 @@ "moment": "^2.26.0", "mysql": "^2.18.1", "mysql2": "^2.1.0", + "passport": "^0.4.1", + "passport-local": "^1.0.0", "pg": "^8.2.1", "pg-hstore": "^2.3.3", "sequelize": "^5.21.11" diff --git a/public/css/style.css b/public/css/style.css index 1ba6578..207a2f7 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -231,6 +231,19 @@ hr { margin-left: 50px; } +.solveItemDivNotFound { + display: flex; + justify-content: center; + background-color: rgb(228, 228, 228); + color: #444; + width: 100%; + padding: 9px; +} + +.solveItemDivNotFound p { + padding: 20px; +} + /* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */ .active, .solveItemDiv:hover { @@ -292,3 +305,97 @@ hr { .i-size { font-size: 50px; } + +.nav-bar-menu { + display: flex; + justify-content: space-between; +} + +.login-access { + display: flex; + justify-content: space-between; + text-decoration: none; +} + +.login-access h4 { + margin-right: 8px; +} + +.login-access i { + font-size: 22px; + margin-top: 14px; + margin-right: 15px; +} + +/* Bordered form */ +.login form { + border: 2px solid rgb(206, 206, 206); +} + +/* Full-width inputs */ +.login input[type="email"], +input[type="password"] { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + box-sizing: border-box; +} + +/* Set a style for all buttons */ +.login-button { + background-color: #808381; + color: white; + padding: 14px 20px; + margin: 8px 0; + border: none; + cursor: pointer; + width: 100%; +} + +/* Add a hover effect for buttons */ +.login-button:hover { + opacity: 0.8; +} + +/* Extra style for the cancel button (red) */ +.signup { + width: auto; + padding: 10px 18px; + background-color: #06c05a; +} + +/* Center the avatar image inside this container */ +.imgcontainer { + text-align: center; + margin: 24px 0 12px 0; +} + +/* Avatar image */ +img.avatar { + width: 40%; + border-radius: 50%; +} + +/* Add padding to containers */ +.login-form-container { + padding: 16px; +} + +/* The "Forgot password" text */ +span.psw { + float: right; + padding-top: 16px; +} + +/* Change styles for span and cancel button on extra small screens */ +@media screen and (max-width: 300px) { + span.psw { + display: block; + float: none; + } + .signup { + width: 100%; + } +} diff --git a/public/img/avatar1.png b/public/img/avatar1.png deleted file mode 100644 index 194ff46b2b86fa3a03fac8feb967ed4965ede692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10744 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 z 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 diff --git a/public/img/avatar6.png b/public/img/avatar6.png deleted file mode 100644 index 427f224df90bac4b06ac2640d2f9a266461f98e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7677 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 diff --git a/public/img/login.png b/public/img/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d02395460aab2aaedcae01e456aaca4773dd1d5f GIT binary patch literal 9321 zcmV-vB$nHWP)oAyL>s!%k70~KRL1mQ{rZzO{hv$v8x{JSyYw%<(7)WMPk2(F zvP))SwkT=)>S&B#2Zd$TO%<>d`0G=#%sH6SDP_GW8P| zQuBm=Ns)@X@CaVRC)j~X{qAo^FGivwgIgKVPiogstkh5bMBm^MeUntq2$6hJEI>N$ z!&7K^ex}jx4l!}nv+Mwb-hSa=lFSih(oBwfNyCLN(S_e59ymfuOmp~nnJ{q7%5nS zoAES0z+p5SMT=0vgHkoCapS3Rt&Ho4N_AwJ&`}bE z_jMy3&)`ecSVfCaQlq1M2I-t}!Yws2@Cu4>8H1Ls8gs8EgF4zG9d!n0pP0`H&%inq zqtP%2Ja&$JqmF)^YJpBXF@qYb@d9#M|)ILjTZ#G}}RYV-!48rMp% zYGjjYW+iPTxa-Ce-Arsi8M;V_IiyRqvq81Agw_%)YNQ|)kK-%UkpwQJPBrzoYK&2n zAYkdlrYajpFi6w)AcLy0Y^+>L1G0SOxF4UQkp>^3G^+OQ=SpHHIc`7}wxK=BdW@jU zm}+pFYVrnJluhJVg_lr@?tldT;vZP-R&Bn7RkSSQk?P=9-8+||hlU+v=~1m_<5t?3 z$sWf9IV#XkbB>ert9F$n^h!)5$1Qjr!B+7|D@9k{nZw zuOLZGpvOY2#SskCY!fWQs`a((tm1ESEWpF~!3T{Kf-0k`{fC+4=+~7a6I;+tGflE| z>nvn)CGi_QGVl=^7zFf5FtI^rgT+_AA;$`=$LRz$X`{GpW_Ma=Wd*G>+2mM^$56sr z4xiSPl<4d%rj;h|IQMp4%3EoQK9*LUq1$=ET9o&t4 z^wIbXkv^TRyUCHntsNUsPqQ;j>UGx0k$7X3g9osOy+;h~m$C;B(1zo=cBJ7=)Um3= z;7XD@oxwC(a(vQA?nNO}*DXkqFVvZ2I!cV`u?*`_&9%dlb);HnlXon}kREs7Gj^}C zO1gAL@1SMJW^45zjxv$N!eo@AI9GdIwl{p+EIVbtR7st5$dHUE5yr(0#`QNx^e;N}FRSzk zJM~GHQ)E=FVGUU^O^*k#-(GrbmT#m?&P%HdsG&!T5q(OlKCMijy4hxm>}PS+pY(VL z<#y5|U$;glb)(cLqY`V3>QkHa=_UFpmQth~4+WkaX%3!1jeT_rgLH8O%lcox6eG@ZHX zK%bE=m(F*rF|MC{M&BUUE{go7RdAQCseV*h`!BUn^uwzwU!{o*Rcd|*|K^}tQ@sISUF~|B(*lJB<*T3 zOM*j>f7sG;db^xUusiO}bw8(XXbDAH)oPXmV{`SE9rP%WW73%{4#y|3IO~RPI^==!S_I9-*8$*X_4zg?r3;rm*Vk&y|?X3tMW?9(( z8c&#?R8k}t#B^NHQCN_GVq1TYEib-i(rlE$k|os^Q;SI6J$)S zFU8;9$40ZO1%H&F<44o04mbMP6TyRMG28p-4Lm`5P4`4vd>b~z9XM)sD~3iPM73ae zdxxXA!;kb>hR-l!a_pnhz*Y?Lz?f>n=$OceTH-SQc^~W0W%BpVUc(ys#1nn04WrkP zF11E~c_O$M)h4U7KpM!4YtUeNH^yq*>nD1oq0sD_^J4+ZymFVFbcYMk2hEOre}%KsU@+8w^xq}TDFjr!hw=-C zOh4`wwa&YfyS>UcTY))pnLL;Wm(A}7pP#gC7Emj!{&wPrUMn@y+xa)nm!0asLG#uH>rEjRvkhIkm==6{k= zc<_h~-y`3!gNbMKsn)DmLyp8PWT@-Ms~EOHNo8!&;2EQ;H7f`*tX3SKH3YZdm=!7t z$lZgn#(6skB5K9A#Ap3@-Q-)NuJu4#Y3&i9)ebLY;x?++=jB(YTMFbgF%Z@%^i2KoQky50Fb{++4Y$AxLW#1nqJ(fE7)cpFv zYlXesqd~1*1R2Ap(XJmW(P))QSP2ppn(QKosCBQ5&i}}^Od--nD~|$gwh=_s!Xx)X zkZMPP)V0!0D~|%*_7UU=B2UZ0;~2C}A^o)SD9~>oK?d=7r1V&VudGvt4AaV^z_5J; z5w-Fqkv15uvrioi6Gj&*w2&Zm5j7>9yq?oSbr8|PMw`Hf?KI8hiC}aVZc^JFx@>G z)Y?ms0jzURkYa1qz=El$P-8Da1jX(*SdI3ofhD(*!?Kdw*|j0=Hd%PZ-VGL;HbfUD zJYX|H2JnhIf)rV-1h)N&0+zM?nJqn@`@ErwtI6*wn{;F5xAfk-?fv zJm;6vd0IH&W;6#t1-u42BAgEbJwzFB^V|e^+V&HyDJhdt+Pg=Ls@4KQka0XccNNG7 zflz^bBYm`ZkLXja1;aX&1)(cLkcPv-P{C$ag?L6&Fg%b6IgGT>1X&Xd4`f14(&9bh zWKifa;f1UTO_1jUqXH@6QLo1%-jd)DMDTp*82X37Q9-_3q1Ai971daP2=ZZwcsg#x zp#Z5sDrxl|P#Gk8h%({E*#x=M-bM|fWH&ci9yVCJgGG>9+!^Y!=Yb$8Ax|1;`7Y6* z+6ojw20~mAjdu|&CCFh`r@O+qYAR^9fp=#I3AYAK3EQNL*6#vcs;R&cWb2GzA<|J5 zG$rK78Ct&!oUy%*FqBlyD89vgXbPMXWGCy>!(u2HN$xYH3HM!3khK^Jo*HuHA{h_{ z7gb9EB*+lfUQdws5JWYw2~Ze}1S^7mt-NZAfO^~}#A5=x;vfulhs12t7F(vi5YnmXBpd+w~U}i5fctc4C z9+@V{YZwi#Dsto;W9lK|=jVd!e@w_IUYjP!CkV1CWV>{d5i`)KS_!sQ;FD>B>-w~S$XjGL=4 z@`Zyusv+Dea>~L(-$5M}SC6og=U^Ar5dP4&+_KPNua1ZZyDnsxg9B89o6z9_ixN<} zbTkYLx{?D9DyRmxIa)0iIPBv(3g%q7mI?>eRD=6W-wVbQ%UD(r93NhcSKY-K-Y$Dvb`>s0Oc6D3yja3F^}~W-EpWq|HG$ z)ey<4)?R5aB!D=oZ@QPKR*^}!gMO+ZGAWQ_(&_Vat#N(BW9*U`x%4~C<&8$R%Q+uk zo-m+qx1F;TjSM@?<&D;9FOgaw-cmKBZ&gC4JX#rZsD#*fB$s`39q5R@4ZV)o2niCy zmE@uiR+1ro3$7foBnY=yF zKk=}BGFOh+JLx>;jf3RLZmE zoAl`=`YF_OJOhPHHHouqmT#m?&P%I)+mFQHgla&abY7qM4NIO9l4`CBJoZ;t3+bm(7J=@WL67>Sccrn@J_kuTD%(E+KD8mZNdQk!&3zYPD8 zBRr=6>ervN>HpN~Z&c`Smgry50Z)QlV!;%JGPhK-ro12Zux@Et0|PZ<$Yd%K%vYflh+^c0v!q^v`k*0!z~9LB5x&5w}edWFabpH~fh{x+m3L9VZv&rAeD= zDWLs+E3wd-0(Jyz=$qwVa#03p|1L48+WJ@Ux^eAr{scY=(!filfm^Bw&bt~^bAckr zC({IZ4Wq$u$M;AxH&sz=xSCai0dd_&@!B*&9zlowL*6B|hTKc*?>lpARg(cANCzI7 zCdgf=w>`#DCH=JS7@=RaX??7u9(PR>Bo!xZcF7O$v?>m#TZim++fO3ZnFb1M9cZ!q zB*V1mIAB;cTWl{u3Y=?!_w0;y?2}GfavagA8n!e>^4|3XS&Je2a&b>Fc_aaeDW`1A z2Oh%O>j`onn(P|l*V0JqO%Q&uZ>!aW`>rQQI;w0M;C}g?cAG%-=vK=rf>a^>dV(y# zR(ryM6-*;ZLOM!?O(DdsSm0a_ylcnMwn#NSk0f~`)vA3<2=cBo6Uf4V`2)+7pO|Nr zG>obCt+=m!09msMawlp{A6ULzq?INaKTCo61gXWHvk7t|4w+v3bcy!q1Js&dWOWEP z&L)V14^19afldtJ7m66ZihKws1n|7czQ@nBOJ8lYjP^yIcR~_m4Vq0&NBoI4=`;Lf zZYpCl)`TWV8V;Ko_c+6oD<7U{oiQ~oau{i$39q*!`rhdxG+d1;KzxOr}ZEJ3MR3GKho27QiS zOiP9@#ge%Rl7e?kDu+5v`!fKi%_^yS2Pw|nK&DA4?R3t~aMt&mM378pKERj@*@{_A zYYaNg@kDAcFF%|`4!$(uB#WUzh7IF#g7u{n4tNHG{vXN#b}BIn!#ZOI5M&U~geOQk zF8h5TMbbu_GYoAew3@p-qtJE^iWK>MAXRJwXB@_L)_hNpBF7Ezioa_Mcd?16k?8k( zPu~H&;*KC0e!g)khjkyuqSoK(i;c)|+yTY@9mXDZXg3z4I(t4QNU`Gz@e1xx#6z5Z*Qrpb-lrwtPIKZXLzulHfA^){2DUMowEugBt>38 zum1+|E&UJUF(&`=BRzWYg5w2PjcWg8?=ro_23+)Gc5gLSdn3pKZ1US6cCdEP3JmH@ z`i>x*JZ-QhDe@?~{56P^v@J_;(r@(W!lRB?U?s}@G>AgxUs;28zx7@$!%D|Hu)$A* z_?`#679I9}?=OOEa3TRRQ0Jcn6LwCt2|xQO>7>p>1Y|}Fhp+rHi0#r%tFj1P^0j{m z^3^DWzmpB{wb1r+=&!O#SwoDgBKgvhD&}S$PuJQPLLF2`=f%e zixy?wCd(%$S=sZp`EhaB>x0^meQfY!9fsvQf7F1ibfUph2cKdr*~4IiI2&;)`ScjW zr%trM{b*12K(5f5EX0-M6QmvYM^BIxY)fvZtRm^9HCc$>WcN84SIbUuq6f0jO%H^K zHAa$sIYM`c%bp`5$PLNu`F?`7WGPN0mmsCM!HEs<5_*z15Oy)K6}8EvM-N_dVg;;9 zW@c{(Ey+@JBsYV1l@mK48~w={NWKiwk}SoL&Tf+E(T{8=mcXs3NLC#>U37ch^ly_z zkP6)D#1^`S3?*YIhj_)awMbgZ;!up&k3ZIs@?;F=-?Sr(@$cjiq&(*9$7I0p^<=Ce zXK6(i<7{%)kJn=oAe=>!TX2kt?nEq+l%)4#xW$PFbPahG!-*bFBdy3{G$x)N!)nDT zPJDnBi7%jHFB6;5mW%?a6;8aMYsgxRCU!tQv?7bqlW2O3ss*Pw@dFm(hr|wv-4t!c zV4?}~0~R{*1s+apZZE@xHe)2w`MVE0@dg%POCoCw+0Ddej3>5!aEs>-yb)0(6Ag(Q z7GXCMNRS3(I*EY#As=Cc1R;zf$cS3)LMJgm22PV8gi!=J9btpf2r05YQ8!Q#BuEUT z7werw0xM8Lf)K_Kq$G~v!8s`M7+OgX!U%%2;xQ-Dz+!cJND#sVf_#LX zd{2;5xZOzxkb)P{M}iQ(CP<%JX^N8^U^((h5W?34$;WahdBEMMCqW3`5~Ln?JITcI ziK{*bND#u81R03%dd?Vcv-ZTZxivw8MBJQuPg1v6e^KOtc;1FfkRTCC9UgG}0lXQ% zzKaA25@GMeHyytKX()`>Hj5xZBHCURBF*s+a4)J!5W+VEsm8sIpMV8ehb|I?@C8A- z)EXB!{sNZavv`zI5hRG`(x}g{%<&&^2ab{;MA8Xz6n8lO1Rg{S2|^^5AT4;%@hj95 z*+_yANhQce-+3Q1GJJDl+Z2c(K|D0}$w^w~t~;bSSdHT(2$2+m9LH+M|G-1BOg$k; z5Z9?C4>=}4J(2aeN`epxCCF8^x&@9Iz*20A)ooM+3F7M3s7+Yvm;vMuW*>(J!#L~Dp_2q5;!2QCwXy|{nZRPa zjX@HGh#Nr$)xs7#<^oIbd33iL5+ukxHx7P|C63v^O(>3rA_NICCq0UBlVd)x2KytY z2tk6(L67}d;x9!Wpt1rM8pK?Pzze**b6Mg z8{SqCf&{r{^>`y;cbz9O{p2k#*MAZu$X{1+zGZY;iHG!)f4HXzL4y22kAE1SR^ovo zZ@JxQ5hTdu=IX7$(BqGd)*J5Jb%F#@OL-#@o2wb_`pa%s5hCyeX;({G=mZZ~glEHt z4$sLbt;kZ0>g>7*3qEW0!ETt)VOF>Vl+98uy|g6@(W^7NIebz{mbGC)H%Obv(W;q0 z(>GW4Nt=w*qAbF=&ged!*)SQqHCE# zFA}z-Dqkw4pSEQI`gJDr-IPN;KxRx+WKHQ6M6fu|{wK{_?I+c8GMXh-p;_GjR@1vC~N9A|gnt}LTXD-)GpR2b66*Ko3 zUw5T2xnRC%4@wvdo%soa%9>j_8ZLbUDg!Iww3_+jHR)L!q z)F*WI7mx+vNOBK$gugr?S4yRc>xcnsN0ZK!i>=j=&iXyHes>f}$0j#d@D$2_WPmp4 zV+`mF6}r3rW|MIj7$lVMJrQSbrEU5Et!`rFQ_`Zdn?fs({^0j0M%*a8K$mr<#wQcKIs*mn$T6a`%0t~4 zk>n11hAua1&yj!1PcleLO#%j0^Z#@c44jZIozXjJ*|DR@GORQzH zG`xvAw>OOx$-kwOB#ARQI#tU>ZpksOv-c*_XvuNIs)^#NJs5D?Zfu*JW{f0`v5wQK zVb`tS26X0F1eJhwWH~mV-hIo;?NZIe#+ai|wYuF)bf&m=Bqhpz zJ3jK#DLzMv<+xm>PZFWeaaFZf?2R0)IzzWJTAnCZ8lLupXz~C8JCyr5uzx){?lwfNJWX+XRy7M3U1wD=TQ7ej!PQ zF69kwlH;$9xPL3>)Zt{LWbP=(@2a71-A2f#6WAMcHZo|H{-Vf2WMT`tyfN`_VIYq@fmas0aiui{wv&M2YQl7Gs7 zxE-=qg&4O(eMiS=felZ^6Xby&S)jGy3g2Xjqe> zQGMfPee>_!^*Nj`2-vP#%)$+{C_BB9`|&9nA<;^)d@pC^iUDr?h`!}necNJ*e$=YD zPgR5TI4q~hO5Hmj34d9S8`-KZ?g^=vE}tc=jOiQI>zkFj>u%`gQkx^HwUxA;CJeXDQHDNViC%D#QA(0sTp@{!f?w#;^LD|I@!Xu7CNRK4FJGX^X_`Jyip>s)-j=BTPCZ zX3!)9>rjlw_|atcDpM%Mx(e))Z)K0V)caIQ^466vkt9n421nI{J001yX~U zhbS3%1x2`w!N>!PM#;F2^sAX zY&99z5tZu5GQmkEq9jQQmf&VQjSp}*{4MUjmu4Ns2RfRYbySRO5HWS))3655<3k*Z z=XqD$&ZZ9On?J83NTU-@#CO|uBkn{N-o;i_p(&E0tOUuBzFn2R<-7W}cj{Yn@`wbl zDe1TmYw;cma1!py>q~b0-g4gf~cAyfCXh*NN zW_A(Fh<;MLeqyD5@+bNRkLa7Eaz+UMl4T)oLnfX=HaJy&SC#~Tfe~H2W17WQA5|S;x!~g&Q8FWQh zbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?01|XXSad~LNk%$Pa%p95bYXO9 XZ*BlFgjnqF00000NkvXXu0mjfzVDH@ literal 0 HcmV?d00001 diff --git a/public/img/region.jpg b/public/img/region.jpg deleted file mode 100644 index e7650b3817ffcd8c9fa6e31ee879964fa18d90d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28857 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 { }); router.post(`/add`, (req, res) => { - const bug = { - Title: req.body.title, - Summary: req.body.Summary, - EstimatedHours: req.body.estimatedTime, - DeliveryDate: req.body.DeliveryDate, - CreatedAt: moment().format("YYYY-MM-DD"), - ProjectID: req.body.projectID, - StatusID: req.body.featureStatus, - SeverityID: req.body.selectSeverity, - PriorityID: req.body.selectPriority, - }; + const bug = req.body; + bug.CreatedAt = moment().format("YYYY-MM-DD"); Bug.create(bug) .then(() => { @@ -63,7 +54,7 @@ router.get(`/solveIssue/:bugID`, (req, res) => { }); router.post(`/solveIssue`, (req, res) => { - let bug = req.body; + const bug = req.body; Bug.updateSolveIssue(bug) .then(() => { diff --git a/routes/login.js b/routes/login.js new file mode 100644 index 0000000..0b691bf --- /dev/null +++ b/routes/login.js @@ -0,0 +1,39 @@ +const express = require(`express`); +const router = express.Router(); +const User = require(`../models/User`); +const bcrypt = require(`bcryptjs`); +const passport = require(`passport`); + +router.post(`/addUser`, (req, res) => { + let user = req.body; + user.isAdmin = 0; + + bcrypt.genSalt(10, (err, salt) => { + bcrypt.hash(user.password, salt, (err, hash) => { + user.password = hash; + User.create(user) + .then((user) => { + console.log("user added: " + user); + }) + .catch((e) => { + console.log("error:" + e); + }); + }); + }); + + res.render(`login/login`); +}); + +router.get(`/`, (req, res) => { + res.render(`login/login`); +}); + +router.post(`/`, (req, res, next) => { + passport.authenticate("local", { + successRedirect: "/project", + failureRedirect: "/login", + failureFlash: true, + })(req, res, next); +}); + +module.exports = router; diff --git a/views/admin/dashboard.handlebars b/views/admin/dashboard.handlebars index 7761233..288d63b 100644 --- a/views/admin/dashboard.handlebars +++ b/views/admin/dashboard.handlebars @@ -33,12 +33,9 @@
-

+

{{totalClosedBugs}}

Bugs Done

- - - \ No newline at end of file diff --git a/views/bug/addBug.handlebars b/views/bug/addBug.handlebars index 425bb53..6d6ff8d 100644 --- a/views/bug/addBug.handlebars +++ b/views/bug/addBug.handlebars @@ -25,44 +25,44 @@
- +
- +
- +
- +
-
- +
- +
- +
- +
@@ -77,7 +77,7 @@
- +
@@ -102,7 +102,7 @@ async function getStatus() { const res = await fetch("http://localhost:8787/api/getFeatureStatus"); const json = await res.json(); - let featureStatus = document.getElementById("featureStatus"); + let featureStatus = document.getElementById("StatusID"); for (let i = 0; i < json.length; i++) { let option = document.createElement("option"); option.value = json[i].ID; @@ -114,7 +114,7 @@ async function getSeverity() { const res = await fetch("http://localhost:8787/api/getSeverity"); const json = await res.json(); - let selectSeverity = document.getElementById("selectSeverity"); + let selectSeverity = document.getElementById("SeverityID"); for (let i = 0; i < json.length; i++) { let option = document.createElement("option"); option.value = json[i].ID; @@ -126,7 +126,7 @@ async function getPriority() { const res = await fetch("http://localhost:8787/api/getPriority"); const json = await res.json(); - let selectPriority = document.getElementById("selectPriority"); + let selectPriority = document.getElementById("PriorityID"); for (let i = 0; i < json.length; i++) { let option = document.createElement("option"); option.value = json[i].ID; diff --git a/views/bug/bugs.handlebars b/views/bug/bugs.handlebars index 5f7474b..b5884f8 100644 --- a/views/bug/bugs.handlebars +++ b/views/bug/bugs.handlebars @@ -52,7 +52,11 @@ $(document).ready(function () { $("#ProjectCombo").change(function () { let id = $(this).children("option:selected").val(); - getBugsByProject(id) + if (id === "0") { + $("#containerList").empty() + } else { + getBugsByProject(id) + } }); }); @@ -66,74 +70,99 @@ let containerList = document.getElementById("containerList"); - let i; - for (i = 0; i < json.length; i++) { - + if (json.length === 0) { let divItem = document.createElement("div"); - divItem.setAttribute("class", "solveItemDiv") + divItem.setAttribute("class", "solveItemDivNotFound") let p = document.createElement("p"); - p.innerText = json[i].Title; + p.innerText = "There is no bugs for this project"; divItem.appendChild(p) - let span = document.createElement("span"); - - if (json[i].StatusID === 1) { - span.setAttribute("class", "label-issue danger") - span.innerText = "Open"; - } else if (json[i].StatusID === 2) { - span.setAttribute("class", "label-issue warning") - span.innerText = "In progress"; - } else if (json[i].StatusID === 3) { - span.setAttribute("class", "label-issue success") - span.innerText = "To be tested"; - } else { - span.setAttribute("class", "label-issue info") - span.innerText = "Closed"; - } - - divItem.appendChild(span) - containerList.appendChild(divItem) + } else { + loadContainerList(containerList, json) + } - let p1 = document.createElement("p"); - p1.innerText = "Notes: " + json[i].Summary; - let div = document.createElement("div"); - div.setAttribute("class", "panel") + function loadContainerList(containerList, json) { + + for (let i = 0; i < json.length; i++) { + + let divItem = document.createElement("div"); + divItem.setAttribute("class", "solveItemDiv") + let p = document.createElement("p"); + p.innerText = json[i].Title; + divItem.appendChild(p) + let span = document.createElement("span"); + + if (json[i].StatusID === 1) { + span.setAttribute("class", "label-issue danger") + span.innerText = "Open"; + } else if (json[i].StatusID === 2) { + span.setAttribute("class", "label-issue warning") + span.innerText = "In progress"; + } else if (json[i].StatusID === 3) { + span.setAttribute("class", "label-issue success") + span.innerText = "To be tested"; + } else { + span.setAttribute("class", "label-issue info") + span.innerText = "Closed"; + } - div.appendChild(p1) + divItem.appendChild(span) - containerList.appendChild(div) + containerList.appendChild(divItem) - let DivPanel = document.getElementsByClassName("panel") + let p1 = document.createElement("p"); + p1.innerText = "Notes: " + json[i].Summary; + let div = document.createElement("div"); + div.setAttribute("class", "panel") - let openFeatureLink = document.createElement("a"); - openFeatureLink.setAttribute("href", `bug/solveIssue/${json[i].ID}`) + div.appendChild(p1) - let openFeaturebutton = document.createElement("button"); - openFeaturebutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom") - openFeaturebutton.innerText = "Solve Issue" - openFeatureLink.appendChild(openFeaturebutton) + containerList.appendChild(div) - DivPanel[i].appendChild(openFeatureLink) + let DivPanel = document.getElementsByClassName("panel") + let openFeatureLink = document.createElement("a"); + openFeatureLink.setAttribute("href", `bug/solveIssue/${json[i].ID}`) + let openFeaturebutton = document.createElement("button"); + openFeaturebutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom") + openFeaturebutton.innerText = "Solve Issue" + openFeatureLink.appendChild(openFeaturebutton) - } + DivPanel[i].appendChild(openFeatureLink) + let editBugLink = document.createElement("a"); + editBugLink.setAttribute("href", `bug/editIssue/${json[i].ID}`) + let editBugbutton = document.createElement("button"); + editBugbutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom w3-margin-left") + editBugbutton.innerText = "Edit" + editBugLink.appendChild(editBugbutton) + DivPanel[i].appendChild(editBugLink) - var acc = document.getElementsByClassName("solveItemDiv"); + let deleteBugLink = document.createElement("a"); + deleteBugLink.setAttribute("href", `bug/deleteIssue/${json[i].ID}`) + let deleteBugbutton = document.createElement("button"); + deleteBugbutton.setAttribute("class", "w3-button w3-red w3-round-medium w3-margin-bottom w3-margin-left") + deleteBugbutton.innerText = "Delete" + deleteBugLink.appendChild(deleteBugbutton) + DivPanel[i].appendChild(deleteBugLink) + } - var j; - for (j = 0; j < acc.length; j++) { - acc[j].addEventListener("click", function () { - this.classList.toggle("active"); - var panel = this.nextElementSibling; - if (panel.style.maxHeight) { - panel.style.maxHeight = null; - } else { - panel.style.maxHeight = panel.scrollHeight + "px"; - } - }); + var acc = document.getElementsByClassName("solveItemDiv"); + + for (let j = 0; j < acc.length; j++) { + acc[j].addEventListener("click", function () { + this.classList.toggle("active"); + var panel = this.nextElementSibling; + if (panel.style.maxHeight) { + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = panel.scrollHeight + "px"; + } + }); + } } + } diff --git a/views/bug/solveIssue.handlebars b/views/bug/solveIssue.handlebars index dfb6dc0..9c21cf3 100644 --- a/views/bug/solveIssue.handlebars +++ b/views/bug/solveIssue.handlebars @@ -108,7 +108,7 @@
- +
diff --git a/views/feature/feature.handlebars b/views/feature/feature.handlebars index 5122920..130e441 100644 --- a/views/feature/feature.handlebars +++ b/views/feature/feature.handlebars @@ -52,7 +52,11 @@ $(document).ready(function () { $("#ProjectCombo").change(function () { let id = $(this).children("option:selected").val(); - getFeaturesByProject(id) + if (id === "0") { + $("#containerList").empty() + } else { + getFeaturesByProject(id) + } }); }); @@ -66,73 +70,98 @@ let containerList = document.getElementById("containerList"); - let i; - for (i = 0; i < json.length; i++) { - + if (json.length === 0) { let divItem = document.createElement("div"); - divItem.setAttribute("class", "solveItemDiv") + divItem.setAttribute("class", "solveItemDivNotFound") let p = document.createElement("p"); - p.innerText = json[i].TitleFeature; + p.innerText = "There is no features for this project"; divItem.appendChild(p) - let span = document.createElement("span"); - - if (json[i].FeatureStatusID === 1) { - span.setAttribute("class", "label-issue danger") - span.innerText = "Open"; - } else if (json[i].FeatureStatusID === 2) { - span.setAttribute("class", "label-issue warning") - span.innerText = "In progress"; - } else if (json[i].FeatureStatusID === 3) { - span.setAttribute("class", "label-issue success") - span.innerText = "To be tested"; - } else { - span.setAttribute("class", "label-issue info") - span.innerText = "Closed"; - } - - divItem.appendChild(span) - containerList.appendChild(divItem) + } else { + loadContainerList(containerList, json) + } - let p1 = document.createElement("p"); - p1.innerText = "Notes: " + json[i].DescriptionFeature; - let div = document.createElement("div"); - div.setAttribute("class", "panel") + function loadContainerList(containerList, json) { + + for (let i = 0; i < json.length; i++) { + + let divItem = document.createElement("div"); + divItem.setAttribute("class", "solveItemDiv") + let p = document.createElement("p"); + p.innerText = json[i].TitleFeature; + divItem.appendChild(p) + let span = document.createElement("span"); + + if (json[i].FeatureStatusID === 1) { + span.setAttribute("class", "label-issue danger") + span.innerText = "Open"; + } else if (json[i].FeatureStatusID === 2) { + span.setAttribute("class", "label-issue warning") + span.innerText = "In progress"; + } else if (json[i].FeatureStatusID === 3) { + span.setAttribute("class", "label-issue success") + span.innerText = "To be tested"; + } else { + span.setAttribute("class", "label-issue info") + span.innerText = "Closed"; + } - div.appendChild(p1) + divItem.appendChild(span) - containerList.appendChild(div) + containerList.appendChild(divItem) - let DivPanel = document.getElementsByClassName("panel") + let p1 = document.createElement("p"); + p1.innerText = "Notes: " + json[i].DescriptionFeature; + let div = document.createElement("div"); + div.setAttribute("class", "panel") - let openFeatureLink = document.createElement("a"); - openFeatureLink.setAttribute("href", `feature/solveIssue/${json[i].ID}`) + div.appendChild(p1) - let openFeaturebutton = document.createElement("button"); - openFeaturebutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom") - openFeaturebutton.innerText = "Solve Issue" - openFeatureLink.appendChild(openFeaturebutton) + containerList.appendChild(div) - DivPanel[i].appendChild(openFeatureLink) + let DivPanel = document.getElementsByClassName("panel") + let openFeatureLink = document.createElement("a"); + openFeatureLink.setAttribute("href", `feature/solveIssue/${json[i].ID}`) + let openFeaturebutton = document.createElement("button"); + openFeaturebutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom") + openFeaturebutton.innerText = "Start Feature" + openFeatureLink.appendChild(openFeaturebutton) + DivPanel[i].appendChild(openFeatureLink) - } + let editFeatureLink = document.createElement("a"); + editFeatureLink.setAttribute("href", `feature/editIssue/${json[i].ID}`) + let editFeaturebutton = document.createElement("button"); + editFeaturebutton.setAttribute("class", "w3-button w3-grey w3-round-medium w3-margin-bottom w3-margin-left") + editFeaturebutton.innerText = "Edit" + editFeatureLink.appendChild(editFeaturebutton) + DivPanel[i].appendChild(editFeatureLink) + let deleteFeatureLink = document.createElement("a"); + deleteFeatureLink.setAttribute("href", `feature/deleteIssue/${json[i].ID}`) + let deleteFeaturebutton = document.createElement("button"); + deleteFeaturebutton.setAttribute("class", "w3-button w3-red w3-round-medium w3-margin-bottom w3-margin-left") + deleteFeaturebutton.innerText = "Delete" + deleteFeatureLink.appendChild(deleteFeaturebutton) + DivPanel[i].appendChild(deleteFeatureLink) - var acc = document.getElementsByClassName("solveItemDiv"); - var j; - for (j = 0; j < acc.length; j++) { - acc[j].addEventListener("click", function () { - this.classList.toggle("active"); - var panel = this.nextElementSibling; - if (panel.style.maxHeight) { - panel.style.maxHeight = null; - } else { - panel.style.maxHeight = panel.scrollHeight + "px"; - } - }); + } + + var acc = document.getElementsByClassName("solveItemDiv"); + + for (let j = 0; j < acc.length; j++) { + acc[j].addEventListener("click", function () { + this.classList.toggle("active"); + var panel = this.nextElementSibling; + if (panel.style.maxHeight) { + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = panel.scrollHeight + "px"; + } + }); + } } } diff --git a/views/feature/solveIssue.handlebars b/views/feature/solveIssue.handlebars index 3226652..dcd9fa5 100644 --- a/views/feature/solveIssue.handlebars +++ b/views/feature/solveIssue.handlebars @@ -87,7 +87,7 @@
- +
diff --git a/views/layouts/main.handlebars b/views/layouts/main.handlebars index 788cd9c..ce38028 100644 --- a/views/layouts/main.handlebars +++ b/views/layouts/main.handlebars @@ -12,7 +12,7 @@ -