forked from TrueCloudLab/lego
185 lines
6.4 KiB
Go
185 lines
6.4 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// Organization represents a multi-user organization.
|
|
type Organization struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
Permissions []string `json:"permissions,omitempty"`
|
|
Roles []string `json:"roles,omitempty"`
|
|
}
|
|
|
|
// organizationResponse represents the response from the Organization endpoint.
|
|
type organizationResponse struct {
|
|
Response
|
|
Result []Organization `json:"result"`
|
|
ResultInfo `json:"result_info"`
|
|
}
|
|
|
|
// OrganizationMember has details on a member.
|
|
type OrganizationMember struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Email string `json:"email,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
Roles []OrganizationRole `json:"roles,omitempty"`
|
|
}
|
|
|
|
// OrganizationInvite has details on an invite.
|
|
type OrganizationInvite struct {
|
|
ID string `json:"id,omitempty"`
|
|
InvitedMemberID string `json:"invited_member_id,omitempty"`
|
|
InvitedMemberEmail string `json:"invited_member_email,omitempty"`
|
|
OrganizationID string `json:"organization_id,omitempty"`
|
|
OrganizationName string `json:"organization_name,omitempty"`
|
|
Roles []OrganizationRole `json:"roles,omitempty"`
|
|
InvitedBy string `json:"invited_by,omitempty"`
|
|
InvitedOn *time.Time `json:"invited_on,omitempty"`
|
|
ExpiresOn *time.Time `json:"expires_on,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
}
|
|
|
|
// OrganizationRole has details on a role.
|
|
type OrganizationRole struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Permissions []string `json:"permissions,omitempty"`
|
|
}
|
|
|
|
// OrganizationDetails represents details of an organization.
|
|
type OrganizationDetails struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Members []OrganizationMember `json:"members"`
|
|
Invites []OrganizationInvite `json:"invites"`
|
|
Roles []OrganizationRole `json:"roles,omitempty"`
|
|
}
|
|
|
|
// organizationDetailsResponse represents the response from the OrganizationDetails endpoint.
|
|
type organizationDetailsResponse struct {
|
|
Response
|
|
Result OrganizationDetails `json:"result"`
|
|
}
|
|
|
|
// ListOrganizations lists organizations of the logged-in user.
|
|
//
|
|
// API reference: https://api.cloudflare.com/#user-s-organizations-list-organizations
|
|
func (api *API) ListOrganizations() ([]Organization, ResultInfo, error) {
|
|
var r organizationResponse
|
|
res, err := api.makeRequest("GET", "/user/organizations", nil)
|
|
if err != nil {
|
|
return []Organization{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError)
|
|
}
|
|
|
|
err = json.Unmarshal(res, &r)
|
|
if err != nil {
|
|
return []Organization{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError)
|
|
}
|
|
|
|
return r.Result, r.ResultInfo, nil
|
|
}
|
|
|
|
// OrganizationDetails returns details for the specified organization of the logged-in user.
|
|
//
|
|
// API reference: https://api.cloudflare.com/#organizations-organization-details
|
|
func (api *API) OrganizationDetails(organizationID string) (OrganizationDetails, error) {
|
|
var r organizationDetailsResponse
|
|
uri := "/organizations/" + organizationID
|
|
res, err := api.makeRequest("GET", uri, nil)
|
|
if err != nil {
|
|
return OrganizationDetails{}, errors.Wrap(err, errMakeRequestError)
|
|
}
|
|
|
|
err = json.Unmarshal(res, &r)
|
|
if err != nil {
|
|
return OrganizationDetails{}, errors.Wrap(err, errUnmarshalError)
|
|
}
|
|
|
|
return r.Result, nil
|
|
}
|
|
|
|
// organizationMembersResponse represents the response from the Organization members endpoint.
|
|
type organizationMembersResponse struct {
|
|
Response
|
|
Result []OrganizationMember `json:"result"`
|
|
ResultInfo `json:"result_info"`
|
|
}
|
|
|
|
// OrganizationMembers returns list of members for specified organization of the logged-in user.
|
|
//
|
|
// API reference: https://api.cloudflare.com/#organization-members-list-members
|
|
func (api *API) OrganizationMembers(organizationID string) ([]OrganizationMember, ResultInfo, error) {
|
|
var r organizationMembersResponse
|
|
uri := "/organizations/" + organizationID + "/members"
|
|
res, err := api.makeRequest("GET", uri, nil)
|
|
if err != nil {
|
|
return []OrganizationMember{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError)
|
|
}
|
|
|
|
err = json.Unmarshal(res, &r)
|
|
if err != nil {
|
|
return []OrganizationMember{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError)
|
|
}
|
|
|
|
return r.Result, r.ResultInfo, nil
|
|
}
|
|
|
|
// organizationInvitesResponse represents the response from the Organization invites endpoint.
|
|
type organizationInvitesResponse struct {
|
|
Response
|
|
Result []OrganizationInvite `json:"result"`
|
|
ResultInfo `json:"result_info"`
|
|
}
|
|
|
|
// OrganizationMembers returns list of invites for specified organization of the logged-in user.
|
|
//
|
|
// API reference: https://api.cloudflare.com/#organization-invites
|
|
func (api *API) OrganizationInvites(organizationID string) ([]OrganizationInvite, ResultInfo, error) {
|
|
var r organizationInvitesResponse
|
|
uri := "/organizations/" + organizationID + "/invites"
|
|
res, err := api.makeRequest("GET", uri, nil)
|
|
if err != nil {
|
|
return []OrganizationInvite{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError)
|
|
}
|
|
|
|
err = json.Unmarshal(res, &r)
|
|
if err != nil {
|
|
return []OrganizationInvite{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError)
|
|
}
|
|
|
|
return r.Result, r.ResultInfo, nil
|
|
}
|
|
|
|
// organizationRolesResponse represents the response from the Organization roles endpoint.
|
|
type organizationRolesResponse struct {
|
|
Response
|
|
Result []OrganizationRole `json:"result"`
|
|
ResultInfo `json:"result_info"`
|
|
}
|
|
|
|
// OrganizationRoles returns list of roles for specified organization of the logged-in user.
|
|
//
|
|
// API reference: https://api.cloudflare.com/#organization-roles-list-roles
|
|
func (api *API) OrganizationRoles(organizationID string) ([]OrganizationRole, ResultInfo, error) {
|
|
var r organizationRolesResponse
|
|
uri := "/organizations/" + organizationID + "/roles"
|
|
res, err := api.makeRequest("GET", uri, nil)
|
|
if err != nil {
|
|
return []OrganizationRole{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError)
|
|
}
|
|
|
|
err = json.Unmarshal(res, &r)
|
|
if err != nil {
|
|
return []OrganizationRole{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError)
|
|
}
|
|
|
|
return r.Result, r.ResultInfo, nil
|
|
}
|