mirror of
https://codeberg.org/Codeberg/pages-server.git
synced 2025-01-18 16:47:54 +00:00
make tryUpstream independent func
This commit is contained in:
parent
e85f21ed2e
commit
0374e95d23
2 changed files with 68 additions and 29 deletions
|
@ -110,29 +110,7 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// tryUpstream forwards the target request to the Gitea API, and shows an error page on failure.
|
|
||||||
var tryUpstream = func() {
|
|
||||||
// check if a canonical domain exists on a request on MainDomain
|
|
||||||
if bytes.HasSuffix(trimmedHost, mainDomainSuffix) {
|
|
||||||
canonicalDomain, _ := upstream.CheckCanonicalDomain(targetOwner, targetRepo, targetBranch, "", string(mainDomainSuffix), giteaRoot, giteaApiToken, canonicalDomainCache)
|
|
||||||
if !strings.HasSuffix(strings.SplitN(canonicalDomain, "/", 2)[0], string(mainDomainSuffix)) {
|
|
||||||
canonicalPath := string(ctx.RequestURI())
|
|
||||||
if targetRepo != "pages" {
|
|
||||||
canonicalPath = "/" + strings.SplitN(canonicalPath, "/", 3)[2]
|
|
||||||
}
|
|
||||||
ctx.Redirect("https://"+canonicalDomain+canonicalPath, fasthttp.StatusTemporaryRedirect)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to request the file from the Gitea API
|
|
||||||
if !targetOptions.Upstream(ctx, targetOwner, targetRepo, targetBranch, targetPath, giteaRoot, giteaApiToken, branchTimestampCache, fileResponseCache) {
|
|
||||||
html.ReturnErrorPage(ctx, ctx.Response.StatusCode())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug().Msg("preparations")
|
log.Debug().Msg("preparations")
|
||||||
|
|
||||||
if rawDomain != nil && bytes.Equal(trimmedHost, rawDomain) {
|
if rawDomain != nil && bytes.Equal(trimmedHost, rawDomain) {
|
||||||
// Serve raw content from RawDomain
|
// Serve raw content from RawDomain
|
||||||
log.Debug().Msg("raw domain")
|
log.Debug().Msg("raw domain")
|
||||||
|
@ -157,7 +135,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
giteaRoot+"/"+targetOwner+"/"+targetRepo+"/src/branch/%b/%p",
|
giteaRoot+"/"+targetOwner+"/"+targetRepo+"/src/branch/%b/%p",
|
||||||
) {
|
) {
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debug().Msg("missing branch")
|
log.Debug().Msg("missing branch")
|
||||||
|
@ -169,7 +150,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
giteaRoot+"/"+targetOwner+"/"+targetRepo+"/src/branch/%b/%p",
|
giteaRoot+"/"+targetOwner+"/"+targetRepo+"/src/branch/%b/%p",
|
||||||
)
|
)
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +186,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
"/"+pathElements[0]+"/%p",
|
"/"+pathElements[0]+"/%p",
|
||||||
) {
|
) {
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
} else {
|
} else {
|
||||||
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
||||||
}
|
}
|
||||||
|
@ -215,7 +202,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
log.Debug().Msg("main domain preparations, now trying with specified branch")
|
log.Debug().Msg("main domain preparations, now trying with specified branch")
|
||||||
if tryBranch("pages", pathElements[0][1:], pathElements[1:], "/%p") {
|
if tryBranch("pages", pathElements[0][1:], pathElements[1:], "/%p") {
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
} else {
|
} else {
|
||||||
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
||||||
}
|
}
|
||||||
|
@ -228,7 +218,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
log.Debug().Msg("main domain preparations, now trying with specified repo")
|
log.Debug().Msg("main domain preparations, now trying with specified repo")
|
||||||
if pathElements[0] != "pages" && tryBranch(pathElements[0], "pages", pathElements[1:], "") {
|
if pathElements[0] != "pages" && tryBranch(pathElements[0], "pages", pathElements[1:], "") {
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +230,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
log.Debug().Msg("main domain preparations, now trying with default repo/branch")
|
log.Debug().Msg("main domain preparations, now trying with default repo/branch")
|
||||||
if tryBranch("pages", "", pathElements, "") {
|
if tryBranch("pages", "", pathElements, "") {
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,7 +278,10 @@ func Handler(mainDomainSuffix, rawDomain []byte,
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debug().Msg("tryBranch, now trying upstream")
|
log.Debug().Msg("tryBranch, now trying upstream")
|
||||||
tryUpstream()
|
tryUpstream(ctx, mainDomainSuffix, trimmedHost,
|
||||||
|
targetOptions, targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
giteaRoot, giteaApiToken,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
html.ReturnErrorPage(ctx, fasthttp.StatusFailedDependency)
|
||||||
|
|
40
server/try.go
Normal file
40
server/try.go
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/valyala/fasthttp"
|
||||||
|
|
||||||
|
"codeberg.org/codeberg/pages/html"
|
||||||
|
"codeberg.org/codeberg/pages/server/cache"
|
||||||
|
"codeberg.org/codeberg/pages/server/upstream"
|
||||||
|
)
|
||||||
|
|
||||||
|
// tryUpstream forwards the target request to the Gitea API, and shows an error page on failure.
|
||||||
|
func tryUpstream(ctx *fasthttp.RequestCtx,
|
||||||
|
mainDomainSuffix, trimmedHost []byte,
|
||||||
|
|
||||||
|
targetOptions *upstream.Options,
|
||||||
|
targetOwner, targetRepo, targetBranch, targetPath,
|
||||||
|
|
||||||
|
giteaRoot, giteaAPIToken string,
|
||||||
|
canonicalDomainCache, branchTimestampCache, fileResponseCache cache.SetGetKey) {
|
||||||
|
// check if a canonical domain exists on a request on MainDomain
|
||||||
|
if bytes.HasSuffix(trimmedHost, mainDomainSuffix) {
|
||||||
|
canonicalDomain, _ := upstream.CheckCanonicalDomain(targetOwner, targetRepo, targetBranch, "", string(mainDomainSuffix), giteaRoot, giteaAPIToken, canonicalDomainCache)
|
||||||
|
if !strings.HasSuffix(strings.SplitN(canonicalDomain, "/", 2)[0], string(mainDomainSuffix)) {
|
||||||
|
canonicalPath := string(ctx.RequestURI())
|
||||||
|
if targetRepo != "pages" {
|
||||||
|
canonicalPath = "/" + strings.SplitN(canonicalPath, "/", 3)[2]
|
||||||
|
}
|
||||||
|
ctx.Redirect("https://"+canonicalDomain+canonicalPath, fasthttp.StatusTemporaryRedirect)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to request the file from the Gitea API
|
||||||
|
if !targetOptions.Upstream(ctx, targetOwner, targetRepo, targetBranch, targetPath, giteaRoot, giteaAPIToken, branchTimestampCache, fileResponseCache) {
|
||||||
|
html.ReturnErrorPage(ctx, ctx.Response.StatusCode())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue