pvwa

package
v0.16.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2023 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Filter

func Filter[T comparable](s []T, f func(T) bool) []T

func InSlice

func InSlice[T comparable](item T, slice []T) bool

func Intersection

func Intersection[T comparable](s1, s2 []T) []T

Types

type AccountContentPrerequisites added in v0.15.0

type AccountContentPrerequisites struct {
	// The reason that is required to retrieve the password/SSH key
	Reason string `json:"Reason,omitempty"`
	// The ticket ID of the ticketing system
	TicketId string `json:"TicketId,omitempty"`
	// The name of the ticketing system
	TicketingSystem string `json:"TicketingSystem,omitempty"`
	// Internal parameter (for PSMP only)
	IsUse bool `json:"isUse,omitempty"`
	// The action this password/SSH key will be used for. (Show/Copy/Connect for password; Retrieve for SSH key)
	ActionType string `json:"ActionType,omitempty"`
	// The address of the remote machine the user wants to connect to using the password/SSH key
	Machine string `json:"Machine,omitempty"`
	// The version number of the required password/SSH key. Must be a positive number. If the value is left empty
	// or the value passed does not exist, then the current password/SSH key version is returned
	Version int `json:"Version,omitempty"`
}

type AccountDetails

type AccountDetails struct {
	CategoryModificationTime  int                   `json:"categoryModificationTime"`
	PlatformId                string                `json:"platformId"`
	SafeName                  string                `json:"safeName"`
	Id                        string                `json:"id"`
	Name                      string                `json:"name"`
	Address                   string                `json:"address"`
	UserName                  string                `json:"userName"`
	SecretType                string                `json:"secretType"`
	Secret                    string                `json:"secret"`
	PlatformAccountProperties map[string]any        `json:"platformAccountProperties"`
	SecretManagement          *SecretManagement     `json:"secretManagement"`
	RemoteMachinesAccess      *RemoteMachinesAccess `json:"remoteMachinesAccess"`
	CreatedTime               int                   `json:"createdTime"`
	DeletionTime              int                   `json:"deletionTime"`
}

type ChangeCredentialsNow added in v0.15.0

type ChangeCredentialsNow struct {
	// Whether the CPM will change the credentials in all the accounts that belong to the same group. This parameter
	// is only relevant for accounts that belong to an account group, and if this parameter does not belong to a group,
	// it will be ignored. If this account is part of an account group and this value is not specified,
	// the default value will be applied.
	ChangeEntireGroup bool `json:"ChangeEntireGroup"`
}

type GenericResponse

type GenericResponse[T any] struct {
	Value    []T    `json:"value,omitempty"`
	Count    int    `json:"count,omitempty"`
	NextLink string `json:"nextLink,omitempty"`
}

type GetAccountDetailsOptions added in v0.10.0

type GetAccountDetailsOptions struct {
	// contains filtered or unexported fields
}

func (*GetAccountDetailsOptions) Run added in v0.10.0

type GetAccountsOptions

type GetAccountsOptions struct {
	// contains filtered or unexported fields
}

func (*GetAccountsOptions) Run added in v0.10.0

func (a *GetAccountsOptions) Run() ([]*AccountDetails, error)

func (*GetAccountsOptions) WithFilter added in v0.10.0

func (a *GetAccountsOptions) WithFilter(s string) *GetAccountsOptions

WithFilter Search for accounts filtered by specific Safe. Filter=safename eq [safe name]

func (*GetAccountsOptions) WithLimit added in v0.10.0

func (a *GetAccountsOptions) WithLimit(i int) *GetAccountsOptions

WithLimit Maximum number of returned accounts. If not specified, the default value is 50. The maximum number that can be specified is 1000.

func (*GetAccountsOptions) WithOffset added in v0.10.0

func (a *GetAccountsOptions) WithOffset(i int) *GetAccountsOptions

WithOffset Offset of the first returned account into the collection of results.

func (*GetAccountsOptions) WithSavedFilter added in v0.10.0

func (a *GetAccountsOptions) WithSavedFilter(i int) *GetAccountsOptions

WithSavedFilter Search for accounts using a saved filter(s).

func (*GetAccountsOptions) WithSearch added in v0.10.0

func (a *GetAccountsOptions) WithSearch(s string) *GetAccountsOptions

