From a00d3b3b461e748ce7342f49f23bebc5538d3a7b Mon Sep 17 00:00:00 2001 From: Alessio Caiazza Date: Tue, 27 Nov 2018 12:44:15 +0100 Subject: extract domain.group struct from domain.D --- internal/domain/domain.go | 23 ++++++---- internal/domain/domain_test.go | 100 ++++++++++++++++++++++++----------------- internal/domain/map.go | 14 +++--- 3 files changed, 81 insertions(+), 56 deletions(-) diff --git a/internal/domain/domain.go b/internal/domain/domain.go index 2c4f4e29..5555ab91 100644 --- a/internal/domain/domain.go +++ b/internal/domain/domain.go @@ -34,10 +34,18 @@ type project struct { } type projects map[string]*project +type subgroups map[string]*group + +type group struct { + name string + + // group domains: + projects projects +} // D is a domain that gitlab-pages can serve. type D struct { - group string + group // custom domains: projectName string @@ -46,19 +54,16 @@ type D struct { certificate *tls.Certificate certificateError error certificateOnce sync.Once - - // group domains: - projects projects } // String implements Stringer. func (d *D) String() string { - if d.group != "" && d.projectName != "" { - return d.group + "/" + d.projectName + if d.group.name != "" && d.projectName != "" { + return d.group.name + "/" + d.projectName } - if d.group != "" { - return d.group + if d.group.name != "" { + return d.group.name } return d.projectName @@ -285,7 +290,7 @@ func (d *D) serveCustomFile(w http.ResponseWriter, r *http.Request, code int, or // Resolve the HTTP request to a path on disk, converting requests for // directories to requests for index.html inside the directory if appropriate. func (d *D) resolvePath(projectName string, subPath ...string) (string, error) { - publicPath := filepath.Join(d.group, projectName, "public") + publicPath := filepath.Join(d.group.name, projectName, "public") // Don't use filepath.Join as cleans the path, // where we want to traverse full path as supplied by user diff --git a/internal/domain/domain_test.go b/internal/domain/domain_test.go index 7544f501..7482dbe7 100644 --- a/internal/domain/domain_test.go +++ b/internal/domain/domain_test.go @@ -30,13 +30,15 @@ func TestGroupServeHTTP(t *testing.T) { setUpTests() testGroup := &D{ - group: "group", projectName: "", - projects: map[string]*project{ - "group.test.io": &project{}, - "group.gitlab-example.com": &project{}, - "project": &project{}, - "project2": &project{}, + group: group{ + name: "group", + projects: map[string]*project{ + "group.test.io": &project{}, + "group.gitlab-example.com": &project{}, + "project": &project{}, + "project2": &project{}, + }, }, } @@ -67,7 +69,7 @@ func TestDomainServeHTTP(t *testing.T) { setUpTests() testDomain := &D{ - group: "group", + group: group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -95,7 +97,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Custom domain with HTTPS-only enabled", domain: &D{ - group: "group", + group: group{name: "group"}, projectName: "project", config: &domainConfig{HTTPSOnly: true}, }, @@ -105,7 +107,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Custom domain with HTTPS-only disabled", domain: &D{ - group: "group", + group: group{name: "group"}, projectName: "project", config: &domainConfig{HTTPSOnly: false}, }, @@ -115,9 +117,11 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Default group domain with HTTPS-only enabled", domain: &D{ - group: "group", projectName: "project", - projects: projects{"test-domain": &project{HTTPSOnly: true}}, + group: group{ + name: "group", + projects: projects{"test-domain": &project{HTTPSOnly: true}}, + }, }, url: "http://test-domain", expected: true, @@ -125,9 +129,11 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Default group domain with HTTPS-only disabled", domain: &D{ - group: "group", projectName: "project", - projects: projects{"test-domain": &project{HTTPSOnly: false}}, + group: group{ + name: "group", + projects: projects{"test-domain": &project{HTTPSOnly: false}}, + }, }, url: "http://test-domain", expected: false, @@ -135,9 +141,11 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Case-insensitive default group domain with HTTPS-only enabled", domain: &D{ - group: "group", projectName: "project", - projects: projects{"test-domain": &project{HTTPSOnly: true}}, + group: group{ + name: "group", + projects: projects{"test-domain": &project{HTTPSOnly: true}}, + }, }, url: "http://Test-domain", expected: true, @@ -145,9 +153,11 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Other group domain with HTTPS-only enabled", domain: &D{ - group: "group", projectName: "project", - projects: projects{"project": &project{HTTPSOnly: true}}, + group: group{ + name: "group", + projects: projects{"project": &project{HTTPSOnly: true}}, + }, }, url: "http://test-domain/project", expected: true, @@ -155,9 +165,11 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Other group domain with HTTPS-only disabled", domain: &D{ - group: "group", projectName: "project", - projects: projects{"project": &project{HTTPSOnly: false}}, + group: group{ + name: "group", + projects: projects{"project": &project{HTTPSOnly: false}}, + }, }, url: "http://test-domain/project", expected: false, @@ -165,7 +177,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Unknown project", domain: &D{ - group: "group", + group: group{name: "group"}, projectName: "project", }, url: "http://test-domain/project", @@ -210,13 +222,15 @@ func TestGroupServeHTTPGzip(t *testing.T) { setUpTests() testGroup := &D{ - group: "group", projectName: "", - projects: map[string]*project{ - "group.test.io": &project{}, - "group.gitlab-example.com": &project{}, - "project": &project{}, - "project2": &project{}, + group: group{ + name: "group", + projects: map[string]*project{ + "group.test.io": &project{}, + "group.gitlab-example.com": &project{}, + "project": &project{}, + "project2": &project{}, + }, }, } @@ -279,14 +293,16 @@ func TestGroup404ServeHTTP(t *testing.T) { setUpTests() testGroup := &D{ - group: "group.404", projectName: "", - projects: map[string]*project{ - "domain.404": &project{}, - "group.404.test.io": &project{}, - "project.404": &project{}, - "project.404.symlink": &project{}, - "project.no.404": &project{}, + group: group{ + name: "group.404", + projects: map[string]*project{ + "domain.404": &project{}, + "group.404.test.io": &project{}, + "project.404": &project{}, + "project.404.symlink": &project{}, + "project.no.404": &project{}, + }, }, } @@ -305,7 +321,7 @@ func TestDomain404ServeHTTP(t *testing.T) { setUpTests() testDomain := &D{ - group: "group.404", + group: group{name: "group.404"}, projectName: "domain.404", config: &domainConfig{ Domain: "domain.404.com", @@ -320,7 +336,7 @@ func TestPredefined404ServeHTTP(t *testing.T) { setUpTests() testDomain := &D{ - group: "group", + group: group{name: "group"}, } testHTTP404(t, serveFileOrNotFound(testDomain), "GET", "http://group.test.io/not-existing-file", nil, "The page you're looking for could not be found") @@ -328,7 +344,7 @@ func TestPredefined404ServeHTTP(t *testing.T) { func TestGroupCertificate(t *testing.T) { testGroup := &D{ - group: "group", + group: group{name: "group"}, projectName: "", } @@ -339,7 +355,7 @@ func TestGroupCertificate(t *testing.T) { func TestDomainNoCertificate(t *testing.T) { testDomain := &D{ - group: "group", + group: group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -357,7 +373,7 @@ func TestDomainNoCertificate(t *testing.T) { func TestDomainCertificate(t *testing.T) { testDomain := &D{ - group: "group", + group: group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -373,9 +389,11 @@ func TestDomainCertificate(t *testing.T) { func TestCacheControlHeaders(t *testing.T) { testGroup := &D{ - group: "group", - projects: map[string]*project{ - "group.test.io": &project{}, + group: group{ + name: "group", + projects: map[string]*project{ + "group.test.io": &project{}, + }, }, } w := httptest.NewRecorder() diff --git a/internal/domain/map.go b/internal/domain/map.go index d2e7c74f..3d9a4073 100644 --- a/internal/domain/map.go +++ b/internal/domain/map.go @@ -34,9 +34,9 @@ func (dm Map) updateDomainMap(domainName string, domain *D) { dm[domainName] = domain } -func (dm Map) addDomain(rootDomain, group, projectName string, config *domainConfig) { +func (dm Map) addDomain(rootDomain, groupName, projectName string, config *domainConfig) { newDomain := &D{ - group: group, + group: group { name: groupName }, projectName: projectName, config: config, } @@ -46,14 +46,16 @@ func (dm Map) addDomain(rootDomain, group, projectName string, config *domainCon dm.updateDomainMap(domainName, newDomain) } -func (dm Map) updateGroupDomain(rootDomain, group, projectName string, httpsOnly bool, accessControl bool, id uint64) { - domainName := strings.ToLower(group + "." + rootDomain) +func (dm Map) updateGroupDomain(rootDomain, groupName, projectName string, httpsOnly bool, accessControl bool, id uint64) { + domainName := strings.ToLower(groupName + "." + rootDomain) groupDomain := dm[domainName] if groupDomain == nil { groupDomain = &D{ - group: group, - projects: make(projects), + group: group{ + name: groupName, + projects: make(projects), + }, } } -- cgit v1.2.3