@@ -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.
2031type 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+ }
0 commit comments