WithSearch List of keywords separated with space to search in accounts.

func (*GetAccountsOptions) WithSearchType added in v0.10.0

func (a *GetAccountsOptions) WithSearchType(s string) *GetAccountsOptions

WithSearchType Type of search to perform - if keywords are contained in the relevant account properties values or in the start of the properties values (the latter enhances performance)

func (*GetAccountsOptions) WithSort added in v0.10.0

func (a *GetAccountsOptions) WithSort(s []string) *GetAccountsOptions

WithSort Property or properties to sort returned accounts, followed by asc (default) or desc to control sort direction. Multiple sorts are comma-separated. Maximum number of properties is 3.

type GetSafeMembersOptions added in v0.10.0

type GetSafeMembersOptions struct {
	// contains filtered or unexported fields
}

func (*GetSafeMembersOptions) Run added in v0.10.0

func (s *GetSafeMembersOptions) Run() ([]*SafeMember, error)

func (*GetSafeMembersOptions) WithFilter added in v0.10.0

WithFilter Filters are according to the REST standard. Search for Safe members using the following filters. Multiple filters can be applied using the AND operator. • memberType - returns all members according to the type(user or group) Default: both Example: filter= memberType eq user • membershipExpired - returns either expired members or members that are not expired. Default: both Example: filter= membershipExpired eq true • includePredefinedUsers - includes predefined users in the returned list. Default: False, non-predefined users only Example: filter= includePredefinedUsers eq true

func (*GetSafeMembersOptions) WithLimit added in v0.10.0

WithLimit The maximum number of members that are returned.

func (*GetSafeMembersOptions) WithOffset added in v0.10.0

WithOffset Offset of the first member that is returned in the collection of results.

func (*GetSafeMembersOptions) WithSearch added in v0.10.0

WithSearch Searches according to the Safe name. Search is performed according to the REST standard (search="search word").

func (*GetSafeMembersOptions) WithSort added in v0.10.0

WithSort Sorts according to the memberName property in ascending order (default) or descending order to control the sort direction. asc: ascending desc:descending

func (*GetSafeMembersOptions) WithUseCache added in v0.10.0

func (s *GetSafeMembersOptions) WithUseCache(b bool) *GetSafeMembersOptions

WithUseCache Whether to retrieve the cache from a session.

type GetSafesOptions added in v0.10.0

type GetSafesOptions struct {
	// contains filtered or unexported fields
}

func (*GetSafesOptions) Run added in v0.10.0

func (s *GetSafesOptions) Run() ([]*Safe, error)

func (*GetSafesOptions) WithExtendedDetails added in v0.10.0

func (s *GetSafesOptions) WithExtendedDetails(b bool) *GetSafesOptions

WithExtendedDetails Whether to return all Safe details or only safeName as part of the response. If not sent, the value is True.

func (*GetSafesOptions) WithIncludeAccounts added in v0.10.0

func (s *GetSafesOptions) WithIncludeAccounts(b bool) *GetSafesOptions

WithIncludeAccounts Whether to return accounts for each Safe as part of the response. If not sent, the value will be false.

func (*GetSafesOptions) WithLimit added in v0.10.0

func (s *GetSafesOptions) WithLimit(i int) *GetSafesOptions

WithLimit The maximum number of Safes that are returned.

func (*GetSafesOptions) WithOffset added in v0.10.0

func (s *GetSafesOptions) WithOffset(i int) *GetSafesOptions

WithOffset Offset of the first Safe that is returned in the collection of results.

func (*GetSafesOptions) WithSearch added in v0.10.0

func (s *GetSafesOptions) WithSearch(_s string) *GetSafesOptions

WithSearch Searches according to the Safe name. Search is performed according to the REST standard (search="search word").

func (*GetSafesOptions) WithSort added in v0.10.0

func (s *GetSafesOptions) WithSort(_s []string) *GetSafesOptions

WithSort Sorts according to the safeName property in ascending order (default) or descending order to control the sort direction.

func (*GetSafesOptions) WithUseCache added in v0.10.0

func (s *GetSafesOptions) WithUseCache(b bool) *GetSafesOptions

WithUseCache Whether to retrieve the cache from a session.

type GetUserGroupsOptions added in v0.10.0

type GetUserGroupsOptions struct {
	// contains filtered or unexported fields
}

