server icon indicating copy to clipboard operation
server copied to clipboard

Add to Authenticate more options

Open vitalvas opened this issue 1 year ago • 1 comments

Hi.

Please, add to auth Authenticate interface more options.

I think Authenticate interface can be changed to next:

type AuthRequest struct {
	Remote   string
	ClientID string
	User     []byte
	Password []byte
}

type Controller interface {
	Authenticate(req AuthRequest) bool
...
}

vitalvas avatar Sep 12 '22 12:09 vitalvas

@vitalvas Given that Remote and ClientID are both fields of events.Client, I am tempted to pass that directly to both Authenticate and ACL 🤔

The next release will be v1.4.0 and dealing with #101, so I will make this change then 👍🏻

mochi-co avatar Sep 13 '22 08:09 mochi-co

An enhanced auth mechanism will delivered in the new v2.0.0 release that will satisfy this request

mochi-co avatar Sep 28 '22 21:09 mochi-co

@mochi-co I discovered your project recently and it looks very neat!

Regarding the Authenticate interface, it could probably be replaced with a function:

// AuthenticateFunc should return ErrAuthBadUsernameOrPassword or ErrAuthNotauthorized
// to reply with a CONNACK and terminate. Any other non-nil error will immediately terminate the connection.
type AuthenticateFunc func(authRequest) (ACL, error)

type ACL interface {
	CanSubscribe(topic string) bool
	CanPublish(topic string) bool
}

var ErrAuthBadUsernameOrPassword = errors.New("bad user name or password")
var ErrAuthNotauthorized = errors.New("not authorized")

Regarding the v2, do you plan to share a branch or some alpha version?

oliverpool avatar Oct 03 '22 06:10 oliverpool

Thanks @oliverpool! For v2 I am hoping to issue a pre-release in the near (but indeterminate) future. It's a fairly substantial rewrite for stability, performance, and developer flexibility. I am also currently looking at whether it is feasible to implement MQTT 5 as part of this release, but I need to assess the total changes required.

mochi-co avatar Oct 03 '22 17:10 mochi-co