Skip to content

Commit 687fe2a

Browse files
committed
Fixes and bug fixes
1 parent 55cbc90 commit 687fe2a

File tree

4 files changed

+69
-26
lines changed

4 files changed

+69
-26
lines changed

controllers/auth.go

+58-17
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/itzcodex24/edu-swipe-api/database"
77
"github.com/itzcodex24/edu-swipe-api/models"
88
"golang.org/x/crypto/bcrypt"
9+
"os"
910
"strconv"
1011
"time"
1112
)
@@ -19,60 +20,91 @@ func GetHello(ctx *fiber.Ctx) error {
1920

2021
func Register(ctx *fiber.Ctx) error {
2122
var data map[string]string
23+
2224
if err := ctx.BodyParser(&data); err != nil {
23-
return err
25+
if err := ctx.SendStatus(fiber.StatusBadRequest); err != nil {
26+
ctx.Status(fiber.StatusInternalServerError)
27+
if err := ctx.JSON(fiber.Map{
28+
"message": "Invalid request",
29+
"ok": false,
30+
}); err != nil {
31+
panic("Couldn't send response" + err.Error())
32+
}
33+
}
34+
return ctx.JSON(fiber.Map{
35+
"message": "Invalid request",
36+
})
2437
}
2538

2639
password, err := bcrypt.GenerateFromPassword([]byte(data["password"]), 14)
2740
if err != nil {
28-
return err
41+
ctx.Status(fiber.StatusInternalServerError)
42+
return ctx.JSON(fiber.Map{
43+
"message": "Couldn't hash password",
44+
"ok": false,
45+
})
2946
}
3047

3148
user := models.User{
3249
Name: data["name"],
3350
Email: data["email"],
34-
Password: password,
51+
Password: string(password),
3552
}
3653

37-
database.DB.Create(&user)
38-
return ctx.JSON(user)
54+
if err := database.DB.Create(&user); err.Error != nil {
55+
ctx.Status(fiber.StatusInternalServerError)
56+
return ctx.JSON(fiber.Map{
57+
"message": "Couldn't create user",
58+
"ok": false,
59+
})
60+
}
61+
return ctx.JSON(fiber.Map{
62+
"message": "User created successfully",
63+
"ok": true,
64+
"statusCode": fiber.StatusCreated,
65+
})
3966
}
4067

4168
func Login(c *fiber.Ctx) error {
4269
var data map[string]string
4370

4471
if err := c.BodyParser(&data); err != nil {
45-
return err
72+
c.Status(fiber.StatusBadRequest)
73+
return c.JSON(fiber.Map{
74+
"message": "Invalid request",
75+
"ok": false,
76+
})
4677
}
4778

4879
var user models.User
4980

50-
database.DB.Where("email = ?", data["email"]).First(&user)
51-
52-
if user.Id == 0 {
81+
if err := database.DB.Where("email = ?", data["email"]).First(&user); err.Error != nil {
82+
c.Status(fiber.StatusNotFound)
5383
return c.JSON(fiber.Map{
5484
"message": "user not found",
55-
"status": fiber.StatusNotFound,
85+
"ok": false,
5686
})
5787
}
5888

59-
if err := bcrypt.CompareHashAndPassword(user.Password, []byte(data["password"])); err != nil {
89+
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(data["password"])); err != nil {
6090
c.Status(fiber.StatusBadRequest)
6191
return c.JSON(fiber.Map{
62-
"message": "Incorrect password",
92+
"message": "Password or email provided are not correct",
93+
"ok": false,
6394
})
6495
}
6596
claims := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.RegisteredClaims{
6697
Issuer: strconv.Itoa(int(user.Id)),
6798
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 24)),
6899
})
69100

70-
token, err := claims.SignedString([]byte("supersecretstring"))
101+
token, err := claims.SignedString([]byte(os.Getenv("SECRET_KEY")))
71102

72103
if err != nil {
73104
c.Status(fiber.StatusInternalServerError)
74105
return c.JSON(fiber.Map{
75106
"message": "Couldn't log you in",
107+
"ok": false,
76108
})
77109
}
78110

@@ -86,34 +118,43 @@ func Login(c *fiber.Ctx) error {
86118

87119
return c.JSON(fiber.Map{
88120
"message": "Logged in",
121+
"ok": true,
89122
})
90123
}
91124

92125
func User(c *fiber.Ctx) error {
93126
cookie := c.Cookies("jwt")
94127

95128
token, err := jwt.Parse(cookie, func(token *jwt.Token) (interface{}, error) {
96-
return []byte("supersecretstring"), nil
129+
return []byte(os.Getenv("SECRET_KEY")), nil
97130
})
98131

99132
if err != nil {
100133
c.Status(fiber.StatusUnauthorized)
101134
return c.JSON(fiber.Map{
102135
"message": "Unauthorized",
136+
"ok": false,
103137
})
104138
}
105139

106140
claims, ok := token.Claims.(jwt.MapClaims)
107-
if !ok {
141+
if !ok || claims["iss"] == nil {
108142
c.Status(fiber.StatusUnauthorized)
109143
return c.JSON(fiber.Map{
110144
"message": "Unauthorized",
145+
"ok": false,
111146
})
112147
}
113148

114149
var user models.User
115-
database.DB.Where("id = ?", claims["Issuer"]).First(&user)
116-
return c.JSON(user)
150+
if err := database.DB.Where("id = ?", claims["iss"]).First(&user); err.Error != nil {
151+
c.Status(fiber.StatusNotFound)
152+
return c.JSON(fiber.Map{
153+
"message": "User not found",
154+
"ok": false,
155+
})
156+
}
157+
return c.SendString("Hello, " + user.Name + "!")
117158
}
118159

119160
func Logout(c *fiber.Ctx) error {

database/connection.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,27 @@ package database
33
import (
44
"fmt"
55
"github.com/itzcodex24/edu-swipe-api/models"
6+
"github.com/joho/godotenv"
67
"gorm.io/driver/mysql"
78
"gorm.io/gorm"
9+
"os"
810
)
911

1012
var DB *gorm.DB
1113

1214
func Connect() {
1315
if err := godotenv.Load(); err != nil {
14-
fmt.Errorf("error: %v", err)
16+
panic("Failed to load .env file " + err.Error())
1517
}
16-
17-
connection, err := gorm.Open(mysql.Open(os.Getenv("db_user"+":"+os.Getenv("db_password"+"@/eduswipe"))), &gorm.Config{})
18+
19+
connection, err := gorm.Open(mysql.Open(os.Getenv("DB_USER")+":"+os.Getenv("DB_PASSWORD")+"@/eduswipe"), &gorm.Config{})
1820

1921
if err != nil {
2022
panic("Failed to connect to database..")
2123
}
2224

23-
if err := connection.AutoMigrate(models.User{}); err != nil {
24-
panic(err)
25+
if err := connection.AutoMigrate(models.User{}); err != nil {
26+
panic("Failed to migrate database..")
2527
}
2628

2729
fmt.Println("Database connected..")

models/user.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ type User struct {
44
Id uint `json:"id"`
55
Name string `json:"name"`
66
Email string `json:"email" gorm:"unique"`
7-
Password []byte `json:"-"`
7+
Password string `json:"-"`
88
}

routes/authRoutes.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77

88
func Auth(app *fiber.App) {
99
app.Get("/", controllers.GetHello)
10-
app.Post("/login", controllers.Login)
11-
app.Post("/logout", controllers.Logout)
12-
app.Post("/api/register", controllers.Register)
1310
app.Get("/api/user", controllers.User)
11+
app.Post("/api/register", controllers.Register)
12+
app.Post("/api/login", controllers.Login)
13+
app.Post("/api/logout", controllers.Logout)
1414
}

0 commit comments

Comments
 (0)