diff --git a/modules/setting/config.go b/modules/setting/config.go index 1ae3b47f9a..f6b07ba456 100644 --- a/modules/setting/config.go +++ b/modules/setting/config.go @@ -81,6 +81,7 @@ func initDefaultConfig() { Instance: &InstanceStruct{ WebBanner: config.NewOption[WebBannerType]("instance.web_banner"), MaintenanceMode: config.NewOption[MaintenanceModeType]("instance.maintenance_mode"), + LandingPage: config.NewOption[LandingPageType]("instance.landing_page").WithFileConfig(config.CfgSecKey{Sec: "server", Key: "LANDING_PAGE"}), }, } } diff --git a/modules/setting/config_option_instance.go b/modules/setting/config_option_instance.go index 5dac16edc5..a84b9f57ce 100644 --- a/modules/setting/config_option_instance.go +++ b/modules/setting/config_option_instance.go @@ -52,7 +52,35 @@ func (m MaintenanceModeType) IsActive() bool { return true } +// LandingPageType configures the default page for unauthenticated visitors. +// Mode values: "home", "explore", "organizations", "login", or "custom". +// When Mode is "custom", CustomPath holds the redirect target (e.g. "/MokoConsulting"). +type LandingPageType struct { + Mode string // home, explore, organizations, login, custom + CustomPath string // only used when Mode == "custom" +} + +// URL returns the redirect path for the configured landing page. +func (lp LandingPageType) URL() string { + switch lp.Mode { + case "explore": + return "/explore" + case "organizations": + return "/explore/organizations" + case "login": + return "/user/login" + case "custom": + if lp.CustomPath != "" { + return lp.CustomPath + } + return "/" + default: + return "/" + } +} + type InstanceStruct struct { WebBanner *config.Option[WebBannerType] MaintenanceMode *config.Option[MaintenanceModeType] + LandingPage *config.Option[LandingPageType] } diff --git a/options/locale/locale_en-US.json b/options/locale/locale_en-US.json index cf91027ca8..3243a6857b 100644 --- a/options/locale/locale_en-US.json +++ b/options/locale/locale_en-US.json @@ -3328,6 +3328,14 @@ "admin.config.common.start_time": "Start time", "admin.config.common.end_time": "End time", "admin.config.common.skip_time_check": "Leave time empty (clear the field) to skip time check", + "admin.config.instance_landing_page": "Default Landing Page", + "admin.config.landing_page.home": "Home — default home page", + "admin.config.landing_page.explore": "Explore — repository explore page", + "admin.config.landing_page.organizations": "Organizations — organization explore page", + "admin.config.landing_page.login": "Login — redirect to login page", + "admin.config.landing_page.custom": "Custom path — redirect to a specific URL path", + "admin.config.landing_page.custom_path": "Custom path", + "admin.config.landing_page.custom_path_help": "Internal path to redirect unauthenticated visitors to (e.g. /MokoConsulting or /MokoConsulting/MokoGitea/wiki).", "admin.config.instance_maintenance": "Instance Maintenance", "admin.config.instance_maintenance_mode.admin_web_access_only": "Only allow admin to access the web UI", "admin.config.instance_web_banner.enabled": "Show banner", diff --git a/routers/web/home.go b/routers/web/home.go index 6802da2ff1..cb6d47e097 100644 --- a/routers/web/home.go +++ b/routers/web/home.go @@ -48,9 +48,18 @@ func Home(ctx *context.Context) { } return // Check non-logged users landing page. - } else if setting.LandingPageURL != setting.LandingPageHome { - ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL)) - return + } else { + // Dynamic landing page from admin config takes priority. + landingPage := setting.Config().Instance.LandingPage.Value(ctx) + if landingPage.Mode != "" && landingPage.Mode != "home" { + ctx.Redirect(setting.AppSubURL + landingPage.URL()) + return + } + // Fall back to static app.ini setting. + if setting.LandingPageURL != setting.LandingPageHome { + ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL)) + return + } } // Check auto-login. diff --git a/templates/admin/config_settings/config_settings.tmpl b/templates/admin/config_settings/config_settings.tmpl index b12c2dc395..545370ba55 100644 --- a/templates/admin/config_settings/config_settings.tmpl +++ b/templates/admin/config_settings/config_settings.tmpl @@ -2,6 +2,7 @@ {{template "admin/config_settings/avatars" .}} {{template "admin/config_settings/repository" .}} + {{template "admin/config_settings/landing_page" .}} {{template "admin/config_settings/instance" .}} {{template "admin/layout_footer" .}} diff --git a/templates/admin/config_settings/landing_page.tmpl b/templates/admin/config_settings/landing_page.tmpl new file mode 100644 index 0000000000..df2dbf8013 --- /dev/null +++ b/templates/admin/config_settings/landing_page.tmpl @@ -0,0 +1,49 @@ +