mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 00:22:14 +01:00
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package resource
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/thecodingmachine/gotenberg/internal/pkg/conf"
|
|
"github.com/thecodingmachine/gotenberg/internal/pkg/printer"
|
|
"github.com/thecodingmachine/gotenberg/internal/pkg/xerror"
|
|
)
|
|
|
|
// file represents a file within the resource.
|
|
type file struct {
|
|
fpath string
|
|
}
|
|
|
|
// write writes given content to the
|
|
// resourceFile location.
|
|
func (f file) write(in io.Reader) error {
|
|
const op string = "resource.file.write"
|
|
resolver := func() error {
|
|
out, err := os.Create(f.fpath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer out.Close() // nolint: errcheck
|
|
if err := out.Chmod(0644); err != nil {
|
|
return err
|
|
}
|
|
if _, err := io.Copy(out, in); err != nil {
|
|
return err
|
|
}
|
|
if _, err := out.Seek(0, 0); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
if err := resolver(); err != nil {
|
|
return xerror.New(op, err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// content returns the string content of
|
|
// the file.
|
|
func (f file) content() (string, error) {
|
|
const op string = "resource.file.content"
|
|
b, err := ioutil.ReadFile(f.fpath)
|
|
if err != nil {
|
|
return "", xerror.New(op, err)
|
|
}
|
|
return string(b), nil
|
|
}
|
|
|
|
/*
|
|
HeaderFooterContents is a helper for retrieving
|
|
the content of the files "header.html"
|
|
and "footer.html".
|
|
*/
|
|
func HeaderFooterContents(r Resource, config conf.Config) (string, string, error) {
|
|
const op string = "resource.HeaderFooterContents"
|
|
opts := printer.DefaultChromePrinterOptions(config)
|
|
resolver := func() (string, string, error) {
|
|
headerHTML, err := r.Fcontent("header.html", opts.HeaderHTML)
|
|
if err != nil {
|
|
return opts.HeaderHTML,
|
|
opts.FooterHTML,
|
|
err
|
|
}
|
|
footerHTML, err := r.Fcontent("footer.html", opts.FooterHTML)
|
|
if err != nil {
|
|
return opts.HeaderHTML,
|
|
opts.FooterHTML,
|
|
err
|
|
}
|
|
return headerHTML,
|
|
footerHTML,
|
|
nil
|
|
}
|
|
headerHTML, footerHTML,
|
|
err := resolver()
|
|
if err != nil {
|
|
return headerHTML,
|
|
footerHTML,
|
|
xerror.New(op, err)
|
|
}
|
|
return headerHTML,
|
|
footerHTML,
|
|
nil
|
|
}
|