Skip to content

Commit 50ff6b5

Browse files
add more business logic to controllers
1 parent 1f3b909 commit 50ff6b5

File tree

2 files changed

+116
-2
lines changed

2 files changed

+116
-2
lines changed

controllers/userController.go

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,27 @@ import (
1515
"github.com/gin-gonic/gin"
1616
"github.com/go-playground/validator/v10"
1717
"go.mongodb.org/mongo-driver/bson"
18+
"go.mongodb.org/mongo-driver/bson/primitive"
1819
"go.mongodb.org/mongo-driver/mongo"
1920
"golang.org/crypto/bcrypt"
21+
"golang.org/x/crypto/bcrypt"
2022
)
2123

2224
var userCollection *mongo.Collection = database.OpenCollection(database.Client, "user")
2325
var validate = validator.New()
2426

2527
func HashPassword() {}
2628

27-
func VerifyPassword() {}
29+
func VerifyPassword(userPassword string, providedPassword string) (bool, string) {
30+
err := bcrypt.CompareHashAndPassword([]byte(providedPassword), []byte(userPassword))
31+
check := true
32+
msg := ""
33+
if err != nil {
34+
msg = fmt.Sprintf("password is incorrect")
35+
check = false
36+
}
37+
return check, msg
38+
}
2839

2940
func Signup() gin.HandlerFunc {
3041
return func(c *gin.Context) {
@@ -57,10 +68,53 @@ func Signup() gin.HandlerFunc {
5768
log.Panic(err)
5869
c.JSON(http.StatusInternalServerError, gin.H{"error": "this email or phoneNo already exists"})
5970
}
71+
user.Created_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
72+
user.Update_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
73+
user.ID = primitive.NewObjectID()
74+
user.User_id = user.ID.Hex()
75+
token, refreshToken, err := helpers.GenerateAllTokens(*user.Email, *user.First_name, *user.Last_name, *user.User_type, *&user.User_id)
76+
if err != nil {
77+
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
78+
return
79+
}
80+
81+
user.Token = &token
82+
user.Refresh_token = &refreshToken
83+
84+
//insert into db
85+
resultInsertionNumber, insertErr := userCollection.InsertOne(ctx, user)
86+
if insertErr != nil {
87+
msg := fmt.Sprintf("User item was not created")
88+
c.JSON(http.StatusInternalServerError, gin.H{"error": msg})
89+
return
90+
}
91+
defer cancel()
92+
c.JSON(http.StatusOK, resultInsertionNumber)
6093
}
6194
}
6295

63-
func Login() {}
96+
func Login() gin.HandlerFunc {
97+
return func(c *gin.Context) {
98+
var ctx, cancel = context.WithTimeout(context.Background(), 100*time.Second)
99+
var user models.User
100+
var foundUser models.User
101+
102+
if err := c.BindJSON(&user); err != nil {
103+
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
104+
return
105+
}
106+
107+
err := userCollection.FindOne(ctx, bson.M{"email": user.Email}).Decode(&foundUser) //store after decoding
108+
defer cancel()
109+
if err != nil {
110+
c.JSON(http.StatusBadRequest, gin.H{"error": "email is incorrect"})
111+
return
112+
}
113+
114+
passwordIsValid, msg := VerifyPassword(*user.Password, *foundUser.Password)
115+
defer cancel()
116+
}
117+
}
64118

65119
func GetUsers() {}
66120

helpers/tokenHelper.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package helpers
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"go/token"
7+
"log"
8+
"os"
9+
"time"
10+
11+
"github.com/adix/gojwt/database"
12+
"github.com/dgrijalva/jwt-go"
13+
jwt "github.com/dgrijalva/jwt-go"
14+
"go.mongodb.org/mongo-driver/bson"
15+
"go.mongodb.org/mongo-driver/bson/primitive"
16+
"go.mongodb.org/mongo-driver/mongo"
17+
"go.mongodb.org/mongo-driver/mongo/options"
18+
)
19+
20+
type SignedDetails struct {
21+
Email string
22+
First_name string
23+
Last_name string
24+
Uid string
25+
User_type string
26+
jwt.StandardClaims
27+
}
28+
29+
var userCollection *mongo.Collection = database.OpenCollection(database.Client, "user")
30+
31+
var SECRET_KEY string = os.Getenv("SECRET_KEY")
32+
33+
func GenerateAllTokens(email string, firstName string, lastName string, userType string, uid string) (signedToken, signedRefreshToken string, err error) {
34+
claims := &SignedDetails{
35+
Email: email,
36+
First_name: firstName,
37+
Last_name: lastName,
38+
Uid: uid,
39+
User_type: userType,
40+
StandardClaims: jwt.StandardClaims{
41+
ExpiresAt: time.Now().Local().Add(time.Hour * time.Duration(24)).Unix(),
42+
},
43+
}
44+
45+
refreshClaims := &SignedDetails{
46+
StandardClaims: jwt.StandardClaims{
47+
ExpiresAt: time.Now().Local().Add(time.Hour * time.Duration(168)).Unix(),
48+
},
49+
}
50+
51+
token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(SECRET_KEY))
52+
53+
refreshToken, err := jwt.NewWithClaims(jwt.SigningMethodHS256, refreshClaims).SignedString([]byte(SECRET_KEY))
54+
55+
if err != nil {
56+
log.Panic(err)
57+
return
58+
}
59+
return token, refreshToken, err
60+
}

0 commit comments

Comments
 (0)