func (*GetUserGroupsOptions) Run added in v0.10.0

func (u *GetUserGroupsOptions) Run() ([]*UserGroup, error)

func (*GetUserGroupsOptions) WithFilter added in v0.10.0

WithFilter Filters according to the REST standard. Search for groups using the following filters:

  • groupType eq <Directory|Vault>
  • groupName eq <Group_Name>

func (*GetUserGroupsOptions) WithIncludeMembers added in v0.10.0

func (u *GetUserGroupsOptions) WithIncludeMembers(b bool) *GetUserGroupsOptions

WithIncludeMembers Whether to return members for each user group as part of the response. If not sent, the value will be False.

func (*GetUserGroupsOptions) WithSearch added in v0.10.0

WithSearch Searches according to the REST standard (searching with "contains"). Search matches when all search terms appear in the group name.

func (*GetUserGroupsOptions) WithSort added in v0.10.0

WithSort Property or properties by which to sort returned users, followed by asc (default) or desc to control sort direction. Separate multiple properties with commas, up to a maximum of three properties: "groupname", "directory", "location"

type GetUsersOptions added in v0.10.0

type GetUsersOptions struct {
	// contains filtered or unexported fields
}

func (*GetUsersOptions) Run added in v0.10.0

func (u *GetUsersOptions) Run() ([]*UserDetails, error)

func (*GetUsersOptions) WithComponentUser added in v0.10.0

func (u *GetUsersOptions) WithComponentUser(b bool) *GetUsersOptions

WithComponentUser If the user is a component, then the value is true. Otherwise, it is false.

func (*GetUsersOptions) WithExtendedDetails added in v0.10.0

func (u *GetUsersOptions) WithExtendedDetails(b bool) *GetUsersOptions

WithExtendedDetails Returns additional user details such as user groups and userDN for LDAP users.

func (*GetUsersOptions) WithSearch added in v0.10.0

func (u *GetUsersOptions) WithSearch(s string) *GetUsersOptions

WithSearch Search is according to REST standards using the values, username, firstname, and lastname.

func (*GetUsersOptions) WithSort added in v0.10.0

func (u *GetUsersOptions) WithSort(s []string) *GetUsersOptions

WithSort Property or properties by which to sort returned users, followed by asc (default) or desc to control sort direction. Separate multiple properties with commas, up to a maximum of three properties. (*include the properties)

func (*GetUsersOptions) WithUserName added in v0.10.0

func (u *GetUsersOptions) WithUserName(s string) *GetUsersOptions

WithUserName The name of the user.

func (*GetUsersOptions) WithUserType added in v0.10.0

func (u *GetUsersOptions) WithUserType(s string) *GetUsersOptions

WithUserType The user type as defined in the license.

type GetUsersResponse

type GetUsersResponse struct {
	Users []*UserDetails `json:"Users"`
	Total int            `json:"Total"`
}

type GroupMembershipDetails

type GroupMembershipDetails struct {
	GroupID   int    `json:"groupID,omitempty"`
	GroupName string `json:"groupName,omitempty"`
	GroupType string `json:"groupType,omitempty"`
}

type InitOption added in v0.10.0

type InitOption func(p *PVWA)

func WithLogging

func WithLogging(b bool) InitOption

func WithPassword

func WithPassword(s string) InitOption

type NewAccountOptions added in v0.15.0

type NewAccountOptions struct {
	// contains filtered or unexported fields
}

func (*NewAccountOptions) Run added in v0.15.0

func (a *NewAccountOptions) Run() (*AccountDetails, error)

type Option

type Option[T any] struct {
	// contains filtered or unexported fields
}

func (*Option[T]) Some added in v0.10.0

func (o *Option[T]) Some(t T) Option[T]

func (*Option[T]) Valid added in v0.10.0

func (o *Option[T]) Valid() bool

func (*Option[T]) Value added in v0.10.0

func (o *Option[T]) Value() T

type PVWA

type PVWA struct {
	*http.Client
	// contains filtered or unexported fields
}

func New

func New(subdomain, username string, options ...InitOption) (*PVWA, error)

func (*PVWA) Delete added in v0.14.0

func (p *PVWA) Delete(path string) (io.ReadCloser, error)

func (*PVWA) Get

func (p *PVWA) Get(path string) (io.ReadCloser, error)

