diff --git a/reach/client/operations.go b/reach/client/operations.go index c98b675..d642e67 100644 --- a/reach/client/operations.go +++ b/reach/client/operations.go @@ -222,4 +222,19 @@ func (c *Client) GetModemConfiguration(ctx context.Context) (any, error) { return config, nil } +// GetModemConfiguration implements protocol.Operations. +func (c *Client) GetModemAuthentication(ctx context.Context) (any, error) { + _, ops, err := c.getProtocol(ctx) + if err != nil { + return nil, errors.WithStack(err) + } + + config, err := ops.GetModemAuthentication(ctx) + if err != nil { + return nil, errors.WithStack(err) + } + + return config, nil +} + var _ protocol.Operations = &Client{} 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/operations.go b/reach/client/protocol/operations.go index 8c9fe1c..551a3f9 100644 --- a/reach/client/protocol/operations.go +++ b/reach/client/protocol/operations.go @@ -64,4 +64,7 @@ type Operations interface { //GetModemConfiguration mobile data config GetModemConfiguration(ctx context.Context) (any, error) + + //GetModemAuthentication mobile data config + GetModemAuthentication(ctx context.Context) (any, error) } diff --git a/reach/client/protocol/v1/operations.go b/reach/client/protocol/v1/operations.go index 1db989a..b0792e8 100644 --- a/reach/client/protocol/v1/operations.go +++ b/reach/client/protocol/v1/operations.go @@ -400,4 +400,9 @@ func (o *Operations) GetModemConfiguration(ctx context.Context) (any, error) { return nil, protocol.ErrUnimplemented } +// Deprecated : is no longer maintained for modules in V1 +func (o *Operations) GetModemAuthentication(ctx context.Context) (any, error) { + return nil, protocol.ErrUnimplemented +} + var _ protocol.Operations = &Operations{} diff --git a/reach/client/protocol/v2/internal.go b/reach/client/protocol/v2/internal.go index 083b404..0d9c365 100644 --- a/reach/client/protocol/v2/internal.go +++ b/reach/client/protocol/v2/internal.go @@ -174,7 +174,7 @@ func (o *Operations) PostModem(ctx context.Context, config *model.ModemAuthentic return &updated, nil } -func (o *Operations) GetModem(ctx context.Context) (*model.ModemConfiguration, error) { +func (o *Operations) GetModemInfo(ctx context.Context) (*model.ModemConfiguration, error) { config := &model.ModemConfiguration{} if err := o.GetJSON("/modem/1/info", config); err != nil { @@ -183,3 +183,13 @@ func (o *Operations) GetModem(ctx context.Context) (*model.ModemConfiguration, e return config, nil } + +func (o *Operations) GetModemSettings(ctx context.Context) (*model.ModemAuthentication, error) { + config := &model.ModemAuthentication{} + + if err := o.GetJSON("/modem/1/settings", config); err != nil { + return nil, errors.WithStack(err) + } + + return config, nil +} 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..18c2790 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 { @@ -388,9 +397,20 @@ func (o *Operations) SetModem(ctx context.Context, funcs ...protocol.SetModemOpt return nil } -// SetModem implements protocol.Operations. +// GetModem implements protocol.Operations. func (o *Operations) GetModemConfiguration(ctx context.Context) (any, error) { - config, err := o.GetModem(ctx) + config, err := o.GetModemInfo(ctx) + if err != nil { + return nil, errors.WithStack(err) + } + + return config, nil + +} + +// GetModemSettings implements protocol.Operations. +func (o *Operations) GetModemAuthentication(ctx context.Context) (any, error) { + config, err := o.GetModemSettings(ctx) if err != nil { return nil, errors.WithStack(err) }