Skip to content

Commit c49a828

Browse files
authored
Merge pull request #908 from lungiman/master
Updating API usage of IPsec tunnels
2 parents dbe8fc4 + 3ab118e commit c49a828

File tree

3 files changed

+96
-8
lines changed

3 files changed

+96
-8
lines changed

magic_transit_ipsec_tunnel.go

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,31 @@ const (
1616
errMagicTransitIPsecTunnelNotDeleted = "When trying to delete IPsec tunnel, API returned deleted: false"
1717
)
1818

19+
type RemoteIdentities struct {
20+
HexID string `json:"hex_id"`
21+
FQDNID string `json:"fqdn_id"`
22+
UserID string `json:"user_id"`
23+
}
24+
25+
// MagicTransitIPsecTunnelPskMetadata contains metadata associated with PSK.
26+
type MagicTransitIPsecTunnelPskMetadata struct {
27+
LastGeneratedOn *time.Time `json:"last_generated_on,omitempty"`
28+
}
29+
1930
// MagicTransitIPsecTunnel contains information about an IPsec tunnel.
2031
type MagicTransitIPsecTunnel struct {
21-
ID string `json:"id,omitempty"`
22-
CreatedOn *time.Time `json:"created_on,omitempty"`
23-
ModifiedOn *time.Time `json:"modified_on,omitempty"`
24-
Name string `json:"name"`
25-
CustomerEndpoint string `json:"customer_endpoint"`
26-
CloudflareEndpoint string `json:"cloudflare_endpoint"`
27-
InterfaceAddress string `json:"interface_address"`
28-
Description string `json:"description,omitempty"`
32+
ID string `json:"id,omitempty"`
33+
CreatedOn *time.Time `json:"created_on,omitempty"`
34+
ModifiedOn *time.Time `json:"modified_on,omitempty"`
35+
Name string `json:"name"`
36+
CustomerEndpoint string `json:"customer_endpoint"`
37+
CloudflareEndpoint string `json:"cloudflare_endpoint"`
38+
InterfaceAddress string `json:"interface_address"`
39+
Description string `json:"description,omitempty"`
40+
HealthCheck *MagicTransitTunnelHealthcheck `json:"health_check,omitempty"`
41+
Psk string `json:"psk,omitempty"`
42+
PskMetadata *MagicTransitIPsecTunnelPskMetadata `json:"psk_metadata,omitempty"`
43+
RemoteIdentities *RemoteIdentities `json:"remote_identities,omitempty"`
2944
}
3045

3146
// ListMagicTransitIPsecTunnelsResponse contains a response including IPsec tunnels.
@@ -67,6 +82,15 @@ type DeleteMagicTransitIPsecTunnelResponse struct {
6782
} `json:"result"`
6883
}
6984

85+
// GenerateMagicTransitIPsecTunnelPSKResponse contains a response after generating IPsec Tunnel.
86+
type GenerateMagicTransitIPsecTunnelPSKResponse struct {
87+
Response
88+
Result struct {
89+
Psk string `json:"psk"`
90+
PskMetadata *MagicTransitIPsecTunnelPskMetadata `json:"psk_metadata"`
91+
} `json:"result"`
92+
}
93+
7094
// ListMagicTransitIPsecTunnels lists all IPsec tunnels for a given account
7195
//
7296
// API reference: https://api.cloudflare.com/#magic-ipsec-tunnels-list-ipsec-tunnels
@@ -169,3 +193,22 @@ func (api *API) DeleteMagicTransitIPsecTunnel(ctx context.Context, accountID str
169193

170194
return result.Result.DeletedIPsecTunnel, nil
171195
}
196+
197+
// GenerateMagicTransitIPsecTunnelPSK generates a pre shared key (psk) for an IPsec tunnel
198+
//
199+
// API reference: https://api.cloudflare.com/#magic-ipsec-tunnels-generate-pre-shared-key-psk-for-ipsec-tunnels
200+
func (api *API) GenerateMagicTransitIPsecTunnelPSK(ctx context.Context, accountID string, id string) (string, *MagicTransitIPsecTunnelPskMetadata, error) {
201+
uri := fmt.Sprintf("/accounts/%s/magic/ipsec_tunnels/%s/psk_generate", accountID, id)
202+
res, err := api.makeRequestContext(ctx, http.MethodPost, uri, nil)
203+
204+
if err != nil {
205+
return "", nil, err
206+
}
207+
208+
result := GenerateMagicTransitIPsecTunnelPSKResponse{}
209+
if err := json.Unmarshal(res, &result); err != nil {
210+
return "", nil, errors.Wrap(err, errUnmarshalError)
211+
}
212+
213+
return result.Result.Psk, result.Result.PskMetadata, nil
214+
}

magic_transit_ipsec_tunnel_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,40 @@ func TestDeleteMagicTransitIPsecTunnel(t *testing.T) {
257257
assert.Equal(t, want, actual)
258258
}
259259
}
260+
261+
func TestMagicTransitIPsecTunnelGeneratePSK(t *testing.T) {
262+
setup()
263+
defer teardown()
264+
265+
handler := func(w http.ResponseWriter, r *http.Request) {
266+
assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
267+
w.Header().Set("content-type", "application/json")
268+
fmt.Fprint(w, `{
269+
"success": true,
270+
"errors": [],
271+
"messages": [],
272+
"result": {
273+
"psk": "itworks",
274+
"psk_metadata": {
275+
"last_generated_on": "2017-06-14T05:20:00Z"
276+
}
277+
}
278+
}`)
279+
}
280+
281+
mux.HandleFunc("/accounts/"+testAccountID+"/magic/ipsec_tunnels/c4a7362d577a6c3019a474fd6f485821/psk_generate", handler)
282+
283+
lastGeneratedOn, _ := time.Parse(time.RFC3339, "2017-06-14T05:20:00Z")
284+
285+
want := MagicTransitIPsecTunnelPskMetadata{
286+
LastGeneratedOn: &lastGeneratedOn,
287+
}
288+
289+
want_psk := "itworks"
290+
291+
psk, actual, err := client.GenerateMagicTransitIPsecTunnelPSK(context.Background(), testAccountID, "c4a7362d577a6c3019a474fd6f485821")
292+
if assert.NoError(t, err) {
293+
assert.Equal(t, want, *actual)
294+
assert.Equal(t, want_psk, psk)
295+
}
296+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package cloudflare
2+
3+
// MagicTransitTunnelHealthcheck contains information about a tunnel health check.
4+
type MagicTransitTunnelHealthcheck struct {
5+
Enabled bool `json:"enabled"`
6+
Target string `json:"target,omitempty"`
7+
Type string `json:"type,omitempty"`
8+
}

0 commit comments

Comments
 (0)