-
Notifications
You must be signed in to change notification settings - Fork 4
/
namespace.go
124 lines (111 loc) · 2.99 KB
/
namespace.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package mem
import (
. "github.com/ankyra/escape-inventory/dao/types"
)
func (a *dao) UpdateNamespace(project *Project) error {
_, exists := a.namespaceMetadata[project.Name]
if !exists {
return NotFound
}
a.namespaceMetadata[project.Name] = project
return nil
}
func (a *dao) GetNamespaces() (map[string]*Project, error) {
return a.namespaceMetadata, nil
}
func (a *dao) GetNamespacesByNames(namespaces []string) (map[string]*Project, error) {
namespacesFound := map[string]*Project{}
for _, name := range namespaces {
namespace, ok := a.namespaceMetadata[name]
if ok {
namespacesFound[name] = namespace
}
}
return namespacesFound, nil
}
func (a *dao) GetNamespacesForUser(namespaces []string) (map[string]*Project, error) {
namespacesFound := map[string]*Project{}
for namespaceName, namespace := range a.namespaceMetadata {
for _, name := range namespaces {
if namespaceName == name {
namespacesFound[namespaceName] = namespace
}
}
if namespace.IsPublic {
namespacesFound[namespaceName] = namespace
}
}
return namespacesFound, nil
}
func (a *dao) GetNamespacesFilteredBy(query *NamespacesFilter) (map[string]*Project, error) {
namespacesFound := map[string]*Project{}
for _, name := range query.Namespaces {
namespace, ok := a.namespaceMetadata[name]
if ok {
namespacesFound[name] = namespace
}
}
return namespacesFound, nil
}
func (a *dao) GetNamespace(namespace string) (*Project, error) {
prj, ok := a.namespaceMetadata[namespace]
if !ok {
return nil, NotFound
}
return prj, nil
}
func (a *dao) AddNamespace(namespace *Project) error {
namespace.Permission = "admin"
_, exists := a.namespaceMetadata[namespace.Name]
if exists {
return AlreadyExists
}
_, ok := a.namespaces[namespace.Name]
if !ok {
a.namespaces[namespace.Name] = map[string]*application{}
}
a.namespaceMetadata[namespace.Name] = namespace
a.namespaceHooks[namespace] = NewHooks()
return nil
}
func (a *dao) GetNamespaceHooks(namespace *Project) (Hooks, error) {
namespace, ok := a.namespaceMetadata[namespace.Name]
if !ok {
return nil, NotFound
}
return a.namespaceHooks[namespace], nil
}
func (a *dao) SetNamespaceHooks(namespace *Project, hooks Hooks) error {
namespace, ok := a.namespaceMetadata[namespace.Name]
if !ok {
return NotFound
}
a.namespaceHooks[namespace] = hooks
return nil
}
func (a *dao) HardDeleteNamespace(namespace string) error {
namespaceMetadata, exists := a.namespaceMetadata[namespace]
if !exists {
return NotFound
}
toDelete := []*Application{}
for app, _ := range a.subscriptions {
if app.Project == namespace {
toDelete = append(toDelete, app)
}
}
for _, i := range toDelete {
delete(a.subscriptions, i)
}
for _, app := range a.namespaces[namespace] {
delete(a.applicationHooks, app.App)
for _, rel := range a.apps[app.App].Releases {
delete(a.releases, rel.Release)
}
delete(a.apps, app.App)
}
delete(a.namespaceMetadata, namespace)
delete(a.namespaceHooks, namespaceMetadata)
delete(a.namespaces, namespace)
return nil
}