func (*PVWA) GetAccountDetails

func (p *PVWA) GetAccountDetails(id string) *GetAccountDetailsOptions

GetAccountDetails This method returns information about an account identified by its id. The user who runs this web service requires List Accounts permission in the Vault.

func (*PVWA) GetAccounts

func (p *PVWA) GetAccounts() *GetAccountsOptions

GetAccounts This method returns a list of all the accounts in the Vault. The user who runs this web service requires List Accounts permission in the Safe.

func (*PVWA) GetSafeMembers

func (p *PVWA) GetSafeMembers(safeUrlId string) *GetSafeMembersOptions

GetSafeMembers This method returns the list of members of a Safe. The user who run this web service must have View Safe Members permissions on the Safe.

func (*PVWA) GetSafes

func (p *PVWA) GetSafes() *GetSafesOptions

GetSafes This method returns a list of all Safes in the Vault that the user has permissions for. The user who runs this web service must be a member of the Safes in the Vault that are returned in the list.

func (*PVWA) GetUserGroups

func (p *PVWA) GetUserGroups() *GetUserGroupsOptions

GetUserGroups This method returns a list of all existing user groups in the Vault. The user who runs this web service must have Audit users permissions in the Vault. Groups on the same level as your user or lower in the Vault hierarchy are retrieved.

  • The groups that are returned depends on how the HideVaultUsersTree parameter is defined in the dpbaram.ini file.
  • If HideVaultUsersTree is set to No, all groups are returned(instead of only those on the same level or lower in the Vault hierarchy).
  • If HideVaultUsersTree is set to Yes, only auditors and managers are allowed to get all groups.
  • Retrieving more than 1,000 groups may cause a slowdown in the response.

func (*PVWA) GetUsers

func (p *PVWA) GetUsers() *GetUsersOptions

GetUsers This method returns a list of all existing users in the Vault except for the Master and Batch built-in users. The user who runs this web service must have Audit Users permissions in the Vault. Groups on the same level as your user or lower in the Vault hierarchy are retrieved.

  • The groups that are returned depends on the HideVaultUsersTree parameter is defined in the dpbaram.ini file.
  • If HideVaultUsersTree is set to No, all groups are returned(instead of only those on the same level or lower in the Vault hierarchy).
  • If HideVaultUsersTree is set to Yes, only auditors and managers are allowed to get all groups.

Note: This Web service returns up to 6000 users in up to 20 seconds. If the number of users is higher, the response time may be higher.

func (*PVWA) Logoff

func (p *PVWA) Logoff() error

func (*PVWA) Logon

func (p *PVWA) Logon() error

func (*PVWA) NewAccount added in v0.15.0

func (p *PVWA) NewAccount(account *AccountDetails) *NewAccountOptions

NewAccount This method adds a new privileged account or SSH key to the Vault The user who runs this web service requires the following permission in the Vault

  • Add account AND ( update password OR update password properties )

func (*PVWA) Patch

func (p *PVWA) Patch(path string, data []byte) (io.ReadCloser, error)

func (*PVWA) Post

func (p *PVWA) Post(path string, data []byte) (io.ReadCloser, error)

func (*PVWA) UpdateAccount

func (p *PVWA) UpdateAccount(id string, ops []UpdateAccountOperation) *UpdateAccountOptions

UpdateAccount This method updates an existing account's details. It isn't mandatory to send all the account’s details. Any values sent in the request that were changed will be updated. All other properties values will remain the same.

On each property, the following are the allowed operations:

  • Replace (to replace the existing value of that property)
  • Remove (to remove the property from the account)
  • Add (to add that property to the account)

It is possible to set several properties using the same command using the following structure:

{
	"op": "replace",
	"path": "/platformaccountproperties",
	"value": "{\"{PropertyID1}\":\"{Value}\",\"{PropertyID2}\":\"{Value}\",\"{PropertyID3}\":\"{Value}\"}"
}

When sending several operations on the same property – only the last operation will affect.

func (*PVWA) UpdateSafeMembers added in v0.12.0

func (p *PVWA) UpdateSafeMembers(safeUrlId string, user *SafeMember) *UpdateSafeMembersOptions

UpdateSafeMembers This method adds an existing user as a Safe member. The user who runs this web service must have Manage Safe Members permissions in the Vault.

