Skip to content

Commit cdb8bff

Browse files
committed
UI reworks
1 parent 33e8625 commit cdb8bff

11 files changed

Lines changed: 204 additions & 203 deletions

File tree

internal/global/settings.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package global
2+
3+
const (
4+
ValueTrue = "true"
5+
ValueFalse = "false"
6+
7+
FormAuthentication = "authentication"
8+
FormCertificatesAndRequests = "certificates_and_requests"
9+
10+
SettingDisableRegistration = "disable_registration"
11+
SettingRequireEmailConfirmationOnRegistration = "require_email_confirmation_on_registration"
12+
SettingEnableSimpleRequestMode = "enable_simple_request_mode"
13+
SettingEnableCSRRequestMode = "enable_csr_request_mode"
14+
SettingDisableFileRetention = "disable_file_retention"
15+
SettingEnableHTTP01Challenge = "enable_http01_challenge"
16+
SettingEnableDNS01Challenge = "enable_dns01_challenge"
17+
)

internal/handler/admin.go

Lines changed: 115 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

internal/handler/auth.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,6 @@ func (bh *BaseHandler) LoginHandler(w http.ResponseWriter, r *http.Request) {
2828
Info: templating.GetInfoMessage(w, r),
2929
}
3030

31-
if val := bh.DBSvc.GetSetting("authprovider_userpw"); val != "true" {
32-
logger.Debug("authprovider userpw not enabled; redirecting")
33-
templating.SetInfoMessage(w, "Username/password authentication is disabled!")
34-
http.Redirect(w, r, "/", http.StatusSeeOther)
35-
return
36-
}
37-
3831
if r.Method == http.MethodPost {
3932
username := r.FormValue("username")
4033
password := r.FormValue("password")

internal/handler/user.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ func (bh *BaseHandler) ProfileEditHandler(w http.ResponseWriter, r *http.Request
8888
changes++
8989
}
9090
}
91+
92+
if changes == 0 {
93+
data.Info = "No changes were made."
94+
} else if changes == 1 {
95+
data.Info = "One change was made."
96+
} else {
97+
data.Info = fmt.Sprintf("%d changes were made.", changes)
98+
}
9199
} else if form == "change_password" {
92100
newPassword1 := r.FormValue("new_password")
93101
newPassword2 := r.FormValue("new_password2")
@@ -135,14 +143,6 @@ func (bh *BaseHandler) ProfileEditHandler(w http.ResponseWriter, r *http.Request
135143
}
136144
}
137145

138-
if changes == 0 {
139-
data.Info = "No changes were made."
140-
} else if changes == 1 {
141-
data.Info = "One change was made."
142-
} else {
143-
data.Info = fmt.Sprintf("%d changes were made.", changes)
144-
}
145-
146146
if err := templating.ExecuteTemplate(w, template, data); err != nil {
147147
logger.Errorf("could not execute template %s: %s", template, err.Error())
148148
}

internal/middleware/api.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ func (mh *MWHandler) WithToken(next http.Handler) http.Handler {
1111
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
1212
logger := mh.ContextLogger("middleware")
1313

14-
val := mh.DBSvc.GetSetting("authprovider_bearer")
15-
if val != "true" {
16-
logger.Debug("authprovider userpw not enabled; redirecting")
17-
next.ServeHTTP(w, r)
18-
return
19-
}
20-
2114
token := r.Header.Get("X-Auth-Token")
2215
if token == "" {
2316
logger.Print("missing auth header")

internal/middleware/ui.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,16 @@ func (mh *MWHandler) WithSession(next http.Handler) http.Handler {
1717
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
1818
logger := mh.ContextLogger("middleware")
1919

20-
val := mh.DBSvc.GetSetting("authprovider_userpw")
21-
if val != "true" {
22-
mh.Logger.WithField("authProvider", "userPw").Trace("authprovider not enabled")
23-
next.ServeHTTP(w, r)
24-
return
25-
}
26-
2720
cv, err := mh.SessMgr.GetCookieValue(r)
2821
if err != nil {
29-
logger.Debug("no user-provided cookie found or not readable: " + err.Error())
22+
//logger.Debug("no user-provided cookie found or not readable: " + err.Error())
3023
http.Redirect(w, r, "/auth/login", http.StatusSeeOther)
3124
return
3225
}
3326

3427
sess, err := mh.SessMgr.GetSession(cv)
3528
if err != nil {
36-
logger.Debug("could not get session: " + err.Error())
29+
//logger.Debug("could not get session: " + err.Error())
3730
http.Redirect(w, r, "/auth/login", http.StatusSeeOther)
3831
return
3932
}
@@ -64,11 +57,6 @@ func (mh *MWHandler) RequireAdmin(next http.Handler) http.Handler {
6457
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
6558
logger := mh.ContextLogger("middleware")
6659

67-
if userpw := mh.DBSvc.GetSetting("authprovider_userpw"); userpw != "true" {
68-
next.ServeHTTP(w, r)
69-
return
70-
}
71-
7260
user, ok := r.Context().Value("user").(*entity.User)
7361
if !ok || user == nil {
7462
http.Redirect(w, r, "/auth/login", http.StatusSeeOther)

internal/templating/templates/base.html

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
<div class="main-panel">
1717

18-
<div class="container">
19-
2018
<nav class="navbar navbar-expand-lg navbar-light bg-light">
2119
<div class="container-fluid">
2220
<a class="navbar-brand" href="/">CertMaker</a>
@@ -78,7 +76,7 @@
7876
{{ end }}
7977

8078
{{ define "footer_default" }}
81-
</div>
79+
8280
</div>
8381
<script src="/static/static/js/bootstrap.min.js"></script>
8482
</body>
@@ -99,21 +97,19 @@
9997
<link rel="stylesheet" href="/static/static/css/bootstrap.min.css" type="text/css"/>
10098
</head>
10199
<body>
102-
103-
<div class="main-panel">
104-
<div class="container">
105-
<div class="row">
106-
<div class="col-md-4"></div>
107-
<div class="col-md-4">
100+
<div class="container">
101+
<div class="row align-items-center mt-5">
102+
<div class="col-3"></div>
103+
<div class="col-6">
108104
{{ end }}
109105

110106
{{ define "footer_auth" }}
111-
</div>
112-
<div class="col-md-4"></div>
113-
</div>
114107
</div>
108+
<div class="col-3"></div>
115109
</div>
116-
<script src="/static/static/js/bootstrap.min.js"></script>
110+
</div>
111+
112+
<script src="/static/static/js/bootstrap.min.js"></script>
117113
</body>
118114
</html>
119115
{{ end }}

0 commit comments

Comments
 (0)