server
server copied to clipboard
Add to Authenticate more options
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 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 👍🏻
An enhanced auth mechanism will delivered in the new v2.0.0 release that will satisfy this request
@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?
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.