WIP new WebAdmin: maintenance page

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2024-01-26 21:03:41 +01:00
parent 9fcff83f8f
commit d01fccf28c
11 changed files with 170 additions and 110 deletions

View File

@@ -184,7 +184,10 @@ func loadData(w http.ResponseWriter, r *http.Request) {
func restoreBackup(content []byte, inputFile string, scanQuota, mode int, executor, ipAddress, role string) error {
dump, err := dataprovider.ParseDumpData(content)
if err != nil {
return util.NewValidationError(fmt.Sprintf("invalid input_file %q", inputFile))
return util.NewI18nError(
util.NewValidationError(fmt.Sprintf("invalid input_file %q", inputFile)),
util.I18nErrorBackupFile,
)
}
if err = RestoreConfigs(dump.Configs, mode, executor, ipAddress, role); err != nil {

View File

@@ -100,7 +100,6 @@ const (
templateSetup = "adminsetup.html"
pageEventRulesTitle = "Event rules"
pageEventActionsTitle = "Event actions"
pageMaintenanceTitle = "Maintenance"
pageEventsTitle = "Logs"
pageConfigsTitle = "Configurations"
defaultQueryLimit = 1000
@@ -236,7 +235,7 @@ type maintenancePage struct {
basePage
BackupPath string
RestorePath string
Error string
Error *util.I18nError
}
type defenderHostsPage struct {
@@ -451,7 +450,7 @@ func loadAdminTemplates(templatesPath string) {
filepath.Join(templatesPath, templateCommonDir, templateCommonLogin),
}
maintenancePaths := []string{
filepath.Join(templatesPath, templateCommonDir, templateCommonCSS),
filepath.Join(templatesPath, templateCommonDir, templateCommonBase),
filepath.Join(templatesPath, templateAdminDir, templateBase),
filepath.Join(templatesPath, templateAdminDir, templateMaintenance),
}
@@ -829,12 +828,12 @@ func (s *httpdServer) renderChangePasswordPage(w http.ResponseWriter, r *http.Re
renderAdminTemplate(w, templateChangePwd, data)
}
func (s *httpdServer) renderMaintenancePage(w http.ResponseWriter, r *http.Request, error string) {
func (s *httpdServer) renderMaintenancePage(w http.ResponseWriter, r *http.Request, err error) {
data := maintenancePage{
basePage: s.getBasePageData(pageMaintenanceTitle, webMaintenancePath, r),
basePage: s.getBasePageData(util.I18nMaintenanceTitle, webMaintenancePath, r),
BackupPath: webBackupPath,
RestorePath: webRestorePath,
Error: error,
Error: getI18nError(err),
}
renderAdminTemplate(w, templateMaintenance, data)
@@ -2737,7 +2736,7 @@ func (s *httpdServer) handleWebAdminProfilePost(w http.ResponseWriter, r *http.R
func (s *httpdServer) handleWebMaintenance(w http.ResponseWriter, r *http.Request) {
r.Body = http.MaxBytesReader(w, r.Body, maxRequestSize)
s.renderMaintenancePage(w, r, "")
s.renderMaintenancePage(w, r, nil)
}
func (s *httpdServer) handleWebRestore(w http.ResponseWriter, r *http.Request) {
@@ -2749,7 +2748,7 @@ func (s *httpdServer) handleWebRestore(w http.ResponseWriter, r *http.Request) {
}
err = r.ParseMultipartForm(MaxRestoreSize)
if err != nil {
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, util.NewI18nError(err, util.I18nErrorInvalidForm))
return
}
defer r.MultipartForm.RemoveAll() //nolint:errcheck
@@ -2761,17 +2760,17 @@ func (s *httpdServer) handleWebRestore(w http.ResponseWriter, r *http.Request) {
}
restoreMode, err := strconv.Atoi(r.Form.Get("mode"))
if err != nil {
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, err)
return
}
scanQuota, err := strconv.Atoi(r.Form.Get("quota"))
if err != nil {
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, err)
return
}
backupFile, _, err := r.FormFile("backup_file")
if err != nil {
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, util.NewI18nError(err, util.I18nErrorBackupFile))
return
}
defer backupFile.Close()
@@ -2781,12 +2780,12 @@ func (s *httpdServer) handleWebRestore(w http.ResponseWriter, r *http.Request) {
if len(backupContent) == 0 {
err = errors.New("backup file size must be greater than 0")
}
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, util.NewI18nError(err, util.I18nErrorBackupFile))
return
}
if err := restoreBackup(backupContent, "", scanQuota, restoreMode, claims.Username, ipAddr, claims.Role); err != nil {
s.renderMaintenancePage(w, r, err.Error())
s.renderMaintenancePage(w, r, util.NewI18nError(err, util.I18nErrorRestore))
return
}

View File

@@ -211,7 +211,7 @@ const (
I18nErrorDuplicatedName = "general.duplicated_name"
I18nErrorDuplicatedIPNet = "ip_list.duplicated"
I18nErrorRoleAdminPerms = "admin.role_permissions"
I18nBackupOK = "general.backup_ok"
I18nBackupOK = "maintenance.backup_ok"
I18nErrorFolderTemplate = "virtual_folders.template_no_folder"
I18nErrorUserTemplate = "user.template_no_user"
I18nConfigsOK = "general.configs_saved"
@@ -230,6 +230,8 @@ const (
I18nFTPTLSExplicit = "status.tls_explicit"
I18nFTPTLSImplicit = "status.tls_implicit"
I18nFTPTLSMixed = "status.tls_mixed"
I18nErrorBackupFile = "maintenance.backup_invalid_file"
I18nErrorRestore = "maintenance.restore_error"
)
// NewI18nError returns a I18nError wrappring the provided error