From c0bcc538cc83507b815e5402d9ac3a04a42b7c04 Mon Sep 17 00:00:00 2001 From: pkulik0 <70904851+pkulik0@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:10:37 +0200 Subject: [PATCH] Split GetGroup facade into ByName and ByUUID --- internal/jujuapi/access_control.go | 35 ++++++++++++++++--------- internal/jujuapi/access_control_test.go | 9 ++++--- internal/jujuapi/jimm.go | 6 +++-- pkg/api/client.go | 13 ++++++--- pkg/api/params/params.go | 8 ++++-- 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/internal/jujuapi/access_control.go b/internal/jujuapi/access_control.go index f646f1cb7..0b1f6ce5a 100644 --- a/internal/jujuapi/access_control.go +++ b/internal/jujuapi/access_control.go @@ -59,20 +59,29 @@ func (r *controllerRoot) AddGroup(ctx context.Context, req apiparams.AddGroupReq return resp, nil } -// GetGroup returns group information based on a UUID or name. -func (r *controllerRoot) GetGroup(ctx context.Context, req apiparams.GetGroupRequest) (apiparams.Group, error) { - const op = errors.Op("jujuapi.GetGroup") - - var groupEntry *dbmodel.GroupEntry - var err error - switch { - case req.UUID != "": - groupEntry, err = r.jimm.GetGroupByUUID(ctx, r.user, req.UUID) - case req.Name != "": - groupEntry, err = r.jimm.GetGroupByName(ctx, r.user, req.Name) - default: - return apiparams.Group{}, errors.E(op, errors.CodeBadRequest, "invalid GetGroup request") +// GetGroupByUUID returns group information based on a UUID. +func (r *controllerRoot) GetGroupByUUID(ctx context.Context, req apiparams.GetGroupByUUIDRequest) (apiparams.Group, error) { + const op = errors.Op("jujuapi.GetGroupByUUID") + + groupEntry, err := r.jimm.GetGroupByUUID(ctx, r.user, req.UUID) + if err != nil { + zapctx.Error(ctx, "failed to get group", zaputil.Error(err)) + return apiparams.Group{}, errors.E(op, err) } + + return apiparams.Group{ + UUID: groupEntry.UUID, + Name: groupEntry.Name, + CreatedAt: groupEntry.CreatedAt.Format(time.RFC3339), + UpdatedAt: groupEntry.UpdatedAt.Format(time.RFC3339), + }, nil +} + +// GetGroupByName returns group information based on a name. +func (r *controllerRoot) GetGroupByName(ctx context.Context, req apiparams.GetGroupByNameRequest) (apiparams.Group, error) { + const op = errors.Op("jujuapi.GetGroupByName") + + groupEntry, err := r.jimm.GetGroupByName(ctx, r.user, req.Name) if err != nil { zapctx.Error(ctx, "failed to get group", zaputil.Error(err)) return apiparams.Group{}, errors.E(op, err) diff --git a/internal/jujuapi/access_control_test.go b/internal/jujuapi/access_control_test.go index f5bf58f4e..4823100f4 100644 --- a/internal/jujuapi/access_control_test.go +++ b/internal/jujuapi/access_control_test.go @@ -70,15 +70,18 @@ func (s *accessControlSuite) TestGetGroup(c *gc.C) { created, err := client.AddGroup(&apiparams.AddGroupRequest{Name: "test-group"}) c.Assert(err, jc.ErrorIsNil) - retrievedUuid, err := client.GetGroup(&apiparams.GetGroupRequest{UUID: created.UUID}) + retrievedUuid, err := client.GetGroupByUUID(&apiparams.GetGroupByUUIDRequest{UUID: created.UUID}) c.Assert(err, jc.ErrorIsNil) c.Assert(retrievedUuid.Group, gc.DeepEquals, created.Group) - retrievedName, err := client.GetGroup(&apiparams.GetGroupRequest{Name: created.Name}) + retrievedName, err := client.GetGroupByName(&apiparams.GetGroupByNameRequest{Name: created.Name}) c.Assert(err, jc.ErrorIsNil) c.Assert(retrievedName.Group, gc.DeepEquals, created.Group) - _, err = client.GetGroup(&apiparams.GetGroupRequest{UUID: "non-existent"}) + _, err = client.GetGroupByUUID(&apiparams.GetGroupByUUIDRequest{UUID: "non-existent"}) + c.Assert(err, gc.ErrorMatches, ".*not found.*") + + _, err = client.GetGroupByName(&apiparams.GetGroupByNameRequest{Name: "non-existent"}) c.Assert(err, gc.ErrorMatches, ".*not found.*") } diff --git a/internal/jujuapi/jimm.go b/internal/jujuapi/jimm.go index 1fad49918..1dd034462 100644 --- a/internal/jujuapi/jimm.go +++ b/internal/jujuapi/jimm.go @@ -41,7 +41,8 @@ func init() { addCloudToControllerMethod := rpc.Method(r.AddCloudToController) removeCloudFromControllerMethod := rpc.Method(r.RemoveCloudFromController) addGroupMethod := rpc.Method(r.AddGroup) - getGroupMethod := rpc.Method(r.GetGroup) + getGroupByUUIDMethod := rpc.Method(r.GetGroupByUUID) + getGroupByNameMethod := rpc.Method(r.GetGroupByName) renameGroupMethod := rpc.Method(r.RenameGroup) removeGroupMethod := rpc.Method(r.RemoveGroup) listGroupsMethod := rpc.Method(r.ListGroups) @@ -77,7 +78,8 @@ func init() { r.AddMethod("JIMM", 4, "MigrateModel", migrateModel) // JIMM ReBAC RPC r.AddMethod("JIMM", 4, "AddGroup", addGroupMethod) - r.AddMethod("JIMM", 4, "GetGroup", getGroupMethod) + r.AddMethod("JIMM", 4, "GetGroupByUUID", getGroupByUUIDMethod) + r.AddMethod("JIMM", 4, "GetGroupByName", getGroupByNameMethod) r.AddMethod("JIMM", 4, "RenameGroup", renameGroupMethod) r.AddMethod("JIMM", 4, "RemoveGroup", removeGroupMethod) r.AddMethod("JIMM", 4, "ListGroups", listGroupsMethod) diff --git a/pkg/api/client.go b/pkg/api/client.go index 79307dc9a..4103560cf 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -123,10 +123,17 @@ func (c *Client) AddGroup(req *params.AddGroupRequest) (params.AddGroupResponse, return resp, err } -// GetGroup returns the group with the given UUID. -func (c *Client) GetGroup(req *params.GetGroupRequest) (params.GetGroupResponse, error) { +// GetGroupByUUID returns the group with the given UUID. +func (c *Client) GetGroupByUUID(req *params.GetGroupByUUIDRequest) (params.GetGroupResponse, error) { var resp params.GetGroupResponse - err := c.caller.APICall("JIMM", 4, "", "GetGroup", req, &resp) + err := c.caller.APICall("JIMM", 4, "", "GetGroupByUUID", req, &resp) + return resp, err +} + +// GetGroupByName returns the group with the given name. +func (c *Client) GetGroupByName(req *params.GetGroupByNameRequest) (params.GetGroupResponse, error) { + var resp params.GetGroupResponse + err := c.caller.APICall("JIMM", 4, "", "GetGroupByName", req, &resp) return resp, err } diff --git a/pkg/api/params/params.go b/pkg/api/params/params.go index 93c38fd56..e011c90d4 100644 --- a/pkg/api/params/params.go +++ b/pkg/api/params/params.go @@ -285,10 +285,14 @@ type AddGroupResponse struct { Group } -// GetGroupRequest holds a request to get a group by UUID or name. -type GetGroupRequest struct { +// GetGroupByUUIDRequest holds a request to get a group by UUID. +type GetGroupByUUIDRequest struct { // UUID holds the UUID of the group to be retrieved. UUID string `json:"uuid"` +} + +// GetGroupByNameRequest holds a request to get a group by name. +type GetGroupByNameRequest struct { // Name holds the name of the group to be retrieved. Name string `json:"name"` }