blob: d3237a8cb7479bc0d19adff8c2472b416177b1de [file] [log] [blame]
package gerrit
// AccessService contains Access Right related REST endpoints
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html
type AccessService struct {
client *Client
}
// AccessSectionInfo describes the access rights that are assigned on a ref.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#access-section-info
type AccessSectionInfo struct {
Permissions map[string]PermissionInfo `json:"permissions"`
}
// PermissionInfo entity contains information about an assigned permission.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#permission-info
type PermissionInfo struct {
Label string `json:"label,omitempty"`
Exclusive bool `json:"exclusive"`
Rules map[string]PermissionRuleInfo `json:"rules"`
}
// PermissionRuleInfo entity contains information about a permission rule that is assigned to group.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#permission-rule-info
type PermissionRuleInfo struct {
// TODO Possible values for action: ALLOW, DENY or BLOCK, INTERACTIVE and BATCH
Action string `json:"action"`
Force bool `json:"force"`
Min int `json:"min"`
Max int `json:"max"`
}
// ProjectAccessInfo entity contains information about the access rights for a project.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#project-access-info
type ProjectAccessInfo struct {
Revision string `json:"revision"`
InheritsFrom ProjectInfo `json:"inherits_from"`
Local map[string]AccessSectionInfo `json:"local"`
IsOwner bool `json:"is_owner"`
OwnerOf []string `json:"owner_of"`
CanUpload bool `json:"can_upload"`
CanAdd bool `json:"can_add"`
ConfigVisible bool `json:"config_visible"`
}
// ListAccessRightsOptions specifies the parameters to the AccessService.ListAccessRights.
type ListAccessRightsOptions struct {
// The projects for which the access rights should be returned must be specified as project options.
// The project can be specified multiple times.
Project []string `url:"project,omitempty"`
}
// ListAccessRights lists the access rights for projects.
// As result a map is returned that maps the project name to ProjectAccessInfo entities.
// The entries in the map are sorted by project name.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#list-access
func (s *AccessService) ListAccessRights(opt *ListAccessRightsOptions) (*map[string]ProjectAccessInfo, *Response, error) {
u := "access/"
u, err := addOptions(u, opt)
if err != nil {
return nil, nil, err
}
v := new(map[string]ProjectAccessInfo)
resp, err := s.client.Call("GET", u, nil, v)
return v, resp, err
}