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:
authorAlessio Caiazza <acaiazza@gitlab.com>2018-11-27 14:44:15 +0300
committerAlessio Caiazza <acaiazza@gitlab.com>2018-11-29 11:28:55 +0300
commita00d3b3b461e748ce7342f49f23bebc5538d3a7b (patch)
tree1a0d83db043be056f8d929ee6c48af4df63401bd
parentfd23b054ec4e40735feae2d5a799aa7611174f54 (diff)
extract domain.group struct from domain.D
-rw-r--r--internal/domain/domain.go23
-rw-r--r--internal/domain/domain_test.go100
-rw-r--r--internal/domain/map.go14
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),
+ },
}
}