From ed99fb8292135875b88f3e7e7a56eceec65650e8 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 9 Apr 2021 14:15:47 +0200 Subject: [PATCH 01/14] assign user role if user exists but there are no role assignments --- proxy/pkg/user/backend/cs3.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/proxy/pkg/user/backend/cs3.go b/proxy/pkg/user/backend/cs3.go index 72a1920e3..369cd2575 100644 --- a/proxy/pkg/user/backend/cs3.go +++ b/proxy/pkg/user/backend/cs3.go @@ -3,6 +3,7 @@ package backend import ( "context" "fmt" + gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" cs3 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" rpcv1beta1 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" @@ -57,7 +58,10 @@ func (c *cs3backend) GetUserByClaims(ctx context.Context, claim, value string, w } if len(roleIDs) == 0 { - return user, nil + roleIDs = append(roleIDs, "d7beeea8-8ff4-406b-8fb6-ab2dd81e6b11") + // 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 } enc, err := encodeRoleIDs(roleIDs) From f23cf9215311c0d5c7b47853327188bb283855a3 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 10:48:06 +0200 Subject: [PATCH 02/14] 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 From c6951d2e059b48e2ff0b2be83fc79d773893f874 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 11:48:11 +0200 Subject: [PATCH 03/14] guard against possible empty groups --- ocs/pkg/service/v0/groups.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ocs/pkg/service/v0/groups.go b/ocs/pkg/service/v0/groups.go index ea98eb0b4..c14961086 100644 --- a/ocs/pkg/service/v0/groups.go +++ b/ocs/pkg/service/v0/groups.go @@ -28,8 +28,10 @@ func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) { // 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 len(u.Groups) > 0 { + mustNotFail(render.Render(w, r, response.DataRender(&data.Groups{Groups: u.Groups}))) + return + } } if isValidUUID(userid) { From 1b0b14512cbe70a357f152e14e919445d38d6e2c Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 11:40:21 +0200 Subject: [PATCH 04/14] Read UID and GID from the opaque object for CS3 proxy backend --- ocs/pkg/service/v0/users.go | 60 +++++++++++++++++++++++++++++++---- proxy/pkg/user/backend/cs3.go | 12 ++++--- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index d01c83f09..3e0859656 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -17,6 +17,7 @@ import ( "google.golang.org/protobuf/types/known/fieldmaskpb" merrors "github.com/asim/go-micro/v3/errors" + cs3 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocs/pkg/service/v0/data" "github.com/owncloud/ocis/ocs/pkg/service/v0/response" @@ -42,13 +43,14 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) { // 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 { + uid, gid := o.extractUIDAndGID(u) d := &data.User{ UserID: u.Username, DisplayName: u.DisplayName, LegacyDisplayName: u.DisplayName, Email: u.Mail, - UIDNumber: u.UidNumber, - GIDNumber: u.GidNumber, + UIDNumber: uid, + GIDNumber: gid, } mustNotFail(render.Render(w, r, response.DataRender(d))) return @@ -88,10 +90,32 @@ func (o Ocs) GetUser(w http.ResponseWriter, r *http.Request) { } if err != nil { merr := merrors.FromError(err) - if merr.Code == http.StatusNotFound { - 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()))) + u, ok := user.ContextGetUser(r.Context()) + if !ok || u.Id == nil || u.Id.OpaqueId == "" { + mustNotFail(render.Render(w, r, response.ErrRender(data.MetaBadRequest.StatusCode, "user is missing an id"))) + return + } + if u != nil { + uid, gid := o.extractUIDAndGID(u) + d := &data.User{ + UserID: u.Username, + DisplayName: u.DisplayName, + LegacyDisplayName: u.DisplayName, + Email: u.Mail, + UIDNumber: uid, + GIDNumber: gid, + Enabled: "true", // Assume true for CS3 backend? + // TODO query storage registry for free space? of home storage, maybe... + Quota: &data.Quota{ + Free: 2840756224000, + Used: 5059416668, + Total: 2845815640668, + Relative: 0.18, + Definition: "default", + }, + } + mustNotFail(render.Render(w, r, response.DataRender(d))) + return } o.logger.Error().Err(merr).Str("userid", userid).Msg("could not get account for user") return @@ -533,3 +557,27 @@ func (o Ocs) fetchAccountByUsername(ctx context.Context, name string) (*accounts } return nil, merrors.NotFound("", "The requested user could not be found") } + +func (o Ocs) extractUIDAndGID(u *cs3.User) (int64, int64) { + var uid, gid int64 + var err error + if u.Opaque != nil && u.Opaque.Map != nil { + if uidObj, ok := u.Opaque.Map["uid"]; ok { + if uidObj.Decoder == "plain" { + uid, err = strconv.ParseInt(string(uidObj.Value), 10, 64) + if err != nil { + o.logger.Error().Err(err).Interface("user", u).Msg("could not extract uid for user") + } + } + } + if gidObj, ok := u.Opaque.Map["gid"]; ok { + if gidObj.Decoder == "plain" { + gid, err = strconv.ParseInt(string(gidObj.Value), 10, 64) + if err != nil { + o.logger.Error().Err(err).Interface("user", u).Msg("could not extract gid for user") + } + } + } + } + return uid, gid +} diff --git a/proxy/pkg/user/backend/cs3.go b/proxy/pkg/user/backend/cs3.go index 3c97d3642..3dff9c88c 100644 --- a/proxy/pkg/user/backend/cs3.go +++ b/proxy/pkg/user/backend/cs3.go @@ -70,10 +70,14 @@ func (c *cs3backend) GetUserByClaims(ctx context.Context, claim, value string, w c.logger.Error().Err(err).Msg("Could not encode loaded roles") } - user.Opaque = &types.Opaque{ - Map: map[string]*types.OpaqueEntry{ - "roles": enc, - }, + if user.Opaque == nil { + user.Opaque = &types.Opaque{ + Map: map[string]*types.OpaqueEntry{ + "roles": enc, + }, + } + } else { + user.Opaque.Map["roles"] = enc } return res.User, nil From 9a2a3bf22931ea003b6fdf8efa9667b1d0aa5065 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 13:28:19 +0200 Subject: [PATCH 05/14] Make accounts backend configurable in ocs --- ocs/pkg/config/config.go | 16 +-- ocs/pkg/flagset/flagset.go | 15 +++ ocs/pkg/service/v0/service.go | 7 ++ ocs/pkg/service/v0/users.go | 186 ++++++++++++++++++++++++---------- 4 files changed, 161 insertions(+), 63 deletions(-) diff --git a/ocs/pkg/config/config.go b/ocs/pkg/config/config.go index 6a01ad55d..451701210 100644 --- a/ocs/pkg/config/config.go +++ b/ocs/pkg/config/config.go @@ -47,13 +47,15 @@ type TokenManager struct { // Config combines all available configuration parts. type Config struct { - File string - Log Log - Debug Debug - HTTP HTTP - Tracing Tracing - TokenManager TokenManager - Service Service + File string + Log Log + Debug Debug + HTTP HTTP + Tracing Tracing + TokenManager TokenManager + Service Service + AccountBackend string + RevaAddress string Context context.Context Supervised bool diff --git a/ocs/pkg/flagset/flagset.go b/ocs/pkg/flagset/flagset.go index 7e428536d..d1924af67 100644 --- a/ocs/pkg/flagset/flagset.go +++ b/ocs/pkg/flagset/flagset.go @@ -150,6 +150,21 @@ func ServerWithConfig(cfg *config.Config) []cli.Flag { EnvVars: []string{"OCS_JWT_SECRET", "OCIS_JWT_SECRET"}, Destination: &cfg.TokenManager.JWTSecret, }, + + &cli.StringFlag{ + Name: "account-backend-type", + Value: flags.OverrideDefaultString(cfg.AccountBackend, "accounts"), + Usage: "account-backend-type", + EnvVars: []string{"OCS_ACCOUNT_BACKEND_TYPE"}, + Destination: &cfg.AccountBackend, + }, + &cli.StringFlag{ + Name: "reva-gateway-addr", + Value: flags.OverrideDefaultString(cfg.RevaAddress, "127.0.0.1:9142"), + Usage: "REVA Gateway Endpoint", + EnvVars: []string{"OCS_REVA_GATEWAY_ADDR"}, + Destination: &cfg.RevaAddress, + }, } } diff --git a/ocs/pkg/service/v0/service.go b/ocs/pkg/service/v0/service.go index 09d559c9f..fb6a72687 100644 --- a/ocs/pkg/service/v0/service.go +++ b/ocs/pkg/service/v0/service.go @@ -10,6 +10,7 @@ import ( "github.com/go-chi/chi/middleware" "github.com/go-chi/render" + cs3 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocis-pkg/account" "github.com/owncloud/ocis/ocis-pkg/log" @@ -19,6 +20,7 @@ import ( ocsm "github.com/owncloud/ocis/ocs/pkg/middleware" "github.com/owncloud/ocis/ocs/pkg/service/v0/data" "github.com/owncloud/ocis/ocs/pkg/service/v0/response" + "github.com/owncloud/ocis/proxy/pkg/user/backend" settings "github.com/owncloud/ocis/settings/pkg/proto/v0" ) @@ -154,6 +156,11 @@ func (o Ocs) getAccountService() accounts.AccountsService { return accounts.NewAccountsService("com.owncloud.api.accounts", grpc.DefaultClient) } +func (o Ocs) getCS3Backend() backend.UserBackend { + revaClient, err := cs3.GetGatewayServiceClient(o.config.RevaAddress) + return backend.NewCS3UserBackend(revaClient, nil, revaClient, o.logger) +} + func (o Ocs) getGroupsService() accounts.GroupsService { return accounts.NewGroupsService("com.owncloud.api.accounts", grpc.DefaultClient) } diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index 3e0859656..7b39cd8c1 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -34,27 +34,19 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) { return } - account, err = o.getAccountService().GetAccount(r.Context(), &accounts.GetAccountRequest{ - Id: u.Id.OpaqueId, - }) + switch o.config.AccountBackend { + case "accounts": + account, err = o.getAccountService().GetAccount(r.Context(), &accounts.GetAccountRequest{ + Id: u.Id.OpaqueId, + }) + case "cs3": + account, err = o.fetchAccountFromCS3BackendByID(r.Context(), u.Id) + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } if err != nil { merr := merrors.FromError(err) - // 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 { - uid, gid := o.extractUIDAndGID(u) - d := &data.User{ - UserID: u.Username, - DisplayName: u.DisplayName, - LegacyDisplayName: u.DisplayName, - Email: u.Mail, - UIDNumber: uid, - GIDNumber: gid, - } - 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 } @@ -83,39 +75,23 @@ func (o Ocs) GetUser(w http.ResponseWriter, r *http.Request) { var account *accounts.Account var err error - if userid == "" { + switch { + case userid == "": mustNotFail(render.Render(w, r, response.ErrRender(data.MetaBadRequest.StatusCode, "missing user in context"))) - } else { + case o.config.AccountBackend == "accounts": account, err = o.fetchAccountByUsername(r.Context(), userid) + case o.config.AccountBackend == "cs3": + account, err = o.fetchAccountFromCS3BackendByUsername(r.Context(), userid) + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } + if err != nil { merr := merrors.FromError(err) - u, ok := user.ContextGetUser(r.Context()) - if !ok || u.Id == nil || u.Id.OpaqueId == "" { - mustNotFail(render.Render(w, r, response.ErrRender(data.MetaBadRequest.StatusCode, "user is missing an id"))) - return - } - if u != nil { - uid, gid := o.extractUIDAndGID(u) - d := &data.User{ - UserID: u.Username, - DisplayName: u.DisplayName, - LegacyDisplayName: u.DisplayName, - Email: u.Mail, - UIDNumber: uid, - GIDNumber: gid, - Enabled: "true", // Assume true for CS3 backend? - // TODO query storage registry for free space? of home storage, maybe... - Quota: &data.Quota{ - Free: 2840756224000, - Used: 5059416668, - Total: 2845815640668, - Relative: 0.18, - Definition: "default", - }, - } - mustNotFail(render.Render(w, r, response.DataRender(d))) - return + if merr.Code == http.StatusNotFound { + 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()))) } o.logger.Error().Err(merr).Str("userid", userid).Msg("could not get account for user") return @@ -212,9 +188,20 @@ func (o Ocs) AddUser(w http.ResponseWriter, r *http.Request) { newAccount.GidNumber = gidNumber } - account, err := o.getAccountService().CreateAccount(r.Context(), &accounts.CreateAccountRequest{ - Account: newAccount, - }) + var account *accounts.Account + var err error + + switch o.config.AccountBackend { + case "accounts": + account, err = o.getAccountService().CreateAccount(r.Context(), &accounts.CreateAccountRequest{ + Account: newAccount, + }) + case "cs3": + o.logger.Fatal().Msg("cs3 backend doesn't support adding users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { merr := merrors.FromError(err) switch merr.Code { @@ -263,7 +250,18 @@ func (o Ocs) AddUser(w http.ResponseWriter, r *http.Request) { // EditUser creates a new user account func (o Ocs) EditUser(w http.ResponseWriter, r *http.Request) { userid := chi.URLParam(r, "userid") - account, err := o.fetchAccountByUsername(r.Context(), userid) + + var account *accounts.Account + var err error + switch o.config.AccountBackend { + case "accounts": + account, err := o.fetchAccountByUsername(r.Context(), userid) + case "cs3": + o.logger.Fatal().Msg("cs3 backend doesn't support editing users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { merr := merrors.FromError(err) if merr.Code == http.StatusNotFound { @@ -330,7 +328,18 @@ func (o Ocs) EditUser(w http.ResponseWriter, r *http.Request) { // DeleteUser deletes a user func (o Ocs) DeleteUser(w http.ResponseWriter, r *http.Request) { userid := chi.URLParam(r, "userid") - account, err := o.fetchAccountByUsername(r.Context(), userid) + + var account *accounts.Account + var err error + switch o.config.AccountBackend { + case "accounts": + account, err := o.fetchAccountByUsername(r.Context(), userid) + case "cs3": + o.logger.Fatal().Msg("cs3 backend doesn't support deleting users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { merr := merrors.FromError(err) if merr.Code == http.StatusNotFound { @@ -365,7 +374,18 @@ func (o Ocs) DeleteUser(w http.ResponseWriter, r *http.Request) { // EnableUser enables a user func (o Ocs) EnableUser(w http.ResponseWriter, r *http.Request) { userid := chi.URLParam(r, "userid") - account, err := o.fetchAccountByUsername(r.Context(), userid) + + var account *accounts.Account + var err error + switch o.config.AccountBackend { + case "accounts": + account, err := o.fetchAccountByUsername(r.Context(), userid) + case "cs3": + o.logger.Fatal().Msg("cs3 backend doesn't support enabling users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { merr := merrors.FromError(err) if merr.Code == http.StatusNotFound { @@ -405,7 +425,18 @@ func (o Ocs) EnableUser(w http.ResponseWriter, r *http.Request) { // DisableUser disables a user func (o Ocs) DisableUser(w http.ResponseWriter, r *http.Request) { userid := chi.URLParam(r, "userid") - account, err := o.fetchAccountByUsername(r.Context(), userid) + + var account *accounts.Account + var err error + switch o.config.AccountBackend { + case "accounts": + account, err := o.fetchAccountByUsername(r.Context(), userid) + case "cs3": + o.logger.Fatal().Msg("cs3 backend doesn't support disabling users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { merr := merrors.FromError(err) if merr.Code == http.StatusNotFound { @@ -522,9 +553,20 @@ func (o Ocs) ListUsers(w http.ResponseWriter, r *http.Request) { query = fmt.Sprintf("on_premises_sam_account_name eq '%s'", escapeValue(search)) } - res, err := o.getAccountService().ListAccounts(r.Context(), &accounts.ListAccountsRequest{ - Query: query, - }) + var res *accounts.ListAccountsResponse + var err error + switch o.config.AccountBackend { + case "accounts": + res, err = o.getAccountService().ListAccounts(r.Context(), &accounts.ListAccountsRequest{ + Query: query, + }) + case "cs3": + // TODO + o.logger.Fatal().Msg("cs3 backend doesn't support listing users") + default: + o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) + } + if err != nil { o.logger.Err(err).Msg("could not list users") mustNotFail(render.Render(w, r, response.ErrRender(data.MetaServerError.StatusCode, "could not list users"))) @@ -558,6 +600,38 @@ func (o Ocs) fetchAccountByUsername(ctx context.Context, name string) (*accounts return nil, merrors.NotFound("", "The requested user could not be found") } +func (o Ocs) fetchAccountFromCS3BackendByUsername(ctx context.Context, name string) (*accounts.Account, error) { + backend := o.getCS3Backend() + u, err := backend.GetUserByClaims(ctx, "username", name, false) + if err != nil { + return nil, err + } + uid, gid := o.extractUIDAndGID(u) + return &accounts.Account{ + OnPremisesSamAccountName: u.Username, + DisplayName: u.DisplayName, + Mail: u.Mail, + UIDNumber: uid, + GIDNumber: gid, + } +} + +func (o Ocs) fetchAccountFromCS3BackendByID(ctx context.Context, id *cs3.UserId) (*accounts.Account, error) { + backend := o.getCS3Backend() + u, err := backend.GetUser(ctx, id, false) + if err != nil { + return nil, err + } + uid, gid := o.extractUIDAndGID(u) + return &accounts.Account{ + OnPremisesSamAccountName: u.Username, + DisplayName: u.DisplayName, + Mail: u.Mail, + UIDNumber: uid, + GIDNumber: gid, + } +} + func (o Ocs) extractUIDAndGID(u *cs3.User) (int64, int64) { var uid, gid int64 var err error From fff0c7499a1bf7f7dbeb593e4fcda55a662f8149 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 13:35:11 +0200 Subject: [PATCH 06/14] Fixes --- ocs/pkg/service/v0/service.go | 2 +- ocs/pkg/service/v0/users.go | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ocs/pkg/service/v0/service.go b/ocs/pkg/service/v0/service.go index fb6a72687..9aa53aeca 100644 --- a/ocs/pkg/service/v0/service.go +++ b/ocs/pkg/service/v0/service.go @@ -10,7 +10,7 @@ import ( "github.com/go-chi/chi/middleware" "github.com/go-chi/render" - cs3 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + "github.com/owncloud/ocis/proxy/pkg/cs3" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocis-pkg/account" "github.com/owncloud/ocis/ocis-pkg/log" diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index 7b39cd8c1..7823ab113 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -189,7 +189,6 @@ func (o Ocs) AddUser(w http.ResponseWriter, r *http.Request) { } var account *accounts.Account - var err error switch o.config.AccountBackend { case "accounts": @@ -611,9 +610,9 @@ func (o Ocs) fetchAccountFromCS3BackendByUsername(ctx context.Context, name stri OnPremisesSamAccountName: u.Username, DisplayName: u.DisplayName, Mail: u.Mail, - UIDNumber: uid, - GIDNumber: gid, - } + UidNumber: uid, + GidNumber: gid, + }, nil } func (o Ocs) fetchAccountFromCS3BackendByID(ctx context.Context, id *cs3.UserId) (*accounts.Account, error) { @@ -627,9 +626,9 @@ func (o Ocs) fetchAccountFromCS3BackendByID(ctx context.Context, id *cs3.UserId) OnPremisesSamAccountName: u.Username, DisplayName: u.DisplayName, Mail: u.Mail, - UIDNumber: uid, - GIDNumber: gid, - } + UidNumber: uid, + GidNumber: gid, + }, nil } func (o Ocs) extractUIDAndGID(u *cs3.User) (int64, int64) { From 9a590b37dcaa8780c06f696c554458d33d266631 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 13:38:20 +0200 Subject: [PATCH 07/14] Revert to using user in context --- ocs/pkg/service/v0/users.go | 48 ++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index 7823ab113..52066ef7a 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -34,19 +34,27 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) { return } - switch o.config.AccountBackend { - case "accounts": - account, err = o.getAccountService().GetAccount(r.Context(), &accounts.GetAccountRequest{ - Id: u.Id.OpaqueId, - }) - case "cs3": - account, err = o.fetchAccountFromCS3BackendByID(r.Context(), u.Id) - default: - o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) - } + account, err = o.getAccountService().GetAccount(r.Context(), &accounts.GetAccountRequest{ + Id: u.Id.OpaqueId, + }) if err != nil { merr := merrors.FromError(err) + // 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 { + uid, gid := o.extractUIDAndGID(u) + d := &data.User{ + UserID: u.Username, + DisplayName: u.DisplayName, + LegacyDisplayName: u.DisplayName, + Email: u.Mail, + UIDNumber: uid, + GIDNumber: gid, + } + 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 } @@ -81,7 +89,7 @@ func (o Ocs) GetUser(w http.ResponseWriter, r *http.Request) { case o.config.AccountBackend == "accounts": account, err = o.fetchAccountByUsername(r.Context(), userid) case o.config.AccountBackend == "cs3": - account, err = o.fetchAccountFromCS3BackendByUsername(r.Context(), userid) + account, err = o.fetchAccountFromCS3Backend(r.Context(), userid) default: o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend) } @@ -599,7 +607,7 @@ func (o Ocs) fetchAccountByUsername(ctx context.Context, name string) (*accounts return nil, merrors.NotFound("", "The requested user could not be found") } -func (o Ocs) fetchAccountFromCS3BackendByUsername(ctx context.Context, name string) (*accounts.Account, error) { +func (o Ocs) fetchAccountFromCS3Backend(ctx context.Context, name string) (*accounts.Account, error) { backend := o.getCS3Backend() u, err := backend.GetUserByClaims(ctx, "username", name, false) if err != nil { @@ -615,22 +623,6 @@ func (o Ocs) fetchAccountFromCS3BackendByUsername(ctx context.Context, name stri }, nil } -func (o Ocs) fetchAccountFromCS3BackendByID(ctx context.Context, id *cs3.UserId) (*accounts.Account, error) { - backend := o.getCS3Backend() - u, err := backend.GetUser(ctx, id, false) - if err != nil { - return nil, err - } - uid, gid := o.extractUIDAndGID(u) - return &accounts.Account{ - OnPremisesSamAccountName: u.Username, - DisplayName: u.DisplayName, - Mail: u.Mail, - UidNumber: uid, - GidNumber: gid, - }, nil -} - func (o Ocs) extractUIDAndGID(u *cs3.User) (int64, int64) { var uid, gid int64 var err error From 52f9d15b2bb9d46321db6c0c3b0a2fd31dd571b8 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 13:46:25 +0200 Subject: [PATCH 08/14] Minor fixes --- ocs/pkg/service/v0/service.go | 2 +- ocs/pkg/service/v0/users.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ocs/pkg/service/v0/service.go b/ocs/pkg/service/v0/service.go index 9aa53aeca..8a435611f 100644 --- a/ocs/pkg/service/v0/service.go +++ b/ocs/pkg/service/v0/service.go @@ -157,7 +157,7 @@ func (o Ocs) getAccountService() accounts.AccountsService { } func (o Ocs) getCS3Backend() backend.UserBackend { - revaClient, err := cs3.GetGatewayServiceClient(o.config.RevaAddress) + revaClient, _ := cs3.GetGatewayServiceClient(o.config.RevaAddress) return backend.NewCS3UserBackend(revaClient, nil, revaClient, o.logger) } diff --git a/ocs/pkg/service/v0/users.go b/ocs/pkg/service/v0/users.go index 52066ef7a..ac25d0541 100644 --- a/ocs/pkg/service/v0/users.go +++ b/ocs/pkg/service/v0/users.go @@ -262,7 +262,7 @@ func (o Ocs) EditUser(w http.ResponseWriter, r *http.Request) { var err error switch o.config.AccountBackend { case "accounts": - account, err := o.fetchAccountByUsername(r.Context(), userid) + account, err = o.fetchAccountByUsername(r.Context(), userid) case "cs3": o.logger.Fatal().Msg("cs3 backend doesn't support editing users") default: @@ -340,7 +340,7 @@ func (o Ocs) DeleteUser(w http.ResponseWriter, r *http.Request) { var err error switch o.config.AccountBackend { case "accounts": - account, err := o.fetchAccountByUsername(r.Context(), userid) + account, err = o.fetchAccountByUsername(r.Context(), userid) case "cs3": o.logger.Fatal().Msg("cs3 backend doesn't support deleting users") default: @@ -386,7 +386,7 @@ func (o Ocs) EnableUser(w http.ResponseWriter, r *http.Request) { var err error switch o.config.AccountBackend { case "accounts": - account, err := o.fetchAccountByUsername(r.Context(), userid) + account, err = o.fetchAccountByUsername(r.Context(), userid) case "cs3": o.logger.Fatal().Msg("cs3 backend doesn't support enabling users") default: @@ -437,7 +437,7 @@ func (o Ocs) DisableUser(w http.ResponseWriter, r *http.Request) { var err error switch o.config.AccountBackend { case "accounts": - account, err := o.fetchAccountByUsername(r.Context(), userid) + account, err = o.fetchAccountByUsername(r.Context(), userid) case "cs3": o.logger.Fatal().Msg("cs3 backend doesn't support disabling users") default: From 8b3a18ac8caee4f106af843d246daa3ce57da45f Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 14:14:51 +0200 Subject: [PATCH 09/14] Log if reva client cannot be generated --- ocs/pkg/service/v0/service.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ocs/pkg/service/v0/service.go b/ocs/pkg/service/v0/service.go index 8a435611f..899aae9ff 100644 --- a/ocs/pkg/service/v0/service.go +++ b/ocs/pkg/service/v0/service.go @@ -10,7 +10,6 @@ import ( "github.com/go-chi/chi/middleware" "github.com/go-chi/render" - "github.com/owncloud/ocis/proxy/pkg/cs3" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocis-pkg/account" "github.com/owncloud/ocis/ocis-pkg/log" @@ -20,6 +19,7 @@ import ( ocsm "github.com/owncloud/ocis/ocs/pkg/middleware" "github.com/owncloud/ocis/ocs/pkg/service/v0/data" "github.com/owncloud/ocis/ocs/pkg/service/v0/response" + "github.com/owncloud/ocis/proxy/pkg/cs3" "github.com/owncloud/ocis/proxy/pkg/user/backend" settings "github.com/owncloud/ocis/settings/pkg/proto/v0" ) @@ -157,7 +157,10 @@ func (o Ocs) getAccountService() accounts.AccountsService { } func (o Ocs) getCS3Backend() backend.UserBackend { - revaClient, _ := cs3.GetGatewayServiceClient(o.config.RevaAddress) + revaClient, err := cs3.GetGatewayServiceClient(o.config.RevaAddress) + if err != nil { + o.logger.Fatal().Msgf("could not get reva client at address %s", o.config.RevaAddress) + } return backend.NewCS3UserBackend(revaClient, nil, revaClient, o.logger) } From ffe3a17b732a43b104660c38a800f85cd3133375 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 14:19:40 +0200 Subject: [PATCH 10/14] Add proxy to go.mod --- ocs/go.mod | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ocs/go.mod b/ocs/go.mod index 0f60b427a..cfa6dd54b 100644 --- a/ocs/go.mod +++ b/ocs/go.mod @@ -18,6 +18,7 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/openzipkin/zipkin-go v0.2.5 github.com/owncloud/ocis/accounts v0.5.3-0.20210216094451-dc73176dc62d + github.com/owncloud/ocis/proxy v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/ocis-pkg v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/settings v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/store v0.0.0-20210216094451-dc73176dc62d @@ -32,6 +33,7 @@ require ( replace ( github.com/owncloud/ocis/accounts => ../accounts + github.com/owncloud/ocis/proxy => ../proxy github.com/owncloud/ocis/ocis-pkg => ../ocis-pkg github.com/owncloud/ocis/settings => ../settings github.com/owncloud/ocis/store => ../store From 985b83a28259f775fd85848b5d5bef597ba5ace4 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 14:28:09 +0200 Subject: [PATCH 11/14] guard against returning admin user groups instead the requested user groups --- ocs/pkg/service/v0/groups.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ocs/pkg/service/v0/groups.go b/ocs/pkg/service/v0/groups.go index c14961086..57c3f6c7c 100644 --- a/ocs/pkg/service/v0/groups.go +++ b/ocs/pkg/service/v0/groups.go @@ -28,9 +28,14 @@ func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) { // short circuit if there is a user already in the context if u, ok := user.ContextGetUser(r.Context()); ok { - if len(u.Groups) > 0 { - mustNotFail(render.Render(w, r, response.DataRender(&data.Groups{Groups: u.Groups}))) - return + // we are not sure whether the current user in the context is the admin or the authenticated user. + if u.Username == userid { + // the OCS API is a REST API and it uses the username to look for groups. If the id from the user in the context + // differs from that of the url we can assume we are an admin because we are past the selfOrAdmin middleware. + if len(u.Groups) > 0 { + mustNotFail(render.Render(w, r, response.DataRender(&data.Groups{Groups: u.Groups}))) + return + } } } From ded4abbd55c7021899e827bef6df7ec524687d99 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 13 Apr 2021 15:02:07 +0200 Subject: [PATCH 12/14] Set default user backend to accounts --- ocs/pkg/service/v0/service.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ocs/pkg/service/v0/service.go b/ocs/pkg/service/v0/service.go index 899aae9ff..e5a882455 100644 --- a/ocs/pkg/service/v0/service.go +++ b/ocs/pkg/service/v0/service.go @@ -59,6 +59,10 @@ func NewService(opts ...Option) Service { logger: options.Logger, } + if svc.config.AccountBackend == "" { + svc.config.AccountBackend = "accounts" + } + requireUser := ocsm.RequireUser() requireAdmin := ocsm.RequireAdmin( From c170e96b5fa7eb5fd07b17b4c3f6fdf9bde4dbe9 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 16:10:01 +0200 Subject: [PATCH 13/14] update modules? --- ocis/go.mod | 3 +++ ocs/go.mod | 4 ++-- ocs/go.sum | 5 ----- proxy/go.sum | 4 +--- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ocis/go.mod b/ocis/go.mod index d8a3fed5d..3d94dbafc 100644 --- a/ocis/go.mod +++ b/ocis/go.mod @@ -8,7 +8,9 @@ require ( contrib.go.opencensus.io/exporter/zipkin v0.1.2 github.com/asim/go-micro/plugins/logger/zerolog/v3 v3.0.0-20210217182006-0f0ace1a44a9 github.com/asim/go-micro/v3 v3.5.1-0.20210217182006-0f0ace1a44a9 + github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d // indirect github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect github.com/micro/cli/v2 v2.1.2 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/olekukonko/tablewriter v0.0.5 @@ -33,6 +35,7 @@ require ( github.com/spf13/cobra v1.1.3 github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.7.0 + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/thejerf/suture/v4 v4.0.0 go.opencensus.io v0.23.0 golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b diff --git a/ocs/go.mod b/ocs/go.mod index cfa6dd54b..3b5511081 100644 --- a/ocs/go.mod +++ b/ocs/go.mod @@ -18,8 +18,8 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/openzipkin/zipkin-go v0.2.5 github.com/owncloud/ocis/accounts v0.5.3-0.20210216094451-dc73176dc62d - github.com/owncloud/ocis/proxy v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/ocis-pkg v0.0.0-20210216094451-dc73176dc62d + github.com/owncloud/ocis/proxy v0.0.0-20210412105747-9b95e9b1191b github.com/owncloud/ocis/settings v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/store v0.0.0-20210216094451-dc73176dc62d github.com/prometheus/client_golang v1.9.0 @@ -33,8 +33,8 @@ require ( replace ( github.com/owncloud/ocis/accounts => ../accounts - github.com/owncloud/ocis/proxy => ../proxy github.com/owncloud/ocis/ocis-pkg => ../ocis-pkg + github.com/owncloud/ocis/proxy => ../proxy github.com/owncloud/ocis/settings => ../settings github.com/owncloud/ocis/store => ../store // taken from https://github.com/asim/go-micro/blob/master/plugins/registry/etcd/go.mod#L14-L16 diff --git a/ocs/go.sum b/ocs/go.sum index 570e5a4b0..adf4254bb 100644 --- a/ocs/go.sum +++ b/ocs/go.sum @@ -318,7 +318,6 @@ github.com/cs3org/reva v1.5.2-0.20210212085611-d8aa2eb3ec9c/go.mod h1:24c68Ys3h7 github.com/cs3org/reva v1.6.1-0.20210329145723-ed244aac4ddc h1:/16ib5caXBq9iFiYG4pysrgJ+AtNaS+zMqLXId8V9C4= github.com/cs3org/reva v1.6.1-0.20210329145723-ed244aac4ddc/go.mod h1:exwJqEJ8lVVnmdY0GrGwuPRQ018xUU9mKVXQBiO0ZlQ= github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA= -github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -919,7 +918,6 @@ github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeY github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= @@ -1299,8 +1297,6 @@ github.com/owncloud/ocis/idp v0.0.0-20210216094451-dc73176dc62d/go.mod h1:WPb1Fs github.com/owncloud/ocis/ocs v0.0.0-20210216094451-dc73176dc62d/go.mod h1:y86i4SBJ3+tFEHD4Uc6YgfTHGBZYrvcADuIYGrmOBqI= github.com/owncloud/ocis/onlyoffice v0.0.0-20210216094451-dc73176dc62d h1:n5jXhWS3q8+qGTf/XDcHAiWCPt5/Lpajnq4nKwrcwQA= github.com/owncloud/ocis/onlyoffice v0.0.0-20210216094451-dc73176dc62d/go.mod h1:Nx7rVDtxnz3nlQ715BMhAOQH34Nh6S7sVfwtpy5wYCM= -github.com/owncloud/ocis/proxy v0.0.0-20210216094451-dc73176dc62d h1:Zx49HeHqa1Ub39w7mYG+hf+36Kugjr1XZfymTna6dMs= -github.com/owncloud/ocis/proxy v0.0.0-20210216094451-dc73176dc62d/go.mod h1:DqfrD/LUKJSvXbHxhg78l8AbAc7ce4pEAJDBcijgAzE= github.com/owncloud/ocis/storage v0.0.0-20210216094451-dc73176dc62d h1:J5GVMffvdXSSrAZggF2INZVZMRRABdeb8CwZHXOpWsQ= github.com/owncloud/ocis/storage v0.0.0-20210216094451-dc73176dc62d/go.mod h1:TWGerkBpvDDr1b2A+Szv0xcaiIlBe7Nkv1hHDuAewao= github.com/owncloud/ocis/thumbnails v0.0.0-20200918125107-fcca9faa81c8/go.mod h1:G17VPMT1FM4aOec1pUkqgEsvM9vInXjbcx7PElpqnm8= @@ -1577,7 +1573,6 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= github.com/thejerf/suture/v4 v4.0.0 h1:GX3X+1Qaewtj9flL2wgoTBfLA5NcmrCY39TJRpPbUrI= github.com/thejerf/suture/v4 v4.0.0/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJVX7G5bVWRs= diff --git a/proxy/go.sum b/proxy/go.sum index 3083f4ae8..7cedf0d4c 100644 --- a/proxy/go.sum +++ b/proxy/go.sum @@ -309,7 +309,6 @@ github.com/cs3org/reva v1.5.2-0.20210212085611-d8aa2eb3ec9c/go.mod h1:24c68Ys3h7 github.com/cs3org/reva v1.6.1-0.20210329145723-ed244aac4ddc h1:/16ib5caXBq9iFiYG4pysrgJ+AtNaS+zMqLXId8V9C4= github.com/cs3org/reva v1.6.1-0.20210329145723-ed244aac4ddc/go.mod h1:exwJqEJ8lVVnmdY0GrGwuPRQ018xUU9mKVXQBiO0ZlQ= github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA= -github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -901,7 +900,6 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= @@ -1533,7 +1531,6 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= github.com/thejerf/suture/v4 v4.0.0 h1:GX3X+1Qaewtj9flL2wgoTBfLA5NcmrCY39TJRpPbUrI= github.com/thejerf/suture/v4 v4.0.0/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJVX7G5bVWRs= @@ -2218,6 +2215,7 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From ca0cc93252993bff6959ea8161607b85dee0ed2b Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 13 Apr 2021 16:19:11 +0200 Subject: [PATCH 14/14] update mods yet again --- ocs/go.mod | 6 +++--- ocs/go.sum | 21 --------------------- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/ocs/go.mod b/ocs/go.mod index c140f33ab..0ad345ec7 100644 --- a/ocs/go.mod +++ b/ocs/go.mod @@ -20,9 +20,9 @@ require ( github.com/owncloud/ocis/accounts v0.5.3-0.20210216094451-dc73176dc62d github.com/owncloud/ocis/ocis-pkg v0.0.0-20210216094451-dc73176dc62d github.com/owncloud/ocis/proxy v0.0.0-20210412105747-9b95e9b1191b - github.com/owncloud/ocis/settings v0.0.0-20210216094451-dc73176dc62d - github.com/owncloud/ocis/store v0.0.0-20210216094451-dc73176dc62d - github.com/prometheus/client_golang v1.9.0 + github.com/owncloud/ocis/settings v0.0.0-20210413063522-955bd60edf33 + github.com/owncloud/ocis/store v0.0.0-20210413063522-955bd60edf33 + github.com/prometheus/client_golang v1.10.0 github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.7.0 github.com/thejerf/suture/v4 v4.0.0 diff --git a/ocs/go.sum b/ocs/go.sum index 40b793ea2..a616d6fcc 100644 --- a/ocs/go.sum +++ b/ocs/go.sum @@ -1215,29 +1215,8 @@ github.com/owncloud/ocis/idp v0.0.0-20210413063522-955bd60edf33/go.mod h1:xRLkgE github.com/owncloud/ocis/ocs v0.0.0-20210413063522-955bd60edf33/go.mod h1:QOeC8KOc96RUK3SV11N3Sn0IP7yuzN+fb9lt2yLMMEw= github.com/owncloud/ocis/onlyoffice v0.0.0-20210413063522-955bd60edf33 h1:uglH9MrbihxUZKX1/RtHRwo8vkZ9st1Vwi9qXa9Xed4= github.com/owncloud/ocis/onlyoffice v0.0.0-20210413063522-955bd60edf33/go.mod h1:f+nnBcAuvW+wgySKnv+uvtUHkjk2f5w64Zcgb4vC8+E= -github.com/owncloud/ocis/proxy v0.0.0-20210412105747-9b95e9b1191b h1:6OZBAng7McgOF4m+D3fJLkFFG/2ekM2h70Epql0eDE8= -github.com/owncloud/ocis/proxy v0.0.0-20210412105747-9b95e9b1191b/go.mod h1:7m3UEC7ep4heIYJr9Farq3YzkUtAOPdNDfz+fMoeWuU= github.com/owncloud/ocis/storage v0.0.0-20210413063522-955bd60edf33 h1:ao+LJU/QDdzu2lYRW9ZCL3vGq3xixrFgS6/vAGmALKA= github.com/owncloud/ocis/storage v0.0.0-20210413063522-955bd60edf33/go.mod h1:2GPFqG7mD4qVbyLJNYM73hxwmJzcAtQCr/fIAYsOU3Q= -github.com/owncloud/flaex v0.0.0-20200411150708-dce59891a203/go.mod h1:jip86t4OVURJTf8CM/0e2qcji/Y4NG3l2lR8kex4JWw= -github.com/owncloud/flaex v0.2.0/go.mod h1:jip86t4OVURJTf8CM/0e2qcji/Y4NG3l2lR8kex4JWw= -github.com/owncloud/ocis-pkg/v2 v2.0.1/go.mod h1:7bVnn3VUaqdmvpMkXF0QVEF1fRugs35hSkuVTAq9yjk= -github.com/owncloud/ocis-pkg/v2 v2.2.1/go.mod h1:MXv7QzsYsu4YWuyJxhq1kLLmJa/r5gbqHe1FXulMHaw= -github.com/owncloud/ocis/glauth v0.0.0-20210216094451-dc73176dc62d h1:gV4N4hAx0FGXWtNSgQf5kRN+6q/LJ592PpyYCMOCNvQ= -github.com/owncloud/ocis/glauth v0.0.0-20210216094451-dc73176dc62d/go.mod h1:Xv/WMORry6e4nNDV7G70ruQ8gYPRvxKAWas/E5RMz2Y= -github.com/owncloud/ocis/graph v0.0.0-20210216094451-dc73176dc62d h1:zcJKzZPDbGzxcbcKZovaVgGzeWMvCd4AoDxV/NcUst8= -github.com/owncloud/ocis/graph v0.0.0-20210216094451-dc73176dc62d/go.mod h1:cpCxSvyOOTCZVihIYVOlbsw1ypNJUHVz3wI4v5OGkC4= -github.com/owncloud/ocis/graph-explorer v0.0.0-20210216094451-dc73176dc62d h1:ib7gWElgxJiLUDdssHGgz+S2T7fR8Ae9wn+PNCT0x18= -github.com/owncloud/ocis/graph-explorer v0.0.0-20210216094451-dc73176dc62d/go.mod h1:f0eIfgXI6rOaF+ZcCw+Y3tz05iH7ttP8+nhERuoOW6I= -github.com/owncloud/ocis/idp v0.0.0-20210216094451-dc73176dc62d h1:+cNvIzfpxFaCSRGFurmz1DYkOS4Om+GgpbaMiIm0kCU= -github.com/owncloud/ocis/idp v0.0.0-20210216094451-dc73176dc62d/go.mod h1:WPb1FsdlgQMZlzeK1JG7n30qT0TxCNDCejdJHW1zKL0= -github.com/owncloud/ocis/ocs v0.0.0-20210216094451-dc73176dc62d/go.mod h1:y86i4SBJ3+tFEHD4Uc6YgfTHGBZYrvcADuIYGrmOBqI= -github.com/owncloud/ocis/onlyoffice v0.0.0-20210216094451-dc73176dc62d h1:n5jXhWS3q8+qGTf/XDcHAiWCPt5/Lpajnq4nKwrcwQA= -github.com/owncloud/ocis/onlyoffice v0.0.0-20210216094451-dc73176dc62d/go.mod h1:Nx7rVDtxnz3nlQ715BMhAOQH34Nh6S7sVfwtpy5wYCM= -github.com/owncloud/ocis/storage v0.0.0-20210216094451-dc73176dc62d h1:J5GVMffvdXSSrAZggF2INZVZMRRABdeb8CwZHXOpWsQ= -github.com/owncloud/ocis/storage v0.0.0-20210216094451-dc73176dc62d/go.mod h1:TWGerkBpvDDr1b2A+Szv0xcaiIlBe7Nkv1hHDuAewao= -github.com/owncloud/ocis/thumbnails v0.0.0-20200918125107-fcca9faa81c8/go.mod h1:G17VPMT1FM4aOec1pUkqgEsvM9vInXjbcx7PElpqnm8= -github.com/owncloud/ocis/thumbnails v0.0.0-20210216094451-dc73176dc62d h1:oPpm42TV4bcr3lg+WbDKjdkOgGYyToJhPtCZTlE+eq0= github.com/owncloud/ocis/thumbnails v0.0.0-20210216094451-dc73176dc62d/go.mod h1:IU4JjxsasmAxreD7LckETo3Bmy6cYIkTuDweE7JPVTE= github.com/owncloud/ocis/thumbnails v0.0.0-20210413063522-955bd60edf33 h1:j0sO3FTg1AL6JboI7y1yAACpFdY+OoYTAaXPytLmnbQ= github.com/owncloud/ocis/thumbnails v0.0.0-20210413063522-955bd60edf33/go.mod h1:8Ezz4sM8q2nCw5wIt+QheDmqgpt66HpfrBte9h34nBo=