Add feature to have chrome ignore certificate errors when printing using an URL.

This commit is contained in:
Tom van den Berg
2020-06-01 15:31:36 +02:00
parent d28221aec9
commit 24cbe98ac2
4 changed files with 33 additions and 9 deletions

View File

@@ -28,7 +28,7 @@ func main() {
systemLogger.DebugOpf(op, "configuration: %+v", config)
if !config.DisableGoogleChrome() {
// start Google Chrome headless.
if err := chrome.Start(systemLogger); err != nil {
if err := chrome.Start(systemLogger, config.IgnoreCertificateErrors()); err != nil {
systemLogger.FatalOp(op, err)
}
}

View File

@@ -16,11 +16,11 @@ import (
)
// Start starts Google Chrome headless in background.
func Start(logger xlog.Logger) error {
func Start(logger xlog.Logger, urlIgnoreCertificateErrors bool) error {
const op string = "chrome.Start"
logger.DebugOp(op, "starting new Google Chrome headless process on port 9222...")
resolver := func() error {
cmd, err := cmd(logger)
cmd, err := cmd(logger, urlIgnoreCertificateErrors)
if err != nil {
return err
}
@@ -32,7 +32,7 @@ func Start(logger xlog.Logger) error {
// if the process failed to start correctly,
// we have to restart it.
if !isViable(logger) {
return restart(logger, cmd.Process)
return restart(logger, cmd.Process, urlIgnoreCertificateErrors)
}
return nil
}
@@ -42,7 +42,7 @@ func Start(logger xlog.Logger) error {
return nil
}
func cmd(logger xlog.Logger) (*exec.Cmd, error) {
func cmd(logger xlog.Logger, urlIgnoreCertificateErrors bool) (*exec.Cmd, error) {
const op string = "chrome.cmd"
binary := "google-chrome-stable"
args := []string{
@@ -66,6 +66,11 @@ func cmd(logger xlog.Logger) (*exec.Cmd, error) {
"--mute-audio",
"--no-first-run",
}
if urlIgnoreCertificateErrors {
args = append(args, "--ignore-certificate-errors")
}
cmd, err := xexec.Command(logger, binary, args...)
if err != nil {
return nil, xerror.New(op, err)
@@ -93,7 +98,7 @@ func kill(logger xlog.Logger, proc *os.Process) error {
return nil
}
func restart(logger xlog.Logger, proc *os.Process) error {
func restart(logger xlog.Logger, proc *os.Process, urlIgnoreCertificateErrors bool) error {
const op string = "chrome.restart"
logger.DebugOp(op, "restarting Google Chrome headless process using port 9222...")
resolver := func() error {
@@ -101,7 +106,7 @@ func restart(logger xlog.Logger, proc *os.Process) error {
if err := kill(logger, proc); err != nil {
return err
}
cmd, err := cmd(logger)
cmd, err := cmd(logger, urlIgnoreCertificateErrors)
if err != nil {
return err
}
@@ -113,7 +118,7 @@ func restart(logger xlog.Logger, proc *os.Process) error {
// if the process failed to restart correctly,
// we have to restart it again.
if !isViable(logger) {
return restart(logger, cmd.Process)
return restart(logger, cmd.Process, urlIgnoreCertificateErrors)
}
return nil
}

View File

@@ -40,6 +40,8 @@ const (
// DefaultGoogleChromeRpccBufferSizeEnvVar contains the name
// of the environment variable "DEFAULT_GOOGLE_CHROME_RPCC_BUFFER_SIZE".
DefaultGoogleChromeRpccBufferSizeEnvVar string = "DEFAULT_GOOGLE_CHROME_RPCC_BUFFER_SIZE"
// Allow self signed certificates when using a remote url
URLIgnoreCertificateErrorsEnvVar string = "URL_IGNORE_CERTIFICATE_ERRORS"
)
// Config contains the application
@@ -53,6 +55,7 @@ type Config struct {
defaultListenPort int64
disableGoogleChrome bool
disableUnoconv bool
urlIgnoreCertificateErrors bool
logLevel xlog.Level
rootPath string
maximumGoogleChromeRpccBufferSize int64
@@ -75,6 +78,7 @@ func DefaultConfig() Config {
rootPath: "/",
maximumGoogleChromeRpccBufferSize: 104857600, // ~100 MB
defaultGoogleChromeRpccBufferSize: 1048576, // 1 MB
urlIgnoreCertificateErrors: false,
}
}
@@ -188,6 +192,14 @@ func FromEnv() (Config, error) {
if err != nil {
return c, err
}
urlIgnoreCertificateErrors, err := xassert.BoolFromEnv(
URLIgnoreCertificateErrorsEnvVar,
c.urlIgnoreCertificateErrors,
)
c.urlIgnoreCertificateErrors = urlIgnoreCertificateErrors
if err != nil {
return c, err
}
return c, nil
}
result, err := resolver()
@@ -274,3 +286,10 @@ func (c Config) MaximumGoogleChromeRpccBufferSize() int64 {
func (c Config) DefaultGoogleChromeRpccBufferSize() int64 {
return c.defaultGoogleChromeRpccBufferSize
}
// IgnoreCertificateErrors returns true if
// Google Chrome should ignore certificate errors
// in case of self signed certificates for example.
func (c Config) IgnoreCertificateErrors() bool {
return c.urlIgnoreCertificateErrors
}

View File

@@ -14,7 +14,7 @@ func main() {
systemLogger.FatalOp(op, err)
}
// start Google Chrome headless.
if err := chrome.Start(systemLogger); err != nil {
if err := chrome.Start(systemLogger, config.IgnoreCertificateErrors()); err != nil {
systemLogger.FatalOp(op, err)
}
}