Skip to content

Commit cb15df5

Browse files
committed
add apis and authenticate using JWT
1 parent 6bb9e42 commit cb15df5

File tree

191 files changed

+14917
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

191 files changed

+14917
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const passport=require('passport');
2+
const googleStategy

config/passport-jwt-strategy.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const passport=require('passport');
2+
const JWTStrategy=require('passport-jwt').Strategy;
3+
const ExtractJWT= require('passport-jwt').ExtractJwt;
4+
const User=require('../models/user');
5+
6+
let opts= {
7+
jwtFromRequest:ExtractJWT.fromAuthHeaderAsBearerToken(),
8+
secretOrKey:'codeial'
9+
}
10+
11+
passport.use(new JWTStrategy(opts,function(jwtPayload,done){
12+
13+
User.findById(jwtPayload._id,function(err,user){
14+
if(err){
15+
console.log('Error in finding user from JWT');
16+
return;
17+
}
18+
19+
if(user){
20+
return done(null,user);
21+
}else{
22+
return done(null,false);
23+
}
24+
})
25+
26+
}));
27+
28+
module.exports=passport;

controllers/api/v1/posts_api.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
const Post=require("../../../models/posts");
2+
const Comment=require("../../../models/comment");
3+
4+
module.exports.index=async function(req,res){
5+
6+
let posts=await Post.find({})
7+
.sort('-createdAt')
8+
.populate('user')
9+
.populate({
10+
path:'comments',
11+
populate:{
12+
path:'user'
13+
}
14+
});
15+
16+
return res.json(200,{
17+
message:"List of posts",
18+
posts:posts
19+
});
20+
21+
}
22+
23+
module.exports.destroy =async function(req,res){
24+
25+
try{
26+
27+
28+
29+
let post= await Post.findById(req.params.id);
30+
31+
if(post.user==req.user.id){
32+
33+
post.remove();
34+
35+
await Comment.deleteMany({post:req.params.id});
36+
37+
return res.json(200,{
38+
message:"Post and associated comments deleted successfully"
39+
});
40+
41+
42+
}
43+
else{
44+
45+
return res.json(401,{
46+
message:"You cannot delete this post"
47+
});
48+
49+
}
50+
51+
}catch(err){
52+
53+
console.log('api delete error',err);
54+
55+
return res.json(500,{
56+
message:"Internal server error"
57+
});
58+
}
59+
60+
61+
62+
63+
}

controllers/api/v1/users_api.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const User=require('../../../models/user');
2+
const jwt=require('jsonwebtoken');
3+
4+
module.exports.createSession= async function(req,res){
5+
6+
try{
7+
let user=await User.findOne({email:req.body.email});
8+
9+
if(!user || user.password!=req.body.password)
10+
{
11+
return res.json(422,{
12+
message:"Invalid Username or Password"
13+
});
14+
}
15+
16+
return res.json(200,{
17+
message:"Successfully Signed In, here is your token,please keep it safe !",
18+
data:{
19+
token:jwt.sign(user.toJSON(),'codeial',{expiresIn:'100000'})
20+
}
21+
22+
})
23+
24+
}catch(err)
25+
{
26+
console.log('user api error',err);
27+
28+
return res.json(500,{
29+
message:"Internal server error"
30+
});
31+
}
32+
}

controllers/users_controller.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,15 @@ module.exports.update=async function(req,res){
4848

4949

5050
if(user.avatar){
51-
52-
fs.unlinkSync(path.join(__dirname,'..',user.avatar));
51+
52+
53+
54+
if(fs.existsSync(path.join(__dirname,'..',user.avatar))){
55+
56+
fs.unlinkSync(path.join(__dirname,'..',user.avatar));
57+
58+
};
59+
5360

5461
}
5562

index.js

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const db = require('./config/mongoose');
88
const session = require('express-session');
99
const passport = require('passport');
1010
const passportLocal = require('./config/passport-local-strategy');
11+
const passportJWT = require('./config/passport-jwt-strategy');
1112
const MongoStore=require('connect-mongo')(session);
1213
const sassMiddleware=require('node-sass-middleware');
1314
const flash = require('connect-flash');

models/user.js

+6
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ const userSchema=new mongoose.Schema({
3232

3333
});
3434

35+
userSchema.methods.toJSON = function() {
36+
var obj = this.toObject();
37+
delete obj.password;
38+
return obj;
39+
}
40+
3541
var storage = multer.diskStorage({
3642
destination: function (req, file, cb) {
3743
cb(null,path.join(__dirname,'..',AVATAR_PATH));

node_modules/base64url/LICENSE

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/dist/.gitkeep

Whitespace-only changes.

node_modules/base64url/dist/base64url.d.ts

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/dist/base64url.js

+37
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/dist/pad-string.d.ts

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/dist/pad-string.js

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/index.js

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/base64url/package.json

+65
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)