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
This commit is contained in:
Nicola Murino 2020-03-02 09:34:13 +01:00
parent 833b702b90
commit 3ffddcba92
2 changed files with 17 additions and 4 deletions

View file

@ -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

View file

@ -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
}