All files / Backend/controllers googleAuth.js

17.39% Statements 8/46
0% Branches 0/12
0% Functions 0/13
17.39% Lines 8/46

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 1144x 4x 4x 4x 4x     4x     4x                                                                                                                   4x                                                                                          
const bcrypt = require('bcryptjs');
const jwt = require("jsonwebtoken");
const User = require('../model/user');
const api_key= require('../config/config')
const {OAuth2Client} = require('google-auth-library')
 
 
const client = new OAuth2Client(api_key.googleAuth);
 
 
exports.googleSignUp=(req,res)=>{
 
    const {tokenId} = req.body;
    
    //console.log(process.env.OAuth2Client)
    client.verifyIdToken({idToken:tokenId,audience:api_key.googleAuth})
    .then(response =>{
        const {email,email_verified,name} = response.payload;
        console.log(response.payload);
        if(!email_verified){
            const error = new Error("Login failed, user not verified");
            error.statusCode = 403;
            res.status(403).json({message:"not verified"})
            throw error;
        }
        else if(email_verified){
            User.findOne({email:email})
            .then(user=>{
 
                if(!user){
                    // new user 
                    bcrypt.hash(Math.random(100),12)
                        .then(hashedPassword=>{
                            const Newuser = new User(
                                {email:email,
                                password:hashedPassword,
                                isverified:true,
                                name:name,
                                resetVerified:false,
                                });
                            Newuser.save()
                            .then(result=>{
                
                                res.status(201).json({message:"User Account has been created!"})
                            })
                            .catch(err=>{
                                console.log(err);
                            })
                }) 
              }
 
               else {
                    res.status(201).json({message:"User already has an account",username:user.name,userId:user._id})
                }
            })
            .catch(err=>{
                console.log(err)
            })
        }
    })
    .catch(err=>{
        console.log(err)
    })
 
}
 
 
 
exports.googleLogin = (req,res)=>{
    
    const {tokenId} = req.body;
    
    //console.log(process.env.OAuth2Client)
    client.verifyIdToken({idToken:tokenId,audience:api_key.googleAuth})
    .then(response =>{
        const {email,email_verified,name} = response.payload;
        console.log(response.payload);
        if(!email_verified){
            const error = new Error("Login failed, user not verified");
            error.statusCode = 403;
            res.status(403).json({message:"not verified"})
            throw error;
        }
        else if(email_verified){
            User.findOne({email:email})
            .then(user=>{
 
                if(!user){
                    // user doesnt exist
                    res.status(404).json({message:"User's accout doesnt exist!",username:user.name,userId:user._id})
                }
 
               else {
                    const access_token = jwt.sign({email:email},api_key.accessToken,{
                    algorithm: "HS256",
                    expiresIn:api_key.accessTokenLife})
 
                    const referesh_token = jwt.sign({email:email}, api_key.refereshToken,{
                        algorithm: "HS256",
                        expiresIn:api_key.refereshTokenLife})
 
                    res.status(201).json({message:"User logged in!",access_token:access_token,referesh_token:referesh_token,username:user.name,userId:user._id})
                }
            })
            .catch(err=>{
                console.log(err)
            })
        }
    })
    .catch(err=>{
        console.log(err)
    })
 
}