diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2019-09-20 14:56:35 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2019-09-20 14:56:35 +0300 |
commit | c5ea1f1db89bc5bb53714b071ebbd167c28ab0e7 (patch) | |
tree | ea0ef100b71697288fb63c2fd35360e57e31e693 /internal/domain | |
parent | 218376d484a8ec55882b037475ec3201d1c897cf (diff) |
Make it more explicit what a Group and Project is
Diffstat (limited to 'internal/domain')
-rw-r--r-- | internal/domain/domain.go | 15 | ||||
-rw-r--r-- | internal/domain/domain_test.go | 90 | ||||
-rw-r--r-- | internal/domain/group.go | 8 | ||||
-rw-r--r-- | internal/domain/group_test.go | 30 | ||||
-rw-r--r-- | internal/domain/map.go | 8 | ||||
-rw-r--r-- | internal/domain/map_test.go | 2 | ||||
-rw-r--r-- | internal/domain/project.go | 8 |
7 files changed, 81 insertions, 80 deletions
diff --git a/internal/domain/domain.go b/internal/domain/domain.go index 2f499ff9..efea118a 100644 --- a/internal/domain/domain.go +++ b/internal/domain/domain.go @@ -38,16 +38,9 @@ type locationFileNoExtensionError struct { FullPath string } -type project struct { - NamespaceProject bool - HTTPSOnly bool - AccessControl bool - ID uint64 -} - // Domain is a domain that gitlab-pages can serve. type Domain struct { - group + group Group // custom domains: projectName string @@ -108,12 +101,12 @@ func handleGZip(w http.ResponseWriter, r *http.Request, fullPath string) string // Look up a project inside the domain based on the host and path. Returns the // project and its name (if applicable) -func (d *Domain) getProjectWithSubpath(r *http.Request) (*project, string, string) { +func (d *Domain) getProjectWithSubpath(r *http.Request) (*Project, string, string) { // Check for a project specified in the URL: http://group.gitlab.io/projectA // If present, these projects shadow the group domain. split := strings.SplitN(r.URL.Path, "/", maxProjectDepth) if len(split) >= 2 { - project, projectPath, urlPath := d.digProjectWithSubpath("", split[1:]) + project, projectPath, urlPath := d.group.digProjectWithSubpath("", split[1:]) if project != nil { return project, projectPath, urlPath } @@ -122,7 +115,7 @@ func (d *Domain) getProjectWithSubpath(r *http.Request) (*project, string, strin // Since the URL doesn't specify a project (e.g. http://mydomain.gitlab.io), // return the group project if it exists. if host := host.FromRequest(r); host != "" { - if groupProject := d.projects[host]; groupProject != nil { + if groupProject := d.group.projects[host]; groupProject != nil { return groupProject, host, strings.Join(split[1:], "/") } } diff --git a/internal/domain/domain_test.go b/internal/domain/domain_test.go index d5db33c9..1f200afa 100644 --- a/internal/domain/domain_test.go +++ b/internal/domain/domain_test.go @@ -27,13 +27,13 @@ func serveFileOrNotFound(domain *Domain) http.HandlerFunc { func testGroupServeHTTPHost(t *testing.T, host string) { testGroup := &Domain{ projectName: "", - group: group{ + group: Group{ name: "group", - projects: map[string]*project{ - "group.test.io": &project{}, - "group.gitlab-example.com": &project{}, - "project": &project{}, - "project2": &project{}, + projects: map[string]*Project{ + "group.test.io": &Project{}, + "group.gitlab-example.com": &Project{}, + "project": &Project{}, + "project2": &Project{}, }, }, } @@ -80,7 +80,7 @@ func TestDomainServeHTTP(t *testing.T) { defer cleanup() testDomain := &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -108,7 +108,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Custom domain with HTTPS-only enabled", domain: &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project", config: &domainConfig{HTTPSOnly: true}, }, @@ -118,7 +118,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Custom domain with HTTPS-only disabled", domain: &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project", config: &domainConfig{HTTPSOnly: false}, }, @@ -129,9 +129,9 @@ func TestIsHTTPSOnly(t *testing.T) { name: "Default group domain with HTTPS-only enabled", domain: &Domain{ projectName: "project", - group: group{ + group: Group{ name: "group", - projects: projects{"test-domain": &project{HTTPSOnly: true}}, + projects: projects{"test-domain": &Project{HTTPSOnly: true}}, }, }, url: "http://test-domain", @@ -141,9 +141,9 @@ func TestIsHTTPSOnly(t *testing.T) { name: "Default group domain with HTTPS-only disabled", domain: &Domain{ projectName: "project", - group: group{ + group: Group{ name: "group", - projects: projects{"test-domain": &project{HTTPSOnly: false}}, + projects: projects{"test-domain": &Project{HTTPSOnly: false}}, }, }, url: "http://test-domain", @@ -153,9 +153,9 @@ func TestIsHTTPSOnly(t *testing.T) { name: "Case-insensitive default group domain with HTTPS-only enabled", domain: &Domain{ projectName: "project", - group: group{ + group: Group{ name: "group", - projects: projects{"test-domain": &project{HTTPSOnly: true}}, + projects: projects{"test-domain": &Project{HTTPSOnly: true}}, }, }, url: "http://Test-domain", @@ -165,9 +165,9 @@ func TestIsHTTPSOnly(t *testing.T) { name: "Other group domain with HTTPS-only enabled", domain: &Domain{ projectName: "project", - group: group{ + group: Group{ name: "group", - projects: projects{"project": &project{HTTPSOnly: true}}, + projects: projects{"project": &Project{HTTPSOnly: true}}, }, }, url: "http://test-domain/project", @@ -177,9 +177,9 @@ func TestIsHTTPSOnly(t *testing.T) { name: "Other group domain with HTTPS-only disabled", domain: &Domain{ projectName: "project", - group: group{ + group: Group{ name: "group", - projects: projects{"project": &project{HTTPSOnly: false}}, + projects: projects{"project": &Project{HTTPSOnly: false}}, }, }, url: "http://test-domain/project", @@ -188,7 +188,7 @@ func TestIsHTTPSOnly(t *testing.T) { { name: "Unknown project", domain: &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project", }, url: "http://test-domain/project", @@ -217,7 +217,7 @@ func TestHasAcmeChallenge(t *testing.T) { { name: "Project containing acme challenge", domain: &Domain{ - group: group{name: "group.acme"}, + group: Group{name: "group.acme"}, projectName: "with.acme.challenge", config: &domainConfig{HTTPSOnly: true}, }, @@ -227,7 +227,7 @@ func TestHasAcmeChallenge(t *testing.T) { { name: "Project containing acme challenge", domain: &Domain{ - group: group{name: "group.acme"}, + group: Group{name: "group.acme"}, projectName: "with.acme.challenge", config: &domainConfig{HTTPSOnly: true}, }, @@ -237,7 +237,7 @@ func TestHasAcmeChallenge(t *testing.T) { { name: "Project containing another token", domain: &Domain{ - group: group{name: "group.acme"}, + group: Group{name: "group.acme"}, projectName: "with.acme.challenge", config: &domainConfig{HTTPSOnly: true}, }, @@ -253,7 +253,7 @@ func TestHasAcmeChallenge(t *testing.T) { { name: "Domain without config", domain: &Domain{ - group: group{name: "group.acme"}, + group: Group{name: "group.acme"}, projectName: "with.acme.challenge", config: nil, }, @@ -301,13 +301,13 @@ func TestGroupServeHTTPGzip(t *testing.T) { testGroup := &Domain{ projectName: "", - group: group{ + group: Group{ name: "group", - projects: map[string]*project{ - "group.test.io": &project{}, - "group.gitlab-example.com": &project{}, - "project": &project{}, - "project2": &project{}, + projects: map[string]*Project{ + "group.test.io": &Project{}, + "group.gitlab-example.com": &Project{}, + "project": &Project{}, + "project2": &Project{}, }, }, } @@ -368,14 +368,14 @@ func TestGroup404ServeHTTP(t *testing.T) { testGroup := &Domain{ projectName: "", - group: group{ + 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{}, + projects: map[string]*Project{ + "domain.404": &Project{}, + "group.404.test.io": &Project{}, + "project.404": &Project{}, + "project.404.symlink": &Project{}, + "project.no.404": &Project{}, }, }, } @@ -396,7 +396,7 @@ func TestDomain404ServeHTTP(t *testing.T) { defer cleanup() testDomain := &Domain{ - group: group{name: "group.404"}, + group: Group{name: "group.404"}, projectName: "domain.404", config: &domainConfig{ Domain: "domain.404.com", @@ -412,7 +412,7 @@ func TestPredefined404ServeHTTP(t *testing.T) { defer cleanup() testDomain := &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, } testhelpers.AssertHTTP404(t, serveFileOrNotFound(testDomain), "GET", "http://group.test.io/not-existing-file", nil, "The page you're looking for could not be found") @@ -420,7 +420,7 @@ func TestPredefined404ServeHTTP(t *testing.T) { func TestGroupCertificate(t *testing.T) { testGroup := &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "", } @@ -431,7 +431,7 @@ func TestGroupCertificate(t *testing.T) { func TestDomainNoCertificate(t *testing.T) { testDomain := &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -449,7 +449,7 @@ func TestDomainNoCertificate(t *testing.T) { func TestDomainCertificate(t *testing.T) { testDomain := &Domain{ - group: group{name: "group"}, + group: Group{name: "group"}, projectName: "project2", config: &domainConfig{ Domain: "test.domain.com", @@ -468,10 +468,10 @@ func TestCacheControlHeaders(t *testing.T) { defer cleanup() testGroup := &Domain{ - group: group{ + group: Group{ name: "group", - projects: map[string]*project{ - "group.test.io": &project{}, + projects: map[string]*Project{ + "group.test.io": &Project{}, }, }, } diff --git a/internal/domain/group.go b/internal/domain/group.go index 83b8d255..7dcae83e 100644 --- a/internal/domain/group.go +++ b/internal/domain/group.go @@ -5,10 +5,10 @@ import ( "strings" ) -type projects map[string]*project -type subgroups map[string]*group +type projects map[string]*Project +type subgroups map[string]*Group -type group struct { +type Group struct { name string // nested groups @@ -18,7 +18,7 @@ type group struct { projects projects } -func (g *group) digProjectWithSubpath(parentPath string, keys []string) (*project, string, string) { +func (g *Group) digProjectWithSubpath(parentPath string, keys []string) (*Project, string, string) { if len(keys) >= 1 { head := keys[0] tail := keys[1:] diff --git a/internal/domain/group_test.go b/internal/domain/group_test.go index 8f75fe96..ac7afea1 100644 --- a/internal/domain/group_test.go +++ b/internal/domain/group_test.go @@ -8,25 +8,25 @@ import ( ) func TestGroupDig(t *testing.T) { - matchingProject := &project{ID: 1} + matchingProject := &Project{ID: 1} tests := []struct { name string - g group + g Group path string - expectedProject *project + expectedProject *Project expectedProjectPath string expectedPath string }{ { name: "empty group", path: "projectb/demo/features.html", - g: group{}, + g: Group{}, }, { name: "group with project", path: "projectb/demo/features.html", - g: group{ + g: Group{ projects: projects{"projectb": matchingProject}, }, expectedProject: matchingProject, @@ -36,7 +36,7 @@ func TestGroupDig(t *testing.T) { { name: "group with project and no path in URL", path: "projectb", - g: group{ + g: Group{ projects: projects{"projectb": matchingProject}, }, expectedProject: matchingProject, @@ -45,11 +45,11 @@ func TestGroupDig(t *testing.T) { { name: "group with subgroup and project", path: "projectb/demo/features.html", - g: group{ + g: Group{ projects: projects{"projectb": matchingProject}, subgroups: subgroups{ - "sub1": &group{ - projects: projects{"another": &project{}}, + "sub1": &Group{ + projects: projects{"another": &Project{}}, }, }, }, @@ -60,13 +60,13 @@ func TestGroupDig(t *testing.T) { { name: "group with project inside a subgroup", path: "sub1/projectb/demo/features.html", - g: group{ + g: Group{ subgroups: subgroups{ - "sub1": &group{ + "sub1": &Group{ projects: projects{"projectb": matchingProject}, }, }, - projects: projects{"another": &project{}}, + projects: projects{"another": &Project{}}, }, expectedProject: matchingProject, expectedProjectPath: "sub1/projectb", @@ -75,10 +75,10 @@ func TestGroupDig(t *testing.T) { { name: "group with matching subgroup but no project", path: "sub1/projectb/demo/features.html", - g: group{ + g: Group{ subgroups: subgroups{ - "sub1": &group{ - projects: projects{"another": &project{}}, + "sub1": &Group{ + projects: projects{"another": &Project{}}, }, }, }, diff --git a/internal/domain/map.go b/internal/domain/map.go index 7934860b..e374bea4 100644 --- a/internal/domain/map.go +++ b/internal/domain/map.go @@ -36,7 +36,7 @@ func (dm Map) updateDomainMap(domainName string, domain *Domain) { func (dm Map) addDomain(rootDomain, groupName, projectName string, config *domainConfig) { newDomain := &Domain{ - group: group{name: groupName}, + group: Group{name: groupName}, projectName: projectName, config: config, } @@ -52,7 +52,7 @@ func (dm Map) updateGroupDomain(rootDomain, groupName, projectPath string, https if groupDomain == nil { groupDomain = &Domain{ - group: group{ + group: Group{ name: groupName, projects: make(projects), subgroups: make(subgroups), @@ -68,7 +68,7 @@ func (dm Map) updateGroupDomain(rootDomain, groupName, projectPath string, https subgroupName := split[i] subgroup := g.subgroups[subgroupName] if subgroup == nil { - subgroup = &group{ + subgroup = &Group{ name: subgroupName, projects: make(projects), subgroups: make(subgroups), @@ -79,7 +79,7 @@ func (dm Map) updateGroupDomain(rootDomain, groupName, projectPath string, https g = subgroup } - g.projects[projectName] = &project{ + g.projects[projectName] = &Project{ NamespaceProject: domainName == projectName, HTTPSOnly: httpsOnly, AccessControl: accessControl, diff --git a/internal/domain/map_test.go b/internal/domain/map_test.go index de5e4955..2d61d248 100644 --- a/internal/domain/map_test.go +++ b/internal/domain/map_test.go @@ -77,7 +77,7 @@ func TestReadProjects(t *testing.T) { // check subgroups domain, ok := dm["group.test.io"] require.True(t, ok, "missing group.test.io domain") - subgroup, ok := domain.subgroups["subgroup"] + subgroup, ok := domain.group.subgroups["subgroup"] require.True(t, ok, "missing group.test.io subgroup") _, ok = subgroup.projects["project"] require.True(t, ok, "missing project for subgroup in group.test.io domain") diff --git a/internal/domain/project.go b/internal/domain/project.go new file mode 100644 index 00000000..2d38ff74 --- /dev/null +++ b/internal/domain/project.go @@ -0,0 +1,8 @@ +package domain + +type Project struct { + NamespaceProject bool + HTTPSOnly bool + AccessControl bool + ID uint64 +} |