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]>
52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package install
|
|
|
|
import (
|
|
"fmt"
|
|
"html"
|
|
"net/http"
|
|
|
|
"github.com/hanzoai/git/modules/public"
|
|
"github.com/hanzoai/git/modules/setting"
|
|
"github.com/hanzoai/git/modules/web"
|
|
"github.com/hanzoai/git/routers/common"
|
|
"github.com/hanzoai/git/routers/web/healthcheck"
|
|
"github.com/hanzoai/git/routers/web/misc"
|
|
"github.com/hanzoai/git/services/forms"
|
|
)
|
|
|
|
// Routes registers the installation routes
|
|
func Routes() *web.Router {
|
|
base := web.NewRouter()
|
|
base.BeforeRouting(common.ProtocolMiddlewares()...)
|
|
|
|
base.Methods("GET, HEAD", "/assets/*", public.FileHandlerFunc())
|
|
|
|
r := web.NewRouter()
|
|
r.AfterRouting(common.MustInitSessioner(), installContexter())
|
|
|
|
r.Get("/", Install) // it must be on the root, because the "install.js" use the window.location to replace the "localhost" AppURL
|
|
r.Post("/", web.Bind(forms.InstallForm{}), SubmitInstall)
|
|
r.Get("/post-install", InstallDone)
|
|
|
|
r.Get("/-/web-theme/list", misc.WebThemeList)
|
|
r.Post("/-/web-theme/apply", misc.WebThemeApply)
|
|
r.Get("/v1/healthz", healthcheck.Check)
|
|
|
|
r.NotFound(installNotFound)
|
|
|
|
base.Mount("", r)
|
|
return base
|
|
}
|
|
|
|
func installNotFound(w http.ResponseWriter, req *http.Request) {
|
|
w.Header().Add("Content-Type", "text/html; charset=utf-8")
|
|
w.Header().Add("Refresh", "1; url="+setting.AppSubURL+"/")
|
|
// do not use 30x status, because the "post-install" page needs to use 404/200 to detect if the forge has been installed.
|
|
// the fetch API could follow 30x requests to the page with 200 status.
|
|
w.WriteHeader(http.StatusNotFound)
|
|
_, _ = fmt.Fprintf(w, `Not Found. <a href="%s">Go to default page</a>.`, html.EscapeString(setting.AppSubURL+"/"))
|
|
}
|