auth_serialize.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package pogs
  2. import (
  3. "context"
  4. "github.com/cloudflare/cloudflared/tunnelrpc"
  5. "zombiezen.com/go/capnproto2/pogs"
  6. "zombiezen.com/go/capnproto2/server"
  7. )
  8. func (i TunnelServer_PogsImpl) Authenticate(p tunnelrpc.TunnelServer_authenticate) error {
  9. originCert, err := p.Params.OriginCert()
  10. if err != nil {
  11. return err
  12. }
  13. hostname, err := p.Params.Hostname()
  14. if err != nil {
  15. return err
  16. }
  17. options, err := p.Params.Options()
  18. if err != nil {
  19. return err
  20. }
  21. pogsOptions, err := UnmarshalRegistrationOptions(options)
  22. if err != nil {
  23. return err
  24. }
  25. server.Ack(p.Options)
  26. resp, err := i.impl.Authenticate(p.Ctx, originCert, hostname, pogsOptions)
  27. if err != nil {
  28. return err
  29. }
  30. result, err := p.Results.NewResult()
  31. if err != nil {
  32. return err
  33. }
  34. return MarshalAuthenticateResponse(result, resp)
  35. }
  36. func MarshalAuthenticateResponse(s tunnelrpc.AuthenticateResponse, p *AuthenticateResponse) error {
  37. return pogs.Insert(tunnelrpc.AuthenticateResponse_TypeID, s.Struct, p)
  38. }
  39. func (c TunnelServer_PogsClient) Authenticate(ctx context.Context, originCert []byte, hostname string, options *RegistrationOptions) (*AuthenticateResponse, error) {
  40. client := tunnelrpc.TunnelServer{Client: c.Client}
  41. promise := client.Authenticate(ctx, func(p tunnelrpc.TunnelServer_authenticate_Params) error {
  42. err := p.SetOriginCert(originCert)
  43. if err != nil {
  44. return err
  45. }
  46. err = p.SetHostname(hostname)
  47. if err != nil {
  48. return err
  49. }
  50. registrationOptions, err := p.NewOptions()
  51. if err != nil {
  52. return err
  53. }
  54. err = MarshalRegistrationOptions(registrationOptions, options)
  55. if err != nil {
  56. return err
  57. }
  58. return nil
  59. })
  60. retval, err := promise.Result().Struct()
  61. if err != nil {
  62. return nil, err
  63. }
  64. return UnmarshalAuthenticateResponse(retval)
  65. }
  66. func UnmarshalAuthenticateResponse(s tunnelrpc.AuthenticateResponse) (*AuthenticateResponse, error) {
  67. p := new(AuthenticateResponse)
  68. err := pogs.Extract(p, tunnelrpc.AuthenticateResponse_TypeID, s.Struct)
  69. return p, err
  70. }