From f23cf9215311c0d5c7b47853327188bb283855a3 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 10:48:06 +0200 Subject: [PATCH] interpret user from the IDP --- ocs/pkg/service/v0/groups.go | 8 ++++++++ ocs/pkg/service/v0/users.go | 20 ++++++++++++++------ proxy/pkg/user/backend/accounts.go | 7 ++++--- proxy/pkg/user/backend/cs3.go | 3 ++- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/ocs/pkg/service/v0/groups.go b/ocs/pkg/service/v0/groups.go index f8fab1f0f..ea98eb0b4 100644 --- a/ocs/pkg/service/v0/groups.go +++ b/ocs/pkg/service/v0/groups.go @@ -9,6 +9,8 @@ import ( "regexp" "strconv" + "github.com/cs3org/reva/pkg/user" + merrors "github.com/asim/go-micro/v3/errors" "github.com/go-chi/chi" "github.com/go-chi/render" @@ -24,6 +26,12 @@ func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) { var account *accounts.Account var err error + // short circuit if there is a user already in the context + if u, ok := user.ContextGetUser(r.Context()); ok { + mustNotFail(render.Render(w, r, response.DataRender(&data.Groups{Groups: u.Groups}))) + return + } + if isValidUUID(userid) { account, err = o.getAccountService().GetAccount(r.Context(), &accounts.GetAccountRequest{ Id: userid, diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index 62da81536..d01c83f09 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -9,13 +9,13 @@ import ( "strconv" "strings" + "github.com/asim/go-micro/plugins/client/grpc/v3" "github.com/cs3org/reva/pkg/user" "github.com/go-chi/chi" "github.com/go-chi/render" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/types/known/fieldmaskpb" - "github.com/asim/go-micro/plugins/client/grpc/v3" merrors "github.com/asim/go-micro/v3/errors" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocs/pkg/service/v0/data" @@ -39,11 +39,19 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) { if err != nil { merr := merrors.FromError(err) - if merr.Code == http.StatusNotFound { - // if the user was authenticated why was he not found?!? log error? - mustNotFail(render.Render(w, r, response.ErrRender(data.MetaNotFound.StatusCode, "The requested user could not be found"))) - } else { - mustNotFail(render.Render(w, r, response.ErrRender(data.MetaServerError.StatusCode, err.Error()))) + // TODO(someone) this fix is in place because if the user backend (PROXY_ACCOUNT_BACKEND_TYPE) is set to, for instance, + // cs3, we cannot count with the accounts service. + if u != nil { + d := &data.User{ + UserID: u.Username, + DisplayName: u.DisplayName, + LegacyDisplayName: u.DisplayName, + Email: u.Mail, + UIDNumber: u.UidNumber, + GIDNumber: u.GidNumber, + } + mustNotFail(render.Render(w, r, response.DataRender(d))) + return } o.logger.Error().Err(merr).Interface("user", u).Msg("could not get account for user") return diff --git a/proxy/pkg/user/backend/accounts.go b/proxy/pkg/user/backend/accounts.go index 0ac24bb6a..29ce07b6a 100644 --- a/proxy/pkg/user/backend/accounts.go +++ b/proxy/pkg/user/backend/accounts.go @@ -3,15 +3,16 @@ package backend import ( "context" "fmt" + "net/http" + "strconv" + "strings" + cs3 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/oidc" settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - "net/http" - "strconv" - "strings" ) // NewAccountsServiceUserBackend creates a user-provider which fetches users from the ocis accounts-service diff --git a/proxy/pkg/user/backend/cs3.go b/proxy/pkg/user/backend/cs3.go index 369cd2575..3c97d3642 100644 --- a/proxy/pkg/user/backend/cs3.go +++ b/proxy/pkg/user/backend/cs3.go @@ -11,6 +11,7 @@ import ( "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/oidc" settings "github.com/owncloud/ocis/settings/pkg/proto/v0" + settingsSvc "github.com/owncloud/ocis/settings/pkg/service/v0" ) type cs3backend struct { @@ -58,7 +59,7 @@ func (c *cs3backend) GetUserByClaims(ctx context.Context, claim, value string, w } if len(roleIDs) == 0 { - roleIDs = append(roleIDs, "d7beeea8-8ff4-406b-8fb6-ab2dd81e6b11") + roleIDs = append(roleIDs, settingsSvc.BundleUUIDRoleUser, settingsSvc.SelfManagementPermissionID) // if roles are empty, assume we haven't seen the user before and assign a default user role. At least until // proper roles are provided. See https://github.com/owncloud/ocis/issues/1825 for more context. //return user, nil