aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/service.go
blob: 498215b7e27ae4374a25cebb2debd756cd45b317 (plain)
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
package admin

import (
	"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 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
}