Skip to content

Commit e62387f

Browse files
committed
Fix eventing mess in recover/remember
1 parent e850577 commit e62387f

File tree

6 files changed

+54
-3
lines changed

6 files changed

+54
-3
lines changed

CHANGELOG.md

+17
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,23 @@
33
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
44
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
55

6+
## [3.0.3] - 2021-02-14
7+
8+
### Fixed
9+
10+
- Fix that EventRecoverStart/EventRecoverEnd were not being called.
11+
12+
### Changed
13+
14+
- Change Remember module to listen to `After(EventRecoverEnd)` in order to
15+
invoke its handler to delete the remember cookie & tokens. This previously
16+
was not being called so it could be viewed as new behavior though this only
17+
applies if you are using both `remember` and `recover` modules.
18+
19+
### Deprecate
20+
21+
- EventPasswordReset is used nowhere and is no longer intended to be used.
22+
623
## [3.0.2] - 2020-09-17
724

825
### Fixed

authboss.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ func (a *Authboss) Init(modulesToLoad ...string) error {
5959
// In addition to that, it also invalidates any remember me tokens, if the
6060
// storer supports that kind of operation.
6161
//
62-
// If it's also desirable to log the user out, use:
63-
// authboss.DelKnown(Session|Cookie)
62+
// Note that it's best practice after having called this method to also delete
63+
// all the user's logged in sessions. The CURRENT logged in session can be
64+
// deleted with `authboss.DelKnown(Session|Cookie)` but to delete ALL logged
65+
// in sessions for a user requires special mechanisms not currently provided
66+
// by authboss.
6467
func (a *Authboss) UpdatePassword(ctx context.Context, user AuthableUser, newPassword string) error {
6568
pass, err := bcrypt.GenerateFromPassword([]byte(newPassword), a.Config.Modules.BCryptCost)
6669
if err != nil {

events.go

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const (
2727
EventRecoverEnd
2828
EventGetUser
2929
EventGetUserSession
30+
// Deprecated: EventPasswordReset is used nowhere
3031
EventPasswordReset
3132
EventLogout
3233
)

go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
22
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
3+
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
34
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
45
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
57
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
68
github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk=
79
github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI=
810
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
11+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
912
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
13+
github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
1014
github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
1115
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
1216
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=

recover/recover.go

+26
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ func (r *Recover) StartPost(w http.ResponseWriter, req *http.Request) error {
105105

106106
ru := authboss.MustBeRecoverable(user)
107107

108+
req = req.WithContext(context.WithValue(req.Context(), authboss.CTXKeyUser, user))
109+
handled, err := r.Authboss.Events.FireBefore(authboss.EventRecoverStart, w, req)
110+
if err != nil {
111+
return err
112+
} else if handled {
113+
return nil
114+
}
115+
108116
selector, verifier, token, err := GenerateRecoverCreds()
109117
if err != nil {
110118
return err
@@ -124,6 +132,11 @@ func (r *Recover) StartPost(w http.ResponseWriter, req *http.Request) error {
124132
go r.SendRecoverEmail(req.Context(), ru.GetEmail(), token)
125133
}
126134

135+
_, err = r.Authboss.Events.FireAfter(authboss.EventRecoverStart, w, req)
136+
if err != nil {
137+
return err
138+
}
139+
127140
logger.Infof("user %s password recovery initiated", ru.GetPID())
128141
ro := authboss.RedirectOptions{
129142
Code: http.StatusTemporaryRedirect,
@@ -242,6 +255,14 @@ func (r *Recover) EndPost(w http.ResponseWriter, req *http.Request) error {
242255
return r.invalidToken(PageRecoverEnd, w, req)
243256
}
244257

258+
req = req.WithContext(context.WithValue(req.Context(), authboss.CTXKeyUser, user))
259+
handled, err := r.Authboss.Events.FireBefore(authboss.EventRecoverEnd, w, req)
260+
if err != nil {
261+
return err
262+
} else if handled {
263+
return nil
264+
}
265+
245266
pass, err := bcrypt.GenerateFromPassword([]byte(password), r.Authboss.Config.Modules.BCryptCost)
246267
if err != nil {
247268
return err
@@ -262,6 +283,11 @@ func (r *Recover) EndPost(w http.ResponseWriter, req *http.Request) error {
262283
successMsg += " and logged in"
263284
}
264285

286+
_, err = r.Authboss.Events.FireAfter(authboss.EventRecoverEnd, w, req)
287+
if err != nil {
288+
return err
289+
}
290+
265291
ro := authboss.RedirectOptions{
266292
Code: http.StatusTemporaryRedirect,
267293
RedirectPath: r.Authboss.Config.Paths.RecoverOK,

remember/remember.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (r *Remember) Init(ab *authboss.Authboss) error {
3333

3434
r.Events.After(authboss.EventAuth, r.RememberAfterAuth)
3535
r.Events.After(authboss.EventOAuth2, r.RememberAfterAuth)
36-
r.Events.After(authboss.EventPasswordReset, r.AfterPasswordReset)
36+
r.Events.After(authboss.EventRecoverEnd, r.AfterPasswordReset)
3737

3838
return nil
3939
}

0 commit comments

Comments
 (0)