Merge pull request #6 from seletskiy/master

api: use different restrict api for cloud
This commit is contained in:
Egor Kovetskiy 2019-07-30 23:35:36 +03:00 committed by GitHub
commit 4fc1aa6553
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 87 additions and 25 deletions

17
main.go
View File

@ -38,10 +38,10 @@ Confluence instance and update it accordingly.
File in extended format should follow specification:
[]:# (Space: <space key>)
[]:# (Parent: <parent 1>)
[]:# (Parent: <parent 2>)
[]:# (Title: <title>)
<!-- Space: <space key> -->
<!-- Parent: <parent 1> -->
<!-- Parent: <parent 2> -->
<!-- Title: <title> -->
<page contents>
@ -50,7 +50,7 @@ parent by title, it will be created.
Also, optional following headers are supported:
* []:# (Layout: <article|plain>)
* <!-- Layout: <article|plain> -->
- (default) article: content will be put in narrow column for ease of
reading;
@ -217,12 +217,9 @@ func main() {
creds.Username,
)
err := api.SetPagePermissions(
err := api.RestrictPageUpdates(
target,
confluence.RestrictionEdit,
[]confluence.Restriction{
{User: creds.Username},
},
creds.Username,
)
if err != nil {
log.Fatal(err)

View File

@ -9,6 +9,7 @@ import (
"mime/multipart"
"net/http"
"os"
"strings"
"github.com/bndr/gopencils"
"github.com/kovetskiy/lorg"
@ -16,16 +17,8 @@ import (
"github.com/reconquest/karma-go"
)
type RestrictionOperation string
const (
RestrictionEdit RestrictionOperation = `Edit`
RestrictionView = `View`
)
type Restriction struct {
User string `json:"userName"`
Group string `json:"groupName,omitempty"`
type User struct {
AccountID string `json:"accountId"`
}
type API struct {
@ -478,19 +471,76 @@ func (api *API) UpdatePage(
return nil
}
func (api *API) SetPagePermissions(
func (api *API) GetCurrentUser() (*User, error) {
var user User
_, err := api.rest.
Res("user").
Res("current", &user).
Get()
if err != nil {
return nil, err
}
return &user, nil
}
func (api *API) RestrictPageUpdatesCloud(
page *PageInfo,
operation RestrictionOperation,
restrictions []Restriction,
allowedUser string,
) error {
user, err := api.GetCurrentUser()
if err != nil {
return err
}
var result interface{}
request, err := api.rest.
Res("content").
Id(page.ID).
Res("restriction", &result).
Post([]map[string]interface{}{
{
"operation": "update",
"restrictions": map[string]interface{}{
"user": []map[string]interface{}{
{
"type": "known",
"accountId": user.AccountID,
},
},
},
},
})
if err != nil {
return err
}
if request.Raw.StatusCode != 200 {
return newErrorStatusNotOK(request)
}
return nil
}
func (api *API) RestrictPageUpdatesServer(
page *PageInfo,
allowedUser string,
) error {
var (
err error
result interface{}
)
request, err := api.json.Res(
"setContentPermissions", &result,
).Post([]interface{}{
page.ID,
operation,
restrictions,
"Edit",
map[string]interface{}{
"userName": allowedUser,
},
})
if err != nil {
return err
@ -510,6 +560,21 @@ func (api *API) SetPagePermissions(
return nil
}
func (api *API) RestrictPageUpdates(
page *PageInfo,
allowedUser string,
) error {
var err error
if strings.HasSuffix(api.rest.Api.BaseUrl.Host, "atlassian.net") {
err = api.RestrictPageUpdatesCloud(page, allowedUser)
} else {
err = api.RestrictPageUpdatesServer(page, allowedUser)
}
return err
}
func newErrorStatusNotOK(request *gopencils.Resource) error {
if request.Raw.StatusCode == 401 {
return errors.New(