Skip to content

Commit 0f02ddd

Browse files
committed
JWT addition started
1 parent 89a1951 commit 0f02ddd

File tree

7 files changed

+262
-7
lines changed

7 files changed

+262
-7
lines changed

package-lock.json

Lines changed: 190 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"dependencies": {
1414
"apollo-server-lambda": "^3.10.0",
1515
"graphql": "^16.5.0",
16+
"jsonwebtoken": "^8.5.1",
1617
"mongodb": "^4.8.0"
1718
},
1819
"devDependencies": {

src/helpers/jwtHelpers.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// NPM dependencies
2+
import jwt from "jsonwebtoken";
3+
4+
// extract the token methods
5+
const { sign, verify } = jwt;
6+
7+
// create token from the payload
8+
const createToken = (payload) => {
9+
const token = sign(
10+
{ ...payload, appName: process.env.APP_NAME },
11+
process.env.JWT_SECRET,
12+
{
13+
expiresIn: process.env.JWT_TOKEN_EXPIRES_IN,
14+
}
15+
);
16+
17+
return token;
18+
};
19+
20+
const verifyToken = (event) => {
21+
const token = extractToken(event);
22+
try {
23+
const decoded = verify(token, process.env.JWT_SECRET);
24+
25+
// if the token has the correct data it is passed
26+
if (decoded.appName === process.env.APP_NAME) {
27+
return true;
28+
}
29+
return false;
30+
} catch (error) {
31+
return false;
32+
}
33+
};
34+
35+
const extractToken = (event) => {
36+
const { headers } = event;
37+
const tokenExtracted = headers.authorization
38+
? headers.authorization.replace("Bearer ", "")
39+
: "";
40+
41+
return tokenExtracted;
42+
};
43+
44+
export { createToken, verifyToken };

src/resolvers/authResolver.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const resolvers = {
2+
Query: {
3+
createToken: (_, args, context) => {
4+
console.log("code reached");
5+
},
6+
},
7+
};
8+
9+
export { resolvers };

src/resolvers/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { resolvers as helloResolvers } from "./helloResolver.js";
22
import { resolvers as bookResolvers } from "./bookResolver.js";
33
import { resolvers as authorResolvers } from "./authorResolver.js";
4+
import { resolvers as authResolvers } from "./authResolver.js";
45

56
const resolvers = {
67
Query: {
78
...bookResolvers.Query,
89
...helloResolvers.Query,
910
...authorResolvers.Query,
11+
...authResolvers.Query,
1012
},
1113
Mutation: {
1214
...bookResolvers.Mutation,

src/typedefs/authTypedef.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { gql } from "apollo-server-lambda";
2+
3+
const authTypeDefs = gql`
4+
# type definitions for authorization services
5+
type Token {
6+
token: String!
7+
}
8+
type Query {
9+
createToken(username: String!, password: String!): Token!
10+
}
11+
`;
12+
13+
export { authTypeDefs };

src/typedefs/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
import { booksTypeDefs } from "./bookTypedef.js";
33
import { helloTypeDefs } from "./helloTypedef.js";
44
import { authorsTypeDefs } from "./authorTypedef.js";
5+
import { authTypeDefs } from "./authTypedef.js";
56

6-
const typeDefs = [booksTypeDefs, helloTypeDefs, authorsTypeDefs];
7+
// merging all the type definitions in an array
8+
const typeDefs = [booksTypeDefs, helloTypeDefs, authorsTypeDefs, authTypeDefs];
79

810
export { typeDefs };

0 commit comments

Comments
 (0)