type RemoteMachinesAccess

type RemoteMachinesAccess struct {
	RemoteMachines                   string `json:"remoteMachines"`
	AccessRestrictedToRemoteMachines bool   `json:"accessRestrictedToRemoteMachines"`
}

type Safe

type Safe struct {
	SafeNumber                int            `json:"safeNumber,omitempty"`
	Location                  string         `json:"location,omitempty"`
	Creator                   *SafeCreator   `json:"creator,omitempty"`
	Accounts                  []*SafeAccount `json:"accounts,omitempty"`
	OlacEnabled               bool           `json:"olacEnabled,omitempty"`
	NumberOfVersionsRetention int            `json:"numberOfVersionsRetention,omitempty"`
	NumberOfDaysRetention     int            `json:"numberOfDaysRetention,omitempty"`
	AutoPurgeEnabled          bool           `json:"autoPurgeEnabled,omitempty"`
	CreationTime              int            `json:"creationTime,omitempty"`
	LastModificationTime      int            `json:"lastModificationTime,omitempty"`
	SafeUrlId                 string         `json:"safeUrlId,omitempty"`
	SafeName                  string         `json:"safeName,omitempty"`
	Description               string         `json:"description,omitempty"`
	ManagingCPM               string         `json:"managingCPM,omitempty"`
	IsExpiredMember           bool           `json:"isExpiredMember,omitempty"`
}

type SafeAccount

type SafeAccount struct {
	ID   string `json:"id,omitempty"`
	Name string `json:"name,omitempty"`
}

type SafeCreator

type SafeCreator struct {
	ID   string `json:"id,omitempty"`
	Name string `json:"name,omitempty"`
}

type SafeMember

type SafeMember struct {
	SafeUrlId                 string                 `json:"safeUrlId,omitempty"`
	SafeName                  string                 `json:"safeName,omitempty"`
	SafeNumber                int                    `json:"safeNumber,omitempty"`
	MemberId                  string                 `json:"memberId,omitempty"`
	MemberName                string                 `json:"memberName,omitempty"`
	MemberType                string                 `json:"memberType,omitempty"`
	MembershipExpirationDate  int                    `json:"membershipExpirationDate,omitempty"`
	IsExpiredMembershipEnable bool                   `json:"isExpiredMembershipEnable,omitempty"`
	IsPredefinedUser          bool                   `json:"isPredefinedUser,omitempty"`
	IsReadOnly                bool                   `json:"isReadOnly,omitempty"`
	Permissions               *SafeMemberPermissions `json:"permissions,omitempty"`
}

type SafeMemberPermissions added in v0.12.0

type SafeMemberPermissions struct {
	// Use accounts but not view passwords.
	UseAccounts bool `json:"useAccounts"`
	// Retrieve and view accounts in the Safe.
	RetrieveAccounts bool `json:"retrieveAccounts"`
	// View Accounts list.
	ListAccounts bool `json:"listAccounts"`
	// Add accounts in the Safe. Users who have this permission automatically
	// have UpdateAccountProperties permissions.
	AddAccounts bool `json:"addAccounts"`
	// Update existing account content.
	UpdateAccountContent bool `json:"updateAccountContent"`
	// Update existing account properties.
	UpdateAccountProperties bool `json:"updateAccountProperties"`
	// Initiate password management operations through CPM such as changing,
	// verifying, and reconciling passwords. When this parameter is set to False,
	// the SpecifyNextAccountContent parameter is also automatically set to False.
	InitiateCPMAccountManagementOperations bool `json:"initiateCPMAccountManagementOperations"`
	// Specify the password that is used when the CPM changes the password value.
	// This parameter can only be specified when the InitiateCPMAccountManagementOperations
	// parameter is set to True. When InitiateCPMAccountManagementOperations is set
	// to False this parameter is automatically set to False.
	SpecifyNextAccountContent bool `json:"specifyNextAccountContent"`
	// Rename existing accounts in the Safe.
	RenameAccounts bool `json:"renameAccounts"`
	// Delete existing passwords in the Safe.
	DeleteAccounts bool `json:"deleteAccounts"`
	// Unlock accounts that are locked by other users.
	UnlockAccounts bool `json:"unlockAccounts"`
	// Perform administrative tasks in the Safe, including:
	// 	- Update Safe properties
	// 	- Recover the Safe
	//	- Delete the Safe
	ManageSafe bool `json:"manageSafe"`
	// Add and remove Safe members, and update their authorizations in the Safe.
	ManageSafeMembers bool `json:"manageSafeMembers"`
	// Create a backup of a Safe and its contents, and store in another location.
	BackupSafe bool `json:"backupSafe"`
	// View account and user activity in the Safe.
	ViewAuditLog bool `json:"viewAuditLog"`
	// View permissions of Safe members.
	ViewSafeMembers bool `json:"viewSafeMembers"`
	// Request Authorization Level 1.
	RequestsAuthorizationLevel1 bool `json:"requestsAuthorizationLevel1"`
	// Request Authorization Level 2.
	RequestsAuthorizationLevel2 bool `json:"requestsAuthorizationLevel2"`
	// Access the Safe without confirmation from authorized users. This overrides
	// the Safe properties that specify that Safe members require confirmation to access the Safe.
	AccessWithoutConfirmation bool `json:"accessWithoutConfirmation"`
	// Create folders in the Safe.
	CreateFolders bool `json:"createFolders"`
	// Delete folders from the Safe.
	DeleteFolders bool `json:"deleteFolders"`
	// Move accounts and folders in the Safe to different folders and subfolders.
	MoveAccountsAndFolders bool `json:"moveAccountsAndFolders"`
}

