Skip to content

Commit 016ff76

Browse files
Merge pull request #47 from memphisdev/backward-compatability
Backward compatability
2 parents 7adc000 + f158911 commit 016ff76

File tree

3 files changed

+88
-42
lines changed

3 files changed

+88
-42
lines changed

handlers/auth.go

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import (
1616
)
1717

1818
var configuration = conf.GetConfig()
19-
var connectionsCacheLock sync.Mutex
19+
var ConnectionsCacheLock sync.Mutex
2020

2121
const (
22-
errorMsgAuthorizationViolation = "authorization violation"
23-
errorMsgMissionAccountId = "account id"
22+
ErrorMsgAuthorizationViolation = "authorization violation"
23+
ErrorMsgMissionAccountId = "account id"
2424
)
2525

2626
type AuthHandler struct{}
@@ -35,9 +35,9 @@ type refreshTokenExpiration struct {
3535
RefreshTokenExpiration int64 `json:"refresh_token_expiration"`
3636
}
3737

38-
var connectionsCache = map[string]map[string]Connection{}
38+
var ConnectionsCache = map[string]map[string]Connection{}
3939

40-
func connect(password, username, connectionToken string, accountId int) (*memphis.Conn, error) {
40+
func Connect(password, username, connectionToken string, accountId int) (*memphis.Conn, error) {
4141
if configuration.USER_PASS_BASED_AUTH {
4242
if accountId == 0 {
4343
accountId = 1
@@ -75,10 +75,10 @@ func (ah AuthHandler) Authenticate(c *fiber.Ctx) error {
7575
})
7676
}
7777

78-
conn, err := connect(body.Password, body.Username, body.ConnectionToken, int(body.AccountId))
78+
conn, err := Connect(body.Password, body.Username, body.ConnectionToken, int(body.AccountId))
7979
if err != nil {
8080
errMsg := strings.ToLower(err.Error())
81-
if strings.Contains(errMsg, errorMsgAuthorizationViolation) || strings.Contains(errMsg, "token") || strings.Contains(errMsg, errorMsgMissionAccountId) {
81+
if strings.Contains(errMsg, ErrorMsgAuthorizationViolation) || strings.Contains(errMsg, "token") || strings.Contains(errMsg, ErrorMsgMissionAccountId) {
8282
log.Warnf("Authentication error")
8383
return c.Status(401).JSON(fiber.Map{
8484
"message": "Unauthorized",
@@ -103,15 +103,15 @@ func (ah AuthHandler) Authenticate(c *fiber.Ctx) error {
103103

104104
username := strings.ToLower(body.Username)
105105
accountId := strconv.Itoa(int(body.AccountId))
106-
if connectionsCache[accountId] == nil {
107-
connectionsCacheLock.Lock()
108-
connectionsCache[accountId] = make(map[string]Connection)
109-
connectionsCacheLock.Unlock()
106+
if ConnectionsCache[accountId] == nil {
107+
ConnectionsCacheLock.Lock()
108+
ConnectionsCache[accountId] = make(map[string]Connection)
109+
ConnectionsCacheLock.Unlock()
110110
}
111111

112-
connectionsCacheLock.Lock()
113-
connectionsCache[accountId][username] = Connection{Connection: conn, ExpirationTime: tokenExpiry}
114-
connectionsCacheLock.Unlock()
112+
ConnectionsCacheLock.Lock()
113+
ConnectionsCache[accountId][username] = Connection{Connection: conn, ExpirationTime: tokenExpiry}
114+
ConnectionsCacheLock.Unlock()
115115
return c.Status(fiber.StatusOK).JSON(fiber.Map{
116116
"jwt": token,
117117
"expires_in": tokenExpiry * 60 * 1000,
@@ -186,10 +186,10 @@ func (ah AuthHandler) RefreshToken(c *fiber.Ctx) error {
186186
password := userData.Password
187187
connectionToken := userData.ConnectionToken
188188

189-
conn, err := connect(password, username, connectionToken, accountId)
189+
conn, err := Connect(password, username, connectionToken, accountId)
190190
if err != nil {
191191
errMsg := strings.ToLower(err.Error())
192-
if strings.Contains(errMsg, errorMsgAuthorizationViolation) || strings.Contains(errMsg, "token") || strings.Contains(errMsg, errorMsgMissionAccountId) {
192+
if strings.Contains(errMsg, ErrorMsgAuthorizationViolation) || strings.Contains(errMsg, "token") || strings.Contains(errMsg, ErrorMsgMissionAccountId) {
193193
log.Warnf("RefreshToken: Authentication error")
194194
return c.Status(401).JSON(fiber.Map{
195195
"message": "Unauthorized",
@@ -211,15 +211,15 @@ func (ah AuthHandler) RefreshToken(c *fiber.Ctx) error {
211211
}
212212

213213
accountId = int(accountId)
214-
if connectionsCache[strconv.Itoa(int(accountId))] == nil {
215-
connectionsCacheLock.Lock()
216-
connectionsCache[strconv.Itoa(accountId)] = make(map[string]Connection)
217-
connectionsCacheLock.Unlock()
214+
if ConnectionsCache[strconv.Itoa(int(accountId))] == nil {
215+
ConnectionsCacheLock.Lock()
216+
ConnectionsCache[strconv.Itoa(accountId)] = make(map[string]Connection)
217+
ConnectionsCacheLock.Unlock()
218218
}
219219

220-
connectionsCacheLock.Lock()
221-
connectionsCache[strconv.Itoa(accountId)][username] = Connection{Connection: conn, ExpirationTime: refreshTokenExpiry}
222-
connectionsCacheLock.Unlock()
220+
ConnectionsCacheLock.Lock()
221+
ConnectionsCache[strconv.Itoa(accountId)][username] = Connection{Connection: conn, ExpirationTime: refreshTokenExpiry}
222+
ConnectionsCacheLock.Unlock()
223223
return c.Status(fiber.StatusOK).JSON(fiber.Map{
224224
"jwt": token,
225225
"expires_in": tokenExpiry * 60 * 1000,
@@ -230,22 +230,22 @@ func (ah AuthHandler) RefreshToken(c *fiber.Ctx) error {
230230

231231
func CleanConnectionsCache() {
232232
for range time.Tick(time.Second * 30) {
233-
for t, tenant := range connectionsCache {
233+
for t, tenant := range ConnectionsCache {
234234
for u, user := range tenant {
235235
currentTime := time.Now()
236236
unixTimeNow := currentTime.Unix()
237-
conn := connectionsCache[t][u].Connection
237+
conn := ConnectionsCache[t][u].Connection
238238
if unixTimeNow > int64(user.ExpirationTime) {
239239
conn.Close()
240-
connectionsCacheLock.Lock()
241-
delete(connectionsCache[t], u)
242-
connectionsCacheLock.Unlock()
240+
ConnectionsCacheLock.Lock()
241+
delete(ConnectionsCache[t], u)
242+
ConnectionsCacheLock.Unlock()
243243
}
244244
}
245-
if len(connectionsCache[t]) == 0 {
246-
connectionsCacheLock.Lock()
247-
delete(connectionsCache, t)
248-
connectionsCacheLock.Unlock()
245+
if len(ConnectionsCache[t]) == 0 {
246+
ConnectionsCacheLock.Lock()
247+
delete(ConnectionsCache, t)
248+
ConnectionsCacheLock.Unlock()
249249
}
250250
}
251251
}

handlers/producer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func CreateHandleMessage() func(*fiber.Ctx) error {
7070
username := userData.Username
7171
accountId := userData.AccountId
7272
accountIdStr := strconv.Itoa(int(accountId))
73-
conn := connectionsCache[accountIdStr][username].Connection
73+
conn := ConnectionsCache[accountIdStr][username].Connection
7474
if conn == nil {
7575
errMsg := fmt.Sprintf("Connection does not exist")
7676
log.Errorf("CreateHandleMessage - produce: %s", errMsg)
@@ -145,7 +145,7 @@ func CreateHandleBatch() func(*fiber.Ctx) error {
145145
username := userData.Username
146146
accountId := userData.AccountId
147147
accountIdStr := strconv.Itoa(int(accountId))
148-
conn := connectionsCache[accountIdStr][username].Connection
148+
conn := ConnectionsCache[accountIdStr][username].Connection
149149
if conn == nil {
150150
errMsg := fmt.Sprintf("Connection does not exist")
151151
log.Errorf("CreateHandleBatch - produce: %s", errMsg)

middlewares/auth.go

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"rest-gateway/conf"
7+
"rest-gateway/handlers"
78
"rest-gateway/logger"
89
"rest-gateway/models"
910
"strings"
@@ -62,17 +63,24 @@ func verifyToken(tokenString string, secret string) (models.AuthSchema, error) {
6263
}
6364

6465
var user models.AuthSchema
65-
if !configuration.USER_PASS_BASED_AUTH {
66-
user = models.AuthSchema{
67-
Username: claims["username"].(string),
68-
ConnectionToken: claims["connection_token"].(string),
69-
AccountId: 1,
66+
if _, ok := claims["username"].(string); ok {
67+
if !configuration.USER_PASS_BASED_AUTH {
68+
user = models.AuthSchema{
69+
Username: claims["username"].(string),
70+
ConnectionToken: claims["connection_token"].(string),
71+
AccountId: 1,
72+
}
73+
} else {
74+
user = models.AuthSchema{
75+
Username: claims["username"].(string),
76+
Password: claims["password"].(string),
77+
AccountId: claims["account_id"].(float64),
78+
}
7079
}
7180
} else {
81+
// for backward compatability
7282
user = models.AuthSchema{
73-
Username: claims["username"].(string),
74-
Password: claims["password"].(string),
75-
AccountId: claims["account_id"].(float64),
83+
TokenExpiryMins: int(claims["exp"].(float64)),
7684
}
7785
}
7886
return user, nil
@@ -144,6 +152,44 @@ func Authenticate(c *fiber.Ctx) error {
144152
user.AccountId = 1
145153
}
146154

155+
// for backward compatability
156+
if strings.HasSuffix(path, "/produce/single") || strings.HasSuffix(path, "/produce/batch") || path == "/auth/refreshtoken" {
157+
if user.Username == "" {
158+
accountId := 1
159+
conn, err := handlers.Connect(configuration.ROOT_PASSWORD, configuration.ROOT_USER, configuration.CONNECTION_TOKEN, accountId)
160+
if err != nil {
161+
errMsg := strings.ToLower(err.Error())
162+
if strings.Contains(errMsg, handlers.ErrorMsgAuthorizationViolation) || strings.Contains(errMsg, "token") || strings.Contains(errMsg, handlers.ErrorMsgMissionAccountId) {
163+
log.Warnf("Authentication error")
164+
return c.Status(401).JSON(fiber.Map{
165+
"message": "Unauthorized",
166+
})
167+
}
168+
}
169+
if handlers.ConnectionsCache["1"] == nil {
170+
handlers.ConnectionsCacheLock.Lock()
171+
handlers.ConnectionsCache["1"] = make(map[string]handlers.Connection)
172+
handlers.ConnectionsCacheLock.Unlock()
173+
}
174+
175+
handlers.ConnectionsCache["1"][configuration.ROOT_USER] = handlers.Connection{Connection: conn, ExpirationTime: int64(user.TokenExpiryMins)}
176+
177+
if !configuration.USER_PASS_BASED_AUTH {
178+
user = models.AuthSchema{
179+
Username: configuration.ROOT_USER,
180+
ConnectionToken: configuration.CONNECTION_TOKEN,
181+
AccountId: 1,
182+
}
183+
} else {
184+
user = models.AuthSchema{
185+
Username: configuration.ROOT_USER,
186+
Password: configuration.ROOT_PASSWORD,
187+
AccountId: 1,
188+
}
189+
}
190+
}
191+
}
192+
147193
c.Locals("userData", user)
148194
return c.Next()
149195
}

0 commit comments

Comments
 (0)