mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-07-04 17:06:49 +00:00
Write host template on save
This commit is contained in:
@ -1,31 +1,46 @@
|
||||
package nginx
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
|
||||
"npm/embed"
|
||||
"npm/internal/entity/certificate"
|
||||
"npm/internal/entity/host"
|
||||
"npm/internal/logger"
|
||||
|
||||
"github.com/aymerick/raymond"
|
||||
)
|
||||
|
||||
// WriteTemplate will load, parse and write a template file
|
||||
func WriteTemplate(templateName, outputFilename string, data map[string]interface{}) error {
|
||||
// get template file content
|
||||
subFs, _ := fs.Sub(embed.NginxFiles, "nginx")
|
||||
template, err := fs.ReadFile(subFs, templateName)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Render
|
||||
parsedFile, err := raymond.Render(string(template), data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write it
|
||||
// nolint: gosec
|
||||
return ioutil.WriteFile(outputFilename, []byte(parsedFile), 0644)
|
||||
// TemplateData ...
|
||||
type TemplateData struct {
|
||||
ConfDir string
|
||||
DataDir string
|
||||
CertsDir string
|
||||
Host *host.Model
|
||||
Certificate *certificate.Model
|
||||
}
|
||||
|
||||
func generateHostConfig(template string, data TemplateData) (string, error) {
|
||||
return raymond.Render(template, data)
|
||||
}
|
||||
|
||||
func writeTemplate(filename, template string, data TemplateData) error {
|
||||
output, err := generateHostConfig(template, data)
|
||||
if err != nil {
|
||||
output = fmt.Sprintf("# Template Error: %s", err.Error())
|
||||
}
|
||||
|
||||
// Write it. This will also write an error comment if generation failed
|
||||
// nolint: gosec
|
||||
writeErr := writeConfigFile(filename, output)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return writeErr
|
||||
}
|
||||
|
||||
func writeConfigFile(filename, content string) error {
|
||||
logger.Debug("Writing %s with:\n%s", filename, content)
|
||||
// nolint: gosec
|
||||
return ioutil.WriteFile(filename, []byte(content), 0644)
|
||||
}
|
||||
|
Reference in New Issue
Block a user