-
Notifications
You must be signed in to change notification settings - Fork 5
/
pairing.go
127 lines (106 loc) · 4.34 KB
/
pairing.go
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package illumioapi
import (
"encoding/json"
"fmt"
"net/url"
"strconv"
)
// PairingProfile represents a pairing profile in the Illumio PCE
type PairingProfile struct {
AllowedUsesPerKey string `json:"allowed_uses_per_key,omitempty"`
AppLabelLock bool `json:"app_label_lock"`
CreatedAt string `json:"created_at,omitempty"`
CreatedBy *CreatedBy `json:"created_by,omitempty"`
Description string `json:"description,omitempty"`
Enabled bool `json:"enabled"`
EnvLabelLock bool `json:"env_label_lock"`
ExternalDataReference string `json:"external_data_reference,omitempty"`
ExternalDataSet string `json:"external_data_set,omitempty"`
Href string `json:"href,omitempty"`
IsDefault bool `json:"is_default,omitempty"`
KeyLifespan string `json:"key_lifespan,omitempty"`
Labels []*Label `json:"labels,omitempty"`
LastPairingAt string `json:"last_pairing_at,omitempty"`
LocLabelLock bool `json:"loc_label_lock"`
LogTraffic bool `json:"log_traffic"`
LogTrafficLock bool `json:"log_traffic_lock"`
Mode string `json:"mode,omitempty"`
ModeLock bool `json:"mode_lock"`
Name string `json:"name,omitempty"`
RoleLabelLock bool `json:"role_label_lock"`
TotalUseCount int `json:"total_use_count,omitempty"`
UpdatedAt string `json:"updated_at,omitempty"`
UpdatedBy *UpdatedBy `json:"updated_by,omitempty"`
VisibilityLevel string `json:"visibility_level,omitempty"`
VisibilityLevelLock bool `json:"visibility_level_lock"`
}
// PairingKey represents a VEN pairing key
type PairingKey struct {
ActivationCode string `json:"activation_code,omitempty"`
}
// GetAllPairingProfiles gets all pairing profiles in the Illumio PCE.
func (p *PCE) GetAllPairingProfiles() ([]PairingProfile, APIResponse, error) {
// Build the API URL
apiURL, err := url.Parse("https://" + pceSanitization(p.FQDN) + ":" + strconv.Itoa(p.Port) + "/api/v2/orgs/" + strconv.Itoa(p.Org) + "/pairing_profiles")
if err != nil {
return nil, APIResponse{}, err
}
// Call the API
api, err := apicall("GET", apiURL.String(), *p, nil, false)
if err != nil {
return nil, api, err
}
// Unmarshal response to struct
var pairingProfiles []PairingProfile
json.Unmarshal([]byte(api.RespBody), &pairingProfiles)
// Check if we need to re-run with async
if len(pairingProfiles) >= 500 {
api, err = apicall("GET", apiURL.String(), *p, nil, true)
if err != nil {
return nil, api, fmt.Errorf("get all pairing profiles - %s", err)
}
// Unmarshal response to struct
var asyncPairingProfiles []PairingProfile
json.Unmarshal([]byte(api.RespBody), &asyncPairingProfiles)
return asyncPairingProfiles, api, nil
}
// Return if less than 500
return pairingProfiles, api, nil
}
// CreatePairingProfile creates a new pairing profile in the Illumio PCE.
func (p *PCE) CreatePairingProfile(pairingProfile PairingProfile) (APIResponse, error) {
// Build the API URL
apiURL, err := url.Parse("https://" + pceSanitization(p.FQDN) + ":" + strconv.Itoa(p.Port) + "/api/v2/orgs/" + strconv.Itoa(p.Org) + "/pairing_profiles")
if err != nil {
return APIResponse{}, err
}
// Create the Payload
pairProfileJSON, err := json.Marshal(pairingProfile)
if err != nil {
return APIResponse{}, err
}
api := APIResponse{ReqBody: string(pairProfileJSON)}
// Call the API
api, err = apicall("POST", apiURL.String(), *p, pairProfileJSON, false)
if err != nil {
return api, err
}
return api, nil
}
// CreatePairingKey creates a pairing key from a pairing profile.
func (p *PCE) CreatePairingKey(pairingProfile PairingProfile) (PairingKey, APIResponse, error) {
// Build the API URL
apiURL, err := url.Parse("https://" + pceSanitization(p.FQDN) + ":" + strconv.Itoa(p.Port) + "/api/v2" + pairingProfile.Href + "/pairing_key")
if err != nil {
return PairingKey{}, APIResponse{}, err
}
// Call the API
api, err := apicall("POST", apiURL.String(), *p, []byte("{}"), false)
if err != nil {
return PairingKey{}, api, err
}
// Unmarshal response to struct
var pairingKey PairingKey
json.Unmarshal([]byte(api.RespBody), &pairingKey)
return pairingKey, api, nil
}