github.com/daeMOn63/bitclient@v0.0.0-20190425080230-bfee94efac35/project_repository_user_permissions.go (about)

     1  package bitclient
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  type SetRepositoryUserPermissionRequest struct {
     8  	Username   string `url:"name"`
     9  	Permission string `url:"permission"`
    10  }
    11  
    12  func (bc *BitClient) SetRepositoryUserPermission(projectKey string, repositorySlug string, params SetRepositoryUserPermissionRequest) error {
    13  
    14  	_, err := bc.DoPutUrl(
    15  		fmt.Sprintf("/projects/%s/repos/%s/permissions/users", projectKey, repositorySlug),
    16  		params,
    17  		nil,
    18  	)
    19  
    20  	return err
    21  }
    22  
    23  type UnsetRepositoryUserPermissionRequest struct {
    24  	Username string `url:"name"`
    25  }
    26  
    27  func (bc *BitClient) UnsetRepositoryUserPermission(projectKey string, repositorySlug string, params UnsetRepositoryUserPermissionRequest) error {
    28  
    29  	_, err := bc.DoDeleteUrl(
    30  		fmt.Sprintf("/projects/%s/repos/%s/permissions/users", projectKey, repositorySlug),
    31  		params,
    32  		nil,
    33  	)
    34  
    35  	return err
    36  }
    37  
    38  type GetRepositoryUserPermissionRequest struct {
    39  	PagedRequest
    40  	Filter string
    41  }
    42  
    43  type GetRepositoryUserPermissionResponse struct {
    44  	PagedResponse
    45  	Values []UserPermission
    46  }
    47  
    48  func (bc *BitClient) GetRepositoryUserPermission(projectKey string, repositorySlug string, params GetRepositoryUserPermissionRequest) (GetRepositoryUserPermissionResponse, error) {
    49  
    50  	response := GetRepositoryUserPermissionResponse{}
    51  
    52  	_, err := bc.DoGet(
    53  		fmt.Sprintf("/projects/%s/repos/%s/permissions/users", projectKey, repositorySlug),
    54  		params,
    55  		&response,
    56  	)
    57  
    58  	return response, err
    59  }
    60  
    61  func (bc *BitClient) CloneRepositoryUserPermissions(sourceProjectKey, sourceRepositorySlug, targetProjectKey, targetRepositorySlug string) error {
    62  
    63  	response, err := bc.GetRepositoryUserPermission(sourceProjectKey, sourceRepositorySlug, GetRepositoryUserPermissionRequest{})
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	for _, permission := range response.Values {
    69  
    70  		if permission.User.Active == false {
    71  			continue
    72  		}
    73  
    74  		params := SetRepositoryUserPermissionRequest{
    75  			Username:   permission.User.Name,
    76  			Permission: permission.Permission,
    77  		}
    78  		err := bc.SetRepositoryUserPermission(targetProjectKey, targetRepositorySlug, params)
    79  		if err != nil {
    80  			return fmt.Errorf("error adding %s permission to user %s on %s/%s: %s", permission.Permission, permission.User.Name, targetProjectKey, targetRepositorySlug, err)
    81  		}
    82  	}
    83  
    84  	return nil
    85  }