diff --git a/models/licenses/update_stream_config.go b/models/licenses/update_stream_config.go index d3a562cac1..430a3dc51f 100644 --- a/models/licenses/update_stream_config.go +++ b/models/licenses/update_stream_config.go @@ -82,6 +82,12 @@ func (c *UpdateStreamConfig) GetCustomStreams() []StreamDef { return streams } +// DeleteRepoConfig removes the repo-level update stream config override. +func DeleteRepoConfig(ctx context.Context, repoID int64) error { + _, err := db.GetEngine(ctx).Where("repo_id = ?", repoID).Delete(new(UpdateStreamConfig)) + return err +} + // GetActiveStreams returns the effective streams for this config. func (c *UpdateStreamConfig) GetActiveStreams() []StreamDef { if c.StreamMode == "custom" { diff --git a/routers/web/repo/setting/licensing.go b/routers/web/repo/setting/licensing.go index 4b76e4fe16..2172f8bcf3 100644 --- a/routers/web/repo/setting/licensing.go +++ b/routers/web/repo/setting/licensing.go @@ -34,27 +34,36 @@ func LicensingSettingsPost(ctx *context.Context) { updatePlatform = "joomla" } - updateCfg := &licenses_model.UpdateStreamConfig{ - OwnerID: repo.OwnerID, - RepoID: repo.ID, - Platform: updatePlatform, - LicensingEnabled: ctx.FormString("enable_licensing") == "on", - RequireKey: ctx.FormString("require_update_key") == "on", - DownloadGating: ctx.FormString("download_gating"), - SupportURL: ctx.FormString("support_url"), - ExtensionName: ctx.FormString("extension_name"), - DisplayName: ctx.FormString("display_name"), - ExtensionType: ctx.FormString("extension_type"), - TargetVersion: ctx.FormString("target_version"), - Maintainer: ctx.FormString("maintainer"), - PHPMinimum: ctx.FormString("php_minimum"), - StreamMode: "joomla", - } + enabled := ctx.FormString("enable_licensing") == "on" - if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil { - log.Error("SaveConfig: %v", err) - ctx.ServerError("SaveConfig", err) - return + if !enabled { + // Remove repo-level override so org config takes effect + if err := licenses_model.DeleteRepoConfig(ctx, repo.ID); err != nil { + log.Error("DeleteRepoConfig: %v", err) + } + } else { + updateCfg := &licenses_model.UpdateStreamConfig{ + OwnerID: repo.OwnerID, + RepoID: repo.ID, + Platform: updatePlatform, + LicensingEnabled: true, + RequireKey: ctx.FormString("require_update_key") == "on", + DownloadGating: ctx.FormString("download_gating"), + SupportURL: ctx.FormString("support_url"), + ExtensionName: ctx.FormString("extension_name"), + DisplayName: ctx.FormString("display_name"), + ExtensionType: ctx.FormString("extension_type"), + TargetVersion: ctx.FormString("target_version"), + Maintainer: ctx.FormString("maintainer"), + PHPMinimum: ctx.FormString("php_minimum"), + StreamMode: "joomla", + } + + if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil { + log.Error("SaveConfig: %v", err) + ctx.ServerError("SaveConfig", err) + return + } } ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index d0620c5d03..7ec3fd53e5 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -675,29 +675,37 @@ func handleSettingsPostAdvanced(ctx *context.Context) { return } } - // Save update server platform and require-key settings. - updatePlatform := form.UpdatePlatform - if updatePlatform == "" { - updatePlatform = "joomla" - } - updateCfg := &licenses_model.UpdateStreamConfig{ - OwnerID: repo.OwnerID, - RepoID: repo.ID, - Platform: updatePlatform, - LicensingEnabled: form.EnableLicensing, - RequireKey: form.RequireUpdateKey, - DownloadGating: form.DownloadGating, - SupportURL: form.SupportURL, - ExtensionName: form.ExtensionName, - DisplayName: form.DisplayName, - ExtensionType: form.ExtensionType, - TargetVersion: form.TargetVersion, - Maintainer: form.Maintainer, - PHPMinimum: form.PHPMinimum, - StreamMode: "joomla", // inherit org default - } - if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil { - log.Error("SaveConfig: %v", err) + // Save update server settings. If disabled, delete repo-level config + // so it falls through to org defaults cleanly. + if !form.EnableLicensing { + // Remove repo-level override so org config takes effect + if err := licenses_model.DeleteRepoConfig(ctx, repo.ID); err != nil { + log.Error("DeleteRepoConfig: %v", err) + } + } else { + updatePlatform := form.UpdatePlatform + if updatePlatform == "" { + updatePlatform = "joomla" + } + updateCfg := &licenses_model.UpdateStreamConfig{ + OwnerID: repo.OwnerID, + RepoID: repo.ID, + Platform: updatePlatform, + LicensingEnabled: form.EnableLicensing, + RequireKey: form.RequireUpdateKey, + DownloadGating: form.DownloadGating, + SupportURL: form.SupportURL, + ExtensionName: form.ExtensionName, + DisplayName: form.DisplayName, + ExtensionType: form.ExtensionType, + TargetVersion: form.TargetVersion, + Maintainer: form.Maintainer, + PHPMinimum: form.PHPMinimum, + StreamMode: "joomla", + } + if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil { + log.Error("SaveConfig: %v", err) + } } log.Trace("Repository advanced settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name)