Skip to content

Commit be0a116

Browse files
authored
Merge pull request #42 from labs12-linked-in/brandon-borrero
Brandon borrero
2 parents b944252 + c0d9434 commit be0a116

File tree

8 files changed

+127
-34
lines changed

8 files changed

+127
-34
lines changed

api/server.js

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,29 @@
1-
const express = require("express");
2-
const configureMiddleware = require("./middleware.js");
3-
const forms = require("../forms/forms-routes.js");
4-
const users = require("../user/user-routes.js");
5-
const departments = require("../departments/departments-routes.js");
6-
const defaultRules = require("../form_rules/rules-default-routes.js");
7-
const rules = require("../form_rules/rules-routes.js");
8-
const fields = require("../form_fields/form-fields-routes");
1+
const express = require('express')
2+
const configureMiddleware = require('./middleware.js')
3+
const forms = require('../forms/forms-routes.js')
4+
const users = require('../user/user-routes.js')
5+
const departments = require('../departments/departments-routes.js')
6+
const defaultRules = require('../form_rules/rules-default-routes.js')
7+
const rules = require('../form_rules/rules-routes.js')
8+
const fields = require('../form_fields/form-fields-routes')
9+
const checkout = require('../checkout/checkout.js')
10+
const restricted = require('../auth/restrictedMiddleware.js')
911

10-
const server = express();
12+
const server = express()
1113

12-
configureMiddleware(server);
14+
configureMiddleware(server)
1315

14-
server.use(express.json());
16+
server.use(express.json())
1517

16-
server.get("/", (req, res) => {
17-
res.status(200).send("Hello Earthling");
18-
});
18+
server.get('/', (req, res) => {
19+
res.status(200).send('Hello Earthling')
20+
})
1921

20-
server.use("/api/users", users);
21-
server.use("/api/forms", forms);
22-
server.use("/api/fields", fields);
23-
server.use("/api/departments", departments);
24-
server.use("/api/rules", defaultRules, rules);
22+
server.use('/api/users', users)
23+
server.use('/api/payment', checkout)
24+
server.use('/api/forms', restricted, forms)
25+
server.use('/api/fields', restricted, fields)
26+
server.use('/api/departments', restricted, departments)
27+
server.use('/api/rules', restricted, defaultRules, rules)
2528

26-
module.exports = server;
29+
module.exports = server

auth/restrictedMiddleware.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const jwt = require('jsonwebtoken')
2+
const secret = require('./secret.js')
3+
4+
module.exports = (req, res, next) => {
5+
const token = req.headers.authorization
6+
7+
if (token) {
8+
jwt.verify(token, secret.jwtSecret, (err, decodedToken) => {
9+
if (err) {
10+
res.status(401).json({ message: 'Invalid Token.' })
11+
} else {
12+
req.decodedJwt = decodedToken
13+
next()
14+
}
15+
})
16+
} else {
17+
res.status(401).json({ message: 'No token provided. Please log in.' })
18+
}
19+
}

auth/secret.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
jwtSecret: process.env.JWT_SECRET || 'Super Secret Secret'
3+
}

