mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-04 01:09:36 +02:00
directory: save IDP errors to databroker, put event handling in dedicated package (#2957)
This commit is contained in:
parent
2f328e7de0
commit
64ee7eca5c
13 changed files with 451 additions and 83 deletions
|
@ -17,6 +17,7 @@ import (
|
|||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
"github.com/pomerium/pomerium/internal/directory"
|
||||
"github.com/pomerium/pomerium/internal/events"
|
||||
"github.com/pomerium/pomerium/internal/identity/identity"
|
||||
"github.com/pomerium/pomerium/internal/log"
|
||||
"github.com/pomerium/pomerium/internal/scheduler"
|
||||
|
@ -216,6 +217,7 @@ func (mgr *Manager) refreshDirectoryUserGroups(ctx context.Context) (nextRefresh
|
|||
defer clearTimeout()
|
||||
|
||||
directoryGroups, directoryUsers, err := mgr.cfg.Load().directory.UserGroups(ctx)
|
||||
mgr.maybeDispatchErrorEvent(err)
|
||||
metrics.RecordIdentityManagerUserGroupRefresh(ctx, err)
|
||||
if err != nil {
|
||||
msg := "failed to refresh directory users and groups"
|
||||
|
@ -405,6 +407,7 @@ func (mgr *Manager) refreshSession(ctx context.Context, userID, sessionID string
|
|||
}
|
||||
|
||||
newToken, err := mgr.cfg.Load().authenticator.Refresh(ctx, FromOAuthToken(s.OauthToken), &s)
|
||||
mgr.maybeDispatchErrorEvent(err)
|
||||
metrics.RecordIdentityManagerSessionRefresh(ctx, err)
|
||||
if isTemporaryError(err) {
|
||||
log.Error(ctx).Err(err).
|
||||
|
@ -423,6 +426,7 @@ func (mgr *Manager) refreshSession(ctx context.Context, userID, sessionID string
|
|||
s.OauthToken = ToOAuthToken(newToken)
|
||||
|
||||
err = mgr.cfg.Load().authenticator.UpdateUserInfo(ctx, FromOAuthToken(s.OauthToken), &s)
|
||||
mgr.maybeDispatchErrorEvent(err)
|
||||
if isTemporaryError(err) {
|
||||
log.Error(ctx).Err(err).
|
||||
Str("user_id", s.GetUserId()).
|
||||
|
@ -474,6 +478,7 @@ func (mgr *Manager) refreshUser(ctx context.Context, userID string) {
|
|||
}
|
||||
|
||||
err := mgr.cfg.Load().authenticator.UpdateUserInfo(ctx, FromOAuthToken(s.OauthToken), &u)
|
||||
mgr.maybeDispatchErrorEvent(err)
|
||||
metrics.RecordIdentityManagerUserRefresh(ctx, err)
|
||||
if isTemporaryError(err) {
|
||||
log.Error(ctx).Err(err).
|
||||
|
@ -601,6 +606,18 @@ func (mgr *Manager) reset() {
|
|||
mgr.users = userCollection{BTree: btree.New(8)}
|
||||
}
|
||||
|
||||
// maybeDispatchErrorEvent dispatches an error event if err is not nil
|
||||
func (mgr *Manager) maybeDispatchErrorEvent(err error) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
events.Dispatch(&events.IDPErrorEvent{
|
||||
Time: timestamppb.Now(),
|
||||
Message: err.Error(),
|
||||
})
|
||||
}
|
||||
|
||||
func isTemporaryError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue