Skip to content

Commit f43b555

Browse files
authored
FFM-11807 Fix redis user/password auth (#347)
* FFM-11807 Fix redis user/password auth **What** - Fixes redis username/password auth which wasn't working properly * commit missing change
1 parent a81d9c7 commit f43b555

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

cmd/ff-proxy/main.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ var (
6363
configDir string
6464
redisAddress string
6565
redisPassword string
66+
redisUsername string
6667
redisDB int
6768
redisPoolSize int
6869

@@ -105,6 +106,7 @@ const (
105106
configDirEnv = "CONFIG_DIR"
106107
redisAddrEnv = "REDIS_ADDRESS"
107108
redisPasswordEnv = "REDIS_PASSWORD"
109+
redisUsernameEnv = "REDIS_USERNAME"
108110
redisDBEnv = "REDIS_DB"
109111
redisPoolSizeEnv = "REDIS_POOL_SIZE"
110112

@@ -147,6 +149,7 @@ const (
147149
offlineFlag = "offline"
148150
redisAddressFlag = "redis-address"
149151
redisPasswordFlag = "redis-password"
152+
redisUsernameFlag = "redis-username"
150153
redisDBFlag = "redis-db"
151154
redisPoolSizeFlag = "redis-pool-size"
152155

@@ -189,6 +192,7 @@ func init() {
189192
flag.StringVar(&configDir, configDirFlag, "/config", "specify a custom path to search for the offline config directory. Defaults to /config")
190193
flag.StringVar(&redisAddress, redisAddressFlag, "", "Redis host:port address")
191194
flag.StringVar(&redisPassword, redisPasswordFlag, "", "Optional. Redis password")
195+
flag.StringVar(&redisUsername, redisUsernameFlag, "", "Optional. Redis username")
192196
flag.IntVar(&redisDB, redisDBFlag, 0, "Database to be selected after connecting to the server.")
193197
flag.IntVar(&redisPoolSize, redisPoolSizeFlag, 10, "sets the redi connection pool size, to this value multipled by the number of CPU available. E.g if this value is 10 and you've 2 CPU the connection pool size will be 20")
194198

@@ -221,6 +225,7 @@ func init() {
221225
authSecretEnv: authSecretFlag,
222226
redisAddrEnv: redisAddressFlag,
223227
redisPasswordEnv: redisPasswordFlag,
228+
redisUsernameEnv: redisUsernameFlag,
224229
redisDBEnv: redisDBFlag,
225230
redisPoolSizeEnv: redisPoolSizeFlag,
226231
metricPostDurationEnv: metricPostDurationFlag,
@@ -312,7 +317,7 @@ func main() {
312317
var hashCache *cache.HashCache
313318

314319
if redisAddress != "" && !generateOfflineConfig { //nolint:nestif
315-
redisClient = newRedisClient(redisAddress, logger)
320+
redisClient = newRedisClient(redisAddress, redisUsername, redisPassword, logger)
316321

317322
mcMetrics := cache.NewMemoizeMetrics("proxy", promReg)
318323
mcCache := cache.NewMemoizeCache(redisClient, 1*time.Minute, 2*time.Minute, mcMetrics)
@@ -670,7 +675,7 @@ func removeRedisScheme(addr string) string {
670675
return strings.TrimPrefix(strings.TrimPrefix(addr, "redis://"), "rediss://")
671676
}
672677

673-
func newRedisClient(addr string, logger log.Logger) redis.UniversalClient {
678+
func newRedisClient(addr string, username string, password string, logger log.Logger) redis.UniversalClient {
674679
splitAddr := strings.Split(addr, ",")
675680

676681
// if address does not start with redis:// or rediss:// then default to redis://
@@ -693,8 +698,8 @@ func newRedisClient(addr string, logger log.Logger) redis.UniversalClient {
693698
opts := redis.UniversalOptions{
694699
Addrs: splitAddr,
695700
DB: parsed.DB,
696-
Username: parsed.Username,
697-
Password: parsed.Password,
701+
Username: username,
702+
Password: password,
698703
PoolSize: redisPoolSize * runtime.NumCPU(),
699704
TLSConfig: parsed.TLSConfig,
700705
}
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
version: "3.9"
2+
services:
3+
primary:
4+
image: "harness/ff-proxy:dev-latest-v2"
5+
environment:
6+
- LOG_LEVEL=DEBUG
7+
- PROXY_KEY=<proxy key>
8+
- REDIS_ADDRESS=redis:6379
9+
- REDIS_USERNAME=your_username
10+
- REDIS_PASSWORD=your_password
11+
- READ_REPLICA=false
12+
- AUTH_SECRET=foobar
13+
ports:
14+
- "7001:7000"
15+
depends_on:
16+
- redis
17+
18+
replica:
19+
image: "harness/ff-proxy:dev-latest-v2"
20+
environment:
21+
- LOG_LEVEL=INFO
22+
- REDIS_ADDRESS=redis:6379
23+
- REDIS_USERNAME=your_username
24+
- REDIS_PASSWORD=your_password
25+
- READ_REPLICA=true
26+
- AUTH_SECRET=foobar
27+
ports:
28+
- "7002:7000"
29+
depends_on:
30+
- redis
31+
32+
redis:
33+
image: "redis:7.2.5"
34+
ports:
35+
- "6379:6379"
36+
volumes:
37+
- ./redis.conf:/usr/local/etc/redis/redis.conf
38+
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]

examples/redis_auth/redis.conf

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Require clients to issue AUTH <PASSWORD> before processing any other commands.
2+
requirepass your_password
3+
4+
# ACLs (Access Control Lists)
5+
user your_username on >your_password ~* +@all

0 commit comments

Comments
 (0)