Skip to content

Commit e09033c

Browse files
committed
added functionallity for multiple API Tokens in API_TOKEN and API_TOKENS
1 parent 76bcd82 commit e09033c

File tree

3 files changed

+29
-58
lines changed

3 files changed

+29
-58
lines changed

internals/proxy/middlewares/auth.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import (
66
"net/url"
77
"strings"
88

9+
"github.com/codeshelldev/secured-signal-api/utils"
910
log "github.com/codeshelldev/secured-signal-api/utils/logger"
1011
)
1112

1213
type AuthMiddleware struct {
1314
Next http.Handler
14-
Token string
15+
Tokens []string
1516
}
1617

1718
type authType string
@@ -34,12 +35,16 @@ func getAuthType(str string) authType {
3435
}
3536
}
3637

38+
func isValidToken(tokens []string, match string) (bool) {
39+
return utils.Contains(tokens, match)
40+
}
41+
3742
func (data AuthMiddleware) Use() http.Handler {
3843
next := data.Next
39-
token := data.Token
44+
tokens := data.Tokens
4045

4146
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
42-
if token == "" {
47+
if len(tokens) <= 0 {
4348
next.ServeHTTP(w, req)
4449
return
4550
}
@@ -60,7 +65,7 @@ func (data AuthMiddleware) Use() http.Handler {
6065

6166
switch authType {
6267
case Bearer:
63-
if authToken == token {
68+
if isValidToken(tokens, authToken) {
6469
success = true
6570
}
6671

@@ -76,7 +81,7 @@ func (data AuthMiddleware) Use() http.Handler {
7681

7782
user := "api"
7883

79-
if basicAuthParams[0] == user && basicAuthParams[1] == token {
84+
if basicAuthParams[0] == user && isValidToken(tokens, basicAuthParams[1]) {
8085
success = true
8186
}
8287
}
@@ -86,7 +91,7 @@ func (data AuthMiddleware) Use() http.Handler {
8691

8792
authToken, _ := url.QueryUnescape(authQuery)
8893

89-
if authToken == token {
94+
if isValidToken(tokens, authToken) {
9095
success = true
9196

9297
modifiedQuery := req.URL.Query()

main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ func main() {
4242
}
4343

4444
auth_m1 := AuthMiddleware{
45-
Next: endp_m2.Use(),
46-
Token: ENV.API_TOKEN,
45+
Next: endp_m2.Use(),
46+
Tokens: ENV.API_TOKENS,
4747
}
4848

4949
log_m0 := LogMiddleware{

utils/env/env.go

Lines changed: 16 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package env
22

33
import (
4-
"encoding/json"
54
"os"
65

76
middlewares "github.com/codeshelldev/secured-signal-api/internals/proxy/middlewares"
7+
"github.com/codeshelldev/secured-signal-api/utils"
88
log "github.com/codeshelldev/secured-signal-api/utils/logger"
99
)
1010

1111
type ENV_ struct {
1212
PORT string
1313
API_URL string
14-
API_TOKEN string
14+
API_TOKENS []string
1515
BLOCKED_ENDPOINTS []string
1616
VARIABLES map[string]any
1717
MESSAGE_ALIASES []middlewares.MessageAlias
@@ -76,7 +76,11 @@ func Load() {
7676
ENV.PORT = os.Getenv("PORT")
7777
ENV.API_URL = os.Getenv("SIGNAL_API_URL")
7878

79-
ENV.API_TOKEN = os.Getenv("API_TOKEN")
79+
apiToken := os.Getenv("API_TOKENS")
80+
81+
if apiToken == "" {
82+
apiToken = os.Getenv("API_TOKEN")
83+
}
8084

8185
blockedEndpointJSON := os.Getenv("BLOCKED_ENDPOINTS")
8286
recipientsJSON := os.Getenv("RECIPIENTS")
@@ -85,59 +89,21 @@ func Load() {
8589

8690
log.Info("Loaded Environment Variables")
8791

88-
if ENV.API_TOKEN == "" {
92+
apiTokens, err := utils.StringToArray(apiToken)
93+
94+
if err != nil {
8995
log.Warn("No API TOKEN provided this is NOT recommended")
9096

9197
log.Info("Disabling Security Features due to incomplete Congfiguration")
9298

9399
ENV.BLOCKED_ENDPOINTS = []string{}
100+
} else {
101+
ENV.API_TOKENS = apiTokens
94102
}
95103

96-
if blockedEndpointJSON != "" {
97-
var blockedEndpoints []string
104+
ENV.BLOCKED_ENDPOINTS = utils.GetJson[[]string](blockedEndpointJSON)
105+
ENV.MESSAGE_ALIASES = utils.GetJson[[]middlewares.MessageAlias](messageAliasesJSON)
98106

99-
err := json.Unmarshal([]byte(blockedEndpointJSON), &blockedEndpoints)
100-
101-
if err != nil {
102-
log.Error("Could not decode Blocked Endpoints: ", blockedEndpointJSON)
103-
}
104-
105-
ENV.BLOCKED_ENDPOINTS = blockedEndpoints
106-
}
107-
108-
if messageAliasesJSON != "" {
109-
var msgAliases []middlewares.MessageAlias
110-
111-
err := json.Unmarshal([]byte(messageAliasesJSON), &msgAliases)
112-
113-
if err != nil {
114-
log.Error("Could not decode Message Aliases ", variablesJSON)
115-
}
116-
117-
ENV.MESSAGE_ALIASES = msgAliases
118-
}
119-
120-
if variablesJSON != "" {
121-
var variables map[string]interface{}
122-
123-
err := json.Unmarshal([]byte(variablesJSON), &variables)
124-
125-
if err != nil {
126-
log.Error("Could not decode Variables ", variablesJSON)
127-
}
128-
129-
ENV.VARIABLES = variables
130-
}
131-
132-
if recipientsJSON != "" {
133-
var recipients []string
134-
135-
err := json.Unmarshal([]byte(recipientsJSON), &recipients)
136-
137-
if err != nil {
138-
log.Error("Could not decode Variables ", variablesJSON)
139-
}
140-
141-
ENV.VARIABLES["RECIPIENTS"] = recipients
142-
}
107+
ENV.VARIABLES = utils.GetJson[map[string]any](variablesJSON)
108+
ENV.VARIABLES["RECIPIENTS"] = utils.GetJson[[]string](recipientsJSON)
143109
}

0 commit comments

Comments
 (0)