Skip to content

Commit 53baf4d

Browse files
committed
feat: All token system moved to JWT instead of random DB generated string
1 parent b87da9d commit 53baf4d

File tree

11 files changed

+53
-133
lines changed

11 files changed

+53
-133
lines changed

app/handlers/extension.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,6 @@ func ExtensionRunner(c *fiber.Ctx) error {
4949

5050
formValues := helpers.GetFormData(c)
5151

52-
token := c.FormValue("token")
53-
if len(c.FormValue("liman-token")) > 0 {
54-
token = c.FormValue("liman-token")
55-
}
56-
5752
command, err := sandbox.GenerateCommand(
5853
extension,
5954
credentials,
@@ -63,7 +58,7 @@ func ExtensionRunner(c *fiber.Ctx) error {
6358
Extension: c.FormValue("extension_id"),
6459
Server: c.FormValue("server_id"),
6560
RequestData: formValues,
66-
Token: token,
61+
Token: c.Locals("token").(string),
6762
BaseURL: c.FormValue("lmnbaseurl", c.Get("origin")),
6863
Locale: c.FormValue("locale", helpers.Env("APP_LANG", "tr")),
6964
LogID: c.Locals("log_id").(string),

app/handlers/external.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ func ExternalAPI(c *fiber.Ctx) error {
5454

5555
formValues := helpers.GetFormData(c)
5656

57-
token := c.FormValue("token")
58-
if len(c.FormValue("liman-token")) > 0 {
59-
token = c.FormValue("liman-token")
60-
}
61-
6257
command, err := sandbox.GenerateCommand(
6358
extension,
6459
credentials,
@@ -68,7 +63,7 @@ func ExternalAPI(c *fiber.Ctx) error {
6863
Extension: c.FormValue("extension_id"),
6964
Server: c.FormValue("server_id"),
7065
RequestData: formValues,
71-
Token: token,
66+
Token: c.Locals("token").(string),
7267
BaseURL: c.FormValue("lmnbaseurl", c.Get("origin")),
7368
Locale: c.FormValue("locale", helpers.Env("APP_LANG", "tr")),
7469
LogID: c.Locals("log_id").(string),

app/handlers/file.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,6 @@ func DownloadFile(c *fiber.Ctx) error {
134134

135135
formValues := helpers.GetFormData(c)
136136

137-
token := c.FormValue("token")
138-
if len(c.FormValue("liman-token")) > 0 {
139-
token = c.FormValue("liman-token")
140-
}
141-
142137
_, err = sandbox.GenerateCommand(
143138
extension,
144139
credentials,
@@ -148,7 +143,7 @@ func DownloadFile(c *fiber.Ctx) error {
148143
Extension: c.FormValue("extension_id"),
149144
Server: c.FormValue("server_id"),
150145
RequestData: formValues,
151-
Token: token,
146+
Token: c.Locals("token").(string),
152147
BaseURL: c.FormValue("lmnbaseurl", c.Get("origin")),
153148
Locale: c.FormValue("locale", helpers.Env("APP_LANG", "tr")),
154149
LogID: c.Locals("log_id").(string),

app/handlers/job.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,6 @@ func BackgroundJob(c *fiber.Ctx) error {
4545

4646
formValues := helpers.GetFormData(c)
4747

48-
token := c.FormValue("token")
49-
if len(c.FormValue("liman-token")) > 0 {
50-
token = c.FormValue("liman-token")
51-
}
52-
5348
command, err := sandbox.GenerateCommand(
5449
extension,
5550
credentials,
@@ -59,7 +54,7 @@ func BackgroundJob(c *fiber.Ctx) error {
5954
Extension: c.FormValue("extension_id"),
6055
Server: c.FormValue("server_id"),
6156
RequestData: formValues,
62-
Token: token,
57+
Token: c.Locals("token").(string),
6358
BaseURL: c.FormValue("lmnbaseurl", c.Get("origin")),
6459
Locale: c.FormValue("locale", helpers.Env("APP_LANG", "tr")),
6560
},

app/middleware/auth/new.go

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,64 +22,56 @@ type Cookie struct {
2222

2323
// authorization Middleware auths users before requests
2424
func authorization(c *fiber.Ctx) error {
25-
cookie := new(Cookie)
26-
c.CookieParser(cookie)
25+
if len(c.FormValue("liman-token")) > 0 {
26+
user, err := liman.AuthWithAccessToken(
27+
strings.Trim(c.FormValue("liman-token"), ""),
28+
)
2729

28-
if len(cookie.Token) > 0 {
29-
decoded, err := url.QueryUnescape(cookie.Token)
3030
if err != nil {
31-
logger.FiberError(fiber.StatusUnauthorized, "invalid authorization token (cookie), "+err.Error())
31+
return logger.FiberError(fiber.StatusUnauthorized, err.Error())
3232
}
3333

34-
if len(decoded) < 1 {
35-
return logger.FiberError(fiber.StatusUnauthorized, "authorization token is missing")
36-
}
34+
c.Locals("user_id", user)
35+
return c.Next()
36+
}
3737

38-
code, err := helpers.LaravelAesDecrypt("token", decoded)
38+
if len(string(c.Request().Header.Peek("Authorization"))) > 0 {
39+
code, err := helpers.LaravelAesDecrypt("token", c.FormValue("token"))
3940
if err != nil {
40-
return logger.FiberError(fiber.StatusUnauthorized, "invalid authorization token (cookie), "+err.Error())
41+
return jwtValidation(c, c.FormValue("token"))
4142
}
4243

4344
return jwtValidation(c, code)
4445
}
4546

46-
if len(c.FormValue("token")) > 0 {
47-
user, err := liman.AuthWithToken(
48-
strings.Trim(c.FormValue("token"), ""),
49-
)
47+
cookie := new(Cookie)
48+
c.CookieParser(cookie)
5049

50+
if len(cookie.Token) > 0 {
51+
decoded, err := url.QueryUnescape(cookie.Token)
5152
if err != nil {
52-
return logger.FiberError(fiber.StatusUnauthorized, err.Error())
53+
logger.FiberError(fiber.StatusUnauthorized, "invalid authorization token (cookie), "+err.Error())
5354
}
5455

55-
c.Locals("user_id", user)
56-
return c.Next()
57-
}
58-
59-
if len(c.FormValue("liman-token")) > 0 {
60-
user, err := liman.AuthWithAccessToken(
61-
strings.Trim(c.FormValue("liman-token"), ""),
62-
)
56+
if len(decoded) < 1 {
57+
return logger.FiberError(fiber.StatusUnauthorized, "authorization token is missing")
58+
}
6359

60+
code, err := helpers.LaravelAesDecrypt("token", decoded)
6461
if err != nil {
65-
return logger.FiberError(fiber.StatusUnauthorized, err.Error())
62+
return jwtValidation(c, decoded)
6663
}
6764

68-
c.Locals("user_id", user)
69-
return c.Next()
65+
return jwtValidation(c, code)
7066
}
7167

72-
if len(string(c.Request().Header.Peek("Authorization"))) > 0 {
73-
user, err := liman.AuthWithToken(
74-
strings.Trim(string(c.Request().Header.Peek("Authorization")), ""),
75-
)
76-
68+
if len(c.FormValue("token")) > 0 {
69+
code, err := helpers.LaravelAesDecrypt("token", c.FormValue("token"))
7770
if err != nil {
78-
return logger.FiberError(fiber.StatusUnauthorized, err.Error())
71+
return jwtValidation(c, c.FormValue("token"))
7972
}
8073

81-
c.Locals("user_id", user)
82-
return c.Next()
74+
return jwtValidation(c, code)
8375
}
8476

8577
return logger.FiberError(fiber.StatusUnauthorized, "authorization token is missing")
@@ -99,6 +91,7 @@ func jwtValidation(c *fiber.Ctx, code string) error {
9991

10092
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
10193
c.Locals("user_id", claims["sub"])
94+
c.Locals("token", code)
10295
return c.Next()
10396
} else {
10497
return logger.FiberError(fiber.StatusUnauthorized, "invalid authorization token")

app/models/token.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ require (
5252
github.com/andybalholm/brotli v1.0.6 // indirect
5353
github.com/avast/retry-go v3.0.0+incompatible
5454
github.com/dariubs/gorm-jsonb v0.1.5
55+
github.com/dgrijalva/jwt-go v3.2.0+incompatible
5556
github.com/go-sql-driver/mysql v1.7.1 // indirect
5657
github.com/hirochachacha/go-smb2 v1.1.0
5758
github.com/jackc/pgpassfile v1.0.0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ github.com/dariubs/gorm-jsonb v0.1.5/go.mod h1:e6GXwMviS3e9QxADNOWWZq0WBTdxpK2So
1919
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2020
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2121
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
22+
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
23+
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
2224
github.com/geoffgarside/ber v1.1.0 h1:qTmFG4jJbwiSzSXoNJeHcOprVzZ8Ulde2Rrrifu5U9w=
2325
github.com/geoffgarside/ber v1.1.0/go.mod h1:jVPKeCbj6MvQZhwLYsGwaGI52oUorHoHKNecGT85ZCc=
2426
github.com/go-co-op/gocron v1.35.3 h1:it2WjWnabS8eJZ+P68WroBe+ZWyJ3kVjRD6KXdpr5yI=

internal/liman/auth.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,6 @@ import (
77
"github.com/limanmys/render-engine/pkg/logger"
88
)
99

10-
// AuthWithToken Auth user with proprietary Liman token
11-
func AuthWithToken(token string) (string, error) {
12-
tokenObj := &models.Token{}
13-
14-
err := database.Connection().First(&tokenObj, "token = ?", token).Error
15-
16-
if err != nil || len(tokenObj.UserID) < 1 {
17-
return "", logger.FiberError(fiber.StatusUnauthorized, "authorization token is not valid")
18-
}
19-
20-
return tokenObj.UserID, nil
21-
}
22-
2310
// AuthWithAccessToken Auth user with generated access token
2411
func AuthWithAccessToken(token string) (string, error) {
2512
tokenObj := &models.AccessToken{}

internal/user_token/user_token.go

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,29 @@
11
package user_token
22

33
import (
4+
"os"
45
"time"
56

6-
"github.com/google/uuid"
7-
"github.com/limanmys/render-engine/app/models"
8-
"github.com/limanmys/render-engine/internal/database"
9-
gorandom "github.com/zekiahmetbayar/go-random"
7+
"github.com/dgrijalva/jwt-go"
108
)
119

12-
// Create a new token or retrieve old one
10+
// Create a new token for user purpose of internal use
1311
func Create(user_id string) (string, error) {
14-
// Search token on database
15-
var token models.Token
16-
database.Connection().Model(&models.Token{}).Where("user_id = ?", user_id).First(&token)
17-
18-
// If token does not exists, create token
19-
if token.ID == "" {
20-
// Create new id for token
21-
uid := uuid.New()
22-
// Generate token
23-
token := generate()
24-
// Create token on database
25-
if err := database.Connection().Model(&models.Token{}).Create(models.Token{
26-
ID: uid.String(),
27-
CreatedAt: time.Now().Format(time.RFC3339),
28-
UpdatedAt: time.Now().Format(time.RFC3339),
29-
UserID: user_id,
30-
Token: token,
31-
}).Error; err != nil {
32-
return "", err
33-
}
34-
35-
return token, nil
36-
}
37-
// Get token update date
38-
updateDate, err := time.Parse(time.RFC3339, token.UpdatedAt)
39-
if err != nil {
40-
return "", err
41-
}
42-
// If token updated after 6 hours
43-
if time.Since(updateDate).Hours() > 6 {
44-
// TODO: Update token
45-
token_str := generate()
46-
if err := database.Connection().Model(&token).Update("token", token_str).Error; err != nil {
47-
return "", err
48-
}
49-
return token_str, nil
12+
// Define the JWT claims
13+
claims := jwt.MapClaims{
14+
"sub": user_id,
15+
"exp": time.Now().Add(time.Minute * 15).Unix(), // Token expiration time
5016
}
5117

52-
return token.Token, nil
53-
}
18+
// Create the JWT token
19+
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
5420

55-
// Generate a new token
56-
func generate() string {
57-
token, err := gorandom.String(false, true, false, 32)
21+
// Sign the token with a secret key
22+
// Replace "your-secret-key" with your actual secret key
23+
tokenString, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
5824
if err != nil {
59-
return ""
25+
return "", err
6026
}
6127

62-
return token
28+
return tokenString, nil
6329
}

0 commit comments

Comments
 (0)