blob: 3f828635c2fc68121dc34c4c0b6cbe90c16abe4a [file] [log] [blame]
package gerrit
import (
"fmt"
)
// AccountsService contains Account related REST endpoints
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html
type AccountsService struct {
client *Client
}
// AccountInfo entity contains information about an account.
type AccountInfo struct {
AccountID int `json:"_account_id,omitempty"`
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
Username string `json:"username,omitempty"`
// Avatars lists avatars of various sizes for the account.
// This field is only populated if the avatars plugin is enabled.
Avatars []struct {
URL string `json:"url,omitempty"`
Height int `json:"height,omitempty"`
} `json:"avatars,omitempty"`
}
// SSHKeyInfo entity contains information about an SSH key of a user.
type SSHKeyInfo struct {
Seq int `json:"seq"`
SSHPublicKey string `json:"ssh_public_key"`
EncodedKey string `json:"encoded_key"`
Algorithm string `json:"algorithm"`
Comment string `json:"comment,omitempty"`
Valid bool `json:"valid"`
}
// UsernameInput entity contains information for setting the username for an account.
type UsernameInput struct {
Username string `json:"username"`
}
// QueryLimitInfo entity contains information about the Query Limit of a user.
type QueryLimitInfo struct {
Min int `json:"min"`
Max int `json:"max"`
}
// HTTPPasswordInput entity contains information for setting/generating an HTTP password.
type HTTPPasswordInput struct {
Generate bool `json:"generate,omitempty"`
HTTPPassword string `json:"http_password,omitempty"`
}
// GpgKeysInput entity contains information for adding/deleting GPG keys.
type GpgKeysInput struct {
Add []string `json:"add"`
Delete []string `json:"delete"`
}
// GpgKeyInfo entity contains information about a GPG public key.
type GpgKeyInfo struct {
ID string `json:"id,omitempty"`
Fingerprint string `json:"fingerprint,omitempty"`
UserIDs []string `json:"user_ids,omitempty"`
Key string `json:"key,omitempty"`
}
// EmailInput entity contains information for registering a new email address.
type EmailInput struct {
Email string `json:"email"`
Preferred bool `json:"preferred,omitempty"`
NoConfirmation bool `json:"no_confirmation,omitempty"`
}
// EmailInfo entity contains information about an email address of a user.
type EmailInfo struct {
Email string `json:"email"`
Preferred bool `json:"preferred,omitempty"`
PendingConfirmation bool `json:"pending_confirmation,omitempty"`
}
// AccountInput entity contains information for the creation of a new account.
type AccountInput struct {
Username string `json:"username,omitempty"`
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
SSHKey string `json:"ssh_key,omitempty"`
HTTPPassword string `json:"http_password,omitempty"`
Groups []string `json:"groups,omitempty"`
}
// AccountDetailInfo entity contains detailed information about an account.
type AccountDetailInfo struct {
AccountInfo
RegisteredOn Timestamp `json:"registered_on"`
}
// AccountNameInput entity contains information for setting a name for an account.
type AccountNameInput struct {
Name string `json:"name,omitempty"`
}
// AccountCapabilityInfo entity contains information about the global capabilities of a user.
type AccountCapabilityInfo struct {
AccessDatabase bool `json:"accessDatabase,omitempty"`
AdministrateServer bool `json:"administrateServer,omitempty"`
CreateAccount bool `json:"createAccount,omitempty"`
CreateGroup bool `json:"createGroup,omitempty"`
CreateProject bool `json:"createProject,omitempty"`
EmailReviewers bool `json:"emailReviewers,omitempty"`
FlushCaches bool `json:"flushCaches,omitempty"`
KillTask bool `json:"killTask,omitempty"`
MaintainServer bool `json:"maintainServer,omitempty"`
Priority string `json:"priority,omitempty"`
QueryLimit QueryLimitInfo `json:"queryLimit"`
RunAs bool `json:"runAs,omitempty"`
RunGC bool `json:"runGC,omitempty"`
StreamEvents bool `json:"streamEvents,omitempty"`
ViewAllAccounts bool `json:"viewAllAccounts,omitempty"`
ViewCaches bool `json:"viewCaches,omitempty"`
ViewConnections bool `json:"viewConnections,omitempty"`
ViewPlugins bool `json:"viewPlugins,omitempty"`
ViewQueue bool `json:"viewQueue,omitempty"`
}
// DiffPreferencesInfo entity contains information about the diff preferences of a user.
type DiffPreferencesInfo struct {
Context int `json:"context"`
Theme string `json:"theme"`
ExpandAllComments bool `json:"expand_all_comments,omitempty"`
IgnoreWhitespace string `json:"ignore_whitespace"`
IntralineDifference bool `json:"intraline_difference,omitempty"`
LineLength int `json:"line_length"`
ManualReview bool `json:"manual_review,omitempty"`
RetainHeader bool `json:"retain_header,omitempty"`
ShowLineEndings bool `json:"show_line_endings,omitempty"`
ShowTabs bool `json:"show_tabs,omitempty"`
ShowWhitespaceErrors bool `json:"show_whitespace_errors,omitempty"`
SkipDeleted bool `json:"skip_deleted,omitempty"`
SkipUncommented bool `json:"skip_uncommented,omitempty"`
SyntaxHighlighting bool `json:"syntax_highlighting,omitempty"`
HideTopMenu bool `json:"hide_top_menu,omitempty"`
AutoHideDiffTableHeader bool `json:"auto_hide_diff_table_header,omitempty"`
HideLineNumbers bool `json:"hide_line_numbers,omitempty"`
TabSize int `json:"tab_size"`
HideEmptyPane bool `json:"hide_empty_pane,omitempty"`
}
// DiffPreferencesInput entity contains information for setting the diff preferences of a user.
// Fields which are not set will not be updated.
type DiffPreferencesInput struct {
Context int `json:"context,omitempty"`
ExpandAllComments bool `json:"expand_all_comments,omitempty"`
IgnoreWhitespace string `json:"ignore_whitespace,omitempty"`
IntralineDifference bool `json:"intraline_difference,omitempty"`
LineLength int `json:"line_length,omitempty"`
ManualReview bool `json:"manual_review,omitempty"`
RetainHeader bool `json:"retain_header,omitempty"`
ShowLineEndings bool `json:"show_line_endings,omitempty"`
ShowTabs bool `json:"show_tabs,omitempty"`
ShowWhitespaceErrors bool `json:"show_whitespace_errors,omitempty"`
SkipDeleted bool `json:"skip_deleted,omitempty"`
SkipUncommented bool `json:"skip_uncommented,omitempty"`
SyntaxHighlighting bool `json:"syntax_highlighting,omitempty"`
HideTopMenu bool `json:"hide_top_menu,omitempty"`
AutoHideDiffTableHeader bool `json:"auto_hide_diff_table_header,omitempty"`
HideLineNumbers bool `json:"hide_line_numbers,omitempty"`
TabSize int `json:"tab_size,omitempty"`
}
// PreferencesInfo entity contains information about a user’s preferences.
type PreferencesInfo struct {
ChangesPerPage int `json:"changes_per_page"`
ShowSiteHeader bool `json:"show_site_header,omitempty"`
UseFlashClipboard bool `json:"use_flash_clipboard,omitempty"`
DownloadScheme string `json:"download_scheme"`
DownloadCommand string `json:"download_command"`
CopySelfOnEmail bool `json:"copy_self_on_email,omitempty"`
DateFormat string `json:"date_format"`
TimeFormat string `json:"time_format"`
RelativeDateInChangeTable bool `json:"relative_date_in_change_table,omitempty"`
SizeBarInChangeTable bool `json:"size_bar_in_change_table,omitempty"`
LegacycidInChangeTable bool `json:"legacycid_in_change_table,omitempty"`
MuteCommonPathPrefixes bool `json:"mute_common_path_prefixes,omitempty"`
ReviewCategoryStrategy string `json:"review_category_strategy"`
DiffView string `json:"diff_view"`
My []TopMenuItemInfo `json:"my"`
URLAliases string `json:"url_aliases,omitempty"`
}
// PreferencesInput entity contains information for setting the user preferences.
// Fields which are not set will not be updated.
type PreferencesInput struct {
ChangesPerPage int `json:"changes_per_page,omitempty"`
ShowSiteHeader bool `json:"show_site_header,omitempty"`
UseFlashClipboard bool `json:"use_flash_clipboard,omitempty"`
DownloadScheme string `json:"download_scheme,omitempty"`
DownloadCommand string `json:"download_command,omitempty"`
CopySelfOnEmail bool `json:"copy_self_on_email,omitempty"`
DateFormat string `json:"date_format,omitempty"`
TimeFormat string `json:"time_format,omitempty"`
RelativeDateInChangeTable bool `json:"relative_date_in_change_table,omitempty"`
SizeBarInChangeTable bool `json:"size_bar_in_change_table,omitempty"`
LegacycidInChangeTable bool `json:"legacycid_in_change_table,omitempty"`
MuteCommonPathPrefixes bool `json:"mute_common_path_prefixes,omitempty"`
ReviewCategoryStrategy string `json:"review_category_strategy,omitempty"`
DiffView string `json:"diff_view,omitempty"`
My []TopMenuItemInfo `json:"my,omitempty"`
URLAliases string `json:"url_aliases,omitempty"`
}
// CapabilityOptions specifies the parameters to filter for capabilities.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-account-capabilities
type CapabilityOptions struct {
// To filter the set of global capabilities the q parameter can be used.
// Filtering may decrease the response time by avoiding looking at every possible alternative for the caller.
Filter []string `url:"q,omitempty"`
}
// GetAccount returns an account as an AccountInfo entity.
// If account is "self" the current authenticated account will be returned.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-account
func (s *AccountsService) GetAccount(account string) (*AccountInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s", account)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(AccountInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetAccountDetails retrieves the details of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-detail
func (s *AccountsService) GetAccountDetails(accountID string) (*AccountDetailInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/detail", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(AccountDetailInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetAccountName retrieves the full name of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-account-name
func (s *AccountsService) GetAccountName(accountID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/name", accountID)
return getStringResponseWithoutOptions(s.client, u)
}
// GetUsername retrieves the username of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-username
func (s *AccountsService) GetUsername(accountID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/username", accountID)
return getStringResponseWithoutOptions(s.client, u)
}
// GetHTTPPassword retrieves the HTTP password of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-http-password
func (s *AccountsService) GetHTTPPassword(accountID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/password.http", accountID)
return getStringResponseWithoutOptions(s.client, u)
}
// ListAccountEmails returns the email addresses that are configured for the specified user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-account-emails
func (s *AccountsService) ListAccountEmails(accountID string) (*[]EmailInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/emails", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]EmailInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetAccountEmail retrieves an email address of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-account-email
func (s *AccountsService) GetAccountEmail(accountID, emailID string) (*EmailInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/emails/%s", accountID, emailID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(EmailInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// ListSSHKeys returns the SSH keys of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-ssh-keys
func (s *AccountsService) ListSSHKeys(accountID string) (*[]SSHKeyInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/sshkeys", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]SSHKeyInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetSSHKey retrieves an SSH key of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-ssh-key
func (s *AccountsService) GetSSHKey(accountID, sshKeyID string) (*SSHKeyInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/sshkeys/%s", accountID, sshKeyID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(SSHKeyInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// ListGPGKeys returns the GPG keys of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-gpg-keys
func (s *AccountsService) ListGPGKeys(accountID string) (*map[string]GpgKeyInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/gpgkeys", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(map[string]GpgKeyInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetGPGKey retrieves a GPG key of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-gpg-key
func (s *AccountsService) GetGPGKey(accountID, gpgKeyID string) (*GpgKeyInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/gpgkeys/%s", accountID, gpgKeyID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(GpgKeyInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// ListAccountCapabilities returns the global capabilities that are enabled for the specified user.
// If the global capabilities for the calling user should be listed, self can be used as account-id.
// This can be used by UI tools to discover if administrative features are available to the caller, so they can hide (or show) relevant UI actions.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-account-capabilities
func (s *AccountsService) ListAccountCapabilities(accountID string, opt *CapabilityOptions) (*AccountCapabilityInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/capabilities", accountID)
u, err := addOptions(u, opt)
if err != nil {
return nil, nil, err
}
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(AccountCapabilityInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// ListGroups lists all groups that contain the specified user as a member.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#list-groups
func (s *AccountsService) ListGroups(accountID string) (*[]GroupInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/groups", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]GroupInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetUserPreferences retrieves the user’s preferences.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-user-preferences
func (s *AccountsService) GetUserPreferences(accountID string) (*PreferencesInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/preferences", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(PreferencesInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetDiffPreferences retrieves the diff preferences of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-diff-preferences
func (s *AccountsService) GetDiffPreferences(accountID string) (*DiffPreferencesInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/preferences.diff", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(DiffPreferencesInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetStarredChanges gets the changes starred by the identified user account.
// This URL endpoint is functionally identical to the changes query GET /changes/?q=is:starred.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-starred-changes
func (s *AccountsService) GetStarredChanges(accountID string) (*[]ChangeInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/starred.changes", accountID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]ChangeInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// SuggestAccount suggests users for a given query q and result limit n.
// If result limit is not passed, then the default 10 is used.
// Returns a list of matching AccountInfo entities.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#query-account
func (s *AccountsService) SuggestAccount(opt *QueryOptions) (*[]AccountInfo, *Response, error) {
u := "accounts/"
u, err := addOptions(u, opt)
if err != nil {
return nil, nil, err
}
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]AccountInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// CreateAccount creates a new account.
// In the request body additional data for the account can be provided as AccountInput.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#create-account
func (s *AccountsService) CreateAccount(username string, input *AccountInput) (*AccountInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s", username)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(AccountInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// SetAccountName sets the full name of an account.
// The new account name must be provided in the request body inside an AccountNameInput entity.
//
// As response the new account name is returned.
// If the name was deleted the response is “204 No Content”.
// Some realms may not allow to modify the account name.
// In this case the request is rejected with “405 Method Not Allowed”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-account-name
func (s *AccountsService) SetAccountName(accountID string, input *AccountNameInput) (*string, *Response, error) {
u := fmt.Sprintf("accounts/%s/name", accountID)
// TODO Use here the getStringResponseWithoutOptions (for PUT requests)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(string)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// DeleteAccountName deletes the name of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-account-name
func (s *AccountsService) DeleteAccountName(accountID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/name", accountID)
return s.client.DeleteRequest(u, nil)
}
// DeleteActive sets the account state to inactive.
// If the account was already inactive the response is “404 Not Found”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-active
func (s *AccountsService) DeleteActive(accountID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/active", accountID)
return s.client.DeleteRequest(u, nil)
}
// DeleteHTTPPassword deletes the HTTP password of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-http-password
func (s *AccountsService) DeleteHTTPPassword(accountID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/password.http", accountID)
return s.client.DeleteRequest(u, nil)
}
// DeleteAccountEmail deletes an email address of an account.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-account-email
func (s *AccountsService) DeleteAccountEmail(accountID, emailID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/emails/%s", accountID, emailID)
return s.client.DeleteRequest(u, nil)
}
// DeleteSSHKey deletes an SSH key of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-ssh-key
func (s *AccountsService) DeleteSSHKey(accountID, sshKeyID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/sshkeys/%s", accountID, sshKeyID)
return s.client.DeleteRequest(u, nil)
}
// DeleteGPGKey deletes a GPG key of a user.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#delete-gpg-key
func (s *AccountsService) DeleteGPGKey(accountID, gpgKeyID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/gpgkeys/%s", accountID, gpgKeyID)
return s.client.DeleteRequest(u, nil)
}
// SetUsername sets a new username.
// The new username must be provided in the request body inside a UsernameInput entity.
// Once set, the username cannot be changed or deleted.
// If attempted this fails with “405 Method Not Allowed”.
//
// As response the new username is returned.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-username
func (s *AccountsService) SetUsername(accountID string, input *UsernameInput) (*string, *Response, error) {
u := fmt.Sprintf("accounts/%s/username", accountID)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(string)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetActive checks if an account is active.
//
// If the account is active the string ok is returned.
// If the account is inactive the response is “204 No Content”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-active
func (s *AccountsService) GetActive(accountID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/active", accountID)
return getStringResponseWithoutOptions(s.client, u)
}
// SetActive sets the account state to active.
//
// If the account was already active the response is “200 OK”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-active
func (s *AccountsService) SetActive(accountID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/active", accountID)
req, err := s.client.NewRequest("PUT", u, nil)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// SetHTTPPassword sets/Generates the HTTP password of an account.
// The options for setting/generating the HTTP password must be provided in the request body inside a HTTPPasswordInput entity.
//
// As response the new HTTP password is returned.
// If the HTTP password was deleted the response is “204 No Content”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-http-password
func (s *AccountsService) SetHTTPPassword(accountID string, input *HTTPPasswordInput) (*string, *Response, error) {
u := fmt.Sprintf("accounts/%s/password.http", accountID)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(string)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// CreateAccountEmail registers a new email address for the user.
// A verification email is sent with a link that needs to be visited to confirm the email address, unless DEVELOPMENT_BECOME_ANY_ACCOUNT is used as authentication type.
// For the development mode email addresses are directly added without confirmation.
// A Gerrit administrator may add an email address without confirmation by setting no_confirmation in the EmailInput.
// In the request body additional data for the email address can be provided as EmailInput.
//
// As response the new email address is returned as EmailInfo entity.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#create-account-email
func (s *AccountsService) CreateAccountEmail(accountID, emailID string, input *EmailInput) (*EmailInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/emails/%s", accountID, emailID)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(EmailInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// SetPreferredEmail sets an email address as preferred email address for an account.
//
// If the email address was already the preferred email address of the account the response is “200 OK”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-preferred-email
func (s *AccountsService) SetPreferredEmail(accountID, emailID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/emails/%s/preferred", accountID, emailID)
req, err := s.client.NewRequest("PUT", u, nil)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// GetAvatarChangeURL retrieves the URL where the user can change the avatar image.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#get-avatar-change-url
func (s *AccountsService) GetAvatarChangeURL(accountID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/avatar.change.url", accountID)
return getStringResponseWithoutOptions(s.client, u)
}
// AddGPGKeys Add or delete one or more GPG keys for a user.
// The changes must be provided in the request body as a GpgKeysInput entity.
// Each new GPG key is provided in ASCII armored format, and must contain a self-signed certification matching a registered email or other identity of the user.
//
// As a response, the modified GPG keys are returned as a map of GpgKeyInfo entities, keyed by ID. Deleted keys are represented by an empty object.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#add-delete-gpg-keys
func (s *AccountsService) AddGPGKeys(accountID string, input *GpgKeysInput) (*map[string]GpgKeyInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/gpgkeys", accountID)
req, err := s.client.NewRequest("POST", u, input)
if err != nil {
return nil, nil, err
}
v := new(map[string]GpgKeyInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// CheckAccountCapability checks if a user has a certain global capability.
//
// If the user has the global capability the string ok is returned.
// If the user doesn’t have the global capability the response is “404 Not Found”.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#check-account-capability
func (s *AccountsService) CheckAccountCapability(accountID, capabilityID string) (string, *Response, error) {
u := fmt.Sprintf("accounts/%s/capabilities/%s", accountID, capabilityID)
return getStringResponseWithoutOptions(s.client, u)
}
// SetUserPreferences sets the user’s preferences.
// The new preferences must be provided in the request body as a PreferencesInput entity.
//
// As result the new preferences of the user are returned as a PreferencesInfo entity.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-user-preferences
func (s *AccountsService) SetUserPreferences(accountID string, input *PreferencesInput) (*PreferencesInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/preferences", accountID)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(PreferencesInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// SetDiffPreferences sets the diff preferences of a user.
// The new diff preferences must be provided in the request body as a DiffPreferencesInput entity.
//
// As result the new diff preferences of the user are returned as a DiffPreferencesInfo entity.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-diff-preferences
func (s *AccountsService) SetDiffPreferences(accountID string, input *DiffPreferencesInput) (*DiffPreferencesInfo, *Response, error) {
u := fmt.Sprintf("accounts/%s/preferences.diff", accountID)
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(DiffPreferencesInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// StarChange star a change.
// Starred changes are returned for the search query is:starred or starredby:USER and automatically notify the user whenever updates are made to the change.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#star-change
func (s *AccountsService) StarChange(accountID, changeID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/starred.changes/%s", accountID, changeID)
req, err := s.client.NewRequest("PUT", u, nil)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// UnstarChange nstar a change.
// Removes the starred flag, stopping notifications.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#unstar-change
func (s *AccountsService) UnstarChange(accountID, changeID string) (*Response, error) {
u := fmt.Sprintf("accounts/%s/starred.changes/%s", accountID, changeID)
return s.client.DeleteRequest(u, nil)
}
/*
Missing Account Endpoints:
Add SSH Key
Get Avatar
*/