mirror of
https://github.com/Uttkarsh-raj/Plannerly.git
synced 2025-11-23 21:54:39 +02:00
initial commit
This commit is contained in:
106
Backend/helpers/tokenHelper.go
Normal file
106
Backend/helpers/tokenHelper.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package helpers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/Uttkarsh-raj/To_Do_App/database"
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
type SignedDetails struct {
|
||||
Email string
|
||||
First_name string
|
||||
Last_name string
|
||||
Uid string
|
||||
jwt.StandardClaims
|
||||
}
|
||||
|
||||
var userCollection *mongo.Collection = database.OpenCollection(database.Client, "user")
|
||||
var SECRET_KEY string = os.Getenv("SECRET_KEY")
|
||||
|
||||
func GenerateAllTokens(email, firstName, lastName, uid string) (signedToken, signedRefrehToken string, err error) {
|
||||
claims := &SignedDetails{
|
||||
Email: email,
|
||||
First_name: firstName,
|
||||
Last_name: lastName,
|
||||
Uid: uid,
|
||||
StandardClaims: jwt.StandardClaims{
|
||||
ExpiresAt: time.Now().Local().Add(time.Hour * time.Duration(24)).Unix(),
|
||||
},
|
||||
}
|
||||
refreshClaims := &SignedDetails{
|
||||
StandardClaims: jwt.StandardClaims{
|
||||
ExpiresAt: time.Now().Local().Add(time.Hour * time.Duration(168)).Unix(),
|
||||
},
|
||||
}
|
||||
token, err := jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString([]byte(SECRET_KEY))
|
||||
refreshToken, err := jwt.NewWithClaims(jwt.SigningMethodES256, refreshClaims).SignedString([]byte(SECRET_KEY))
|
||||
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
return
|
||||
}
|
||||
return token, refreshToken, err
|
||||
}
|
||||
|
||||
func ValidateToken(signedToken string) (claims *SignedDetails, msg string) {
|
||||
token, err := jwt.ParseWithClaims(
|
||||
signedToken,
|
||||
&SignedDetails{},
|
||||
func(t *jwt.Token) (interface{}, error) {
|
||||
return []byte(SECRET_KEY), nil
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
msg = err.Error()
|
||||
return
|
||||
}
|
||||
claims, ok := token.Claims.(*SignedDetails)
|
||||
if !ok {
|
||||
msg = fmt.Sprintf("The token is invalid")
|
||||
msg = err.Error()
|
||||
return
|
||||
}
|
||||
|
||||
if claims.ExpiresAt < time.Now().Local().Unix() {
|
||||
msg = fmt.Sprintf("token is expired")
|
||||
msg = err.Error()
|
||||
return
|
||||
}
|
||||
return claims, msg
|
||||
}
|
||||
|
||||
func UpdateAllToken(signedToken string, signedRefreshToken string, userId string) {
|
||||
var ctx, cancel = context.WithTimeout(context.Background(), 100*time.Second)
|
||||
var updateObj primitive.D
|
||||
|
||||
updateObj = append(updateObj, bson.E{"token", signedToken})
|
||||
updateObj = append(updateObj, bson.E{"refresh_token", signedRefreshToken})
|
||||
|
||||
Update_at, _ := time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
|
||||
|
||||
updateObj = append(updateObj, bson.E{"updated_at", Update_at})
|
||||
|
||||
upsert := true
|
||||
filter := bson.M{"user_id": userId}
|
||||
opt := options.UpdateOptions{
|
||||
Upsert: &upsert,
|
||||
}
|
||||
_, err := userCollection.UpdateOne(ctx, filter, bson.D{
|
||||
{"$set", updateObj},
|
||||
}, &opt)
|
||||
defer cancel()
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user