client.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "flag"
  6. "fmt"
  7. "os"
  8. "github.com/cloudflare/cfssl/transport"
  9. "github.com/cloudflare/cfssl/transport/core"
  10. "github.com/cloudflare/cfssl/transport/example/exlib"
  11. )
  12. // maclient is a mutual-authentication client, meant to demonstrate
  13. // using the client-side mutual authentication side of the transport
  14. // package.
  15. var messages = []string{"hello world", "hello", "world"}
  16. func main() {
  17. var addr, conf string
  18. flag.StringVar(&addr, "a", "127.0.0.1:9876", "`address` of server")
  19. flag.StringVar(&conf, "f", "client.json", "config `file` to use")
  20. flag.Parse()
  21. var id = new(core.Identity)
  22. data, err := os.ReadFile(conf)
  23. if err != nil {
  24. exlib.Err(1, err, "reading config file")
  25. }
  26. err = json.Unmarshal(data, id)
  27. if err != nil {
  28. exlib.Err(1, err, "parsing config file")
  29. }
  30. tr, err := transport.New(exlib.Before, id)
  31. if err != nil {
  32. exlib.Err(1, err, "creating transport")
  33. }
  34. conn, err := transport.Dial(addr, tr)
  35. if err != nil {
  36. exlib.Err(1, err, "dialing %s", addr)
  37. }
  38. defer conn.Close()
  39. for _, msg := range messages {
  40. if err = exlib.Pack(conn, []byte(msg)); err != nil {
  41. exlib.Err(1, err, "sending message")
  42. }
  43. var resp []byte
  44. resp, err = exlib.Unpack(conn)
  45. if err != nil {
  46. exlib.Err(1, err, "receiving message")
  47. }
  48. if !bytes.Equal(resp, []byte("OK")) {
  49. exlib.Errx(1, "server didn't send an OK message; received '%s'", resp)
  50. }
  51. }
  52. err = exlib.Pack(conn, []byte{})
  53. if err != nil {
  54. exlib.Err(1, err, "sending shutdown message failed")
  55. }
  56. fmt.Println("OK")
  57. }