From d36ccf4522bd328cbf2c50cc2d5b7008609c504b Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Sun, 29 Nov 2020 10:14:44 +0100 Subject: [PATCH] Add membership management basics --- system/scim/user_handler.go | 23 ++++++++++++++++++----- system/scim/user_payloads.go | 6 ++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/system/scim/user_handler.go b/system/scim/user_handler.go index b8877a002..17c0cb085 100644 --- a/system/scim/user_handler.go +++ b/system/scim/user_handler.go @@ -14,8 +14,9 @@ import ( type ( usersHandler struct { - svc service.UserService - sec getSecurityContextFn + svc service.UserService + rleSvc service.RoleService + sec getSecurityContextFn } ) @@ -57,7 +58,8 @@ func (h usersHandler) create(w http.ResponseWriter, r *http.Request) { func (h usersHandler) createFromJSON(ctx context.Context, j io.Reader) (u *types.User, err error) { var ( - svc = h.svc.With(ctx) + svc = h.svc.With(ctx) + //roles = h.rleSvc.With(ctx) payload = &userResourceRequest{} ) @@ -92,10 +94,21 @@ func (h usersHandler) createFromJSON(ctx context.Context, j io.Reader) (u *types payload.applyTo(u) if u.ID > 0 { - return svc.Update(u) + u, err = svc.Update(u) } else { - return svc.Create(u) + u, err = svc.Create(u) } + + if err != nil { + return + } + + if payload.Groups != nil { + // remove existing, add new + // @todo + } + + return u, nil } func (h usersHandler) replace(w http.ResponseWriter, r *http.Request) { diff --git a/system/scim/user_payloads.go b/system/scim/user_payloads.go index 2b94f2f91..6f64901e8 100644 --- a/system/scim/user_payloads.go +++ b/system/scim/user_payloads.go @@ -26,6 +26,10 @@ type ( Formatted string `json:"formatted"` } + userGroupMembershipRequest struct { + Value string `json:"value"` + } + userResourceResponse struct { Schemas []string `json:"schemas"` Meta *metaResponse `json:"meta,omitempty"` @@ -46,6 +50,8 @@ type ( Password *string `json:"password,omitempty"` Name *userNameResponse `json:"name"` Emails emailsResponse `json:"emails,omitempty"` + + Groups []*userGroupMembershipRequest `json:"groups,omitempty"` } )