From f5f1625533e33972c3f4c258bcdb208f8fc53a7f Mon Sep 17 00:00:00 2001 From: Captain ALM Date: Sun, 10 Dec 2023 14:30:37 +0000 Subject: [PATCH] Add Gitbucket support. --- conf/zone.go | 42 ++++++++------- outputMeta/package-meta-tag-outputter.go | 69 ++++++++++++++++-------- web/page-handler-template-marshal.go | 4 +- 3 files changed, 72 insertions(+), 43 deletions(-) diff --git a/conf/zone.go b/conf/zone.go index 004bda3..4e59d55 100644 --- a/conf/zone.go +++ b/conf/zone.go @@ -3,19 +3,21 @@ package conf import "golang.captainalm.com/GOPackageHeaderServer/outputMeta" type ZoneYaml struct { - Name string `yaml:"name"` - Domains []string `yaml:"domains"` - CssURL string `yaml:"cssURL"` - HavePageContents bool `yaml:"havePageContents"` - BasePath string `yaml:"basePath"` - UsernameProvided bool `yaml:"usernameProvided"` //If set, the outputter will do /{user}/{repo}/ for repos rather than /{repo}/ ; Should really be named usernameProvidedByRequest - Username string `yaml:"username"` - BasePrefixURL string `yaml:"basePrefixURL"` - SuffixDirectoryURL string `yaml:"suffixDirectoryURL"` - SuffixFileURL string `yaml:"suffixFileURL"` - RangeSupported bool `yaml:"rangeSupported"` - PathLengthLimit uint `yaml:"pathLengthLimit"` //The length of the path (Number of entries in the path) to return in the responses; (If 0: defaults to 1, if the username is not expected to be provided by the request, otherwise defaulting to 2) - CacheSettings CacheSettingsYaml `yaml:"cacheSettings"` + Name string `yaml:"name"` + Domains []string `yaml:"domains"` + CssURL string `yaml:"cssURL"` + HavePageContents bool `yaml:"havePageContents"` + BasePath string `yaml:"basePath"` + UsernameProvided bool `yaml:"usernameProvided"` //If set, the outputter will do /{user}/{repo}/ for repos rather than /{repo}/ ; Should really be named usernameProvidedByRequest + Username string `yaml:"username"` + BasePrefixURL string `yaml:"basePrefixURL"` + SuffixDirectoryURL string `yaml:"suffixDirectoryURL"` + SuffixFileURL string `yaml:"suffixFileURL"` + RangeSupported bool `yaml:"rangeSupported"` + PathLengthLimit uint `yaml:"pathLengthLimit"` //The length of the path (Number of entries in the path) to return in the responses; (If 0: defaults to 1, if the username is not expected to be provided by the request, otherwise defaulting to 2) + SuffixImportURL string `yaml:"suffixImportURL"` + BasePrefixSourceURL string `yaml:"basePrefixSourceURL"` + CacheSettings CacheSettingsYaml `yaml:"cacheSettings"` } func (zy ZoneYaml) GetPackageMetaTagOutputter() *outputMeta.PackageMetaTagOutputter { @@ -32,11 +34,13 @@ func (zy ZoneYaml) GetPackageMetaTagOutputter() *outputMeta.PackageMetaTagOutput } } return &outputMeta.PackageMetaTagOutputter{ - BasePath: zy.BasePath, - Username: theUsername, - BasePrefixURL: zy.BasePrefixURL, - SuffixDirectoryURL: zy.SuffixDirectoryURL, - SuffixFileURL: zy.SuffixFileURL, - PathLengthLimit: pthLength, + BasePath: zy.BasePath, + Username: theUsername, + BasePrefixURL: zy.BasePrefixURL, + SuffixDirectoryURL: zy.SuffixDirectoryURL, + SuffixFileURL: zy.SuffixFileURL, + PathLengthLimit: pthLength, + SuffixImportURL: zy.SuffixImportURL, + BasePrefixSourceURL: zy.BasePrefixSourceURL, } } diff --git a/outputMeta/package-meta-tag-outputter.go b/outputMeta/package-meta-tag-outputter.go index 07a275e..0bf5dc1 100644 --- a/outputMeta/package-meta-tag-outputter.go +++ b/outputMeta/package-meta-tag-outputter.go @@ -6,12 +6,14 @@ import ( ) type PackageMetaTagOutputter struct { - BasePath string - Username string //If set, the outputter will do /{repo}/ for repos rather than /{user}/{repo}/ - BasePrefixURL string - SuffixDirectoryURL string - SuffixFileURL string - PathLengthLimit uint //The number of path entries in the go import paths + BasePath string + Username string //If set, the outputter will do /{repo}/ for repos rather than /{user}/{repo}/ + BasePrefixURL string + SuffixDirectoryURL string + SuffixFileURL string + PathLengthLimit uint //The number of path entries in the go import paths + SuffixImportURL string + BasePrefixSourceURL string //If blank, use BasePrefixURL instead } func (pkgMTO *PackageMetaTagOutputter) GetMetaTags(pathIn string) string { @@ -21,12 +23,12 @@ func (pkgMTO *PackageMetaTagOutputter) GetMetaTags(pathIn string) string { func (pkgMTO *PackageMetaTagOutputter) GetMetaContentForGoImport(pathIn string) string { pathLoc := pkgMTO.GetPath(pathIn) - return pkgMTO.getPrefix(pathLoc) + " git " + pkgMTO.getHomeURL(pathLoc) + return pkgMTO.getPrefix(pathLoc) + " git " + pkgMTO.getHomeURL(pathLoc, false) + pkgMTO.SuffixImportURL } func (pkgMTO *PackageMetaTagOutputter) GetMetaContentForGoSource(pathIn string) string { pathLoc := pkgMTO.GetPath(pathIn) - return pkgMTO.getPrefix(pathLoc) + " " + pkgMTO.getHomeURL(pathLoc) + " " + + return pkgMTO.getPrefix(pathLoc) + " " + pkgMTO.getHomeURL(pathLoc, true) + " " + pkgMTO.getDirectoryURL(pathLoc) + " " + pkgMTO.getFileURL(pathLoc) } @@ -53,6 +55,19 @@ func (pkgMTO *PackageMetaTagOutputter) assureBasePrefixURL() (failed bool) { return false } +func (pkgMTO *PackageMetaTagOutputter) assureBasePrefixSourceURL() (failed bool) { + if pkgMTO.BasePrefixSourceURL == "" { + if pkgMTO.assureBasePrefixURL() { + return true + } + if pkgMTO.BasePrefixURL == "" { + return true + } + pkgMTO.BasePrefixSourceURL = pkgMTO.BasePrefixURL + } + return false +} + func (pkgMTO *PackageMetaTagOutputter) getPrefix(pathIn string) string { if pkgMTO.BasePath == "" { return "_" @@ -60,38 +75,48 @@ func (pkgMTO *PackageMetaTagOutputter) getPrefix(pathIn string) string { return path.Join(pkgMTO.BasePath, pathIn) } -func (pkgMTO *PackageMetaTagOutputter) getHomeURL(pathIn string) string { - if pkgMTO.assureBasePrefixURL() { - return "_" - } - - if pkgMTO.Username == "" { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Clean(pathIn), "/") +func (pkgMTO *PackageMetaTagOutputter) getHomeURL(pathIn string, isSource bool) string { + bpURL := "" + if isSource { + if pkgMTO.assureBasePrefixSourceURL() { + return "_" + } else { + bpURL = pkgMTO.BasePrefixSourceURL + } } else { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn), "/") + if pkgMTO.assureBasePrefixURL() { + return "_" + } else { + bpURL = pkgMTO.BasePrefixURL + } + } + if pkgMTO.Username == "" { + return bpURL + "/" + strings.TrimLeft(path.Clean(pathIn), "/") + } else { + return bpURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn), "/") } } func (pkgMTO *PackageMetaTagOutputter) getDirectoryURL(pathIn string) string { - if pkgMTO.assureBasePrefixURL() || pkgMTO.SuffixDirectoryURL == "" { + if pkgMTO.assureBasePrefixSourceURL() || pkgMTO.SuffixDirectoryURL == "" { return "_" } if pkgMTO.Username == "" { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Join(pathIn, pkgMTO.SuffixDirectoryURL), "/") + return pkgMTO.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Join(pathIn, pkgMTO.SuffixDirectoryURL), "/") } else { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn, pkgMTO.SuffixDirectoryURL), "/") + return pkgMTO.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn, pkgMTO.SuffixDirectoryURL), "/") } } func (pkgMTO *PackageMetaTagOutputter) getFileURL(pathIn string) string { - if pkgMTO.assureBasePrefixURL() || pkgMTO.SuffixFileURL == "" { + if pkgMTO.assureBasePrefixSourceURL() || pkgMTO.SuffixFileURL == "" { return "_" } if pkgMTO.Username == "" { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Join(pathIn, pkgMTO.SuffixFileURL), "/") + return pkgMTO.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Join(pathIn, pkgMTO.SuffixFileURL), "/") } else { - return pkgMTO.BasePrefixURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn, pkgMTO.SuffixFileURL), "/") + return pkgMTO.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Join(pkgMTO.Username, pathIn, pkgMTO.SuffixFileURL), "/") } } diff --git a/web/page-handler-template-marshal.go b/web/page-handler-template-marshal.go index bc0b8af..973ed1d 100644 --- a/web/page-handler-template-marshal.go +++ b/web/page-handler-template-marshal.go @@ -20,8 +20,8 @@ func (htm handlerTemplateMarshal) GetGoSourceMetaContent() string { func (htm handlerTemplateMarshal) GetLink() string { if htm.PageHandler.MetaOutput.Username == "" { - return htm.PageHandler.MetaOutput.BasePrefixURL + "/" + strings.TrimLeft(path.Clean(htm.PageHandler.MetaOutput.GetPath(htm.RequestPath)), "/") + return htm.PageHandler.MetaOutput.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Clean(htm.PageHandler.MetaOutput.GetPath(htm.RequestPath)), "/") } else { - return htm.PageHandler.MetaOutput.BasePrefixURL + "/" + strings.TrimLeft(path.Join(htm.PageHandler.MetaOutput.Username, htm.PageHandler.MetaOutput.GetPath(htm.RequestPath)), "/") + return htm.PageHandler.MetaOutput.BasePrefixSourceURL + "/" + strings.TrimLeft(path.Join(htm.PageHandler.MetaOutput.Username, htm.PageHandler.MetaOutput.GetPath(htm.RequestPath)), "/") } }