File: account_user_grants.go

package info (click to toggle)
golang-github-linode-linodego 1.55.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,112 kB
  • sloc: makefile: 96; sh: 52; python: 24
file content (83 lines) | stat: -rw-r--r-- 3,388 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package linodego

import (
	"context"
)

type GrantPermissionLevel string

const (
	AccessLevelReadOnly  GrantPermissionLevel = "read_only"
	AccessLevelReadWrite GrantPermissionLevel = "read_write"
)

type GlobalUserGrants struct {
	AccountAccess        *GrantPermissionLevel `json:"account_access"`
	AddDatabases         bool                  `json:"add_databases"`
	AddDomains           bool                  `json:"add_domains"`
	AddFirewalls         bool                  `json:"add_firewalls"`
	AddImages            bool                  `json:"add_images"`
	AddLinodes           bool                  `json:"add_linodes"`
	AddLongview          bool                  `json:"add_longview"`
	AddNodeBalancers     bool                  `json:"add_nodebalancers"`
	AddPlacementGroups   bool                  `json:"add_placement_groups"`
	AddStackScripts      bool                  `json:"add_stackscripts"`
	AddVolumes           bool                  `json:"add_volumes"`
	AddVPCs              bool                  `json:"add_vpcs"`
	CancelAccount        bool                  `json:"cancel_account"`
	ChildAccountAccess   bool                  `json:"child_account_access"`
	LongviewSubscription bool                  `json:"longview_subscription"`
}

type EntityUserGrant struct {
	ID          int                   `json:"id"`
	Permissions *GrantPermissionLevel `json:"permissions"`
}

type GrantedEntity struct {
	ID          int                  `json:"id"`
	Label       string               `json:"label"`
	Permissions GrantPermissionLevel `json:"permissions"`
}

type UserGrants struct {
	Database       []GrantedEntity `json:"database"`
	Domain         []GrantedEntity `json:"domain"`
	Firewall       []GrantedEntity `json:"firewall"`
	Image          []GrantedEntity `json:"image"`
	Linode         []GrantedEntity `json:"linode"`
	Longview       []GrantedEntity `json:"longview"`
	NodeBalancer   []GrantedEntity `json:"nodebalancer"`
	PlacementGroup []GrantedEntity `json:"placement_group"`
	StackScript    []GrantedEntity `json:"stackscript"`
	Volume         []GrantedEntity `json:"volume"`
	VPC            []GrantedEntity `json:"vpc"`

	Global GlobalUserGrants `json:"global"`
}

type UserGrantsUpdateOptions struct {
	Database       []GrantedEntity   `json:"database,omitempty"`
	Domain         []EntityUserGrant `json:"domain,omitempty"`
	Firewall       []EntityUserGrant `json:"firewall,omitempty"`
	Image          []EntityUserGrant `json:"image,omitempty"`
	Linode         []EntityUserGrant `json:"linode,omitempty"`
	Longview       []EntityUserGrant `json:"longview,omitempty"`
	NodeBalancer   []EntityUserGrant `json:"nodebalancer,omitempty"`
	PlacementGroup []EntityUserGrant `json:"placement_group,omitempty"`
	StackScript    []EntityUserGrant `json:"stackscript,omitempty"`
	Volume         []EntityUserGrant `json:"volume,omitempty"`
	VPC            []EntityUserGrant `json:"vpc,omitempty"`

	Global GlobalUserGrants `json:"global"`
}

func (c *Client) GetUserGrants(ctx context.Context, username string) (*UserGrants, error) {
	e := formatAPIPath("account/users/%s/grants", username)
	return doGETRequest[UserGrants](ctx, c, e)
}

func (c *Client) UpdateUserGrants(ctx context.Context, username string, opts UserGrantsUpdateOptions) (*UserGrants, error) {
	e := formatAPIPath("account/users/%s/grants", username)
	return doPUTRequest[UserGrants](ctx, c, e, opts)
}