Skip to content

Commit 625ac37

Browse files
fix[backend](integrations): fixed plugins yaml files integration format to match event processor expected format
1 parent 0cb33f5 commit 625ac37

2 files changed

Lines changed: 73 additions & 6 deletions

File tree

backend/modules/integrations/repository/tenant_store.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,31 @@ var pluginNames = map[string]string{
3737
"SOPHOS": "sophos",
3838
}
3939

40-
func tenantFileName(module string) string {
40+
func pluginKey(module string) string {
4141
name, ok := pluginNames[strings.ToUpper(module)]
4242
if !ok {
4343
name = strings.ToLower(module)
4444
}
45-
return "system_plugins_" + name + ".yaml"
45+
return name
46+
}
47+
48+
func tenantFileName(module string) string {
49+
return "system_plugins_" + pluginKey(module) + ".yaml"
4650
}
4751

4852
func (s *TenantStore) path(module string) string {
4953
return filepath.Join(s.dir, tenantFileName(module))
5054
}
5155

56+
// pluginsFile is the on-disk wrapper: plugins.<name>.tenants: [...].
57+
type pluginsFile struct {
58+
Plugins map[string]pluginEntry `yaml:"plugins"`
59+
}
60+
61+
type pluginEntry struct {
62+
Tenants []domain.Tenant `yaml:"tenants"`
63+
}
64+
5265
func (s *TenantStore) SetActiveByModule(_ context.Context, module string, active bool) error {
5366
if active {
5467
return nil
@@ -70,18 +83,24 @@ func (s *TenantStore) Load(module string) ([]domain.Tenant, error) {
7083
if err != nil {
7184
return nil, err
7285
}
73-
var tenants []domain.Tenant
74-
if err := yaml.Unmarshal(data, &tenants); err != nil {
86+
var pf pluginsFile
87+
if err := yaml.Unmarshal(data, &pf); err != nil {
7588
return nil, err
7689
}
77-
return tenants, nil
90+
entry, ok := pf.Plugins[pluginKey(module)]
91+
if !ok {
92+
return []domain.Tenant{}, nil
93+
}
94+
return entry.Tenants, nil
7895
}
7996

8097
func (s *TenantStore) Save(module string, tenants []domain.Tenant) error {
8198
if err := os.MkdirAll(s.dir, 0o755); err != nil {
8299
return err
83100
}
84-
data, err := yaml.Marshal(tenants)
101+
key := pluginKey(module)
102+
pf := pluginsFile{Plugins: map[string]pluginEntry{key: {Tenants: tenants}}}
103+
data, err := yaml.Marshal(pf)
85104
if err != nil {
86105
return err
87106
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package repository
2+
3+
import (
4+
"os"
5+
"strings"
6+
"testing"
7+
8+
"github.com/utmstack/utmstack/backend/modules/integrations/domain"
9+
)
10+
11+
func TestTenantStoreRoundtrip(t *testing.T) {
12+
dir := t.TempDir()
13+
s := NewTenantStore(dir)
14+
15+
want := []domain.Tenant{
16+
{Name: "t1", Config: map[string]string{"access_key": "AK", "secret": "SK"}},
17+
{Name: "t2", Config: map[string]string{"access_key": "AK2"}},
18+
}
19+
if err := s.Save("AWS_IAM_USER", want); err != nil {
20+
t.Fatalf("Save: %v", err)
21+
}
22+
got, err := s.Load("AWS_IAM_USER")
23+
if err != nil {
24+
t.Fatalf("Load: %v", err)
25+
}
26+
if len(got) != len(want) {
27+
t.Fatalf("len(got)=%d want %d", len(got), len(want))
28+
}
29+
for i := range want {
30+
if got[i].Name != want[i].Name {
31+
t.Fatalf("[%d] name got %q want %q", i, got[i].Name, want[i].Name)
32+
}
33+
for k, v := range want[i].Config {
34+
if got[i].Config[k] != v {
35+
t.Fatalf("[%d] %s got %q want %q", i, k, got[i].Config[k], v)
36+
}
37+
}
38+
}
39+
40+
data, err := os.ReadFile(s.path("AWS_IAM_USER"))
41+
if err != nil {
42+
t.Fatalf("read: %v", err)
43+
}
44+
txt := string(data)
45+
if !strings.Contains(txt, "plugins:") || !strings.Contains(txt, "aws:") || !strings.Contains(txt, "tenants:") {
46+
t.Fatalf("unexpected file layout:\n%s", txt)
47+
}
48+
}

0 commit comments

Comments
 (0)