From 3ffddcba920159e4ae436e74d9f1e06a3dfec77c Mon Sep 17 00:00:00 2001 From: Nicola Murino Date: Mon, 2 Mar 2020 09:34:13 +0100 Subject: [PATCH] web: log an error if loading a required template fails We used template.Must that panics if an error happen but the error is visible only if sftpgo is started in an interactive way Fixes #82 --- httpd/web.go | 8 ++++---- utils/utils.go | 13 +++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/httpd/web.go b/httpd/web.go index 6cb7212c..5b888277 100644 --- a/httpd/web.go +++ b/httpd/web.go @@ -98,10 +98,10 @@ func loadTemplates(templatesPath string) { filepath.Join(templatesPath, templateBase), filepath.Join(templatesPath, templateMessage), } - usersTmpl := template.Must(template.ParseFiles(usersPaths...)) - userTmpl := template.Must(template.ParseFiles(userPaths...)) - connectionsTmpl := template.Must(template.ParseFiles(connectionsPaths...)) - messageTmpl := template.Must(template.ParseFiles(messagePath...)) + usersTmpl := utils.LoadTemplate(template.ParseFiles(usersPaths...)) + userTmpl := utils.LoadTemplate(template.ParseFiles(userPaths...)) + connectionsTmpl := utils.LoadTemplate(template.ParseFiles(connectionsPaths...)) + messageTmpl := utils.LoadTemplate(template.ParseFiles(messagePath...)) templates[templateUsers] = usersTmpl templates[templateUser] = userTmpl diff --git a/utils/utils.go b/utils/utils.go index efba048c..90620abc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -13,6 +13,7 @@ import ( "encoding/pem" "errors" "fmt" + "html/template" "io" "io/ioutil" "net" @@ -22,6 +23,7 @@ import ( "strings" "time" + "github.com/drakkan/sftpgo/logger" "golang.org/x/crypto/ssh" ) @@ -275,3 +277,14 @@ func CleanSFTPPath(p string) string { } return path.Clean(sftpPath) } + +// LoadTemplate wraps a call to a function returning (*Template, error) +// it is just like template.Must but it writes a log before exiting +func LoadTemplate(t *template.Template, err error) *template.Template { + if err != nil { + logger.ErrorToConsole("error loading required template: %v", err) + logger.Error(logSender, "", "error loading required template: %v", err) + panic(err) + } + return t +}