diff --git a/cmd/main.go b/cmd/main.go index d7b86b3..e4ba3b0 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -17,11 +17,9 @@ package main import ( "context" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/commands" - "github.com/echovault/echovault/pkg/config" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/modules/acl" - "github.com/echovault/echovault/pkg/modules/pubsub" "github.com/echovault/echovault/pkg/utils" "log" "os" @@ -30,7 +28,7 @@ import ( ) func main() { - conf, err := config.Config() + conf, err := config.GetConfig() if err != nil { log.Fatal(err) } @@ -53,8 +51,6 @@ func main() { echovault.WithContext(ctx), echovault.WithConfig(conf), echovault.WithCommands(commands.All()), - echovault.WithACL(acl.NewACL(conf)), - echovault.WithPubSub(pubsub.NewPubSub()), ) go server.Start(ctx) diff --git a/coverage/coverage.out b/coverage/coverage.out index 04cab2a..222f97b 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,514 +1,4 @@ mode: set -github.com/echovault/echovault/pkg/modules/acl/acl.go:51.42,56.24 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:56.24,64.3 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:67.2,67.28 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:67.28,69.54 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:69.54,70.14 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:71.9,72.17 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:72.17,73.37 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:73.37,75.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:78.4,80.22 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:80.22,81.61 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:81.61,83.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:86.4,86.39 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:86.39,87.61 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:87.61,89.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:95.2,96.29 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:96.29,97.33 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:97.33,99.9 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:102.2,102.20 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:102.20,104.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:107.2,107.29 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:107.29,109.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:111.2,121.13 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:124.52,129.70 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:129.70,131.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:132.2,136.3 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:139.45,145.33 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:145.33,146.30 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:146.30,147.47 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:147.47,149.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:149.10,152.5 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:156.2,157.45 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:157.45,159.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:161.2,168.12 4 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:171.73,176.37 4 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:176.37,177.28 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:177.28,179.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:182.3,182.31 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:182.31,183.30 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:183.30,185.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:188.3,188.32 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:188.32,189.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:192.3,192.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:192.52,193.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:193.49,195.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:198.3,198.63 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:198.63,200.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:202.2,202.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:205.95,214.19 6 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:214.19,222.60 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:222.60,224.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:225.3,225.24 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:228.2,228.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:228.19,237.31 4 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:237.31,238.28 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:238.28,241.10 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:244.3,244.17 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:244.17,246.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:250.2,250.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:250.19,252.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:255.2,255.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:255.21,261.3 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:263.2,263.46 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:263.46,264.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:264.38,267.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:267.18,274.5 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:278.2,278.50 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:281.125,290.16 6 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:290.16,292.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:294.2,294.56 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:294.56,298.17 4 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:298.17,300.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:304.2,304.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:304.36,306.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:309.2,309.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:309.43,311.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:314.2,314.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:314.37,316.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:319.2,322.29 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:322.29,324.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:327.2,327.57 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:327.57,329.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:332.2,333.65 2 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:333.65,334.101 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:334.101,335.63 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:335.63,337.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:338.4,339.16 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:341.5,342.27 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:342.27,344.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:345.3,345.88 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:349.2,349.64 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:349.64,350.101 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:350.101,351.63 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:351.63,354.5 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:355.4,355.16 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:357.5,359.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:362.2,362.94 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:362.94,364.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:364.5,366.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:369.2,369.93 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:369.93,371.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:371.5,373.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:376.2,376.55 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:376.55,380.105 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:380.105,382.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:382.6,384.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:386.3,386.104 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:386.104,388.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:388.6,390.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:391.3,391.13 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:394.2,394.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:394.19,396.29 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:396.29,398.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:401.3,401.54 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:401.54,402.56 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:402.56,403.96 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:403.96,404.50 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:404.50,406.7 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:407.6,408.18 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:410.7,412.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:416.3,416.55 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:416.55,417.56 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:417.56,418.98 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:418.98,419.51 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:419.51,421.7 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:422.6,423.18 2 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:425.7,427.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/acl.go:431.2,431.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:434.32,438.33 3 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:438.33,443.31 5 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:443.31,444.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:444.37,446.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:448.3,448.25 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:451.2,451.29 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:451.29,452.33 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:452.33,454.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:458.29,460.2 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:462.31,464.2 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:466.30,468.2 1 1 -github.com/echovault/echovault/pkg/modules/acl/acl.go:470.32,472.2 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:32.108,33.34 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:33.34,35.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:36.2,37.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:37.9,39.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:40.2,40.67 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:40.67,42.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:43.2,43.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:46.106,47.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:47.19,49.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:51.2,52.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:52.9,54.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:56.2,58.30 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:58.30,59.27 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:59.27,62.9 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:66.2,66.16 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:66.16,68.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:71.2,75.18 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:75.18,77.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:77.8,79.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:80.2,80.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:80.21,82.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:83.2,83.17 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:83.17,85.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:87.2,88.29 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:88.29,90.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:93.2,94.51 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:94.51,95.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:95.22,97.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:99.3,99.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:101.2,101.51 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:101.51,102.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:102.22,104.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:106.3,106.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:110.2,111.48 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:111.48,112.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:112.21,114.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:116.3,116.47 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:118.2,118.48 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:118.48,119.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:119.21,121.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:123.3,123.47 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:127.2,128.79 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:128.79,129.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:129.37,131.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:133.2,134.30 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:134.30,135.10 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:136.100,138.53 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:139.53,141.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:142.52,144.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:149.2,151.54 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:151.54,153.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:154.2,154.54 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:154.54,156.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:158.2,160.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:163.102,164.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:164.18,166.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:168.2,172.35 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:172.35,173.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:173.36,174.48 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:174.48,176.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:177.4,177.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:179.3,179.50 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:179.50,180.51 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:180.51,183.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:187.2,187.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:187.19,190.34 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:190.34,193.4 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:194.3,195.28 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:195.28,197.24 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:197.24,199.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:201.3,201.26 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:204.2,204.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:204.19,206.46 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:206.46,207.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:207.43,209.38 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:209.38,211.30 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:211.30,213.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:215.5,215.28 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:220.2,220.74 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:223.102,225.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:225.9,227.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:228.2,229.33 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:229.33,231.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:232.2,233.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:236.106,238.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:238.9,240.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:241.2,241.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:241.45,243.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:244.2,244.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:247.108,248.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:248.18,250.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:251.2,252.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:252.9,254.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:255.2,255.53 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:255.53,257.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:258.2,258.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:261.106,263.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:263.9,265.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:266.2,267.74 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:270.103,271.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:271.18,273.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:274.2,275.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:275.9,277.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:278.2,280.33 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:280.33,283.19 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:283.19,285.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:285.9,287.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:289.3,289.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:289.22,291.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:293.3,293.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:293.18,295.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:297.3,297.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:297.43,298.61 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:298.61,300.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:301.4,301.58 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:301.58,303.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:306.3,306.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:306.52,307.23 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:307.23,309.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:311.4,311.39 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:314.3,314.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:314.52,315.23 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:315.23,317.13 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:319.4,319.39 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:322.3,322.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:322.49,323.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:323.22,325.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:327.4,327.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:330.3,330.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:330.49,331.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:331.22,333.13 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:335.4,335.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:338.3,338.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:338.45,339.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:339.52,341.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:343.4,343.41 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:346.3,346.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:346.45,347.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:347.52,349.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:352.3,352.55 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:352.55,354.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:356.3,356.55 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:356.55,358.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:359.3,359.54 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:362.2,363.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:366.103,367.19 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:367.19,369.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:371.2,372.9 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:372.9,374.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:376.2,380.16 4 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:380.16,382.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:384.2,384.15 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:384.15,385.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:385.35,387.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:390.2,394.20 3 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:394.20,395.59 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:395.59,397.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:400.2,400.37 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:400.37,401.59 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:401.59,403.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:407.2,407.29 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:407.29,411.31 3 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:411.31,412.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:412.35,415.43 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:415.43,417.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:417.11,420.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:421.5,421.10 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:425.3,425.17 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:425.17,427.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:430.2,430.38 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:433.103,434.18 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:434.18,436.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:438.2,439.9 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:439.9,441.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:443.2,447.16 4 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:447.16,449.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:451.2,451.15 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:451.15,452.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:452.35,454.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:457.2,459.20 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:459.20,462.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:462.17,464.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:465.3,466.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:466.17,468.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:471.2,471.37 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:471.37,474.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:474.17,476.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:477.3,478.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:478.17,480.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:483.2,484.16 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:484.16,486.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:488.2,488.38 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:491.33,498.60 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:498.60,500.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:508.60,510.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:518.62,520.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:528.62,530.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:538.62,540.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:548.62,550.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:558.62,560.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:568.62,570.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:578.62,580.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:591.62,593.7 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:601.62,603.7 1 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:53.31,55.39 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:55.39,57.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:58.2,59.51 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:59.51,61.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:63.2,64.37 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:64.37,66.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:67.2,68.49 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:68.49,70.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:72.2,73.53 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:73.53,75.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:76.2,77.54 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:77.54,79.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:81.2,82.43 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:82.43,84.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:85.2,86.55 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:86.55,88.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:91.79,93.32 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:93.32,94.24 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:94.24,96.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:98.3,98.25 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:100.2,100.33 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:100.33,101.17 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:101.17,104.4 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:105.3,105.25 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:107.2,107.8 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:110.50,111.26 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:111.26,113.35 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:113.35,115.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:116.3,116.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:116.36,118.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:120.3,120.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:120.37,126.12 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:128.3,128.20 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:128.20,129.84 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:129.84,130.65 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:130.65,132.6 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:133.5,133.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:135.4,135.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:137.3,137.20 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:137.20,138.84 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:138.84,139.68 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:139.68,141.6 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:142.5,142.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:144.4,144.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:147.3,147.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:147.43,150.12 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:152.3,152.46 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:152.46,154.12 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:156.3,156.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:156.36,157.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:157.21,159.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:161.4,161.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:161.21,163.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:167.3,167.40 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:167.40,171.12 4 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:173.3,173.93 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:173.93,178.12 5 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:180.3,180.57 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:180.57,183.12 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:185.3,185.57 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:185.57,188.12 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:191.3,191.44 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:191.44,193.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:194.3,194.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:194.36,195.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:195.21,197.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:199.4,199.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:199.21,201.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:205.3,205.44 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:205.44,208.12 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:210.3,210.66 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:210.66,211.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:211.21,213.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:215.4,215.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:215.21,217.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:223.2,223.26 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:223.26,224.39 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:224.39,227.4 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:230.2,230.26 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:230.26,232.42 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:232.42,235.4 2 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:237.3,237.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:237.43,242.4 4 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:244.3,244.42 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:244.42,248.4 3 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:250.3,250.46 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:250.46,253.4 2 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:255.2,255.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:258.36,272.2 13 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:274.38,287.2 12 0 -github.com/echovault/echovault/pkg/modules/acl/user.go:289.40,304.2 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:306.46,307.24 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:307.24,309.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/user.go:310.2,310.26 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:25.108,26.18 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:27.10,28.50 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:29.9,30.34 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:31.9,32.72 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:36.33,43.60 1 0 -github.com/echovault/echovault/pkg/modules/connection/commands.go:43.60,45.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:28.115,34.29 4 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:34.29,35.54 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:35.54,41.42 4 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:41.42,43.5 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:45.4,48.12 3 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:51.3,51.36 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:51.36,58.43 5 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:58.43,60.5 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:62.4,64.21 2 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:68.2,70.25 2 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:73.109,77.35 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:77.35,78.65 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:78.65,79.41 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:79.41,81.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:82.4,82.12 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:84.3,84.13 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:87.2,87.51 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:90.112,91.18 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:92.9,97.36 4 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:97.36,98.66 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:98.66,99.52 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:99.52,103.6 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:104.5,104.13 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:106.4,107.14 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:109.3,110.26 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:112.9,116.45 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:116.45,118.4 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:119.3,119.42 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:119.42,123.37 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:123.37,124.67 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:124.67,125.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:125.53,126.59 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:126.59,130.8 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:132.6,132.14 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:134.5,134.54 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:134.54,137.6 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:139.9,139.50 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:139.50,143.37 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:143.37,144.67 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:144.67,145.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:145.53,147.24 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:147.24,150.8 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:152.6,152.14 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:154.5,154.33 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:154.33,157.6 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:159.9,161.4 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:162.3,163.26 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:164.10,165.50 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:169.112,171.2 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:173.33,180.60 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:180.60,180.86 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:188.60,190.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:197.62,197.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:205.62,205.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:214.62,214.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:224.60,226.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:227.113,228.49 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:228.49,230.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:231.5,231.41 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:239.60,241.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:242.113,244.18 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:244.18,246.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:247.5,247.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:255.60,257.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:258.113,259.47 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:259.47,261.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:262.5,262.41 1 0 github.com/echovault/echovault/pkg/modules/hash/commands.go:30.105,32.16 2 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:32.16,34.3 1 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:36.2,39.25 3 1 @@ -632,8 +122,8 @@ github.com/echovault/echovault/pkg/modules/hash/commands.go:327.17,328.41 1 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:328.41,330.13 2 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:332.4,332.42 1 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:332.42,335.13 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:337.4,337.38 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:337.38,339.13 2 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:337.4,337.38 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:337.38,339.13 2 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:344.2,344.25 1 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:347.108,349.16 2 1 github.com/echovault/echovault/pkg/modules/hash/commands.go:349.16,351.3 1 1 @@ -1246,149 +736,326 @@ github.com/echovault/echovault/pkg/modules/list/key_funcs.go:82.2,82.30 1 1 github.com/echovault/echovault/pkg/modules/list/key_funcs.go:85.51,86.19 1 1 github.com/echovault/echovault/pkg/modules/list/key_funcs.go:86.19,88.3 1 1 github.com/echovault/echovault/pkg/modules/list/key_funcs.go:89.2,89.38 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:36.51,37.32 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:37.32,39.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:42.57,43.32 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:43.32,46.3 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:49.61,60.33 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:60.33,62.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:64.2,64.16 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:67.28,68.12 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:68.12,69.7 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:69.7,74.40 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:74.40,75.30 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:75.30,80.21 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:80.21,82.7 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:86.4,86.33 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:91.51,94.40 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:94.40,96.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:97.2,98.11 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:101.53,104.40 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:104.40,106.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:107.2,108.13 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:111.44,113.2 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:115.36,119.2 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/channel.go:121.34,125.2 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:26.113,28.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:28.9,30.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:32.2,34.24 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:34.24,36.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:38.2,41.17 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:44.115,46.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:46.9,48.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:50.2,54.66 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:57.108,59.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:59.9,61.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:62.2,62.19 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:62.19,64.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:65.2,66.38 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:69.113,70.18 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:70.18,72.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:74.2,75.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:75.9,77.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:79.2,80.19 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:80.19,82.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:84.2,84.38 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:87.109,89.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:89.9,91.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:92.2,93.49 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:96.112,98.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:98.9,100.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:101.2,101.36 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:104.33,111.60 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:111.60,113.21 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:113.21,115.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:116.5,116.24 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:125.60,127.21 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:127.21,129.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:130.5,130.24 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:139.60,141.22 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:141.22,143.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:144.5,144.33 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:155.60,158.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:168.60,171.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:179.60,179.86 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:180.101,182.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:191.62,191.88 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:199.62,199.88 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:208.62,208.85 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:34.26,39.2 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:41.101,48.17 5 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:48.17,50.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:52.2,52.37 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:52.37,56.75 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:56.75,58.4 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:60.3,60.23 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:60.23,63.19 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:63.19,65.5 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:65.10,67.5 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:68.4,69.31 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:69.31,74.20 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:74.20,76.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:78.4,78.46 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:79.9,81.47 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:81.47,86.20 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:86.20,88.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:94.112,99.17 4 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:99.17,101.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:103.2,106.24 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:106.24,107.19 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:107.19,110.40 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:110.40,111.31 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:111.31,112.14 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:114.5,114.34 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:114.34,117.6 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:119.9,122.40 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:122.40,123.31 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:123.31,124.14 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:126.5,126.34 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:126.34,129.6 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:137.2,137.38 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:137.38,138.30 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:138.30,139.54 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:139.54,142.5 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:148.2,148.17 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:148.17,149.36 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:149.36,151.40 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:151.40,153.58 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:153.58,154.35 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:154.35,157.7 2 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:158.6,158.14 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:161.5,161.30 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:161.30,162.35 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:162.35,165.7 2 0 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:171.2,172.39 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:172.39,174.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:176.2,176.20 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:179.84,183.38 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:183.38,185.29 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:185.29,186.35 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:186.35,188.5 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:189.4,189.12 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:192.3,192.41 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:192.41,194.4 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:198.51,205.19 5 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:205.19,206.39 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:206.39,207.26 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:207.26,210.5 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:212.3,213.21 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:216.2,218.38 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:218.38,220.78 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:220.78,223.12 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:226.3,226.50 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:226.50,229.4 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:232.2,232.53 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:235.32,240.38 4 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:240.38,241.51 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:241.51,243.4 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:245.2,245.14 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:248.52,253.35 4 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:253.35,255.66 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:255.66,257.4 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:258.3,258.20 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:258.20,260.12 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:262.3,262.106 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/pubsub.go:264.2,264.20 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:28.115,34.29 4 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:34.29,35.54 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:35.54,41.42 4 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:41.42,43.5 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:45.4,48.12 3 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:51.3,51.36 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:51.36,58.43 5 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:58.43,60.5 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:62.4,64.21 2 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:68.2,70.25 2 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:73.109,77.35 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:77.35,78.65 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:78.65,79.41 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:79.41,81.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:82.4,82.12 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:84.3,84.13 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:87.2,87.51 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:90.112,91.18 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:92.9,97.36 4 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:97.36,98.66 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:98.66,99.52 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:99.52,103.6 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:104.5,104.13 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:106.4,107.14 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:109.3,110.26 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:112.9,116.45 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:116.45,118.4 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:119.3,119.42 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:119.42,123.37 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:123.37,124.67 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:124.67,125.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:125.53,126.59 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:126.59,130.8 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:132.6,132.14 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:134.5,134.54 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:134.54,137.6 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:139.9,139.50 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:139.50,143.37 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:143.37,144.67 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:144.67,145.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:145.53,147.24 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:147.24,150.8 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:152.6,152.14 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:154.5,154.33 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:154.33,157.6 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:159.9,161.4 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:162.3,163.26 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:164.10,165.50 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:169.112,171.2 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:173.33,180.60 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:180.60,180.86 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:188.60,190.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:197.62,197.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:205.62,205.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:214.62,214.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:224.60,226.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:227.113,228.49 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:228.49,230.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:231.5,231.41 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:239.60,241.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:242.113,244.18 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:244.18,246.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:247.5,247.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:255.60,257.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:258.113,259.47 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:259.47,261.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:262.5,262.41 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:33.108,34.34 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:34.34,36.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:37.2,38.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:38.9,40.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:41.2,41.67 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:41.67,43.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:44.2,44.38 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:47.106,48.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:48.19,50.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:52.2,53.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:53.9,55.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:57.2,59.30 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:59.30,60.27 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:60.27,63.9 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:67.2,67.16 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:67.16,69.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:72.2,76.18 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:76.18,78.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:78.8,80.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:81.2,81.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:81.21,83.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:84.2,84.17 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:84.17,86.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:88.2,89.29 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:89.29,91.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:94.2,95.51 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:95.51,96.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:96.22,98.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:100.3,100.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:102.2,102.51 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:102.51,103.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:103.22,105.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:107.3,107.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:111.2,112.48 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:112.48,113.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:113.21,115.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:117.3,117.47 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:119.2,119.48 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:119.48,120.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:120.21,122.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:124.3,124.47 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:128.2,129.79 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:129.79,130.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:130.37,132.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:134.2,135.30 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:135.30,136.10 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:137.100,139.53 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:140.53,142.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:143.52,145.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:150.2,152.54 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:152.54,154.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:155.2,155.54 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:155.54,157.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:159.2,161.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:164.102,165.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:165.18,167.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:169.2,173.35 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:173.35,174.36 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:174.36,175.48 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:175.48,177.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:178.4,178.12 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:180.3,180.50 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:180.50,181.51 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:181.51,184.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:188.2,188.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:188.19,191.34 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:191.34,194.4 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:195.3,196.28 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:196.28,198.24 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:198.24,200.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:202.3,202.26 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:205.2,205.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:205.19,207.46 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:207.46,208.43 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:208.43,210.38 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:210.38,212.30 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:212.30,214.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:216.5,216.28 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:221.2,221.74 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:224.102,226.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:226.9,228.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:229.2,230.33 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:230.33,232.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:233.2,234.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:237.106,239.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:239.9,241.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:242.2,242.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:242.45,244.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:245.2,245.38 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:248.108,249.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:249.18,251.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:252.2,253.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:253.9,255.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:256.2,256.53 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:256.53,258.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:259.2,259.38 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:262.106,264.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:264.9,266.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:267.2,268.74 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:271.103,272.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:272.18,274.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:275.2,276.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:276.9,278.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:279.2,281.33 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:281.33,284.19 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:284.19,286.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:286.9,288.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:290.3,290.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:290.22,292.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:294.3,294.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:294.18,296.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:298.3,298.43 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:298.43,299.61 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:299.61,301.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:302.4,302.58 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:302.58,304.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:307.3,307.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:307.52,308.23 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:308.23,310.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:312.4,312.39 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:315.3,315.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:315.52,316.23 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:316.23,318.13 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:320.4,320.39 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:323.3,323.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:323.49,324.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:324.22,326.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:328.4,328.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:331.3,331.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:331.49,332.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:332.22,334.13 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:336.4,336.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:339.3,339.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:339.45,340.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:340.52,342.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:344.4,344.41 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:347.3,347.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:347.45,348.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:348.52,350.5 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:353.3,353.55 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:353.55,355.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:357.3,357.55 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:357.55,359.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:360.3,360.54 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:363.2,364.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:367.103,368.19 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:368.19,370.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:372.2,373.9 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:373.9,375.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:377.2,381.16 4 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:381.16,383.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:385.2,385.15 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:385.15,386.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:386.35,388.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:391.2,395.20 3 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:395.20,396.59 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:396.59,398.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:401.2,401.37 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:401.37,402.59 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:402.59,404.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:408.2,408.29 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:408.29,412.31 3 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:412.31,413.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:413.35,416.43 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:416.43,418.6 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:418.11,421.6 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:422.5,422.10 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:426.3,426.17 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:426.17,428.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:431.2,431.38 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:434.103,435.18 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:435.18,437.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:439.2,440.9 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:440.9,442.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:444.2,448.16 4 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:448.16,450.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:452.2,452.15 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:452.15,453.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:453.35,455.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:458.2,460.20 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:460.20,463.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:463.17,465.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:466.3,467.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:467.17,469.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:472.2,472.37 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:472.37,475.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:475.17,477.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:478.3,479.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:479.17,481.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:484.2,485.16 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:485.16,487.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:489.2,489.38 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:492.33,499.60 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:499.60,501.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:509.60,511.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:519.62,521.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:529.62,531.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:539.62,541.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:549.62,551.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:559.62,561.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:569.62,571.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:579.62,581.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:592.62,594.7 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:602.62,604.7 1 0 +github.com/echovault/echovault/pkg/modules/connection/commands.go:25.108,26.18 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:27.10,28.50 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:29.9,30.34 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:31.9,32.72 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:36.33,43.60 1 0 +github.com/echovault/echovault/pkg/modules/connection/commands.go:43.60,45.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:27.113,29.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:29.9,31.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:33.2,35.24 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:35.24,37.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:39.2,42.17 3 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:45.115,47.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:47.9,49.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:51.2,55.66 3 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:58.108,60.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:60.9,62.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:63.2,63.19 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:63.19,65.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:66.2,67.38 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:70.113,71.18 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:71.18,73.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:75.2,76.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:76.9,78.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:80.2,81.19 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:81.19,83.3 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:85.2,85.38 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:88.109,90.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:90.9,92.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:93.2,94.49 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:97.112,99.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:99.9,101.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:102.2,102.36 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:105.33,112.60 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:112.60,114.21 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:114.21,116.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:117.5,117.24 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:126.60,128.21 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:128.21,130.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:131.5,131.24 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:140.60,142.22 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:142.22,144.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:145.5,145.33 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:156.60,159.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:169.60,172.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:180.60,180.86 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:181.101,183.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:192.62,192.88 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:200.62,200.88 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:209.62,209.85 1 0 github.com/echovault/echovault/pkg/modules/set/commands.go:28.108,30.16 2 1 github.com/echovault/echovault/pkg/modules/set/commands.go:30.16,32.3 1 1 github.com/echovault/echovault/pkg/modules/set/commands.go:34.2,38.33 3 1 diff --git a/docker-compose.yaml b/docker-compose.yaml index 4cd2d82..bdf066f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -22,8 +22,8 @@ services: - MTLS=false - BOOTSTRAP_CLUSTER=false - ACL_CONFIG=/etc/config/echovault/acl.yml - - REQUIRE_PASS=false - - PASSWORD=default_password + - REQUIRE_PASS=true + - PASSWORD=password1 - FORWARD_COMMAND=false - SNAPSHOT_THRESHOLD=1000 - SNAPSHOT_INTERVAL=5m30s diff --git a/pkg/modules/acl/acl.go b/internal/acl/acl.go similarity index 97% rename from pkg/modules/acl/acl.go rename to internal/acl/acl.go index 9760e93..db57282 100644 --- a/pkg/modules/acl/acl.go +++ b/internal/acl/acl.go @@ -20,7 +20,7 @@ import ( "encoding/json" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/utils" "github.com/gobwas/glob" "gopkg.in/yaml.v3" @@ -44,11 +44,11 @@ type ACL struct { Users []*User // List of ACL user profiles UsersMutex sync.RWMutex // RWMutex for concurrency control when accessing ACL profile list Connections map[*net.Conn]Connection // Connections to the echovault that are currently registered with the ACL module - Config internal.Config // EchoVault configuration that contains the relevant ACL config options + Config config.Config // EchoVault configuration that contains the relevant ACL config options GlobPatterns map[string]glob.Glob } -func NewACL(config internal.Config) *ACL { +func NewACL(config config.Config) *ACL { var users []*User // 1. Initialise default ACL user @@ -168,6 +168,13 @@ func (acl *ACL) SetUser(cmd []string) error { return nil } +func (acl *ACL) AddUsers(users []*User) { + acl.LockUsers() + defer acl.UnlockUsers() + + acl.Users = append(acl.Users, users...) +} + func (acl *ACL) DeleteUser(_ context.Context, usernames []string) error { acl.LockUsers() defer acl.UnlockUsers() diff --git a/pkg/modules/acl/user.go b/internal/acl/user.go similarity index 100% rename from pkg/modules/acl/user.go rename to internal/acl/user.go diff --git a/internal/config.go b/internal/config/config.go similarity index 99% rename from internal/config.go rename to internal/config/config.go index efd856e..2d0a59e 100644 --- a/internal/config.go +++ b/internal/config/config.go @@ -12,13 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -package internal +package config import ( "encoding/json" "errors" "flag" "fmt" + "github.com/echovault/echovault/internal" "github.com/echovault/echovault/pkg/utils" "log" "os" @@ -99,7 +100,7 @@ The options are 'always' for syncing on each command, 'everysec' to sync every s flag.Func("max-memory", `Upper memory limit before triggering eviction. Supported units (kb, mb, gb, tb, pb). When 0 is passed, there will be no memory limit. There is no limit by default.`, func(memory string) error { - b, err := ParseMemory(memory) + b, err := internal.ParseMemory(memory) if err != nil { return err } diff --git a/internal/config/default.go b/internal/config/default.go new file mode 100644 index 0000000..284363c --- /dev/null +++ b/internal/config/default.go @@ -0,0 +1,37 @@ +package config + +import ( + "github.com/echovault/echovault/pkg/utils" + "time" +) + +func DefaultConfig() Config { + return Config{ + TLS: false, + MTLS: false, + CertKeyPairs: make([][]string, 0), + ClientCAs: make([]string, 0), + Port: 7480, + ServerID: "", + JoinAddr: "", + BindAddr: "localhost", + RaftBindPort: 7481, + MemberListBindPort: 7946, + InMemory: false, + DataDir: ".", + BootstrapCluster: false, + AclConfig: "", + ForwardCommand: false, + RequirePass: false, + Password: "", + SnapShotThreshold: 1000, + SnapshotInterval: 5 * time.Minute, + RestoreAOF: false, + RestoreSnapshot: false, + AOFSyncStrategy: "everysec", + MaxMemory: 0, + EvictionPolicy: utils.NoEviction, + EvictionSample: 20, + EvictionInterval: 100 * time.Millisecond, + } +} diff --git a/internal/memberlist/delegate.go b/internal/memberlist/delegate.go index ff6fa5f..86ea7d3 100644 --- a/internal/memberlist/delegate.go +++ b/internal/memberlist/delegate.go @@ -19,6 +19,7 @@ import ( "encoding/json" "fmt" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/utils" "github.com/hashicorp/memberlist" "github.com/hashicorp/raft" @@ -31,7 +32,7 @@ type Delegate struct { } type DelegateOpts struct { - config internal.Config + config config.Config broadcastQueue *memberlist.TransmitLimitedQueue addVoter func(id raft.ServerID, address raft.ServerAddress, prevIndex uint64, timeout time.Duration) error isRaftLeader func() bool diff --git a/internal/memberlist/memberlist.go b/internal/memberlist/memberlist.go index 8983b50..a494193 100644 --- a/internal/memberlist/memberlist.go +++ b/internal/memberlist/memberlist.go @@ -19,6 +19,7 @@ import ( "crypto/md5" "fmt" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "log" "time" @@ -35,7 +36,7 @@ type NodeMeta struct { } type Opts struct { - Config internal.Config + Config config.Config HasJoinedCluster func() bool AddVoter func(id raft.ServerID, address raft.ServerAddress, prevIndex uint64, timeout time.Duration) error RemoveRaftServer func(meta NodeMeta) error diff --git a/pkg/modules/pubsub/channel.go b/internal/pubsub/channel.go similarity index 86% rename from pkg/modules/pubsub/channel.go rename to internal/pubsub/channel.go index ff5bfc0..1688ba0 100644 --- a/pkg/modules/pubsub/channel.go +++ b/internal/pubsub/channel.go @@ -88,6 +88,14 @@ func (ch *Channel) Start() { }() } +func (ch *Channel) Name() string { + return ch.name +} + +func (ch *Channel) Pattern() glob.Glob { + return ch.pattern +} + func (ch *Channel) Subscribe(conn *net.Conn) bool { ch.subscribersRWMut.Lock() defer ch.subscribersRWMut.Unlock() @@ -115,11 +123,29 @@ func (ch *Channel) Publish(message string) { func (ch *Channel) IsActive() bool { ch.subscribersRWMut.RLock() defer ch.subscribersRWMut.RUnlock() - return len(ch.subscribers) > 0 + + active := len(ch.subscribers) > 0 + + return active } func (ch *Channel) NumSubs() int { ch.subscribersRWMut.RLock() defer ch.subscribersRWMut.RUnlock() - return len(ch.subscribers) + + n := len(ch.subscribers) + + return n +} + +func (ch *Channel) Subscribers() map[*net.Conn]*resp.Conn { + ch.subscribersRWMut.RLock() + defer ch.subscribersRWMut.RUnlock() + + subscribers := make(map[*net.Conn]*resp.Conn, len(ch.subscribers)) + for k, v := range ch.subscribers { + subscribers[k] = v + } + + return subscribers } diff --git a/pkg/modules/pubsub/pubsub.go b/internal/pubsub/pubsub.go similarity index 96% rename from pkg/modules/pubsub/pubsub.go rename to internal/pubsub/pubsub.go index 0b6eff9..bc266ce 100644 --- a/pkg/modules/pubsub/pubsub.go +++ b/internal/pubsub/pubsub.go @@ -263,3 +263,15 @@ func (ps *PubSub) NumSub(channels []string) []byte { } return []byte(res) } + +func (ps *PubSub) GetAllChannels() []*Channel { + ps.channelsRWMut.RLock() + defer ps.channelsRWMut.RUnlock() + + channels := make([]*Channel, len(ps.channels)) + for i, channel := range ps.channels { + channels[i] = channel + } + + return channels +} diff --git a/internal/raft/fms_snapshot.go b/internal/raft/fms_snapshot.go index 278a574..c6a938f 100644 --- a/internal/raft/fms_snapshot.go +++ b/internal/raft/fms_snapshot.go @@ -17,6 +17,7 @@ package raft import ( "encoding/json" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/utils" "github.com/hashicorp/raft" "strconv" @@ -24,7 +25,7 @@ import ( ) type SnapshotOpts struct { - config internal.Config + config config.Config data map[string]utils.KeyData startSnapshot func() finishSnapshot func() diff --git a/internal/raft/fsm.go b/internal/raft/fsm.go index b63a0ae..b412aaf 100644 --- a/internal/raft/fsm.go +++ b/internal/raft/fsm.go @@ -19,6 +19,7 @@ import ( "encoding/json" "fmt" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/utils" "github.com/hashicorp/raft" "io" @@ -27,7 +28,7 @@ import ( ) type FSMOpts struct { - Config internal.Config + Config config.Config EchoVault utils.EchoVault GetCommand func(command string) (utils.Command, error) DeleteKey func(ctx context.Context, key string) error diff --git a/internal/raft/raft.go b/internal/raft/raft.go index a59d7b9..609e3e9 100644 --- a/internal/raft/raft.go +++ b/internal/raft/raft.go @@ -18,7 +18,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/memberlist" "log" "net" @@ -32,7 +32,7 @@ import ( ) type Opts struct { - Config internal.Config + Config config.Config EchoVault utils.EchoVault GetCommand func(command string) (utils.Command, error) DeleteKey func(ctx context.Context, key string) error diff --git a/pkg/config/config.go b/pkg/config/config.go index 37370e7..908e3d5 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -1,8 +1,11 @@ package config -import "github.com/echovault/echovault/internal" +import ( + "github.com/echovault/echovault/internal/config" +) -// Config returns the default configuration. -func Config() (internal.Config, error) { - return internal.GetConfig() +// DefaultConfig returns the default configuration. +// / This should be used when using EchoVault as an embedded library. +func DefaultConfig() config.Config { + return config.DefaultConfig() } diff --git a/pkg/echovault/echovault.go b/pkg/echovault/echovault.go index 70fba2d..8617c9e 100644 --- a/pkg/echovault/echovault.go +++ b/pkg/echovault/echovault.go @@ -21,9 +21,12 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/acl" "github.com/echovault/echovault/internal/aof" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/eviction" "github.com/echovault/echovault/internal/memberlist" + "github.com/echovault/echovault/internal/pubsub" "github.com/echovault/echovault/internal/raft" "github.com/echovault/echovault/internal/snapshot" "github.com/echovault/echovault/pkg/utils" @@ -38,7 +41,7 @@ import ( type EchoVault struct { // config holds the echovault configuration variables. - config internal.Config + config config.Config // The current index for the latest connection id. // This number is incremented everytime there's a new connection and @@ -73,8 +76,8 @@ type EchoVault struct { context context.Context - ACL utils.ACL - PubSub utils.PubSub + ACL *acl.ACL + PubSub *pubsub.PubSub snapshotInProgress atomic.Bool // Atomic boolean that's true when actively taking a snapshot. rewriteAOFInProgress atomic.Bool // Atomic boolean that's true when actively rewriting AOF file is in progress. @@ -91,24 +94,12 @@ func WithContext(ctx context.Context) func(echovault *EchoVault) { } } -func WithConfig(config internal.Config) func(echovault *EchoVault) { +func WithConfig(config config.Config) func(echovault *EchoVault) { return func(echovault *EchoVault) { echovault.config = config } } -func WithACL(acl utils.ACL) func(echovault *EchoVault) { - return func(echovault *EchoVault) { - echovault.ACL = acl - } -} - -func WithPubSub(pubsub utils.PubSub) func(echovault *EchoVault) { - return func(echovault *EchoVault) { - echovault.PubSub = pubsub - } -} - func WithCommands(commands []utils.Command) func(echovault *EchoVault) { return func(echovault *EchoVault) { echovault.commands = commands @@ -119,6 +110,7 @@ func NewEchoVault(options ...func(echovault *EchoVault)) *EchoVault { echovault := &EchoVault{ context: context.Background(), commands: make([]utils.Command, 0), + config: config.DefaultConfig(), store: make(map[string]utils.KeyData), keyLocks: make(map[string]*sync.RWMutex), keyCreationLock: &sync.Mutex{}, @@ -128,6 +120,12 @@ func NewEchoVault(options ...func(echovault *EchoVault)) *EchoVault { option(echovault) } + // Set up ACL module + echovault.ACL = acl.NewACL(echovault.config) + + // Set up Pub/Sub module + echovault.PubSub = pubsub.NewPubSub() + if echovault.isInCluster() { echovault.raft = raft.NewRaft(raft.Opts{ Config: echovault.config, diff --git a/pkg/modules/acl/commands.go b/pkg/modules/acl/commands.go index 54aafd1..142d9d0 100644 --- a/pkg/modules/acl/commands.go +++ b/pkg/modules/acl/commands.go @@ -19,6 +19,7 @@ import ( "encoding/json" "errors" "fmt" + internal_acl "github.com/echovault/echovault/internal/acl" "github.com/echovault/echovault/pkg/utils" "gopkg.in/yaml.v3" "log" @@ -33,7 +34,7 @@ func handleAuth(ctx context.Context, cmd []string, server utils.EchoVault, conn if len(cmd) < 2 || len(cmd) > 3 { return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -48,12 +49,12 @@ func handleGetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *n return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } - var user *User + var user *internal_acl.User userFound := false for _, u := range acl.Users { if u.Username == cmd[2] { @@ -221,7 +222,7 @@ func handleCat(_ context.Context, cmd []string, server utils.EchoVault, _ *net.C } func handleUsers(_ context.Context, _ []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -234,7 +235,7 @@ func handleUsers(_ context.Context, _ []string, server utils.EchoVault, _ *net.C } func handleSetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -248,7 +249,7 @@ func handleDelUser(ctx context.Context, cmd []string, server utils.EchoVault, _ if len(cmd) < 3 { return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -259,7 +260,7 @@ func handleDelUser(ctx context.Context, cmd []string, server utils.EchoVault, _ } func handleWhoAmI(_ context.Context, _ []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -271,7 +272,7 @@ func handleList(_ context.Context, cmd []string, server utils.EchoVault, _ *net. if len(cmd) > 2 { return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -368,7 +369,7 @@ func handleLoad(_ context.Context, cmd []string, server utils.EchoVault, _ *net. return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } @@ -389,7 +390,7 @@ func handleLoad(_ context.Context, cmd []string, server utils.EchoVault, _ *net. ext := path.Ext(f.Name()) - var users []*User + var users []*internal_acl.User if ext == ".json" { if err := json.NewDecoder(f).Decode(&users); err != nil { @@ -435,7 +436,7 @@ func handleSave(_ context.Context, cmd []string, server utils.EchoVault, _ *net. return nil, errors.New(utils.WrongArgsResponse) } - acl, ok := server.GetACL().(*ACL) + acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") } diff --git a/pkg/modules/acl/commands_test.go b/pkg/modules/acl/commands_test.go index 94a0c07..24e3ddf 100644 --- a/pkg/modules/acl/commands_test.go +++ b/pkg/modules/acl/commands_test.go @@ -18,7 +18,8 @@ import ( "context" "crypto/sha256" "fmt" - "github.com/echovault/echovault/internal" + internal_acl "github.com/echovault/echovault/internal/acl" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -32,8 +33,6 @@ var bindAddr string var port uint16 var mockServer *echovault.EchoVault -var acl *ACL - func init() { bindAddr = "localhost" port = 7490 @@ -46,7 +45,7 @@ func init() { } func setUpServer(bindAddr string, port uint16, requirePass bool, aclConfig string) *echovault.EchoVault { - config := internal.Config{ + conf := config.Config{ BindAddr: bindAddr, Port: port, DataDir: "", @@ -56,43 +55,45 @@ func setUpServer(bindAddr string, port uint16, requirePass bool, aclConfig strin AclConfig: aclConfig, } - acl = NewACL(config) - acl.Users = append(acl.Users, generateInitialTestUsers()...) - - return echovault.NewEchoVault( - echovault.WithConfig(config), - echovault.WithACL(acl), + mockServer := echovault.NewEchoVault( + echovault.WithConfig(conf), echovault.WithCommands(Commands()), ) + + // Add the initial test users to the ACL module + acl := mockServer.GetACL().(*internal_acl.ACL) + acl.AddUsers(generateInitialTestUsers()) + + return mockServer } -func generateInitialTestUsers() []*User { +func generateInitialTestUsers() []*internal_acl.User { // User with both hash password and plaintext password - withPasswordUser := CreateUser("with_password_user") + withPasswordUser := internal_acl.CreateUser("with_password_user") h := sha256.New() h.Write([]byte("password3")) - withPasswordUser.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "password2"}, - {PasswordType: PasswordSHA256, PasswordValue: string(h.Sum(nil))}, + withPasswordUser.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "password2"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: string(h.Sum(nil))}, } withPasswordUser.IncludedCategories = []string{"*"} withPasswordUser.IncludedCommands = []string{"*"} // User with NoPassword option - noPasswordUser := CreateUser("no_password_user") - noPasswordUser.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "password4"}, + noPasswordUser := internal_acl.CreateUser("no_password_user") + noPasswordUser.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "password4"}, } noPasswordUser.NoPassword = true // Disabled user - disabledUser := CreateUser("disabled_user") - disabledUser.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "password5"}, + disabledUser := internal_acl.CreateUser("disabled_user") + disabledUser.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "password5"}, } disabledUser.Enabled = false - return []*User{ + return []*internal_acl.User{ withPasswordUser, noPasswordUser, disabledUser, @@ -123,7 +124,7 @@ func compareSlices[T comparable](res, expected []T) error { } // compareUsers compares 2 users and checks if all their fields are equal -func compareUsers(user1, user2 *User) error { +func compareUsers(user1, user2 *internal_acl.User) error { // Compare flags if user1.Username != user2.Username { return fmt.Errorf("mismatched usernames \"%s\", and \"%s\"", user1.Username, user2.Username) @@ -140,14 +141,14 @@ func compareUsers(user1, user2 *User) error { // Compare passwords for _, password1 := range user1.Passwords { - if !slices.ContainsFunc(user2.Passwords, func(password2 Password) bool { + if !slices.ContainsFunc(user2.Passwords, func(password2 internal_acl.Password) bool { return password1.PasswordType == password2.PasswordType && password1.PasswordValue == password2.PasswordValue }) { return fmt.Errorf("found password %+v in user1 that was not found in user2", password1) } } for _, password2 := range user2.Passwords { - if !slices.ContainsFunc(user1.Passwords, func(password1 Password) bool { + if !slices.ContainsFunc(user1.Passwords, func(password1 internal_acl.Password) bool { return password1.PasswordType == password2.PasswordType && password1.PasswordValue == password2.PasswordValue }) { return fmt.Errorf("found password %+v in user2 that was not found in user1", password2) @@ -448,7 +449,7 @@ func Test_HandleSetUser(t *testing.T) { go func() { mockServer.Start(context.Background()) }() - acl, ok := mockServer.GetACL().(*ACL) + acl, ok := mockServer.GetACL().(*internal_acl.ACL) if !ok { t.Error("error loading ACL module") } @@ -464,11 +465,11 @@ func Test_HandleSetUser(t *testing.T) { r := resp.NewConn(conn) tests := []struct { - presetUser *User + presetUser *internal_acl.User cmd []resp.Value wantRes string wantErr string - wantUser *User + wantUser *internal_acl.User }{ { // 1. Create new enabled user @@ -481,8 +482,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_1") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_1") user.Enabled = true user.Normalise() return user @@ -499,8 +500,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_2") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_2") user.Enabled = false user.Normalise() return user @@ -521,14 +522,14 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_3") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_3") user.Enabled = true - user.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, - {PasswordType: PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_2"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_2")}, + user.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_2"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_2")}, } user.Normalise() return user @@ -536,14 +537,14 @@ func Test_HandleSetUser(t *testing.T) { }, { // 4. Remove plaintext and SHA256 password from existing user - presetUser: func() *User { - user := CreateUser("set_user_4") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_4") user.Enabled = true - user.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, - {PasswordType: PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_2"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_2")}, + user.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_2"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_2")}, } user.Normalise() return user @@ -558,12 +559,12 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_4") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_4") user.Enabled = true - user.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, + user.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "set_user_3_plaintext_password_1"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("set_user_3_hash_password_1")}, } user.Normalise() return user @@ -581,8 +582,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_5") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_5") user.Enabled = true user.ExcludedCommands = []string{"*"} user.ExcludedCategories = []string{"*"} @@ -602,8 +603,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_6") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_6") user.Enabled = true user.IncludedCategories = []string{"*"} user.ExcludedCategories = []string{} @@ -623,8 +624,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_7") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_7") user.Enabled = true user.IncludedCategories = []string{"*"} user.ExcludedCategories = []string{} @@ -649,8 +650,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_8") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_8") user.Enabled = true user.IncludedCategories = []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory} user.ExcludedCategories = []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory} @@ -670,8 +671,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_9") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_9") user.Enabled = true user.NoKeys = true user.IncludedReadKeys = []string{} @@ -700,8 +701,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_10") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_10") user.Enabled = true user.NoKeys = false user.IncludedReadKeys = []string{"key1", "key2", "key3", "key4", "key5", "key6"} @@ -722,8 +723,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_11") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_11") user.Enabled = true user.IncludedPubSubChannels = []string{"*"} user.ExcludedPubSubChannels = []string{} @@ -743,8 +744,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_12") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_12") user.Enabled = true user.IncludedPubSubChannels = []string{"*"} user.ExcludedPubSubChannels = []string{} @@ -767,8 +768,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_13") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_13") user.Enabled = true user.IncludedPubSubChannels = []string{"channel1", "channel2"} user.ExcludedPubSubChannels = []string{"channel3", "channel4"} @@ -788,8 +789,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_14") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_14") user.Enabled = true user.IncludedCommands = []string{"*"} user.ExcludedCommands = []string{} @@ -814,8 +815,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_15") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_15") user.Enabled = true user.IncludedCommands = []string{"acl|getuser", "acl|setuser", "acl|deluser"} user.ExcludedCommands = []string{"rewriteaof", "save", "publish"} @@ -838,24 +839,24 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_16") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_16") user.Enabled = true user.NoPassword = true - user.Passwords = []Password{} + user.Passwords = []internal_acl.Password{} user.Normalise() return user }(), }, { // 17. Delete all existing users passwords using 'nopass' - presetUser: func() *User { - user := CreateUser("set_user_17") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_17") user.Enabled = true user.NoPassword = true - user.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "password1"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("password2")}, + user.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "password1"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("password2")}, } user.Normalise() return user @@ -869,24 +870,24 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_17") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_17") user.Enabled = true user.NoPassword = true - user.Passwords = []Password{} + user.Passwords = []internal_acl.Password{} user.Normalise() return user }(), }, { // 18. Clear all of an existing user's passwords using 'resetpass' - presetUser: func() *User { - user := CreateUser("set_user_18") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_18") user.Enabled = true user.NoPassword = true - user.Passwords = []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "password1"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("password2")}, + user.Passwords = []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "password1"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("password2")}, } user.Normalise() return user @@ -900,19 +901,19 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_18") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_18") user.Enabled = true user.NoPassword = true - user.Passwords = []Password{} + user.Passwords = []internal_acl.Password{} user.Normalise() return user }(), }, { // 19. Clear all of an existing user's command privileges using 'nocommands' - presetUser: func() *User { - user := CreateUser("set_user_19") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_19") user.Enabled = true user.IncludedCommands = []string{"acl|getuser", "acl|setuser", "acl|deluser"} user.ExcludedCommands = []string{"rewriteaof", "save"} @@ -928,8 +929,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_19") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_19") user.Enabled = true user.IncludedCommands = []string{} user.ExcludedCommands = []string{"*"} @@ -941,8 +942,8 @@ func Test_HandleSetUser(t *testing.T) { }, { // 20. Clear all of an existing user's allowed keys using 'resetkeys' - presetUser: func() *User { - user := CreateUser("set_user_20") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_20") user.Enabled = true user.IncludedWriteKeys = []string{"key1", "key2", "key3", "key4", "key5", "key6"} user.IncludedReadKeys = []string{"key1", "key2", "key3", "key7", "key8", "key9"} @@ -958,8 +959,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_20") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_20") user.Enabled = true user.NoKeys = true user.IncludedReadKeys = []string{} @@ -970,8 +971,8 @@ func Test_HandleSetUser(t *testing.T) { }, { // 21. Allow user to access all channels using 'resetchannels' - presetUser: func() *User { - user := CreateUser("set_user_21") + presetUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_21") user.IncludedPubSubChannels = []string{"channel1", "channel2"} user.ExcludedPubSubChannels = []string{"channel3", "channel4"} user.Normalise() @@ -985,8 +986,8 @@ func Test_HandleSetUser(t *testing.T) { }, wantRes: "OK", wantErr: "", - wantUser: func() *User { - user := CreateUser("set_user_21") + wantUser: func() *internal_acl.User { + user := internal_acl.CreateUser("set_user_21") user.IncludedPubSubChannels = []string{} user.ExcludedPubSubChannels = []string{"*"} user.Normalise() @@ -1019,7 +1020,7 @@ func Test_HandleSetUser(t *testing.T) { continue } expectedUser := test.wantUser - currUserIdx := slices.IndexFunc(acl.Users, func(user *User) bool { + currUserIdx := slices.IndexFunc(acl.Users, func(user *internal_acl.User) bool { return user.Username == expectedUser.Username }) if currUserIdx == -1 { @@ -1037,7 +1038,7 @@ func Test_HandleGetUser(t *testing.T) { go func() { mockServer.Start(context.Background()) }() - acl, _ := mockServer.GetACL().(*ACL) + acl, _ := mockServer.GetACL().(*internal_acl.ACL) conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", bindAddr, port)) if err != nil { @@ -1050,20 +1051,20 @@ func Test_HandleGetUser(t *testing.T) { r := resp.NewConn(conn) tests := []struct { - presetUser *User + presetUser *internal_acl.User cmd []resp.Value wantRes []resp.Value wantErr string }{ { // 1. Get the user and all their details - presetUser: &User{ + presetUser: &internal_acl.User{ Username: "get_user_1", Enabled: true, NoPassword: false, NoKeys: false, - Passwords: []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "get_user_password_1"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("get_user_password_2")}, + Passwords: []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "get_user_password_1"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("get_user_password_2")}, }, IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, @@ -1183,7 +1184,7 @@ func Test_HandleDelUser(t *testing.T) { go func() { mockServer.Start(context.Background()) }() - acl, _ := mockServer.GetACL().(*ACL) + acl, _ := mockServer.GetACL().(*internal_acl.ACL) conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", bindAddr, port)) if err != nil { @@ -1196,14 +1197,14 @@ func Test_HandleDelUser(t *testing.T) { r := resp.NewConn(conn) tests := []struct { - presetUser *User + presetUser *internal_acl.User cmd []resp.Value wantRes string wantErr string }{ { // 1. Delete existing user while skipping default user and non-existent user - presetUser: CreateUser("user_to_delete"), + presetUser: internal_acl.CreateUser("user_to_delete"), cmd: []resp.Value{ resp.StringValue("ACL"), resp.StringValue("DELUSER"), @@ -1241,13 +1242,13 @@ func Test_HandleDelUser(t *testing.T) { continue } // Check that default user still exists in the list of users - if !slices.ContainsFunc(acl.Users, func(user *User) bool { + if !slices.ContainsFunc(acl.Users, func(user *internal_acl.User) bool { return user.Username == "default" }) { t.Error("could not find user with username \"default\" in the ACL after deleting user") } // Check that the deleted user is no longer in the list - if slices.ContainsFunc(acl.Users, func(user *User) bool { + if slices.ContainsFunc(acl.Users, func(user *internal_acl.User) bool { return user.Username == "user_to_delete" }) { t.Error("deleted user found in the ACL") @@ -1324,7 +1325,7 @@ func Test_HandleList(t *testing.T) { go func() { mockServer.Start(context.Background()) }() - acl, _ := mockServer.GetACL().(*ACL) + acl, _ := mockServer.GetACL().(*internal_acl.ACL) conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", bindAddr, port)) if err != nil { @@ -1337,21 +1338,21 @@ func Test_HandleList(t *testing.T) { r := resp.NewConn(conn) tests := []struct { - presetUsers []*User + presetUsers []*internal_acl.User cmd []resp.Value wantRes []string wantErr string }{ { // 1. Get the user and all their details - presetUsers: []*User{ + presetUsers: []*internal_acl.User{ { Username: "list_user_1", Enabled: true, NoPassword: false, NoKeys: false, - Passwords: []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "list_user_password_1"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_2")}, + Passwords: []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "list_user_password_1"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_2")}, }, IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, @@ -1367,7 +1368,7 @@ func Test_HandleList(t *testing.T) { Enabled: true, NoPassword: true, NoKeys: true, - Passwords: []Password{}, + Passwords: []internal_acl.Password{}, IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, IncludedCommands: []string{"acl|setuser", "acl|getuser", "acl|deluser"}, @@ -1382,9 +1383,9 @@ func Test_HandleList(t *testing.T) { Enabled: true, NoPassword: false, NoKeys: false, - Passwords: []Password{ - {PasswordType: PasswordPlainText, PasswordValue: "list_user_password_3"}, - {PasswordType: PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_4")}, + Passwords: []internal_acl.Password{ + {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "list_user_password_3"}, + {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_4")}, }, IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, diff --git a/pkg/modules/admin/commands_test.go b/pkg/modules/admin/commands_test.go index 7c25f94..27fa0bc 100644 --- a/pkg/modules/admin/commands_test.go +++ b/pkg/modules/admin/commands_test.go @@ -18,7 +18,7 @@ import ( "bytes" "context" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -27,7 +27,7 @@ import ( func Test_CommandsHandler(t *testing.T) { mockServer := echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/connection/commands_test.go b/pkg/modules/connection/commands_test.go index 4eaebe9..e7b9238 100644 --- a/pkg/modules/connection/commands_test.go +++ b/pkg/modules/connection/commands_test.go @@ -18,7 +18,7 @@ import ( "bytes" "context" "errors" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -29,7 +29,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/generic/commands_test.go b/pkg/modules/generic/commands_test.go index 26708b0..9c69dd9 100644 --- a/pkg/modules/generic/commands_test.go +++ b/pkg/modules/generic/commands_test.go @@ -19,7 +19,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -31,7 +31,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/hash/commands_test.go b/pkg/modules/hash/commands_test.go index 68e2555..7da493b 100644 --- a/pkg/modules/hash/commands_test.go +++ b/pkg/modules/hash/commands_test.go @@ -19,7 +19,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -31,7 +31,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/list/commands_test.go b/pkg/modules/list/commands_test.go index a121793..6a8f486 100644 --- a/pkg/modules/list/commands_test.go +++ b/pkg/modules/list/commands_test.go @@ -19,7 +19,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -30,7 +30,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/pubsub/commands.go b/pkg/modules/pubsub/commands.go index d45874e..b6a8420 100644 --- a/pkg/modules/pubsub/commands.go +++ b/pkg/modules/pubsub/commands.go @@ -18,13 +18,14 @@ import ( "context" "errors" "fmt" + internal_pubsub "github.com/echovault/echovault/internal/pubsub" "github.com/echovault/echovault/pkg/utils" "net" "strings" ) func handleSubscribe(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } @@ -42,7 +43,7 @@ func handleSubscribe(ctx context.Context, cmd []string, server utils.EchoVault, } func handleUnsubscribe(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } @@ -55,7 +56,7 @@ func handleUnsubscribe(ctx context.Context, cmd []string, server utils.EchoVault } func handlePublish(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } @@ -71,7 +72,7 @@ func handlePubSubChannels(_ context.Context, cmd []string, server utils.EchoVaul return nil, errors.New(utils.WrongArgsResponse) } - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } @@ -85,7 +86,7 @@ func handlePubSubChannels(_ context.Context, cmd []string, server utils.EchoVaul } func handlePubSubNumPat(_ context.Context, _ []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } @@ -94,7 +95,7 @@ func handlePubSubNumPat(_ context.Context, _ []string, server utils.EchoVault, _ } func handlePubSubNumSubs(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { - pubsub, ok := server.GetPubSub().(*PubSub) + pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } diff --git a/pkg/modules/pubsub/commands_test.go b/pkg/modules/pubsub/commands_test.go index 29ecc1d..494740c 100644 --- a/pkg/modules/pubsub/commands_test.go +++ b/pkg/modules/pubsub/commands_test.go @@ -18,7 +18,8 @@ import ( "bytes" "context" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" + internal_pubsub "github.com/echovault/echovault/internal/pubsub" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -28,25 +29,24 @@ import ( "time" ) -var pubsub *PubSub +var pubsub *internal_pubsub.PubSub var mockServer *echovault.EchoVault var bindAddr = "localhost" var port uint16 = 7490 func init() { - pubsub = NewPubSub() - mockServer = setUpServer(pubsub, bindAddr, port) + mockServer = setUpServer(bindAddr, port) + pubsub = mockServer.GetPubSub().(*internal_pubsub.PubSub) go func() { mockServer.Start(context.Background()) }() } -func setUpServer(pubsub *PubSub, bindAddr string, port uint16) *echovault.EchoVault { +func setUpServer(bindAddr string, port uint16) *echovault.EchoVault { return echovault.NewEchoVault( - echovault.WithPubSub(pubsub), echovault.WithCommands(Commands()), - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ BindAddr: bindAddr, Port: port, DataDir: "", @@ -85,20 +85,20 @@ func Test_HandleSubscribe(t *testing.T) { } for _, channel := range channels { // Check if the channel exists in the pubsub module - if !slices.ContainsFunc(pubsub.channels, func(c *Channel) bool { - return c.name == channel + if !slices.ContainsFunc(pubsub.GetAllChannels(), func(c *internal_pubsub.Channel) bool { + return c.Name() == channel }) { t.Errorf("expected pubsub to contain channel \"%s\" but it was not found", channel) } - for _, c := range pubsub.channels { - if c.name == channel { + for _, c := range pubsub.GetAllChannels() { + if c.Name() == channel { // Check if channel has nil pattern - if c.pattern != nil { - t.Errorf("expected channel \"%s\" to have nil pattern, found pattern \"%s\"", channel, c.name) + if c.Pattern() != nil { + t.Errorf("expected channel \"%s\" to have nil pattern, found pattern \"%s\"", channel, c.Name()) } // Check if the channel has all the connections from above for _, conn := range connections { - if _, ok := c.subscribers[conn]; !ok { + if _, ok := c.Subscribers()[conn]; !ok { t.Errorf("could not find all expected connection in the \"%s\"", channel) } } @@ -115,20 +115,20 @@ func Test_HandleSubscribe(t *testing.T) { } for _, pattern := range patterns { // Check if pattern channel exists in pubsub module - if !slices.ContainsFunc(pubsub.channels, func(c *Channel) bool { - return c.name == pattern + if !slices.ContainsFunc(pubsub.GetAllChannels(), func(c *internal_pubsub.Channel) bool { + return c.Name() == pattern }) { t.Errorf("expected pubsub to contain pattern channel \"%s\" but it was not found", pattern) } - for _, c := range pubsub.channels { - if c.name == pattern { + for _, c := range pubsub.GetAllChannels() { + if c.Name() == pattern { // Check if channel has non-nil pattern - if c.pattern == nil { - t.Errorf("expected channel \"%s\" to have pattern \"%s\", found nil pattern", pattern, c.name) + if c.Pattern() == nil { + t.Errorf("expected channel \"%s\" to have pattern \"%s\", found nil pattern", pattern, c.Name()) } // Check if the channel has all the connections from above for _, conn := range connections { - if _, ok := c.subscribers[conn]; !ok { + if _, ok := c.Subscribers()[conn]; !ok { t.Errorf("could not find all expected connection in the \"%s\"", pattern) } } @@ -280,14 +280,14 @@ func Test_HandleUnsubscribe(t *testing.T) { verifyResponse(res, test.expectedResponses["pattern"]) for _, channel := range append(test.unSubChannels, test.unSubPatterns...) { - for _, pubsubChannel := range pubsub.channels { - if pubsubChannel.name == channel { + for _, pubsubChannel := range pubsub.GetAllChannels() { + if pubsubChannel.Name() == channel { // Assert that target connection is no longer in the unsub channels and patterns - if _, ok := pubsubChannel.subscribers[test.targetConn]; ok { + if _, ok := pubsubChannel.Subscribers()[test.targetConn]; ok { t.Errorf("found unexpected target connection after unsubscrining in channel \"%s\"", channel) } for _, conn := range test.otherConnections { - if _, ok := pubsubChannel.subscribers[conn]; !ok { + if _, ok := pubsubChannel.Subscribers()[conn]; !ok { t.Errorf("did not find expected other connection in channel \"%s\"", channel) } } @@ -297,9 +297,9 @@ func Test_HandleUnsubscribe(t *testing.T) { // Assert that the target connection is still in the remain channels and patterns for _, channel := range append(test.remainChannels, test.remainPatterns...) { - for _, pubsubChannel := range pubsub.channels { - if pubsubChannel.name == channel { - if _, ok := pubsubChannel.subscribers[test.targetConn]; !ok { + for _, pubsubChannel := range pubsub.GetAllChannels() { + if pubsubChannel.Name() == channel { + if _, ok := pubsubChannel.Subscribers()[test.targetConn]; !ok { t.Errorf("could not find expected target connection in channel \"%s\"", channel) } } @@ -496,8 +496,7 @@ func Test_HandlePubSubChannels(t *testing.T) { go func() { // Create separate mock echovault for this test var port uint16 = 7590 - pubsub = NewPubSub() - mockServer := setUpServer(pubsub, bindAddr, port) + mockServer := setUpServer(bindAddr, port) ctx := context.WithValue(context.Background(), "test_name", "PUBSUB CHANNELS") @@ -632,8 +631,7 @@ func Test_HandleNumPat(t *testing.T) { go func() { // Create separate mock echovault for this test var port uint16 = 7591 - pubsub = NewPubSub() - mockServer := setUpServer(pubsub, bindAddr, port) + mockServer := setUpServer(bindAddr, port) ctx := context.WithValue(context.Background(), "test_name", "PUBSUB NUMPAT") @@ -727,8 +725,7 @@ func Test_HandleNumSub(t *testing.T) { go func() { // Create separate mock echovault for this test var port uint16 = 7591 - pubsub = NewPubSub() - mockServer := setUpServer(pubsub, bindAddr, port) + mockServer := setUpServer(bindAddr, port) ctx := context.WithValue(context.Background(), "test_name", "PUBSUB NUMSUB") diff --git a/pkg/modules/set/commant_test.go b/pkg/modules/set/commant_test.go index 00dcb2f..527e779 100644 --- a/pkg/modules/set/commant_test.go +++ b/pkg/modules/set/commant_test.go @@ -19,7 +19,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -31,7 +31,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/sorted_set/commands_test.go b/pkg/modules/sorted_set/commands_test.go index 4cf2138..68a8ad2 100644 --- a/pkg/modules/sorted_set/commands_test.go +++ b/pkg/modules/sorted_set/commands_test.go @@ -19,7 +19,7 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -33,7 +33,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }), diff --git a/pkg/modules/string/commands_test.go b/pkg/modules/string/commands_test.go index e1c9ec0..21d93f6 100644 --- a/pkg/modules/string/commands_test.go +++ b/pkg/modules/string/commands_test.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" + "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/echovault" "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" @@ -31,7 +32,7 @@ var mockServer *echovault.EchoVault func init() { mockServer = echovault.NewEchoVault( - echovault.WithConfig(internal.Config{ + echovault.WithConfig(config.Config{ DataDir: "", EvictionPolicy: utils.NoEviction, }),