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
|
package admin
import (
"errors"
"log"
casbin "github.com/casbin/casbin/v2"
)
// Servicer container for dependencies and functions
type Servicer struct {
*casbin.SyncedEnforcer
Conf *ServerRepos
serverConfigPath string
reposDir string
mgmtRepo bool
}
// Reload reoload server config and sync policies
func (s *Servicer) Reload() {
tmpConfig, err := loadServerConfig(s.mgmtRepo, s.reposDir, s.serverConfigPath)
if err != nil {
// log.error
log.Printf("failed to load config %s", err)
log.Print("refusing to reload config")
return
}
s.Conf = tmpConfig
s.InitServer()
}
// InitServer initialize a git server and configure
func (s *Servicer) InitServer() {
policies := s.Conf.ServerPolicies()
log.Print("policies generated")
numAdded := 0
for _, policy := range policies {
added, err := s.AddPolicy(policy[0], policy[1], policy[2])
if err != nil {
// log.error
log.Printf("error adding policy %s %s %s error %s", policy[0], policy[1], policy[2], err)
continue
}
if added {
numAdded++
}
}
log.Printf("policies added %d", numAdded)
if err := s.SavePolicy(); err != nil {
log.Print("couldn't save policy")
}
log.Printf("policies saved")
if err := s.LoadPolicy(); err != nil {
log.Print("cloudn't load policy")
}
log.Print("policies loaded")
s.Conf.ConfigureRepos()
log.Print("configured repos")
}
// NewService create a new admin service, load config, and generate policies
func NewService(modelPath, policyPath, serverConfigPath, reposDir string, mgmtRepo bool) *Servicer {
enf, err := casbin.NewSyncedEnforcer(modelPath, policyPath)
if err != nil {
log.Fatalf("Couldn't load the enforcer encountered the following error: %s", err)
}
conf, err := loadServerConfig(mgmtRepo, reposDir, serverConfigPath)
if errors.Is(err, ErrMgmtRepoNotFound) {
log.Print("no server config found, using default")
conf = defaultServerConfig
} else if err != nil {
// log.error
log.Fatalf("Coudln't load server config %s", err)
}
conf.basePath = reposDir
svc := &Servicer{
enf,
conf,
serverConfigPath,
reposDir,
mgmtRepo,
}
svc.InitServer()
return svc
}
|