From a215e9db30729e4f042330725b7beedf6d675ca2 Mon Sep 17 00:00:00 2001
From: Earl Warren <contact@earl-warren.org>
Date: Sat, 25 May 2024 12:20:58 +0200
Subject: [PATCH] fix(services): set SendNotificationEmailOnNewUser

regression from 767e9634d3d02acab27f05e1783391c9c7f6292e. It changed
the parsing of the [admin] section from being derived from the content
of each key with mustMapSetting(rootCfg, "admin", &Admin) to
explicitly listing all keys in the code.

SEND_NOTIFICATION_EMAIL_ON_NEW_USER was not added and therefore
ignored. As a consequence notifications of newly registered users were
never sent.

(cherry picked from commit ff2a3f4e3a39a645be12ac3417a4f86e7d8290b2)

Conflict:
   modules/setting/admin_test.go
   EXTERNAL_USER_DISABLE_FEATURES does not exist in v7.0
---
 modules/setting/admin.go        |  1 +
 modules/setting/admin_test.go   | 30 ++++++++++++++++++++++++++++++
 release-notes/8.0.0/fix/3904.md |  1 +
 3 files changed, 32 insertions(+)
 create mode 100644 modules/setting/admin_test.go
 create mode 100644 release-notes/8.0.0/fix/3904.md

diff --git a/modules/setting/admin.go b/modules/setting/admin.go
index 35ffa9efbf..4c46a69677 100644
--- a/modules/setting/admin.go
+++ b/modules/setting/admin.go
@@ -17,6 +17,7 @@ func loadAdminFrom(rootCfg ConfigProvider) {
 	sec := rootCfg.Section("admin")
 	Admin.DisableRegularOrgCreation = sec.Key("DISABLE_REGULAR_ORG_CREATION").MustBool(false)
 	Admin.DefaultEmailNotification = sec.Key("DEFAULT_EMAIL_NOTIFICATIONS").MustString("enabled")
+	Admin.SendNotificationEmailOnNewUser = sec.Key("SEND_NOTIFICATION_EMAIL_ON_NEW_USER").MustBool(false)
 	Admin.UserDisabledFeatures = container.SetOf(sec.Key("USER_DISABLED_FEATURES").Strings(",")...)
 }
 
diff --git a/modules/setting/admin_test.go b/modules/setting/admin_test.go
new file mode 100644
index 0000000000..65dbc8adf4
--- /dev/null
+++ b/modules/setting/admin_test.go
@@ -0,0 +1,30 @@
+// Copyright The Forgejo Authors.
+// SPDX-License-Identifier: MIT
+
+package setting
+
+import (
+	"testing"
+
+	"code.gitea.io/gitea/modules/container"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func Test_loadAdminFrom(t *testing.T) {
+	iniStr := `
+	[admin]
+	DISABLE_REGULAR_ORG_CREATION = true
+  DEFAULT_EMAIL_NOTIFICATIONS = z
+  SEND_NOTIFICATION_EMAIL_ON_NEW_USER = true
+  USER_DISABLED_FEATURES = a,b
+	`
+	cfg, err := NewConfigProviderFromData(iniStr)
+	assert.NoError(t, err)
+	loadAdminFrom(cfg)
+
+	assert.EqualValues(t, true, Admin.DisableRegularOrgCreation)
+	assert.EqualValues(t, "z", Admin.DefaultEmailNotification)
+	assert.EqualValues(t, true, Admin.SendNotificationEmailOnNewUser)
+	assert.EqualValues(t, container.SetOf("a", "b"), Admin.UserDisabledFeatures)
+}
diff --git a/release-notes/8.0.0/fix/3904.md b/release-notes/8.0.0/fix/3904.md
new file mode 100644
index 0000000000..f1a934081b
--- /dev/null
+++ b/release-notes/8.0.0/fix/3904.md
@@ -0,0 +1 @@
+- a v7.0.0 regression causing `[admin].SEND_NOTIFICATION_EMAIL_ON_NEW_USER=true` to always be ignored.