Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-09-20 14:56:35 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-09-20 14:56:35 +0300
commitc5ea1f1db89bc5bb53714b071ebbd167c28ab0e7 (patch)
treeea0ef100b71697288fb63c2fd35360e57e31e693 /internal/domain
parent218376d484a8ec55882b037475ec3201d1c897cf (diff)
Make it more explicit what a Group and Project is
Diffstat (limited to 'internal/domain')
-rw-r--r--internal/domain/domain.go15
-rw-r--r--internal/domain/domain_test.go90
-rw-r--r--internal/domain/group.go8
-rw-r--r--internal/domain/group_test.go30
-rw-r--r--internal/domain/map.go8
-rw-r--r--internal/domain/map_test.go2
-rw-r--r--internal/domain/project.go8
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
+}