loadConn.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package goStrongswanVici
  2. import (
  3. "crypto"
  4. "crypto/x509"
  5. "encoding/pem"
  6. "fmt"
  7. )
  8. type Connection struct {
  9. ConnConf map[string]IKEConf `json:"connections"`
  10. }
  11. type IKEConf struct {
  12. LocalAddrs []string `json:"local_addrs"`
  13. RemoteAddrs []string `json:"remote_addrs,omitempty"`
  14. LocalPort string `json:"local_port,omitempty"`
  15. RemotePort string `json:"remote_port,omitempty"`
  16. Proposals []string `json:"proposals,omitempty"`
  17. Vips []string `json:"vips,omitempty"`
  18. Version string `json:"version"` //1 for ikev1, 0 for ikev1 & ikev2
  19. Encap string `json:"encap"` //yes,no
  20. KeyingTries string `json:"keyingtries"`
  21. RekeyTime string `json:"rekey_time"`
  22. DPDDelay string `json:"dpd_delay,omitempty"`
  23. LocalAuth AuthConf `json:"local"`
  24. RemoteAuth AuthConf `json:"remote"`
  25. Pools []string `json:"pools,omitempty"`
  26. Children map[string]ChildSAConf `json:"children"`
  27. Mobike string `json:"mobike,omitempty"`
  28. }
  29. type AuthConf struct {
  30. ID string `json:"id"`
  31. Round string `json:"round,omitempty"`
  32. AuthMethod string `json:"auth"` // (psk|pubkey)
  33. EAP_ID string `json:"eap_id,omitempty"`
  34. PubKeys []string `json:"pubkeys,omitempty"` // PEM encoded public keys
  35. }
  36. type ChildSAConf struct {
  37. Local_ts []string `json:"local_ts"`
  38. Remote_ts []string `json:"remote_ts"`
  39. ESPProposals []string `json:"esp_proposals,omitempty"` //aes128-sha1_modp1024
  40. StartAction string `json:"start_action"` //none,trap,start
  41. CloseAction string `json:"close_action"`
  42. ReqID string `json:"reqid,omitempty"`
  43. RekeyTime string `json:"rekey_time"`
  44. ReplayWindow string `json:"replay_window,omitempty"`
  45. Mode string `json:"mode"`
  46. InstallPolicy string `json:"policies"`
  47. UpDown string `json:"updown,omitempty"`
  48. Priority string `json:"priority,omitempty"`
  49. MarkIn string `json:"mark_in,omitempty"`
  50. MarkOut string `json:"mark_out,omitempty"`
  51. DpdAction string `json:"dpd_action,omitempty"`
  52. LifeTime string `json:"life_time,omitempty"`
  53. }
  54. // SetPublicKeys is a helper method that converts Public Keys to x509 PKIX PEM format
  55. // Supported formats are those implemented by x509.MarshalPKIXPublicKey
  56. func (a *AuthConf) SetPublicKeys(keys []crypto.PublicKey) error {
  57. var newKeys []string
  58. for _, key := range keys {
  59. asn1Bytes, err := x509.MarshalPKIXPublicKey(key)
  60. if err != nil {
  61. return fmt.Errorf("Error marshaling key: %v", err)
  62. }
  63. pemKey := pem.Block{
  64. Type: "PUBLIC KEY",
  65. Bytes: asn1Bytes,
  66. }
  67. pemBytes := pem.EncodeToMemory(&pemKey)
  68. newKeys = append(newKeys, string(pemBytes))
  69. }
  70. a.PubKeys = newKeys
  71. return nil
  72. }
  73. func (c *ClientConn) LoadConn(conn *map[string]IKEConf) error {
  74. requestMap := &map[string]interface{}{}
  75. err := ConvertToGeneral(conn, requestMap)
  76. if err != nil {
  77. return fmt.Errorf("error creating request: %v", err)
  78. }
  79. msg, err := c.Request("load-conn", *requestMap)
  80. if msg["success"] != "yes" {
  81. return fmt.Errorf("unsuccessful LoadConn: %v", msg["errmsg"])
  82. }
  83. return nil
  84. }