SafeMemberPermissions The permissions that the user or group has in this Safe

type SecretManagement

type SecretManagement struct {
	AutomaticManagementEnabled bool   `json:"automaticManagementEnabled"`
	ManualManagementReason     string `json:"manualManagementReason"`
	Status                     string `json:"status"`
	LastModifiedTime           int    `json:"lastModifiedTime"`
	LastReconciledTime         int    `json:"lastReconciledTime"`
	LastVerifiedTime           int    `json:"lastVerifiedTime"`
}

type UpdateAccountOperation

type UpdateAccountOperation struct {
	Op    string `json:"op,omitempty"`
	Path  string `json:"path,omitempty"`
	Value any    `json:"value,omitempty"`
	From  string `json:"from,omitempty"`
}

type UpdateAccountOptions added in v0.10.0

type UpdateAccountOptions struct {
	// contains filtered or unexported fields
}

func (*UpdateAccountOptions) Run added in v0.10.0

type UpdateSafeMembersOptions added in v0.12.0

type UpdateSafeMembersOptions struct {
	// contains filtered or unexported fields
}

func (*UpdateSafeMembersOptions) Run added in v0.12.0

type UserDetails

type UserDetails struct {
	ID                 int                       `json:"id,omitempty"`
	Username           string                    `json:"username"`
	Source             string                    `json:"source,omitempty"`
	UserType           string                    `json:"userType,omitempty"`
	ComponentUser      bool                      `json:"componentUser,omitempty"`
	GroupsMembership   []*GroupMembershipDetails `json:"groupsMembership,omitempty"`
	UserDN             string                    `json:"userDN,omitempty"`
	VaultAuthorization []string                  `json:"vaultAuthorization,omitempty"`
	Location           string                    `json:"location,omitempty"`
	PersonalDetails    *UserPersonalDetails      `json:"personalDetails,omitempty"`
	EnableUser         bool                      `json:"enableUser,omitempty"`
	Suspended          bool                      `json:"suspended,omitempty"`
}

type UserGroup

type UserGroup struct {
	ID          int                 `json:"id,omitempty"`
	GroupType   string              `json:"groupType,omitempty"`
	Directory   string              `json:"directory,omitempty"`
	DN          string              `json:"dn,omitempty"`
	Members     []*UserGroupMembers `json:"members,omitempty"`
	GroupName   string              `json:"groupName,omitempty"`
	Description string              `json:"description,omitempty"`
	Location    string              `json:"location,omitempty"`
}

type UserGroupMembers

type UserGroupMembers struct {
	ID       int    `json:"id,omitempty"`
	Username string `json:"username,omitempty"`
}

type UserPersonalDetails

type UserPersonalDetails struct {
	FirstName    string `json:"firstName,omitempty"`
	MiddleName   string `json:"middleName,omitempty"`
	LastName     string `json:"lastName,omitempty"`
	Organization string `json:"organization,omitempty"`
	Department   string `json:"department,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL