6
6
"github.com/itzcodex24/edu-swipe-api/database"
7
7
"github.com/itzcodex24/edu-swipe-api/models"
8
8
"golang.org/x/crypto/bcrypt"
9
+ "os"
9
10
"strconv"
10
11
"time"
11
12
)
@@ -19,60 +20,91 @@ func GetHello(ctx *fiber.Ctx) error {
19
20
20
21
func Register (ctx * fiber.Ctx ) error {
21
22
var data map [string ]string
23
+
22
24
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
+ })
24
37
}
25
38
26
39
password , err := bcrypt .GenerateFromPassword ([]byte (data ["password" ]), 14 )
27
40
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
+ })
29
46
}
30
47
31
48
user := models.User {
32
49
Name : data ["name" ],
33
50
Email : data ["email" ],
34
- Password : password ,
51
+ Password : string ( password ) ,
35
52
}
36
53
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
+ })
39
66
}
40
67
41
68
func Login (c * fiber.Ctx ) error {
42
69
var data map [string ]string
43
70
44
71
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
+ })
46
77
}
47
78
48
79
var user models.User
49
80
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 )
53
83
return c .JSON (fiber.Map {
54
84
"message" : "user not found" ,
55
- "status " : fiber . StatusNotFound ,
85
+ "ok " : false ,
56
86
})
57
87
}
58
88
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 {
60
90
c .Status (fiber .StatusBadRequest )
61
91
return c .JSON (fiber.Map {
62
- "message" : "Incorrect password" ,
92
+ "message" : "Password or email provided are not correct" ,
93
+ "ok" : false ,
63
94
})
64
95
}
65
96
claims := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt.RegisteredClaims {
66
97
Issuer : strconv .Itoa (int (user .Id )),
67
98
ExpiresAt : jwt .NewNumericDate (time .Now ().Add (time .Hour * 24 )),
68
99
})
69
100
70
- token , err := claims .SignedString ([]byte ("supersecretstring" ))
101
+ token , err := claims .SignedString ([]byte (os . Getenv ( "SECRET_KEY" ) ))
71
102
72
103
if err != nil {
73
104
c .Status (fiber .StatusInternalServerError )
74
105
return c .JSON (fiber.Map {
75
106
"message" : "Couldn't log you in" ,
107
+ "ok" : false ,
76
108
})
77
109
}
78
110
@@ -86,34 +118,43 @@ func Login(c *fiber.Ctx) error {
86
118
87
119
return c .JSON (fiber.Map {
88
120
"message" : "Logged in" ,
121
+ "ok" : true ,
89
122
})
90
123
}
91
124
92
125
func User (c * fiber.Ctx ) error {
93
126
cookie := c .Cookies ("jwt" )
94
127
95
128
token , err := jwt .Parse (cookie , func (token * jwt.Token ) (interface {}, error ) {
96
- return []byte ("supersecretstring" ), nil
129
+ return []byte (os . Getenv ( "SECRET_KEY" ) ), nil
97
130
})
98
131
99
132
if err != nil {
100
133
c .Status (fiber .StatusUnauthorized )
101
134
return c .JSON (fiber.Map {
102
135
"message" : "Unauthorized" ,
136
+ "ok" : false ,
103
137
})
104
138
}
105
139
106
140
claims , ok := token .Claims .(jwt.MapClaims )
107
- if ! ok {
141
+ if ! ok || claims [ "iss" ] == nil {
108
142
c .Status (fiber .StatusUnauthorized )
109
143
return c .JSON (fiber.Map {
110
144
"message" : "Unauthorized" ,
145
+ "ok" : false ,
111
146
})
112
147
}
113
148
114
149
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 + "!" )
117
158
}
118
159
119
160
func Logout (c * fiber.Ctx ) error {
0 commit comments