checkout/checkout.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const router = require('express').Router()
2+
const stripe = require('stripe')('STRIPE_SECRET_KEY')
3+
const uuid = require('uuid/v4')
4+
5+
router.post('/checkout', async (req, res) => {
6+
console.log('Request:', req.body)
7+
8+
let error
9+
let status
10+
try {
11+
const { product, token } = req.body
12+
13+
const customer = await stripe.customers.create({
14+
email: token.email,
15+
source: token.id
16+
})
17+
18+
const idempotency_key = uuid()
19+
const charge = await stripe.charges.create(
20+
{
21+
amount: product.price * 100,
22+
currency: 'usd',
23+
customer: customer.id,
24+
receipt_email: token.email,
25+
description: `Purchased the ${product.name}`
26+
},
27+
{
28+
idempotency_key
29+
}
30+
)
31+
console.log('Charge:', { charge })
32+
status = 'success'
33+
} catch (error) {
34+
console.error('Error:', error)
35+
status = 'failure'
36+
}
37+
38+
res.json({ error, status })
39+
})
40+
41+
module.exports = router

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
"ramda": "^0.26.1",
3434
"router-express": "^1.5.2",
3535
"sequelize": "^5.8.2",
36-
"sqlite3": "^4.0.6"
36+
"sqlite3": "^4.0.6",
37+
"stripe": "^7.0.0",
38+
"uuid": "^3.3.2"
3739
},
3840
"devDependencies": {
3941
"cross-env": "^5.2.0",

user/user-model.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,50 @@
11
const db = require('../data/dbConfig.js')
2+
const jwt = require('jsonwebtoken')
3+
const secret = require('../auth/secret.js')
24

35
module.exports = {
46
find,
57
verifyUser,
68
addUser,
7-
deleteUser
9+
deleteUser,
10+
generateToken
11+
}
12+
13+
function generateToken() {
14+
const payload = {
15+
message: 'Onward!'
16+
}
17+
18+
const options = {
19+
expiresIn: '1d'
20+
}
21+
22+
return jwt.sign(payload, secret.jwtSecret, options)
823
}
924

1025
function find() {
11-
return db('users');
12-
};
26+
return db('users')
27+
}
1328

1429
async function verifyUser(id) {
15-
console.log("ID", id);
16-
30+
console.log('ID', id)
31+
1732
const selected = db('users')
1833
.where('user_id', id)
1934
.first()
2035

2136
return selected
22-
};
37+
}
2338

2439
async function addUser(user) {
25-
console.log("USER", user);
40+
console.log('USER', user)
2641
const [id] = await db('users')
2742
.returning('id')
2843
.insert(user)
2944
return db('users')
3045
.where({ id })
3146
.first()
32-
};
47+
}
3348

3449
async function deleteUser(id) {
3550
const deleted = db('users')
@@ -38,5 +53,4 @@ async function deleteUser(id) {
3853
console.log(deleted, 'hi')
3954

4055
return deleted
41-
};
42-
56+
}

user/user-routes.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,16 @@ router.post('/user', async (req, res) => {
3636

3737
User.verifyUser(id)
3838
.then(async user => {
39+
const token = User.generateToken()
3940
if (user == null) {
4041
const newUser = await User.addUser({
4142
user_id: id,
4243
first_name: firstName,
4344
last_name: lastName
4445
})
45-
res.status(200).json(newUser)
46+
res.status(200).json({ userInfo: newUser, token: token })
4647
}
47-
res.status(200).json(user)
48+
res.status(200).json({ userInfo: user, token: token })
4849
})
4950
.catch(error => {
5051
res.status(500).json({ err: 'Could not verify user', error })

yarn.lock

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5827,7 +5827,7 @@ [email protected], qs@~6.5.2:
58275827
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
58285828
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
58295829

5830-
[email protected], qs@^6.2.1, qs@^6.5.1:
5830+
[email protected], qs@^6.2.1, qs@^6.5.1, qs@^6.6.0:
58315831
version "6.7.0"
58325832
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
58335833
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
@@ -6767,6 +6767,16 @@ strip-json-comments@~2.0.1:
67676767
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
67686768
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
67696769

6770+
stripe@^7.0.0:
6771+
version "7.0.0"
6772+
resolved "https://registry.yarnpkg.com/stripe/-/stripe-7.0.0.tgz#6761e7ef03e28f7c1d773abbdd6431c78b2b4fbb"
6773+
integrity sha512-2CzGN1oHqEoEYxo5H5t7/pd/3NdmK1f4ZJSXKa+mBfWh3yqTpKscxKU5ZbH9NpdvE7n5awkwj1oygaMwfi9dOw==
6774+
dependencies:
6775+
lodash.isplainobject "^4.0.6"
6776+
qs "^6.6.0"
6777+
safe-buffer "^5.1.1"
6778+
uuid "^3.3.2"
6779+
67706780
superagent@^3.8.3:
67716781
version "3.8.3"
67726782
resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128"

0 commit comments

Comments
 (0)