aboutsummaryrefslogtreecommitdiff
path: root/pkg/config
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-12-12 14:11:22 +0100
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-12-12 14:14:34 +0100
commitc5af9792973ec10eb37a7e4f47e8a16e95c62f60 (patch)
treeb8e98d2ad89bdff94652ee04c8a36617aacfabc2 /pkg/config
parentc6bdde9c63758cb9b61c7a5559dd30d141aee289 (diff)
downloadcerrado-c5af9792973ec10eb37a7e4f47e8a16e95c62f60.tar.gz
cerrado-c5af9792973ec10eb37a7e4f47e8a16e95c62f60.tar.bz2
cerrado-c5af9792973ec10eb37a7e4f47e8a16e95c62f60.zip
feat: Allow multiples scan configuration
Now it allow to register multiples scan configuration
Diffstat (limited to 'pkg/config')
-rw-r--r--pkg/config/config.go52
-rw-r--r--pkg/config/config_test.go32
2 files changed, 49 insertions, 35 deletions
diff --git a/pkg/config/config.go b/pkg/config/config.go
index c17e6df..1ad5108 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -30,7 +30,7 @@ type (
// configuration represents file configuration.
// fields needs to be exported to cmp to work
configuration struct {
- Scan *scan
+ Scans []*scan
RootReadme string
ListenAddr string
Passphrase string
@@ -82,10 +82,12 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e
syntaxHighlight: config.SyntaxHighlight,
}
- if config.Scan.Path != "" {
- err = repo.expandOnScanPath(config.Scan.Path, config.Scan.Public)
- if err != nil {
- return nil, err
+ for _, scan := range config.Scans {
+ if scan.Path != "" {
+ err = repo.expandOnScanPath(scan.Path, scan.Public)
+ if err != nil {
+ return nil, err
+ }
}
}
@@ -179,7 +181,7 @@ func parse(r io.Reader) (*configuration, error) {
config := defaultConfiguration()
- err = setScan(block, config.Scan)
+ err = setScan(block, &config.Scans)
if err != nil {
return nil, err
}
@@ -269,18 +271,15 @@ func setRepositories(block scfg.Block, repositories *[]*GitRepositoryConfigurati
func defaultConfiguration() *configuration {
return &configuration{
- Scan: defaultScan(),
+ Scans: defaultScans(),
RootReadme: "",
ListenAddr: defaultAddr(),
Repositories: make([]*GitRepositoryConfiguration, 0),
}
}
-func defaultScan() *scan {
- return &scan{
- Public: false,
- Path: "",
- }
+func defaultScans() []*scan {
+ return []*scan{}
}
func defaultAddr() string {
@@ -322,18 +321,27 @@ func setListenAddr(block scfg.Block, listenAddr *string) error {
return setString(scanDir, listenAddr)
}
-func setScan(block scfg.Block, scan *scan) error {
- scanDir := block.Get("scan")
- if scanDir == nil {
- return nil
- }
- err := setString(scanDir, &scan.Path)
- if err != nil {
- return err
+func setScan(block scfg.Block, scans *[]*scan) error {
+ for _, scanDir := range block.GetAll("scan") {
+ s := &scan{}
+ if scanDir == nil {
+ return nil
+ }
+ err := setString(scanDir, &s.Path)
+ if err != nil {
+ return err
+ }
+
+ public := scanDir.Children.Get("public")
+ err = setBool(public, &s.Public)
+ if err != nil {
+ return err
+ }
+
+ *scans = append(*scans, s)
}
- public := scanDir.Children.Get("public")
- return setBool(public, &scan.Public)
+ return nil
}
func setBool(dir *scfg.Directive, field *bool) error {
diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go
index 9080351..cc58ce9 100644
--- a/pkg/config/config_test.go
+++ b/pkg/config/config_test.go
@@ -18,9 +18,11 @@ func TestFileParsing(t *testing.T) {
name: "minimal scan",
config: `scan "/srv/git"`,
expectedConfig: &configuration{
- Scan: &scan{
- Public: false,
- Path: "/srv/git",
+ Scans: []*scan{
+ {
+ Public: false,
+ Path: "/srv/git",
+ },
},
ListenAddr: defaultAddr(),
Repositories: []*GitRepositoryConfiguration{},
@@ -33,9 +35,11 @@ scan "/srv/git" {
public true
}`,
expectedConfig: &configuration{
- Scan: &scan{
- Public: true,
- Path: "/srv/git",
+ Scans: []*scan{
+ {
+ Public: true,
+ Path: "/srv/git",
+ },
},
ListenAddr: defaultAddr(),
Repositories: []*GitRepositoryConfiguration{},
@@ -45,7 +49,7 @@ scan "/srv/git" {
name: "minimal repository",
config: `repository /srv/git/cerrado.git`,
expectedConfig: &configuration{
- Scan: defaultScan(),
+ Scans: defaultScans(),
ListenAddr: defaultAddr(),
Repositories: []*GitRepositoryConfiguration{
{
@@ -68,7 +72,7 @@ repository /srv/git/cerrado.git {
about readme.txt
}`,
expectedConfig: &configuration{
- Scan: defaultScan(),
+ Scans: defaultScans(),
ListenAddr: defaultAddr(),
Repositories: []*GitRepositoryConfiguration{
{
@@ -85,7 +89,7 @@ repository /srv/git/cerrado.git {
name: "minimal listen",
config: ``,
expectedConfig: &configuration{
- Scan: defaultScan(),
+ Scans: defaultScans(),
ListenAddr: defaultAddr(),
Repositories: []*GitRepositoryConfiguration{},
},
@@ -94,7 +98,7 @@ repository /srv/git/cerrado.git {
name: "complete listen",
config: `listen-addr unix://var/run/cerrado/cerrado.sock`,
expectedConfig: &configuration{
- Scan: defaultScan(),
+ Scans: defaultScans(),
ListenAddr: "unix://var/run/cerrado/cerrado.sock",
Repositories: []*GitRepositoryConfiguration{},
},
@@ -120,9 +124,11 @@ repository /srv/git/cerrado.git {
about readme.txt
}`,
expectedConfig: &configuration{
- Scan: &scan{
- Public: true,
- Path: "/srv/git",
+ Scans: []*scan{
+ {
+ Public: true,
+ Path: "/srv/git",
+ },
},
ListenAddr: "unix://var/run/cerrado/cerrado.sock",
Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq",