mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
28 lines
1.2 KiB
Go
28 lines
1.2 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package common
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/hanzoai/git/modules/httplib"
|
|
)
|
|
|
|
// FetchRedirectDelegate helps the "fetch" requests to redirect to the correct location
|
|
func FetchRedirectDelegate(resp http.ResponseWriter, req *http.Request) {
|
|
// When use "fetch" to post requests and the response is a redirect, browser's "location.href = uri" has limitations.
|
|
// 1. change "location" from old "/foo" to new "/foo#hash", the browser will not reload the page.
|
|
// 2. when use "window.reload()", the hash is not respected, the newly loaded page won't scroll to the hash target.
|
|
// The typical page is "issue comment" page. The backend responds "/owner/repo/issues/1#comment-2",
|
|
// then frontend needs this delegate to redirect to the new location with hash correctly.
|
|
redirect := req.FormValue("redirect")
|
|
if req.Method != http.MethodPost || !httplib.IsCurrentGitSiteURL(req.Context(), redirect) {
|
|
http.Error(resp, "Bad Request", http.StatusBadRequest)
|
|
return
|
|
}
|
|
// no OpenRedirect, the "redirect" is validated by "IsCurrentGitSiteURL" above
|
|
resp.Header().Set("Location", redirect)
|
|
resp.WriteHeader(http.StatusSeeOther)
|
|
}
|