From 50afca7961ed330f1ce107a8c9a4f77c90f720d4 Mon Sep 17 00:00:00 2001
From: Earl Warren <contact@earl-warren.org>
Date: Sun, 16 Jun 2024 13:09:52 +0200
Subject: [PATCH] fix(f3): do not run the F3 CLI if F3 is disabled

---
 cmd/forgejo/f3.go                        | 7 +++++++
 modules/setting/f3.go                    | 4 ++++
 tests/integration/cmd_forgejo_f3_test.go | 3 +++
 3 files changed, 14 insertions(+)

diff --git a/cmd/forgejo/f3.go b/cmd/forgejo/f3.go
index 574c776ded..5a0d0ac036 100644
--- a/cmd/forgejo/f3.go
+++ b/cmd/forgejo/f3.go
@@ -6,10 +6,12 @@ package forgejo
 
 import (
 	"context"
+	"errors"
 
 	"code.gitea.io/gitea/models"
 	"code.gitea.io/gitea/modules/git"
 	"code.gitea.io/gitea/modules/log"
+	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/modules/storage"
 	"code.gitea.io/gitea/services/f3/util"
 
@@ -41,6 +43,11 @@ func SubcmdF3Mirror(ctx context.Context) *cli.Command {
 }
 
 func runMirror(ctx context.Context, c *cli.Context, action cli.ActionFunc) error {
+	setting.LoadF3Setting()
+	if !setting.F3.Enabled {
+		return errors.New("F3 is disabled, it is not ready to be used and is only present for development purposes")
+	}
+
 	var cancel context.CancelFunc
 	if !ContextGetNoInit(ctx) {
 		ctx, cancel = installSignals(ctx)
diff --git a/modules/setting/f3.go b/modules/setting/f3.go
index 8a66d68fc6..8669b70562 100644
--- a/modules/setting/f3.go
+++ b/modules/setting/f3.go
@@ -15,6 +15,10 @@ var (
 	}
 )
 
+func LoadF3Setting() {
+	loadF3From(CfgProvider)
+}
+
 func loadF3From(rootCfg ConfigProvider) {
 	if err := rootCfg.Section("F3").MapTo(&F3); err != nil {
 		log.Fatal("Failed to map F3 settings: %v", err)
diff --git a/tests/integration/cmd_forgejo_f3_test.go b/tests/integration/cmd_forgejo_f3_test.go
index 1d932693cf..5dadcef0a2 100644
--- a/tests/integration/cmd_forgejo_f3_test.go
+++ b/tests/integration/cmd_forgejo_f3_test.go
@@ -10,6 +10,8 @@ import (
 	"testing"
 
 	"code.gitea.io/gitea/cmd/forgejo"
+	"code.gitea.io/gitea/modules/setting"
+	"code.gitea.io/gitea/modules/test"
 	"code.gitea.io/gitea/services/f3/driver/options"
 	"code.gitea.io/gitea/tests"
 
@@ -56,6 +58,7 @@ func runApp(ctx context.Context, args ...string) (string, error) {
 
 func TestF3_CmdMirror_LocalForgejo(t *testing.T) {
 	defer tests.PrepareTestEnv(t)()
+	defer test.MockVariableValue(&setting.F3.Enabled, true)()
 
 	ctx := context.Background()