@@ -27,10 +27,26 @@ func (bh *BaseHandler) AdminSettingsHandler(w http.ResponseWriter, r *http.Reque
2727 Info string
2828 User * entity.User
2929 AdminSettings map [string ]string
30+
31+ SettingDisableRegistration string
32+ SettingRequireEmailConfirmationOnRegistration string
33+ SettingEnableSimpleRequestMode string
34+ SettingEnableCSRRequestMode string
35+ SettingDisableFileRetention string
36+ SettingEnableHTTP01Challenge string
37+ SettingEnableDNS01Challenge string
3038 }{
3139 Error : templating .GetErrorMessage (w , r ),
3240 Success : templating .GetSuccessMessage (w , r ),
3341 Info : templating .GetInfoMessage (w , r ),
42+
43+ SettingDisableRegistration : global .SettingDisableRegistration ,
44+ SettingRequireEmailConfirmationOnRegistration : global .SettingRequireEmailConfirmationOnRegistration ,
45+ SettingEnableSimpleRequestMode : global .SettingEnableSimpleRequestMode ,
46+ SettingEnableCSRRequestMode : global .SettingEnableCSRRequestMode ,
47+ SettingDisableFileRetention : global .SettingDisableFileRetention ,
48+ SettingEnableHTTP01Challenge : global .SettingEnableHTTP01Challenge ,
49+ SettingEnableDNS01Challenge : global .SettingEnableDNS01Challenge ,
3450 }
3551
3652 user , ok := r .Context ().Value ("user" ).(* entity.User )
@@ -42,106 +58,129 @@ func (bh *BaseHandler) AdminSettingsHandler(w http.ResponseWriter, r *http.Reque
4258
4359 var err error
4460 if r .Method == http .MethodPost {
45-
46- var errors uint8 = 0
61+ var changes uint8
4762 form := r .FormValue ("form" )
63+ var infoMessage , errorMessage string
4864
49- if form == "authentication_provider" {
50- authprovUserpw := "false"
51- if r .FormValue ("authprovider_userpw" ) == "true" {
52- authprovUserpw = "true"
53- }
54- err = bh .DBSvc .SetSetting ("authprovider_userpw" , authprovUserpw )
55- if err != nil {
56- errors ++
57- logger .Error (err .Error ())
58- }
59-
60- authprovBearer := "false"
61- if r .FormValue ("authprovider_bearer" ) == "true" {
62- authprovBearer = "true"
63- }
64- err = bh .DBSvc .SetSetting ("authprovider_bearer" , authprovBearer )
65- if err != nil {
66- errors ++
67- logger .Error (err .Error ())
65+ if form == "authentication" {
66+ registrationDisabled := global .ValueFalse
67+ if r .FormValue (global .SettingDisableRegistration ) == global .ValueTrue {
68+ registrationDisabled = global .ValueTrue
6869 }
69- } else if form == "authentication" {
70- registrationEnabled := "registration_enabled"
71- if r . FormValue ( "registration_enabled" ) == "true" {
72- registrationEnabled = "true"
73- }
74- err = bh . DBSvc . SetSetting ( "registration_enabled" , registrationEnabled )
75- if err != nil {
76- errors ++
77- logger . Error ( err . Error ())
70+ // only update when changed
71+ if bh . DBSvc . GetSetting ( global . SettingDisableRegistration ) != registrationDisabled {
72+ changes ++
73+ err = bh . DBSvc . SetSetting ( global . SettingDisableRegistration , registrationDisabled )
74+ if err != nil {
75+ errorMessage += "Could not update 'Disable user account registration' setting. "
76+ } else {
77+ infoMessage += "'Disable user account registration' setting updated. "
78+ }
7879 }
7980
80- registrationRequireEmailConfirmation := "false"
81- if r .FormValue ("registration_require_email_confirmation" ) == "true" {
82- registrationRequireEmailConfirmation = "true"
81+ registrationRequireEmailConfirmation := global . ValueFalse
82+ if r .FormValue (global . SettingRequireEmailConfirmationOnRegistration ) == global . ValueTrue {
83+ registrationRequireEmailConfirmation = global . ValueTrue
8384 }
84- err = bh .DBSvc .SetSetting ("registration_require_email_confirmation" , registrationRequireEmailConfirmation )
85- if err != nil {
86- errors ++
87- logger .Error (err .Error ())
85+ // only update when changed
86+ if bh .DBSvc .GetSetting (global .SettingRequireEmailConfirmationOnRegistration ) != registrationRequireEmailConfirmation {
87+ changes ++
88+ err = bh .DBSvc .SetSetting (global .SettingRequireEmailConfirmationOnRegistration , registrationRequireEmailConfirmation )
89+ if err != nil {
90+ errorMessage += "Could not update 'Require email confirmation for registration' setting. "
91+ } else {
92+ infoMessage += "'Require email confirmation for registration' setting updated. "
93+ }
8894 }
8995 } else if form == "certificates_and_requests" {
90- certificateRevocationAllow := "false"
91- if r .FormValue ("certificate_revocation_allow" ) == "true" {
92- certificateRevocationAllow = "true"
96+
97+ certificateRequestSimpleMode := global .ValueFalse
98+ if r .FormValue (global .SettingEnableSimpleRequestMode ) == global .ValueTrue {
99+ certificateRequestSimpleMode = global .ValueTrue
93100 }
94- err = bh .DBSvc .SetSetting ("certificate_revocation_allow" , certificateRevocationAllow )
95- if err != nil {
96- errors ++
97- logger .Error (err .Error ())
101+ // only update when changed
102+ if bh .DBSvc .GetSetting (global .SettingEnableSimpleRequestMode ) != certificateRequestSimpleMode {
103+ changes ++
104+ err = bh .DBSvc .SetSetting (global .SettingEnableSimpleRequestMode , certificateRequestSimpleMode )
105+ if err != nil {
106+ errorMessage += "Could not update 'Simple Request Mode' setting. "
107+ } else {
108+ infoMessage += "'Simple Request Mode' setting updated. "
109+ }
98110 }
99111
100- certificateRequestSimpleMode := "false"
101- if r .FormValue ("certificate_request_simple_mode" ) == "true" {
102- certificateRequestSimpleMode = "true"
112+ certificateRequestNormalMode := global . ValueFalse
113+ if r .FormValue (global . SettingEnableCSRRequestMode ) == global . ValueTrue {
114+ certificateRequestNormalMode = global . ValueTrue
103115 }
104- err = bh .DBSvc .SetSetting ("certificate_request_simple_mode" , certificateRequestSimpleMode )
105- if err != nil {
106- errors ++
107- logger .Error (err .Error ())
116+ // only update when changed
117+ if bh .DBSvc .GetSetting (global .SettingEnableCSRRequestMode ) != certificateRequestNormalMode {
118+ changes ++
119+ err = bh .DBSvc .SetSetting (global .SettingEnableCSRRequestMode , certificateRequestNormalMode )
120+ if err != nil {
121+ errorMessage += "Could not update 'CSR Mode' setting. "
122+ } else {
123+ infoMessage += "'CSR Mode' setting updated. "
124+ }
108125 }
109126
110- certificateRequestNormalMode := "false"
111- if r .FormValue ("certificate_request_normal_mode" ) == "true" {
112- certificateRequestNormalMode = "true"
127+ certificateRequestKeepnocopy := global . ValueFalse
128+ if r .FormValue (global . SettingDisableFileRetention ) == global . ValueTrue {
129+ certificateRequestKeepnocopy = global . ValueTrue
113130 }
114- err = bh .DBSvc .SetSetting ("certificate_request_normal_mode" , certificateRequestNormalMode )
115- if err != nil {
116- errors ++
117- logger .Error (err .Error ())
131+ // only update when changed
132+ if bh .DBSvc .GetSetting (global .SettingDisableFileRetention ) != certificateRequestKeepnocopy {
133+ changes ++
134+ err = bh .DBSvc .SetSetting (global .SettingDisableFileRetention , certificateRequestKeepnocopy )
135+ if err != nil {
136+ errorMessage += "Could not update 'Disable file retention' setting. "
137+ } else {
138+ infoMessage += "'Disable file retention' setting updated. "
139+ }
118140 }
119141
120- certificateRequestKeepnocopy := "false"
121- if r .FormValue ("certificate_request_keepnocopy" ) == "true" {
122- certificateRequestKeepnocopy = "true"
142+ enableHTTP01Challenge := global . ValueFalse
143+ if r .FormValue (global . SettingEnableHTTP01Challenge ) == global . ValueTrue {
144+ enableHTTP01Challenge = global . ValueTrue
123145 }
124- err = bh .DBSvc .SetSetting ("certificate_request_keepnocopy" , certificateRequestKeepnocopy )
125- if err != nil {
126- errors ++
127- logger .Error (err .Error ())
146+
147+ // only update when changed
148+ if bh .DBSvc .GetSetting (global .SettingEnableHTTP01Challenge ) != enableHTTP01Challenge {
149+ changes ++
150+ err = bh .DBSvc .SetSetting (global .SettingEnableHTTP01Challenge , enableHTTP01Challenge )
151+ if err != nil {
152+ errorMessage += "Could not update 'Enable HTTP-01 challenge' setting. "
153+ } else {
154+ infoMessage += "'Enable HTTP-01 challenge' setting updated. "
155+ }
128156 }
129157
130- certificateRequestRequireDomainOwnership := "false"
131- if r .FormValue ("certificate_request_require_domain_ownership" ) == "true" {
132- certificateRequestRequireDomainOwnership = "true"
158+ enableDNS01Challenge := global . ValueFalse
159+ if r .FormValue (global . SettingEnableDNS01Challenge ) == global . ValueTrue {
160+ enableDNS01Challenge = global . ValueTrue
133161 }
134- err = bh .DBSvc .SetSetting ("certificate_request_require_domain_ownership" , certificateRequestRequireDomainOwnership )
135- if err != nil {
136- errors ++
137- logger .Error (err .Error ())
162+
163+ // only update when changed
164+ if bh .DBSvc .GetSetting (global .SettingEnableDNS01Challenge ) != enableDNS01Challenge {
165+ changes ++
166+ err = bh .DBSvc .SetSetting (global .SettingEnableDNS01Challenge , enableDNS01Challenge )
167+ if err != nil {
168+ errorMessage += "Could not update 'Enable DNS-01 challenge' setting. "
169+ } else {
170+ infoMessage += "'Enable DNS-01 challenge' setting updated. "
171+ }
138172 }
139173 }
140174
141- if errors > 0 {
142- logger .Errorf ("When trying to save admin settings, %d error(s) occurred" , errors )
143- } else {
144- logger .Trace ("admin settings saved" )
175+ if errorMessage != "" {
176+ templating .SetErrorMessage (w , errorMessage )
177+ }
178+ if infoMessage != "" {
179+ templating .SetInfoMessage (w , infoMessage )
180+ }
181+
182+ if errorMessage == "" && infoMessage == "" && changes == 0 {
183+ templating .SetInfoMessage (w , "No changes were made." )
145184 }
146185
147186 http .Redirect (w , r , "/admin/settings" , http .StatusSeeOther )
0 commit comments