diff --git a/auth.go b/auth.go index a62bba5..816f277 100644 --- a/auth.go +++ b/auth.go @@ -31,12 +31,6 @@ func GetCredentials( if username == "" { username = config.Username - if username == "" { - return nil, errors.New( - "Confluence username should be specified using -u " + - "flag or be stored in configuration file", - ) - } } if password == "" { diff --git a/main.go b/main.go index dba8f3e..2a3fc84 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ type Flags struct { } const ( - version = "7.0" + version = "7.1" usage = `mark - a tool for updating Atlassian Confluence pages from markdown. Docs: https://github.com/kovetskiy/mark @@ -53,7 +53,9 @@ Usage: Options: -u Use specified username for updating Confluence page. -p Use specified token for updating Confluence page. - Specify - as password to read password from stdin. + Specify - as password to read password from stdin, or your Personal access token. + Username is not mandatory if personal access token is provided. + For more info please see: https://developer.atlassian.com/server/confluence/confluence-server-rest-api/#authentication. -l Edit specified Confluence page. If -l is not specified, file should contain metadata (see above). diff --git a/pkg/confluence/api.go b/pkg/confluence/api.go index 3dd7a1c..2930851 100644 --- a/pkg/confluence/api.go +++ b/pkg/confluence/api.go @@ -88,9 +88,18 @@ func (tracer *tracer) Printf(format string, args ...interface{}) { } func NewAPI(baseURL string, username string, password string) *API { - auth := &gopencils.BasicAuth{username, password} - + var auth *gopencils.BasicAuth + if username != "" { + auth = &gopencils.BasicAuth{username, password} + } rest := gopencils.Api(baseURL+"/rest/api", auth) + if username == "" { + if rest.Headers == nil { + rest.Headers = http.Header{} + } + rest.SetHeader("Authorization", fmt.Sprintf("Bearer %s", password)) + } + json := gopencils.Api( baseURL+"/rpc/json-rpc/confluenceservice-v2", auth, @@ -218,7 +227,11 @@ func (api *API) CreateAttachment( ) resource.Payload = form.buffer + oldHeaders := resource.Headers.Clone() resource.Headers = http.Header{} + if resource.Api.BasicAuth == nil { + resource.Headers.Set("Authorization", oldHeaders.Get("Authorization")) + } resource.SetHeader("Content-Type", form.writer.FormDataContentType()) resource.SetHeader("X-Atlassian-Token", "no-check") @@ -284,7 +297,11 @@ func (api *API) UpdateAttachment( ) resource.Payload = form.buffer + oldHeaders := resource.Headers.Clone() resource.Headers = http.Header{} + if resource.Api.BasicAuth == nil { + resource.Headers.Set("Authorization", oldHeaders.Get("Authorization")) + } resource.SetHeader("Content-Type", form.writer.FormDataContentType()) resource.SetHeader("X-Atlassian-Token", "no-check")