From 0f1f2b708aee43d637e1e7af057887f77bd6c0c9 Mon Sep 17 00:00:00 2001 From: Ivar Derksen Date: Fri, 25 Oct 2019 15:39:34 +0200 Subject: [PATCH] Fix for keyshare enrollment missing error being overruled by failure error --- irmaclient/session.go | 12 ++++++------ messages.go | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/irmaclient/session.go b/irmaclient/session.go index 0857ad7..41ec826 100644 --- a/irmaclient/session.go +++ b/irmaclient/session.go @@ -533,16 +533,16 @@ func (session *session) getProof() (interface{}, error) { // checkKeyshareEnrollment checks if we are enrolled into all involved keyshare servers, // and aborts the session if not -func (session *session) checkKeyshareEnrollment() bool { +func (session *session) checkKeyshareEnrollment() error { for id := range session.request.Identifiers().SchemeManagers { distributed := session.client.Configuration.SchemeManagers[id].Distributed() _, enrolled := session.client.keyshareServers[id] if distributed && !enrolled { session.Handler.KeyshareEnrollmentMissing(id) - return false + return &irma.SessionError{ErrorType: irma.ErrorKeyshare, Handled: true} } } - return true + return nil } func (session *session) checkAndUpdateConfiguration() error { @@ -561,8 +561,8 @@ func (session *session) checkAndUpdateConfiguration() error { } // Check if we are enrolled into all involved keyshare servers - if !session.checkKeyshareEnrollment() { - return &irma.SessionError{ErrorType: irma.ErrorKeyshare} + if err = session.checkKeyshareEnrollment(); err != nil { + return err } if err = session.request.Disclosure().Disclose.Validate(session.client.Configuration); err != nil { @@ -643,7 +643,7 @@ func (session *session) delete() bool { } func (session *session) fail(err *irma.SessionError) { - if session.delete() { + if session.delete() && !err.Handled { err.Err = errors.Wrap(err.Err, 0) session.Handler.Failure(err) } diff --git a/messages.go b/messages.go index f31a6a3..10f2e28 100644 --- a/messages.go +++ b/messages.go @@ -104,6 +104,7 @@ type SessionError struct { Info string RemoteError *RemoteError RemoteStatus int + Handled bool // set to true when error status is already communicated to session handler } // RemoteError is an error message returned by the API server on errors. -- GitLab