mirror of
				https://github.com/kovetskiy/mark.git
				synced 2025-11-04 06:17:36 +08:00 
			
		
		
		
	Merge pull request #6 from seletskiy/master
api: use different restrict api for cloud
This commit is contained in:
		
						commit
						4fc1aa6553
					
				
							
								
								
									
										17
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								main.go
									
									
									
									
									
								
							@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user