diff --git a/confluence/api.go b/confluence/api.go index e6fb992..d549ba2 100644 --- a/confluence/api.go +++ b/confluence/api.go @@ -2,6 +2,7 @@ package confluence import ( "bytes" + "crypto/tls" "encoding/json" "errors" "fmt" @@ -97,7 +98,7 @@ func (tracer *tracer) Printf(format string, args ...interface{}) { log.Tracef(nil, tracer.prefix+" "+format, args...) } -func NewAPI(baseURL string, username string, password string) *API { +func NewAPI(baseURL string, username string, password string, insecure bool) *API { var auth *gopencils.BasicAuth if username != "" { auth = &gopencils.BasicAuth{ @@ -105,7 +106,19 @@ func NewAPI(baseURL string, username string, password string) *API { Password: password, } } - rest := gopencils.Api(baseURL+"/rest/api", auth, 3) // set option for 3 retries on failure + + var httpClient *http.Client + if insecure { + httpClient = &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }, + } + } + + rest := gopencils.Api(baseURL+"/rest/api", auth, httpClient, 3) // set option for 3 retries on failure if username == "" { if rest.Headers == nil { rest.Headers = http.Header{} @@ -113,7 +126,7 @@ func NewAPI(baseURL string, username string, password string) *API { rest.SetHeader("Authorization", fmt.Sprintf("Bearer %s", password)) } - json := gopencils.Api(baseURL+"/rpc/json-rpc/confluenceservice-v2", auth, 3) + json := gopencils.Api(baseURL+"/rpc/json-rpc/confluenceservice-v2", auth, httpClient, 3) if log.GetLevel() == lorg.LevelTrace { rest.Logger = &tracer{"rest:"} diff --git a/util/cli.go b/util/cli.go index 9c56f6d..ef60617 100644 --- a/util/cli.go +++ b/util/cli.go @@ -49,7 +49,7 @@ func RunMark(ctx context.Context, cmd *cli.Command) error { return err } - api := confluence.NewAPI(creds.BaseURL, creds.Username, creds.Password) + api := confluence.NewAPI(creds.BaseURL, creds.Username, creds.Password, cmd.Bool("insecure")) files, err := doublestar.FilepathGlob(cmd.String("files")) if err != nil { diff --git a/util/flags.go b/util/flags.go index e4807df..fb4bbdd 100644 --- a/util/flags.go +++ b/util/flags.go @@ -196,6 +196,12 @@ var Flags = []cli.Flag{ Usage: "Enables optional features. Current features: d2, mermaid, mkdocsadmonitions", Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_FEATURES"), altsrctoml.TOML("features", altsrc.NewStringPtrSourcer(&filename))), }, + &cli.BoolFlag{ + Name: "insecure", + Value: false, + Usage: "skip TLS certificate verification (useful for self-signed certificates)", + Sources: cli.NewValueSourceChain(cli.EnvVar("MARK_INSECURE"), altsrctoml.TOML("insecure", altsrc.NewStringPtrSourcer(&filename))), + }, } // CheckMutuallyExclusiveTitleFlags checks if both title-from-h1 and title-from-filename are set