From d322e5016790a24f5dc17f2be25521cdc30fed57 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Tue, 24 May 2022 08:51:07 +0200 Subject: [PATCH] Return "nameAlreadyExists" error properly When trying to create a user that already exist return a proper error, that clients can check for. --- extensions/graph/pkg/identity/ldap.go | 7 +++++++ extensions/graph/pkg/service/v0/users.go | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extensions/graph/pkg/identity/ldap.go b/extensions/graph/pkg/identity/ldap.go index 2541945593..c9083061f4 100644 --- a/extensions/graph/pkg/identity/ldap.go +++ b/extensions/graph/pkg/identity/ldap.go @@ -161,6 +161,13 @@ func (i *LDAP) CreateUser(ctx context.Context, user libregraph.User) (*libregrap ar.Attribute("sn", []string{sn}) if err := i.conn.Add(&ar); err != nil { + var lerr *ldap.Error + i.logger.Debug().Err(err).Msg("error adding user") + if errors.As(err, &lerr) { + if lerr.ResultCode == ldap.LDAPResultEntryAlreadyExists { + err = errorcode.New(errorcode.NameAlreadyExists, lerr.Error()) + } + } return nil, err } diff --git a/extensions/graph/pkg/service/v0/users.go b/extensions/graph/pkg/service/v0/users.go index 42a6909d71..e272bdf422 100644 --- a/extensions/graph/pkg/service/v0/users.go +++ b/extensions/graph/pkg/service/v0/users.go @@ -117,7 +117,12 @@ func (g Graph) PostUser(w http.ResponseWriter, r *http.Request) { } if u, err = g.identityBackend.CreateUser(r.Context(), *u); err != nil { - errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) + var ecErr errorcode.Error + if errors.As(err, &ecErr) { + ecErr.Render(w, r) + } else { + errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) + } return }