diff --git a/reach/client/protocol/modem.go b/reach/client/protocol/modem.go index a58ca5d..93cb60a 100644 --- a/reach/client/protocol/modem.go +++ b/reach/client/protocol/modem.go @@ -5,6 +5,7 @@ type SetModemOptions struct { Type *string Username *string Password *string + Pin *string } type SetModemOptionsFunc func(opts *SetModemOptions) @@ -34,8 +35,15 @@ func WithUsername(value string) SetModemOptionsFunc { opts.Username = &value } } + func WithPassword(value string) SetModemOptionsFunc { return func(opts *SetModemOptions) { opts.Password = &value } } + +func WithPin(value string) SetModemOptionsFunc { + return func(opts *SetModemOptions) { + opts.Pin = &value + } +} diff --git a/reach/client/protocol/v2/model/modem.go b/reach/client/protocol/v2/model/modem.go index 805e727..f529fd2 100644 --- a/reach/client/protocol/v2/model/modem.go +++ b/reach/client/protocol/v2/model/modem.go @@ -3,12 +3,13 @@ package model // type : null, pap_chap, pap, chap // if type selected, username and password are mandatory type ModemAuthentication struct { - Authentication struct { - Apn string `json:"apn"` + Authentication *struct { + Apn string `json:"apn,omitempty"` Type string `json:"type,omitempty"` Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` - } `json:"authentication"` + } `json:"authentication,omitempty"` + Pin string `json:"pin,omitempty"` } type ModemConfiguration struct { diff --git a/reach/client/protocol/v2/operations.go b/reach/client/protocol/v2/operations.go index 3522bba..7c5f259 100644 --- a/reach/client/protocol/v2/operations.go +++ b/reach/client/protocol/v2/operations.go @@ -366,20 +366,29 @@ func (o *Operations) SetBaseCorrections(ctx context.Context, funcs ...protocol.S func (o *Operations) SetModem(ctx context.Context, funcs ...protocol.SetModemOptionsFunc) error { opts := protocol.NewSetModemOptions(funcs...) modem := &model.ModemAuthentication{} - if opts.Apn != nil { - modem.Authentication.Apn = *opts.Apn + if opts.Pin != nil { + modem.Pin = *opts.Pin } - if opts.Type != nil { - modem.Authentication.Type = *opts.Type - } - - if opts.Password != nil { - modem.Authentication.Password = *opts.Password - } - - if opts.Username != nil { - modem.Authentication.Username = *opts.Username + if opts.Apn != nil || opts.Type != nil || opts.Username != nil || opts.Password != nil { + modem.Authentication = &struct { + Apn string `json:"apn,omitempty"` + Type string `json:"type,omitempty"` + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + }{} + if opts.Apn != nil { + modem.Authentication.Apn = *opts.Apn + } + if opts.Type != nil { + modem.Authentication.Type = *opts.Type + } + if opts.Username != nil { + modem.Authentication.Username = *opts.Username + } + if opts.Password != nil { + modem.Authentication.Password = *opts.Password + } } if _, err := o.PostModem(ctx, modem); err != nil {