Skip to content

Commit

Permalink
🔥 Finishes backend
Browse files Browse the repository at this point in the history
  • Loading branch information
alexisjcarr committed Sep 8, 2019
1 parent 9189794 commit 80de979
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 21 deletions.
4 changes: 4 additions & 0 deletions api/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ const helmet = require("helmet");
const cors = require("cors");
const bodyParser = require("body-parser");

const usersRouter = require("../routers/usersRouter");

const server = express();

server.use(helmet());
Expand All @@ -13,4 +15,6 @@ server.get("/", (req, res) => {
res.send("Welcome to Hell, boys 😈");
});

server.use("/api", usersRouter);

module.exports = server;
Binary file added data/auth.db3
Binary file not shown.
16 changes: 16 additions & 0 deletions data/migrations/20190907202404_create-users-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
exports.up = function(knex) {
return knex.schema.createTable("users", users => {
users.increments();

users
.string("username", 255)
.unique()
.notNullable();

users.string("password", 255).notNullable();
});
};

exports.down = function(knex) {
return knex.schema.dropTableIfExists("users");
};
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
},
"homepage": "https://github.com/alexisjcarr/codeforbcs-test-backend#readme",
"dependencies": {
"bcrypt": "^3.0.6",
"bcryptjs": "^2.4.3",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
Expand Down
57 changes: 57 additions & 0 deletions routers/usersRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const router = require("express").Router();
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");

const Users = require("../data/models/usersModel");
const secrets = require("../config/secrets");

router.post("/register", async (req, res) => {
const user = req.body;

try {
const hash = bcrypt.hashSync(user.password, 12);
user.password = hash;
const saved = await Users.add(user);
res.status(201).json(saved);
} catch (err) {
res.status(500).json(err.message);
}
});

router.post("/login", async (req, res) => {
const { username, password } = req.body;

try {
const user = await Users.findBy({ username });

if (user && bcrypt.compareSync(password, user.password)) {
const token = generateToken(user);

res.status(200).json({
message: `Welcome ${user.username} 😁`,
token
});
} else {
res.status(401).json({
message: "Invalid credentials!"
});
}
} catch (err) {
res.status(500).json(err.message);
}
});

function generateToken(user) {
const jwtPayload = {
subject: user.id,
username: user.username
};

const jwtOptions = {
expiresIn: "1d"
};

return jwt.sign(jwtPayload, secrets.jwtSecret, jwtOptions);
}

module.exports = router;
32 changes: 12 additions & 20 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -341,13 +341,10 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"

bcrypt@^3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-3.0.6.tgz#f607846df62d27e60d5e795612c4f67d70206eb2"
integrity sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==
dependencies:
nan "2.13.2"
node-pre-gyp "0.12.0"
bcryptjs@^2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=

binary-extensions@^1.0.0:
version "1.13.1"
Expand Down Expand Up @@ -2266,11 +2263,6 @@ mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==

[email protected]:
version "2.13.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==

nan@^2.12.1:
version "2.14.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
Expand Down Expand Up @@ -2317,10 +2309,10 @@ [email protected]:
resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f"
integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==

node-pre-gyp@0.12.0, node-pre-gyp@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
node-pre-gyp@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
Expand All @@ -2333,10 +2325,10 @@ [email protected], node-pre-gyp@^0.12.0:
semver "^5.3.0"
tar "^4"

node-pre-gyp@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
node-pre-gyp@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
Expand Down

0 comments on commit 80de979

Please sign in to comment.