diff --git a/changelog/unreleased/fix-ocm-open-driver.md b/changelog/unreleased/fix-ocm-open-driver.md new file mode 100644 index 0000000000..d8341bce25 --- /dev/null +++ b/changelog/unreleased/fix-ocm-open-driver.md @@ -0,0 +1,8 @@ +Bugfix: ocm: fixed domain not having a protocol scheme + +This PR fixes a bug in the OCM open driver that causes it to be unable to probe +OCM services at the remote server due to the domain having an unsupported +protocol scheme. in this case domain doesn't have a scheme and the changes in +this PR add a scheme to the domain before doing the probe. + +https://github.com/cs3org/reva/pull/4790 diff --git a/changelog/unreleased/locks-uploads.md b/changelog/unreleased/locks-uploads.md new file mode 100644 index 0000000000..0c66fca473 --- /dev/null +++ b/changelog/unreleased/locks-uploads.md @@ -0,0 +1,6 @@ +Enhancement: Pass lock holder metadata on uploads + +We now pass relevant metadata (lock id and lock holder) downstream +on uploads, and handle the case of conflicts due to lock mismatch. + +https://github.com/cs3org/reva/pull/4514 diff --git a/changelog/unreleased/ocm-access.md b/changelog/unreleased/ocm-access.md new file mode 100644 index 0000000000..c99a7e2b68 --- /dev/null +++ b/changelog/unreleased/ocm-access.md @@ -0,0 +1,8 @@ +Enhancement: ocm: support bearer token access + +This PR adds support for accessing remote OCM 1.1 shares via bearer token, +as opposed to having the shared secret in the URL only. +In addition, the OCM client package is now part of the OCMD server package, +and the Discover methods have been all consolidated in one place. + +https://github.com/cs3org/reva/pull/4670 diff --git a/docker/Dockerfile.revad-ceph b/docker/Dockerfile.revad-ceph index ff895eed59..4d18a193ba 100644 --- a/docker/Dockerfile.revad-ceph +++ b/docker/Dockerfile.revad-ceph @@ -18,13 +18,7 @@ FROM quay.io/ceph/ceph:v18 -RUN mkdir -p /etc/selinux/config - -# this is a workaround as the Ceph docker image is still based on CentOS 8 Stream, which is EOL -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* - -RUN dnf update --exclude=ceph-iscsi,chrony -y && dnf install -y \ +RUN dnf update --exclude=ceph-iscsi -y && dnf install -y \ git \ gcc \ make \ diff --git a/examples/cernbox/cernbox.toml b/examples/cernbox/cernbox.toml index a2091d0de1..819cabb688 100644 --- a/examples/cernbox/cernbox.toml +++ b/examples/cernbox/cernbox.toml @@ -199,7 +199,8 @@ webapp_template = "{{ vars.external_reva_endpoint }}/external/sciencemesh/{{.Tok file = "{{ vars.ocmshares_json_file }}" [grpc.services.ocmproviderauthorizer] -driver = "json" +driver = "open" # pure OCM, all remote shares are accepted +#driver = "json" # to enable sciencemesh [grpc.services.ocmproviderauthorizer.drivers.json] # this is used by the docker-based test deployment, not in production @@ -279,8 +280,10 @@ sender_mail = "sciencemesh@{{ vars.provider_domain }}" smtp_server = "smtp.{{ vars.provider_domain }}" smtp_port = 25 -[http.services.ocmprovider] +[http.services.wellknown] address = ":443" + +[http.services.wellknown.ocmprovider] ocm_prefix = "ocm" provider = "Reva for CERNBox" endpoint = "{{ vars.external_reva_endpoint }}" @@ -392,8 +395,6 @@ insecure = true [http.services.prometheus] address = ":443" -[http.services.sysinfo] - #[http.services.ui] #address = ":443" diff --git a/examples/ocm/server-1.toml b/examples/ocm/server-1.toml index a4cb399427..424f5254b6 100644 --- a/examples/ocm/server-1.toml +++ b/examples/ocm/server-1.toml @@ -166,7 +166,7 @@ driver = "ocmreceived" address = "0.0.0.0:8080" expose_recipient_display_name = true -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] ocm_prefix = "ocm" provider = "reva@cern" endpoint = "http://localhost:{{ http.services.ocm.address.port }}" diff --git a/examples/ocm/server-2.toml b/examples/ocm/server-2.toml index 7b9bf24cb3..66a00b2249 100644 --- a/examples/ocm/server-2.toml +++ b/examples/ocm/server-2.toml @@ -166,7 +166,7 @@ driver = "ocmreceived" address = "0.0.0.0:80" expose_recipient_display_name = true -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] ocm_prefix = "ocm" provider = "reva@cesnet" endpoint = "http://localhost:{{ http.services.ocm.address.port }}" diff --git a/examples/sciencemesh/sciencemesh.toml b/examples/sciencemesh/sciencemesh.toml index c39ee95d6a..8867db8dbd 100644 --- a/examples/sciencemesh/sciencemesh.toml +++ b/examples/sciencemesh/sciencemesh.toml @@ -253,8 +253,10 @@ sender_mail = "sciencemesh@{{ vars.provider_domain }}" smtp_server = "smtp.{{ vars.provider_domain }}" smtp_port = 25 -[http.services.ocmprovider] +[http.services.wellknown] address = ":443" + +[http.services.wellknown.ocmprovider] ocm_prefix = "ocm" provider = "Reva for ownCloud/Nextcloud" endpoint = "{{ vars.external_reva_endpoint }}" @@ -284,7 +286,5 @@ metrics_data_driver_type = "json" metrics_data_location = "/etc/revad/metrics.json" metrics_record_interval = 5000 -[http.services.sysinfo] - [http.middlewares.cors] [http.middlewares.log] diff --git a/examples/standalone/standalone.toml b/examples/standalone/standalone.toml index 5a63df304b..e7e83ad461 100644 --- a/examples/standalone/standalone.toml +++ b/examples/standalone/standalone.toml @@ -17,6 +17,6 @@ [http.services.dataprovider] [http.services.prometheus] [http.services.ocm] -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] [http.services.ocdav] [http.services.ocs] diff --git a/examples/storage-references/gateway.toml b/examples/storage-references/gateway.toml index c57d035e51..fff03471bc 100644 --- a/examples/storage-references/gateway.toml +++ b/examples/storage-references/gateway.toml @@ -57,7 +57,7 @@ app_url = "https://your-collabora-server.org:9980" [http.services.datagateway] [http.services.prometheus] [http.services.ocm] -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] [http.services.ocdav] [http.services.ocs] diff --git a/examples/two-server-setup/gateway-1.toml b/examples/two-server-setup/gateway-1.toml index 1d3414071c..7d5d08731a 100644 --- a/examples/two-server-setup/gateway-1.toml +++ b/examples/two-server-setup/gateway-1.toml @@ -84,7 +84,7 @@ address = "0.0.0.0:19001" [http.services.datagateway] [http.services.prometheus] [http.services.ocm] -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] provider = "Reva-Server-1" endpoint = "http://localhost:19001" enable_webapp = true diff --git a/examples/two-server-setup/gateway-2.toml b/examples/two-server-setup/gateway-2.toml index 8361b3c7e8..bf3f22406d 100644 --- a/examples/two-server-setup/gateway-2.toml +++ b/examples/two-server-setup/gateway-2.toml @@ -84,7 +84,7 @@ address = "0.0.0.0:29001" [http.services.datagateway] [http.services.prometheus] [http.services.ocm] -[http.services.ocmprovider] +[http.services.wellknown.ocmprovider] provider = "Reva-Server-2" endpoint = "http://localhost:29001" enable_webapp = true diff --git a/go.mod b/go.mod index 5c1308783e..104a6b1d6d 100644 --- a/go.mod +++ b/go.mod @@ -72,6 +72,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f // indirect + github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 5fff1d6939..da3dd2bdf5 100644 --- a/go.sum +++ b/go.sum @@ -848,6 +848,8 @@ github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/ceph/go-ceph v0.26.0 h1:LZoATo25ZH5aeL5t85BwIbrNLKCDfcDM+e0qV0cmwHY= github.com/ceph/go-ceph v0.26.0/go.mod h1:ISxb295GszZwtLPkeWi+L2uLYBVsqbsh0M104jZMOX4= +github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38 h1:+81ss4Vut1khzEhl7ximWF/V+EadspY47V4JrQkwlI4= +github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38/go.mod h1:ZiIzbg4sDO2MwYlspcnauUR2dfwZHUzxker+HP9k+20= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= diff --git a/internal/grpc/services/ocmcore/ocmcore.go b/internal/grpc/services/ocmcore/ocmcore.go index 218e3a3890..81f6f038da 100644 --- a/internal/grpc/services/ocmcore/ocmcore.go +++ b/internal/grpc/services/ocmcore/ocmcore.go @@ -18,6 +18,8 @@ package ocmcore +// This package implements the core OCM API for receiving external shares from remote EFSS systems. + import ( "context" "fmt" @@ -102,7 +104,7 @@ func (s *service) UnprotectedEndpoints() []string { return []string{"/cs3.ocm.core.v1beta1.OcmCoreAPI/CreateOCMCoreShare"} } -// CreateOCMCoreShare is called when an OCM request comes into this reva instance from. +// CreateOCMCoreShare is called when a remote OCM request comes into this reva instance. func (s *service) CreateOCMCoreShare(ctx context.Context, req *ocmcore.CreateOCMCoreShareRequest) (*ocmcore.CreateOCMCoreShareResponse, error) { if req.ShareType != ocm.ShareType_SHARE_TYPE_USER { return nil, errtypes.NotSupported("share type not supported") diff --git a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go index ac7956f6ff..a4f0d44039 100644 --- a/internal/grpc/services/ocminvitemanager/ocminvitemanager.go +++ b/internal/grpc/services/ocminvitemanager/ocminvitemanager.go @@ -26,9 +26,9 @@ import ( invitepb "github.com/cs3org/go-cs3apis/cs3/ocm/invite/v1beta1" ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" rpcv1beta1 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmd" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" - "github.com/cs3org/reva/pkg/ocm/client" "github.com/cs3org/reva/pkg/ocm/invite" "github.com/cs3org/reva/pkg/ocm/invite/repository/registry" "github.com/cs3org/reva/pkg/plugin" @@ -66,7 +66,7 @@ type config struct { type service struct { conf *config repo invite.Repository - ocmClient *client.OCMClient + ocmClient *ocmd.OCMClient } func (c *config) ApplyDefaults() { @@ -110,12 +110,9 @@ func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { } service := &service{ - conf: &c, - repo: repo, - ocmClient: client.New(&client.Config{ - Timeout: time.Duration(c.OCMClientTimeout) * time.Second, - Insecure: c.OCMClientInsecure, - }), + conf: &c, + repo: repo, + ocmClient: ocmd.NewClient(time.Duration(c.OCMClientTimeout)*time.Second, c.OCMClientInsecure), } return service, nil } @@ -166,7 +163,7 @@ func (s *service) ForwardInvite(ctx context.Context, req *invitepb.ForwardInvite return nil, err } - remoteUser, err := s.ocmClient.InviteAccepted(ctx, ocmEndpoint, &client.InviteAcceptedRequest{ + remoteUser, err := s.ocmClient.InviteAccepted(ctx, ocmEndpoint, &ocmd.InviteAcceptedRequest{ Token: req.InviteToken.GetToken(), RecipientProvider: s.conf.ProviderDomain, UserID: user.GetId().GetOpaqueId(), @@ -175,19 +172,19 @@ func (s *service) ForwardInvite(ctx context.Context, req *invitepb.ForwardInvite }) if err != nil { switch { - case errors.Is(err, client.ErrTokenInvalid): + case errors.Is(err, ocmd.ErrTokenInvalid): return &invitepb.ForwardInviteResponse{ Status: status.NewInvalid(ctx, "token not valid"), }, nil - case errors.Is(err, client.ErrTokenNotFound): + case errors.Is(err, ocmd.ErrTokenNotFound): return &invitepb.ForwardInviteResponse{ Status: status.NewNotFound(ctx, "token not found"), }, nil - case errors.Is(err, client.ErrUserAlreadyAccepted): + case errors.Is(err, ocmd.ErrUserAlreadyAccepted): return &invitepb.ForwardInviteResponse{ Status: status.NewAlreadyExists(ctx, err, err.Error()), }, nil - case errors.Is(err, client.ErrServiceNotTrusted): + case errors.Is(err, ocmd.ErrServiceNotTrusted): return &invitepb.ForwardInviteResponse{ Status: status.NewPermissionDenied(ctx, err, err.Error()), }, nil diff --git a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go index 1de9c8427c..e26e7b02e5 100644 --- a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go +++ b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go @@ -18,6 +18,9 @@ package ocmshareprovider +// This package implements the OCM client API: it allows shares created on this Reva instance +// to be sent to a remote EFSS system via OCM. + import ( "context" "fmt" @@ -38,7 +41,6 @@ import ( "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" - "github.com/cs3org/reva/pkg/ocm/client" "github.com/cs3org/reva/pkg/ocm/share" "github.com/cs3org/reva/pkg/ocm/share/repository/registry" "github.com/cs3org/reva/pkg/plugin" @@ -70,13 +72,13 @@ type config struct { GatewaySVC string `mapstructure:"gatewaysvc" validate:"required"` ProviderDomain string `docs:"The same domain registered in the provider authorizer" mapstructure:"provider_domain" validate:"required"` WebDAVEndpoint string `mapstructure:"webdav_endpoint" validate:"required"` - WebappTemplate string `mapstructure:"webapp_template"` + WebappTemplate string `mapstructure:"webapp_template" validate:"required"` } type service struct { conf *config repo share.Repository - client *client.OCMClient + client *ocmd.OCMClient gateway gateway.GatewayAPIClient webappTmpl *template.Template walker walker.Walker @@ -89,9 +91,6 @@ func (c *config) ApplyDefaults() { if c.ClientTimeout == 0 { c.ClientTimeout = 10 } - if c.WebappTemplate == "" { - c.WebappTemplate = "https://cernbox.cern.ch/external/sciencemesh/{{.Token}}{relative-path-to-shared-resource}" - } c.GatewaySVC = sharedconf.GetGatewaySVC(c.GatewaySVC) } @@ -119,11 +118,6 @@ func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { return nil, err } - client := client.New(&client.Config{ - Timeout: time.Duration(c.ClientTimeout) * time.Second, - Insecure: c.ClientInsecure, - }) - gateway, err := pool.GetGatewayServiceClient(pool.Endpoint(c.GatewaySVC)) if err != nil { return nil, err @@ -135,10 +129,11 @@ func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) { } walker := walker.NewWalker(gateway) + ocmcl := ocmd.NewClient(time.Duration(c.ClientTimeout)*time.Second, c.ClientInsecure) service := &service{ conf: &c, repo: repo, - client: client, + client: ocmcl, gateway: gateway, webappTmpl: tpl, walker: walker, @@ -178,13 +173,14 @@ func getResourceType(info *providerpb.ResourceInfo) string { return "unknown" } -func (s *service) webdavURL(ctx context.Context, share *ocm.Share) string { - // the url is in the form of https://cernbox.cern.ch/remote.php/dav/ocm/token - p, _ := url.JoinPath(s.conf.WebDAVEndpoint, "/remote.php/dav/ocm", share.Token) +func (s *service) webdavURL(share *ocm.Share) string { + // the url is expected to be in the form https://ourserver/remote.php/dav/ocm/{ShareId}, see c.WebdavRoot in ocmprovider.go + // TODO(lopresti) take the root from http.services.wellknown.ocmprovider's config + p, _ := url.JoinPath(s.conf.WebDAVEndpoint, "/remote.php/dav/ocm", share.Id.OpaqueId) return p } -func (s *service) getWebdavProtocol(ctx context.Context, share *ocm.Share, m *ocm.AccessMethod_WebdavOptions) *ocmd.WebDAV { +func (s *service) getWebdavProtocol(share *ocm.Share, m *ocm.AccessMethod_WebdavOptions) *ocmd.WebDAV { var perms []string if m.WebdavOptions.Permissions.InitiateFileDownload { perms = append(perms, "read") @@ -195,7 +191,7 @@ func (s *service) getWebdavProtocol(ctx context.Context, share *ocm.Share, m *oc return &ocmd.WebDAV{ Permissions: perms, - URL: s.webdavURL(ctx, share), + URL: s.webdavURL(share), SharedSecret: share.Token, } } @@ -233,7 +229,7 @@ func (s *service) getDataTransferProtocol(ctx context.Context, share *ocm.Share) panic(err) } return &ocmd.Datatx{ - SourceURI: s.webdavURL(ctx, share), + SourceURI: s.webdavURL(share), Size: size, } } @@ -248,7 +244,7 @@ func (s *service) getProtocols(ctx context.Context, share *ocm.Share) ocmd.Proto for _, m := range share.AccessMethods { switch t := m.Term.(type) { case *ocm.AccessMethod_WebdavOptions: - p = append(p, s.getWebdavProtocol(ctx, share, t)) + p = append(p, s.getWebdavProtocol(share, t)) case *ocm.AccessMethod_WebappOptions: p = append(p, s.getWebappProtocol(share)) case *ocm.AccessMethod_TransferOptions: @@ -323,7 +319,7 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq }, nil } - newShareReq := &client.NewShareRequest{ + newShareReq := &ocmd.NewShareRequest{ ShareWith: formatOCMUser(req.Grantee.GetUserId()), Name: ocmshare.Name, ProviderID: ocmshare.Id.OpaqueId, @@ -348,11 +344,11 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq newShareRes, err := s.client.NewShare(ctx, ocmEndpoint, newShareReq) if err != nil { switch { - case errors.Is(err, client.ErrInvalidParameters): + case errors.Is(err, ocmd.ErrInvalidParameters): return &ocm.CreateOCMShareResponse{ Status: status.NewInvalidArg(ctx, err.Error()), }, nil - case errors.Is(err, client.ErrServiceNotTrusted): + case errors.Is(err, ocmd.ErrServiceNotTrusted): return &ocm.CreateOCMShareResponse{ Status: status.NewInvalidArg(ctx, err.Error()), }, nil diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index bad19304f1..fe90c334b4 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -284,10 +284,10 @@ func (s *service) SetLock(ctx context.Context, req *provider.SetLockRequest) (*p var st *rpc.Status switch err.(type) { case errtypes.IsNotFound: - st = status.NewNotFound(ctx, "path not found when setting lock") + st = status.NewNotFound(ctx, "resource not found when setting lock") case errtypes.PermissionDenied: st = status.NewPermissionDenied(ctx, err, "permission denied") - case errtypes.BadRequest: + case errtypes.Conflict: st = status.NewFailedPrecondition(ctx, err, "reference already locked") default: st = status.NewInternal(ctx, err, "error setting lock: "+req.Ref.String()) diff --git a/internal/http/services/loader/loader.go b/internal/http/services/loader/loader.go index afa0e2e4c8..20982876df 100644 --- a/internal/http/services/loader/loader.go +++ b/internal/http/services/loader/loader.go @@ -29,7 +29,6 @@ import ( _ "github.com/cs3org/reva/internal/http/services/helloworld" _ "github.com/cs3org/reva/internal/http/services/metrics" _ "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmd" - _ "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmprovider" _ "github.com/cs3org/reva/internal/http/services/owncloud/ocdav" _ "github.com/cs3org/reva/internal/http/services/owncloud/ocs" _ "github.com/cs3org/reva/internal/http/services/pingpong" @@ -37,5 +36,6 @@ import ( _ "github.com/cs3org/reva/internal/http/services/pprof" _ "github.com/cs3org/reva/internal/http/services/preferences" _ "github.com/cs3org/reva/internal/http/services/prometheus" + _ "github.com/cs3org/reva/internal/http/services/wellknown" // Add your own service here. ) diff --git a/pkg/ocm/client/client.go b/internal/http/services/opencloudmesh/ocmd/client.go similarity index 76% rename from pkg/ocm/client/client.go rename to internal/http/services/opencloudmesh/ocmd/client.go index faeb28d183..106f51e5ad 100644 --- a/pkg/ocm/client/client.go +++ b/internal/http/services/opencloudmesh/ocmd/client.go @@ -16,7 +16,7 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -package client +package ocmd import ( "bytes" @@ -28,7 +28,7 @@ import ( "net/url" "time" - "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmd" + "github.com/cs3org/reva/internal/http/services/wellknown" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" "github.com/pkg/errors" @@ -59,62 +59,28 @@ type OCMClient struct { client *http.Client } -// Config is the configuration to be used for the OCMClient. -type Config struct { - Timeout time.Duration - Insecure bool -} - -// New returns a new OCMClient. -func New(c *Config) *OCMClient { +// NewClient returns a new OCMClient. +func NewClient(timeout time.Duration, insecure bool) *OCMClient { tr := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: c.Insecure}, + TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure}, } return &OCMClient{ - client: &http.Client{Transport: tr}, - } -} - -// InviteAcceptedRequest contains the parameters for accepting -// an invitation. -type InviteAcceptedRequest struct { - UserID string `json:"userID"` - Email string `json:"email"` - Name string `json:"name"` - RecipientProvider string `json:"recipientProvider"` - Token string `json:"token"` -} - -// User contains the remote user's information when accepting -// an invitation. -type User struct { - UserID string `json:"userID"` - Email string `json:"email"` - Name string `json:"name"` -} - -func (r *InviteAcceptedRequest) toJSON() (io.Reader, error) { - var b bytes.Buffer - if err := json.NewEncoder(&b).Encode(r); err != nil { - return nil, err + client: &http.Client{ + Transport: tr, + Timeout: timeout, + }, } - return &b, nil } -// InviteAccepted informs the sender that the invitation was accepted to start sharing -// https://cs3org.github.io/OCM-API/docs.html?branch=develop&repo=OCM-API&user=cs3org#/paths/~1invite-accepted/post -func (c *OCMClient) InviteAccepted(ctx context.Context, endpoint string, r *InviteAcceptedRequest) (*User, error) { - url, err := url.JoinPath(endpoint, "invite-accepted") - if err != nil { - return nil, err - } - - body, err := r.toJSON() +// Discover returns a number of properties used to discover the capabilities offered by a remote cloud storage. +// https://cs3org.github.io/OCM-API/docs.html?branch=develop&repo=OCM-API&user=cs3org#/paths/~1ocm-provider/get +func (c *OCMClient) Discover(ctx context.Context, endpoint string) (*wellknown.OcmDiscoveryData, error) { + url, err := url.JoinPath(endpoint, "/ocm-provider") if err != nil { return nil, err } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return nil, errors.Wrap(err, "error creating request") } @@ -126,48 +92,36 @@ func (c *OCMClient) InviteAccepted(ctx context.Context, endpoint string, r *Invi } defer resp.Body.Close() - return c.parseInviteAcceptedResponse(resp) -} - -func (c *OCMClient) parseInviteAcceptedResponse(r *http.Response) (*User, error) { - switch r.StatusCode { - case http.StatusOK: - var u User - if err := json.NewDecoder(r.Body).Decode(&u); err != nil { - return nil, errors.Wrap(err, "error decoding response body") - } - return &u, nil - case http.StatusBadRequest: - return nil, ErrTokenInvalid - case http.StatusNotFound: - return nil, ErrTokenNotFound - case http.StatusConflict: - return nil, ErrUserAlreadyAccepted - case http.StatusForbidden: - return nil, ErrServiceNotTrusted + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err } - body, err := io.ReadAll(r.Body) + var disco wellknown.OcmDiscoveryData + err = json.Unmarshal(body, &disco) if err != nil { - return nil, errors.Wrap(err, "error decoding response body") + log := appctx.GetLogger(ctx) + log.Warn().Str("sender", endpoint).Str("response", string(body)).Msg("malformed response") + return nil, errtypes.InternalError("Invalid payload on OCM discovery") } - return nil, errtypes.InternalError(string(body)) + + return &disco, nil } // NewShareRequest contains the parameters for creating a new OCM share. type NewShareRequest struct { - ShareWith string `json:"shareWith"` - Name string `json:"name"` - Description string `json:"description"` - ProviderID string `json:"providerId"` - Owner string `json:"owner"` - Sender string `json:"sender"` - OwnerDisplayName string `json:"ownerDisplayName"` - SenderDisplayName string `json:"senderDisplayName"` - ShareType string `json:"shareType"` - Expiration uint64 `json:"expiration"` - ResourceType string `json:"resourceType"` - Protocols ocmd.Protocols `json:"protocol"` + ShareWith string `json:"shareWith"` + Name string `json:"name"` + Description string `json:"description"` + ProviderID string `json:"providerId"` + Owner string `json:"owner"` + Sender string `json:"sender"` + OwnerDisplayName string `json:"ownerDisplayName"` + SenderDisplayName string `json:"senderDisplayName"` + ShareType string `json:"shareType"` + Expiration uint64 `json:"expiration"` + ResourceType string `json:"resourceType"` + Protocols Protocols `json:"protocol"` } func (r *NewShareRequest) toJSON() (io.Reader, error) { @@ -197,7 +151,7 @@ func (c *OCMClient) NewShare(ctx context.Context, endpoint string, r *NewShareRe } log := appctx.GetLogger(ctx) - log.Debug().Msgf("Sending OCM /shares POST to %s: %s", url, body) + log.Info().Str("url", url).Msgf("Sending OCM share: %s", body) req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body) if err != nil { return nil, errors.Wrap(err, "error creating request") @@ -232,34 +186,46 @@ func (c *OCMClient) parseNewShareResponse(r *http.Response) (*NewShareResponse, return nil, errtypes.InternalError(string(body)) } -// Capabilities contains a set of properties exposed by -// a remote cloud storage. -type Capabilities struct { - Enabled bool `json:"enabled"` - APIVersion string `json:"apiVersion"` - EndPoint string `json:"endPoint"` - Provider string `json:"provider"` - ResourceTypes []struct { - Name string `json:"name"` - ShareTypes []string `json:"shareTypes"` - Protocols struct { - Webdav *string `json:"webdav"` - Webapp *string `json:"webapp"` - Datatx *string `json:"datatx"` - } `json:"protocols"` - } `json:"resourceTypes"` - Capabilities []string `json:"capabilities"` +// InviteAcceptedRequest contains the parameters for accepting +// an invitation. +type InviteAcceptedRequest struct { + UserID string `json:"userID"` + Email string `json:"email"` + Name string `json:"name"` + RecipientProvider string `json:"recipientProvider"` + Token string `json:"token"` } -// Discovery returns a number of properties used to discover the capabilities offered by a remote cloud storage. -// https://cs3org.github.io/OCM-API/docs.html?branch=develop&repo=OCM-API&user=cs3org#/paths/~1ocm-provider/get -func (c *OCMClient) Discovery(ctx context.Context, endpoint string) (*Capabilities, error) { - url, err := url.JoinPath(endpoint, "shares") +// User contains the remote user's information when accepting +// an invitation. +type User struct { + UserID string `json:"userID"` + Email string `json:"email"` + Name string `json:"name"` +} + +func (r *InviteAcceptedRequest) toJSON() (io.Reader, error) { + var b bytes.Buffer + if err := json.NewEncoder(&b).Encode(r); err != nil { + return nil, err + } + return &b, nil +} + +// InviteAccepted informs the sender that the invitation was accepted to start sharing +// https://cs3org.github.io/OCM-API/docs.html?branch=develop&repo=OCM-API&user=cs3org#/paths/~1invite-accepted/post +func (c *OCMClient) InviteAccepted(ctx context.Context, endpoint string, r *InviteAcceptedRequest) (*User, error) { + url, err := url.JoinPath(endpoint, "invite-accepted") if err != nil { return nil, err } - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + body, err := r.toJSON() + if err != nil { + return nil, err + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body) if err != nil { return nil, errors.Wrap(err, "error creating request") } @@ -271,10 +237,30 @@ func (c *OCMClient) Discovery(ctx context.Context, endpoint string) (*Capabiliti } defer resp.Body.Close() - var cap Capabilities - if err := json.NewDecoder(resp.Body).Decode(&c); err != nil { - return nil, err + return c.parseInviteAcceptedResponse(resp) +} + +func (c *OCMClient) parseInviteAcceptedResponse(r *http.Response) (*User, error) { + switch r.StatusCode { + case http.StatusOK: + var u User + if err := json.NewDecoder(r.Body).Decode(&u); err != nil { + return nil, errors.Wrap(err, "error decoding response body") + } + return &u, nil + case http.StatusBadRequest: + return nil, ErrTokenInvalid + case http.StatusNotFound: + return nil, ErrTokenNotFound + case http.StatusConflict: + return nil, ErrUserAlreadyAccepted + case http.StatusForbidden: + return nil, ErrServiceNotTrusted } - return &cap, nil + body, err := io.ReadAll(r.Body) + if err != nil { + return nil, errors.Wrap(err, "error decoding response body") + } + return nil, errtypes.InternalError(string(body)) } diff --git a/internal/http/services/opencloudmesh/ocmd/shares.go b/internal/http/services/opencloudmesh/ocmd/shares.go index a48f040f7e..954e72ccae 100644 --- a/internal/http/services/opencloudmesh/ocmd/shares.go +++ b/internal/http/services/opencloudmesh/ocmd/shares.go @@ -21,7 +21,6 @@ package ocmd import ( "encoding/json" "fmt" - "io" "mime" "net/http" "path/filepath" @@ -37,13 +36,11 @@ import ( ocmcore "github.com/cs3org/go-cs3apis/cs3/ocm/core/v1beta1" ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1" - ocmproviderhttp "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmprovider" rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" "github.com/cs3org/reva/internal/http/services/reqres" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" - "github.com/cs3org/reva/pkg/httpclient" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" "github.com/cs3org/reva/pkg/utils" "github.com/go-playground/validator/v10" @@ -282,43 +279,21 @@ func discoverOcmWebdavRoot(r *http.Request) (string, error) { log := appctx.GetLogger(ctx) log.Debug().Str("sender", r.Host).Msg("received OCM 1.0 share, attempting to discover sender endpoint") - httpReq, err := http.NewRequestWithContext(ctx, http.MethodGet, r.Host+"/ocm-provider", nil) + ocmClient := NewClient(time.Duration(10)*time.Second, true) + ocmCaps, err := ocmClient.Discover(ctx, r.Host) if err != nil { + log.Warn().Str("sender", r.Host).Err(err).Msg("failed to discover OCM sender") return "", err } - httpClient := httpclient.New( - httpclient.Timeout(time.Duration(10 * int64(time.Second))), - ) - httpRes, err := httpClient.Do(httpReq) - if err != nil { - return "", errors.Wrap(err, "failed to contact OCM sender server") - } - defer httpRes.Body.Close() - - if httpRes.StatusCode != http.StatusOK { - return "", errtypes.InternalError("Invalid HTTP response on OCM discovery") - } - body, err := io.ReadAll(httpRes.Body) - if err != nil { - return "", err - } - - var result ocmproviderhttp.DiscoveryData - err = json.Unmarshal(body, &result) - if err != nil { - log.Warn().Str("sender", r.Host).Str("response", string(body)).Msg("malformed response") - return "", errtypes.InternalError("Invalid payload on OCM discovery") - } - - for _, t := range result.ResourceTypes { + for _, t := range ocmCaps.ResourceTypes { webdavRoot, ok := t.Protocols["webdav"] if ok { // assume the first resourceType that exposes a webdav root is OK to use: as a matter of fact, // no implementation exists yet that exposes multiple resource types with different roots. - return filepath.Join(result.Endpoint, webdavRoot), nil + return filepath.Join(ocmCaps.Endpoint, webdavRoot), nil } } - log.Warn().Str("sender", r.Host).Str("response", string(body)).Msg("missing webdav root") + log.Warn().Str("sender", r.Host).Interface("response", ocmCaps).Msg("missing webdav root") return "", errtypes.NotFound("WebDAV root not found on OCM discovery") } diff --git a/internal/http/services/owncloud/ocdav/dav.go b/internal/http/services/owncloud/ocdav/dav.go index ed0ea135bd..2532b63b67 100644 --- a/internal/http/services/owncloud/ocdav/dav.go +++ b/internal/http/services/owncloud/ocdav/dav.go @@ -188,24 +188,36 @@ func (h *DavHandler) Handler(s *svc) http.Handler { return } - // OC10 and Nextcloud (OCM 1.0) are using basic auth for carrying the - // shared token. - var token string - username, _, ok := r.BasicAuth() - if ok { - // OCM 1.0 - token = username - r.URL.Path = filepath.Join("/", token, r.URL.Path) - ctx = context.WithValue(ctx, ctxOCM10, true) + var token, ocmshare string + // OCM v1.1 (OCIS et al.). + bearer := strings.TrimPrefix(r.Header.Get("Authorization"), "Bearer ") + if bearer != "" { + // Bearer token is the shared secret, path is /{shareId}/path/to/resource. + // Here we're keeping the simpler public-share model, where the internal routing is done via the token, + // therefore we strip the shareId and reinject the token. + // TODO(lopresti) We should instead perform a lookup via shareId and leave the token just for auth. + var relPath string + token = bearer + ocmshare, relPath = router.ShiftPath(r.URL.Path) + r.URL.Path = filepath.Join("/", token, relPath) } else { - token, _ = router.ShiftPath(r.URL.Path) - ctx = context.WithValue(ctx, ctxOCM10, false) + username, _, ok := r.BasicAuth() + if ok { + // OCM v1.0 (OC10 and Nextcloud) uses basic auth for carrying the shared secret, + // and does not pass the shareId. + token = username + r.URL.Path = filepath.Join("/", token, r.URL.Path) + } else { + // compatibility for ScienceMesh: no auth, shared secret is the first element + // of the path, the shareId is not given. Leave the URL as is. + token = strings.Split(r.URL.Path, "/")[1] + } } - authRes, err := handleOCMAuth(ctx, c, token) + authRes, err := handleOCMAuth(ctx, c, ocmshare, token) switch { case err != nil: - log.Error().Err(err).Msg("error during ocm authentication") + log.Error().Err(err).Msg("error during OCM authentication") w.WriteHeader(http.StatusInternalServerError) return case authRes.Status.Code == rpc.Code_CODE_PERMISSION_DENIED: @@ -228,6 +240,7 @@ func (h *DavHandler) Handler(s *svc) http.Handler { ctx = appctx.ContextSetToken(ctx, authRes.Token) ctx = appctx.ContextSetUser(ctx, authRes.User) ctx = metadata.AppendToOutgoingContext(ctx, appctx.TokenHeader, authRes.Token) + ctx = context.WithValue(ctx, ctxOCM, true) log.Debug().Str("token", token).Interface("user", authRes.User).Msg("OCM user authenticated") @@ -347,9 +360,10 @@ func handleSignatureAuth(ctx context.Context, c gatewayv1beta1.GatewayAPIClient, return c.Authenticate(ctx, &authenticateRequest) } -func handleOCMAuth(ctx context.Context, c gatewayv1beta1.GatewayAPIClient, token string) (*gatewayv1beta1.AuthenticateResponse, error) { +func handleOCMAuth(ctx context.Context, c gatewayv1beta1.GatewayAPIClient, ocmshare, token string) (*gatewayv1beta1.AuthenticateResponse, error) { return c.Authenticate(ctx, &gatewayv1beta1.AuthenticateRequest{ - Type: "ocmshares", - ClientId: token, + Type: "ocmshares", + ClientId: ocmshare, + ClientSecret: token, }) } diff --git a/internal/http/services/owncloud/ocdav/ocdav.go b/internal/http/services/owncloud/ocdav/ocdav.go index 0a6b49bbce..4e996c1ee4 100644 --- a/internal/http/services/owncloud/ocdav/ocdav.go +++ b/internal/http/services/owncloud/ocdav/ocdav.go @@ -51,7 +51,7 @@ type ctxKey int const ( ctxKeyBaseURI ctxKey = iota - ctxOCM10 + ctxOCM ) var ( @@ -198,7 +198,7 @@ func (s *svc) Close() error { } func (s *svc) Unprotected() []string { - return []string{"/status.php", "/remote.php/dav/public-files/", "/apps/files/", "/index.php/f/", "/index.php/s/", "/s/", "/remote.php/dav/ocm/"} + return []string{"/status.php", "/remote.php/dav/public-files/", "/apps/files/", "/index.php/f/", "/index.php/s/", "/s/", "/remote.php/dav/ocm/", "/ocm-provider"} } func (s *svc) Handler() http.Handler { @@ -255,6 +255,10 @@ func (s *svc) Handler() http.Handler { http.Redirect(w, r, rURL, http.StatusMovedPermanently) return } + case "ocm-provider": + // this is to support the current/legacy discovery endpoint for OCM + http.Redirect(w, r, "/.well-known/ocm", http.StatusMovedPermanently) + return } switch head { // the old `/webdav` endpoint uses remote.php/webdav/$path diff --git a/internal/http/services/owncloud/ocdav/propfind.go b/internal/http/services/owncloud/ocdav/propfind.go index 5f532a3fd8..d762f63edf 100644 --- a/internal/http/services/owncloud/ocdav/propfind.go +++ b/internal/http/services/owncloud/ocdav/propfind.go @@ -504,16 +504,6 @@ func (s *svc) newPropRaw(key, val string) *propertyXML { } } -func supportLegacyOCMAccess(ctx context.Context, md *provider.ResourceInfo) { - ocm10, _ := ctx.Value(ctxOCM10).(bool) - if ocm10 { - // the path is something like //... - // we need to strip the token part as this - // is passed as username in the basic auth - _, md.Path = router.ShiftPath(md.Path) - } -} - func appendSlash(path string) string { if path == "" { return "/" @@ -540,11 +530,15 @@ func (s *svc) isOpenable(path string) bool { // prefixing it with the baseURI. func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provider.ResourceInfo, ns string, usershares, linkshares map[string]struct{}) (*responseXML, error) { sublog := appctx.GetLogger(ctx).With().Str("ns", ns).Logger() + md.Path = strings.TrimPrefix(md.Path, ns) + ocm, _ := ctx.Value(ctxOCM).(bool) + if ocm { + // // was injected in front of the OCM path for the routing to work, we now remove it (see internal/http/services/owncloud/ocdav/dav.go) + _, md.Path = router.ShiftPath(md.Path) + } baseURI := ctx.Value(ctxKeyBaseURI).(string) - - supportLegacyOCMAccess(ctx, md) ref := path.Join(baseURI, md.Path) if md.Type == provider.ResourceType_RESOURCE_TYPE_CONTAINER { ref += "/" diff --git a/internal/http/services/owncloud/ocdav/put.go b/internal/http/services/owncloud/ocdav/put.go index b813244fb0..e9a000b1bf 100644 --- a/internal/http/services/owncloud/ocdav/put.go +++ b/internal/http/services/owncloud/ocdav/put.go @@ -271,6 +271,12 @@ func (s *svc) handlePut(ctx context.Context, w http.ResponseWriter, r *http.Requ return } httpReq.Header.Set(datagateway.TokenTransportHeader, token) + if lockid := r.Header.Get(HeaderLockID); lockid != "" { + httpReq.Header.Set(HeaderLockID, lockid) + } + if lockholder := r.Header.Get(HeaderLockHolder); lockholder != "" { + httpReq.Header.Set(HeaderLockHolder, lockholder) + } httpRes, err := s.client.Do(httpReq) if err != nil { diff --git a/internal/http/services/owncloud/ocdav/webdav.go b/internal/http/services/owncloud/ocdav/webdav.go index 60ad87fdbf..06a1480156 100644 --- a/internal/http/services/owncloud/ocdav/webdav.go +++ b/internal/http/services/owncloud/ocdav/webdav.go @@ -76,6 +76,8 @@ const ( HeaderOCMtime = "X-OC-Mtime" HeaderExpectedEntityLength = "X-Expected-Entity-Length" HeaderTransferAuth = "TransferHeaderAuthorization" + HeaderLockID = "X-Lock-Id" + HeaderLockHolder = "X-Lock-Holder" ) // WebDavHandler implements a dav endpoint. diff --git a/internal/http/services/opencloudmesh/ocmprovider/ocmprovider.go b/internal/http/services/wellknown/ocm.go similarity index 71% rename from internal/http/services/opencloudmesh/ocmprovider/ocmprovider.go rename to internal/http/services/wellknown/ocm.go index 539c7aefca..f8f4d53612 100644 --- a/internal/http/services/opencloudmesh/ocmprovider/ocmprovider.go +++ b/internal/http/services/wellknown/ocm.go @@ -16,27 +16,20 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -package ocmprovider +package wellknown import ( - "context" "encoding/json" "net/http" "net/url" "path/filepath" "github.com/cs3org/reva/pkg/appctx" - "github.com/cs3org/reva/pkg/rhttp/global" - "github.com/cs3org/reva/pkg/utils/cfg" ) const OCMAPIVersion = "1.1.0" -func init() { - global.Register("ocmprovider", New) -} - -type config struct { +type OcmProviderConfig struct { OCMPrefix string `docs:"ocm;The prefix URL where the OCM API is served." mapstructure:"ocm_prefix"` Endpoint string `docs:"This host's full URL. If it's not configured, it is assumed OCM is not available." mapstructure:"endpoint"` Provider string `docs:"reva;A friendly name that defines this service." mapstructure:"provider"` @@ -46,7 +39,7 @@ type config struct { EnableDatatx bool `docs:"false;Whether data transfers are enabled in OCM shares." mapstructure:"enable_datatx"` } -type DiscoveryData struct { +type OcmDiscoveryData struct { Enabled bool `json:"enabled" xml:"enabled"` APIVersion string `json:"apiVersion" xml:"apiVersion"` Endpoint string `json:"endPoint" xml:"endPoint"` @@ -61,11 +54,11 @@ type resourceTypes struct { Protocols map[string]string `json:"protocols"` } -type svc struct { - data *DiscoveryData +type wkocmHandler struct { + data *OcmDiscoveryData } -func (c *config) ApplyDefaults() { +func (c *OcmProviderConfig) ApplyDefaults() { if c.OCMPrefix == "" { c.OCMPrefix = "ocm" } @@ -86,10 +79,11 @@ func (c *config) ApplyDefaults() { } } -func (c *config) prepare() *DiscoveryData { - // generates the (static) data structure to be exposed by /ocm-provider: +func (h *wkocmHandler) init(c *OcmProviderConfig) { + // generates the (static) data structure to be exposed by /.well-known/ocm: // first prepare an empty and disabled payload - d := &DiscoveryData{} + c.ApplyDefaults() + d := &OcmDiscoveryData{} d.Enabled = false d.Endpoint = "" d.APIVersion = OCMAPIVersion @@ -102,12 +96,14 @@ func (c *config) prepare() *DiscoveryData { d.Capabilities = []string{} if c.Endpoint == "" { - return d + h.data = d + return } endpointURL, err := url.Parse(c.Endpoint) if err != nil { - return d + h.data = d + return } // now prepare the enabled one @@ -129,49 +125,24 @@ func (c *config) prepare() *DiscoveryData { }} // for now we hardcode the capabilities, as this is currently only advisory d.Capabilities = []string{"/invite-accepted"} - return d + h.data = d } -// New returns a new ocmprovider object, that implements -// the OCM discovery endpoint specified in +// This handler implements the OCM discovery endpoint specified in // https://cs3org.github.io/OCM-API/docs.html?repo=OCM-API&user=cs3org#/paths/~1ocm-provider/get -func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { - var c config - if err := cfg.Decode(m, &c); err != nil { - return nil, err +func (h *wkocmHandler) Ocm(w http.ResponseWriter, r *http.Request) { + log := appctx.GetLogger(r.Context()) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + if r.UserAgent() == "Nextcloud Server Crawler" { + // Nextcloud decided to only support OCM 1.0 and 1.1, not any 1.x as per SemVer. See + // https://github.com/nextcloud/server/pull/39574#issuecomment-1679191188 + h.data.APIVersion = "1.1" + } else { + h.data.APIVersion = OCMAPIVersion + } + indented, _ := json.MarshalIndent(h.data, "", " ") + if _, err := w.Write(indented); err != nil { + log.Err(err).Msg("Error writing to ResponseWriter") } - return &svc{data: c.prepare()}, nil -} - -// Close performs cleanup. -func (s *svc) Close() error { - return nil -} - -func (s *svc) Prefix() string { - // this is hardcoded as per OCM specifications - return "/ocm-provider" -} - -func (s *svc) Unprotected() []string { - return []string{"/"} -} - -func (s *svc) Handler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - log := appctx.GetLogger(r.Context()) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - if r.UserAgent() == "Nextcloud Server Crawler" { - // Nextcloud decided to only support OCM 1.0 and 1.1, not any 1.x as per SemVer. See - // https://github.com/nextcloud/server/pull/39574#issuecomment-1679191188 - s.data.APIVersion = "1.1" - } else { - s.data.APIVersion = OCMAPIVersion - } - indented, _ := json.MarshalIndent(s.data, "", " ") - if _, err := w.Write(indented); err != nil { - log.Err(err).Msg("Error writing to ResponseWriter") - } - }) } diff --git a/internal/http/services/wellknown/wellknown.go b/internal/http/services/wellknown/wellknown.go new file mode 100644 index 0000000000..5ca2c2fb0d --- /dev/null +++ b/internal/http/services/wellknown/wellknown.go @@ -0,0 +1,91 @@ +// Copyright 2018-2024 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package wellknown + +import ( + "context" + "net/http" + + "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/rhttp/global" + "github.com/cs3org/reva/pkg/utils/cfg" + "github.com/go-chi/chi/v5" +) + +func init() { + global.Register("wellknown", New) +} + +type svc struct { + router chi.Router + Conf *config +} + +type config struct { + OCMProvider OcmProviderConfig `mapstructure:"ocmprovider"` +} + +// New returns a new wellknown object. +func New(ctx context.Context, m map[string]interface{}) (global.Service, error) { + var c config + if err := cfg.Decode(m, &c); err != nil { + return nil, err + } + + r := chi.NewRouter() + s := &svc{ + router: r, + Conf: &c, + } + if err := s.routerInit(); err != nil { + return nil, err + } + + return s, nil +} + +func (s *svc) routerInit() error { + wkocmHandler := new(wkocmHandler) + wkocmHandler.init(&s.Conf.OCMProvider) + s.router.Get("/ocm", wkocmHandler.Ocm) + return nil +} + +func (s *svc) Close() error { + return nil +} + +func (s *svc) Prefix() string { + return "/.well-known" +} + +func (s *svc) Unprotected() []string { + return []string{"/", "/ocm"} +} + +func (s *svc) Handler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + log := appctx.GetLogger(r.Context()) + log.Debug().Str("path", r.URL.Path).Msg(".well-known routing") + + // unset raw path, otherwise chi uses it to route and then fails to match percent encoded path segments + r.URL.RawPath = "" + s.router.ServeHTTP(w, r) + }) +} diff --git a/pkg/auth/manager/ocmshares/ocmshares.go b/pkg/auth/manager/ocmshares/ocmshares.go index c53b00a085..b347cbe817 100644 --- a/pkg/auth/manager/ocmshares/ocmshares.go +++ b/pkg/auth/manager/ocmshares/ocmshares.go @@ -82,8 +82,8 @@ func (m *manager) Configure(ml map[string]interface{}) error { return nil } -func (m *manager) Authenticate(ctx context.Context, token, _ string) (*userpb.User, map[string]*authpb.Scope, error) { - log := appctx.GetLogger(ctx).With().Str("token", token).Logger() +func (m *manager) Authenticate(ctx context.Context, ocmshare, token string) (*userpb.User, map[string]*authpb.Scope, error) { + log := appctx.GetLogger(ctx).With().Str("token", token).Str("ocmshare", ocmshare).Logger() shareRes, err := m.gw.GetOCMShareByToken(ctx, &ocm.GetOCMShareByTokenRequest{ Token: token, }) @@ -103,6 +103,12 @@ func (m *manager) Authenticate(ctx context.Context, token, _ string) (*userpb.Us return nil, nil, errtypes.InternalError(shareRes.Status.Message) } + // validate OCM share id if given (OCM v1.1) + if ocmshare != "" && shareRes.GetShare().GetId().GetOpaqueId() != ocmshare { + log.Error().Str("requested_share", ocmshare).Str("share_from_provider", shareRes.GetShare().GetId().GetOpaqueId()).Msg("mismatching ocm share id for existing secret") + return nil, nil, errtypes.InvalidCredentials("invalid shared secret") + } + // the user authenticated using the ocmshares authentication method // is the recipient of the share u := shareRes.Share.Grantee.GetUserId() diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index ecdf8f4f51..10189b7daf 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -203,6 +203,11 @@ func (c *Client) executeXRDCopy(ctx context.Context, cmdArgs []string) (string, err = errtypes.InvalidCredentials("eosclient: no sufficient permissions for the operation") } + // check for lock mismatch error + if strings.Contains(errBuf.String(), "file has a valid extended attribute lock") { + err = errtypes.Conflict("eosclient: lock mismatch") + } + args := fmt.Sprintf("%s", cmd.Args) env := fmt.Sprintf("%s", cmd.Env) log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd") @@ -455,7 +460,7 @@ func (c *Client) mergeACLsAndAttrsForFiles(ctx context.Context, auth eosclient.A } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error { if !isValidAttribute(attr) { return errors.New("eos: attr is invalid: " + serializeAttribute(attr)) } @@ -468,11 +473,15 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr } return c.handleFavAttr(ctx, auth, attr, recursive, path, info, true) } - return c.setEOSAttr(ctx, auth, attr, errorIfExists, recursive, path) + return c.setEOSAttr(ctx, auth, attr, errorIfExists, recursive, path, app) } -func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { - args := []string{"attr"} +func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error { + args := []string{} + if app != "" { + args = append(args, "-a", app) + } + args = append(args, "attr") if recursive { args = append(args, "-r") } @@ -485,9 +494,12 @@ func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, a _, _, err := c.executeEOS(ctx, args, auth) if err != nil { var exErr *exec.ExitError - if errors.As(err, &exErr) && exErr.ExitCode() == 17 { + if errors.As(err, &exErr) && exErr.ExitCode() == 17 { // EEXIST return eosclient.AttrAlreadyExistsError } + if errors.As(err, &exErr) && exErr.ExitCode() == 16 { // EBUSY -> Locked + return eosclient.FileIsLockedError + } return err } return nil @@ -516,11 +528,11 @@ func (c *Client) handleFavAttr(ctx context.Context, auth eosclient.Authorization favs.DeleteEntry(acl.TypeUser, u.Id.OpaqueId) } attr.Val = favs.Serialize() - return c.setEOSAttr(ctx, auth, attr, false, recursive, path) + return c.setEOSAttr(ctx, auth, attr, false, recursive, path, "") } // UnsetAttr unsets an extended attribute on a path. -func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path, app string) error { if !isValidAttribute(attr) { return errors.New("eos: attr is invalid: " + serializeAttribute(attr)) } @@ -536,11 +548,15 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } var args []string + if app != "" { + args = append(args, "-a", app) + } + args = append(args, "attr") if recursive { - args = []string{"attr", "-r", "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path} - } else { - args = []string{"attr", "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path} + args = append(args, "-r") } + args = append(args, "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path) + _, _, err = c.executeEOS(ctx, args, auth) if err != nil { var exErr *exec.ExitError @@ -707,7 +723,7 @@ func (c *Client) Read(ctx context.Context, auth eosclient.Authorization, path st } // Write writes a stream to the mgm. -func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser) error { +func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser, app string) error { fd, err := os.CreateTemp(c.opt.CacheDirectory, "eoswrite-") if err != nil { return err @@ -720,19 +736,18 @@ func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path s if err != nil { return err } - - return c.WriteFile(ctx, auth, path, fd.Name()) + return c.writeFile(ctx, auth, path, fd.Name(), app) } // WriteFile writes an existing file to the mgm. -func (c *Client) WriteFile(ctx context.Context, auth eosclient.Authorization, path, source string) error { +func (c *Client) writeFile(ctx context.Context, auth eosclient.Authorization, path, source, app string) error { xrdPath := fmt.Sprintf("%s//%s", c.opt.URL, path) args := []string{"--nopbar", "--silent", "-f", source, xrdPath} if auth.Token != "" { args[4] += "?authz=" + auth.Token } else if auth.Role.UID != "" && auth.Role.GID != "" { - args = append(args, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s&eos.app=reva_eosclient::write", auth.Role.UID, auth.Role.GID)) + args = append(args, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s&eos.app=%s", auth.Role.UID, auth.Role.GID, app)) } _, _, err := c.executeXRDCopy(ctx, args) diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index 0cc28d5705..bbbf31a428 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -37,8 +37,8 @@ type EOSClient interface { GetFileInfoByInode(ctx context.Context, auth Authorization, inode uint64) (*FileInfo, error) GetFileInfoByFXID(ctx context.Context, auth Authorization, fxid string) (*FileInfo, error) GetFileInfoByPath(ctx context.Context, auth Authorization, path string) (*FileInfo, error) - SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path string) error - UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error + SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path, app string) error + UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path, app string) error GetAttr(ctx context.Context, auth Authorization, key, path string) (*Attribute, error) GetAttrs(ctx context.Context, auth Authorization, path string) ([]*Attribute, error) GetQuota(ctx context.Context, username string, rootAuth Authorization, path string) (*QuotaInfo, error) @@ -51,8 +51,7 @@ type EOSClient interface { Rename(ctx context.Context, auth Authorization, oldPath, newPath string) error List(ctx context.Context, auth Authorization, path string) ([]*FileInfo, error) Read(ctx context.Context, auth Authorization, path string) (io.ReadCloser, error) - Write(ctx context.Context, auth Authorization, path string, stream io.ReadCloser) error - WriteFile(ctx context.Context, auth Authorization, path, source string) error + Write(ctx context.Context, auth Authorization, path string, stream io.ReadCloser, app string) error ListDeletedEntries(ctx context.Context, auth Authorization, maxentries int, from, to time.Time) ([]*DeletedEntry, error) RestoreDeletedEntry(ctx context.Context, auth Authorization, key string) error PurgeDeletedEntries(ctx context.Context, auth Authorization) error @@ -154,3 +153,7 @@ const AttrAlreadyExistsError = errtypes.BadRequest("attr already exists") // AttrNotExistsError is the error raised when removing // an attribute that does not exist. const AttrNotExistsError = errtypes.BadRequest("attr not exists") + +// FileIsLockedError is the error raised when attempting to set a lock +// attribute to an already locked file with a mismatched lock. +const FileIsLockedError = errtypes.BadRequest("file is locked") diff --git a/pkg/eosclient/eosgrpc/eos_grpc/README.protoc b/pkg/eosclient/eosgrpc/eos_grpc/README.protoc deleted file mode 100644 index daaaa67ef7..0000000000 --- a/pkg/eosclient/eosgrpc/eos_grpc/README.protoc +++ /dev/null @@ -1,10 +0,0 @@ -To compile the eos binding into go code: - -protoc --go_out=. ./Rpc.proto -protoc ./Rpc.proto --go_out=plugins=grpc:. - - -NOTE: we have to do this here in order to be sure that a compatible protoc compiler is used. -Having a CI somewhere compiling this does NOT guarantee that the same golang and protoc will be used, -and this has created lots of problems in the past - diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go deleted file mode 100644 index d57d0b2bbd..0000000000 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ /dev/null @@ -1,5281 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: Rpc.proto - -package eos_grpc - -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -type TYPE int32 - -const ( - TYPE_FILE TYPE = 0 - TYPE_CONTAINER TYPE = 1 - TYPE_LISTING TYPE = 2 - TYPE_STAT TYPE = 3 -) - -var TYPE_name = map[int32]string{ - 0: "FILE", - 1: "CONTAINER", - 2: "LISTING", - 3: "STAT", -} - -var TYPE_value = map[string]int32{ - "FILE": 0, - "CONTAINER": 1, - "LISTING": 2, - "STAT": 3, -} - -func (x TYPE) String() string { - return proto.EnumName(TYPE_name, int32(x)) -} - -func (TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} -} - -type QUOTATYPE int32 - -const ( - QUOTATYPE_USER QUOTATYPE = 0 - QUOTATYPE_GROUP QUOTATYPE = 2 - QUOTATYPE_PROJECT QUOTATYPE = 3 -) - -var QUOTATYPE_name = map[int32]string{ - 0: "USER", - 2: "GROUP", - 3: "PROJECT", -} - -var QUOTATYPE_value = map[string]int32{ - "USER": 0, - "GROUP": 2, - "PROJECT": 3, -} - -func (x QUOTATYPE) String() string { - return proto.EnumName(QUOTATYPE_name, int32(x)) -} - -func (QUOTATYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} -} - -type QUOTAOP int32 - -const ( - QUOTAOP_GET QUOTAOP = 0 - QUOTAOP_SET QUOTAOP = 1 - QUOTAOP_RM QUOTAOP = 2 - QUOTAOP_RMNODE QUOTAOP = 3 -) - -var QUOTAOP_name = map[int32]string{ - 0: "GET", - 1: "SET", - 2: "RM", - 3: "RMNODE", -} - -var QUOTAOP_value = map[string]int32{ - "GET": 0, - "SET": 1, - "RM": 2, - "RMNODE": 3, -} - -func (x QUOTAOP) String() string { - return proto.EnumName(QUOTAOP_name, int32(x)) -} - -func (QUOTAOP) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} -} - -type QUOTAENTRY int32 - -const ( - QUOTAENTRY_NONE QUOTAENTRY = 0 - QUOTAENTRY_VOLUME QUOTAENTRY = 1 - QUOTAENTRY_INODE QUOTAENTRY = 2 -) - -var QUOTAENTRY_name = map[int32]string{ - 0: "NONE", - 1: "VOLUME", - 2: "INODE", -} - -var QUOTAENTRY_value = map[string]int32{ - "NONE": 0, - "VOLUME": 1, - "INODE": 2, -} - -func (x QUOTAENTRY) String() string { - return proto.EnumName(QUOTAENTRY_name, int32(x)) -} - -func (QUOTAENTRY) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} -} - -type MANILA_REQUEST_TYPE int32 - -const ( - MANILA_REQUEST_TYPE_CREATE_SHARE MANILA_REQUEST_TYPE = 0 - MANILA_REQUEST_TYPE_DELETE_SHARE MANILA_REQUEST_TYPE = 1 - MANILA_REQUEST_TYPE_EXTEND_SHARE MANILA_REQUEST_TYPE = 2 - MANILA_REQUEST_TYPE_SHRINK_SHARE MANILA_REQUEST_TYPE = 3 - MANILA_REQUEST_TYPE_MANAGE_EXISTING MANILA_REQUEST_TYPE = 4 - MANILA_REQUEST_TYPE_UNMANAGE MANILA_REQUEST_TYPE = 5 - MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6 -) - -var MANILA_REQUEST_TYPE_name = map[int32]string{ - 0: "CREATE_SHARE", - 1: "DELETE_SHARE", - 2: "EXTEND_SHARE", - 3: "SHRINK_SHARE", - 4: "MANAGE_EXISTING", - 5: "UNMANAGE", - 6: "GET_CAPACITIES", -} - -var MANILA_REQUEST_TYPE_value = map[string]int32{ - "CREATE_SHARE": 0, - "DELETE_SHARE": 1, - "EXTEND_SHARE": 2, - "SHRINK_SHARE": 3, - "MANAGE_EXISTING": 4, - "UNMANAGE": 5, - "GET_CAPACITIES": 6, -} - -func (x MANILA_REQUEST_TYPE) String() string { - return proto.EnumName(MANILA_REQUEST_TYPE_name, int32(x)) -} - -func (MANILA_REQUEST_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} -} - -type NSRequest_VersionRequest_VERSION_CMD int32 - -const ( - NSRequest_VersionRequest_CREATE NSRequest_VersionRequest_VERSION_CMD = 0 - NSRequest_VersionRequest_PURGE NSRequest_VersionRequest_VERSION_CMD = 1 - NSRequest_VersionRequest_LIST NSRequest_VersionRequest_VERSION_CMD = 2 - NSRequest_VersionRequest_GRAB NSRequest_VersionRequest_VERSION_CMD = 3 -) - -var NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{ - 0: "CREATE", - 1: "PURGE", - 2: "LIST", - 3: "GRAB", -} - -var NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{ - "CREATE": 0, - "PURGE": 1, - "LIST": 2, - "GRAB": 3, -} - -func (x NSRequest_VersionRequest_VERSION_CMD) String() string { - return proto.EnumName(NSRequest_VersionRequest_VERSION_CMD_name, int32(x)) -} - -func (NSRequest_VersionRequest_VERSION_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7, 0} -} - -type NSRequest_RecycleRequest_RECYCLE_CMD int32 - -const ( - NSRequest_RecycleRequest_RESTORE NSRequest_RecycleRequest_RECYCLE_CMD = 0 - NSRequest_RecycleRequest_PURGE NSRequest_RecycleRequest_RECYCLE_CMD = 1 - NSRequest_RecycleRequest_LIST NSRequest_RecycleRequest_RECYCLE_CMD = 2 -) - -var NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{ - 0: "RESTORE", - 1: "PURGE", - 2: "LIST", -} - -var NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{ - "RESTORE": 0, - "PURGE": 1, - "LIST": 2, -} - -func (x NSRequest_RecycleRequest_RECYCLE_CMD) String() string { - return proto.EnumName(NSRequest_RecycleRequest_RECYCLE_CMD_name, int32(x)) -} - -func (NSRequest_RecycleRequest_RECYCLE_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} -} - -type NSRequest_AclRequest_ACL_COMMAND int32 - -const ( - NSRequest_AclRequest_NONE NSRequest_AclRequest_ACL_COMMAND = 0 - NSRequest_AclRequest_MODIFY NSRequest_AclRequest_ACL_COMMAND = 1 - NSRequest_AclRequest_LIST NSRequest_AclRequest_ACL_COMMAND = 2 -) - -var NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{ - 0: "NONE", - 1: "MODIFY", - 2: "LIST", -} - -var NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{ - "NONE": 0, - "MODIFY": 1, - "LIST": 2, -} - -func (x NSRequest_AclRequest_ACL_COMMAND) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_COMMAND_name, int32(x)) -} - -func (NSRequest_AclRequest_ACL_COMMAND) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 0} -} - -type NSRequest_AclRequest_ACL_TYPE int32 - -const ( - NSRequest_AclRequest_USER_ACL NSRequest_AclRequest_ACL_TYPE = 0 - NSRequest_AclRequest_SYS_ACL NSRequest_AclRequest_ACL_TYPE = 1 -) - -var NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{ - 0: "USER_ACL", - 1: "SYS_ACL", -} - -var NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{ - "USER_ACL": 0, - "SYS_ACL": 1, -} - -func (x NSRequest_AclRequest_ACL_TYPE) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_TYPE_name, int32(x)) -} - -func (NSRequest_AclRequest_ACL_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 1} -} - -type NSRequest_ShareRequest_LsShare_OutFormat int32 - -const ( - NSRequest_ShareRequest_LsShare_NONE NSRequest_ShareRequest_LsShare_OutFormat = 0 - NSRequest_ShareRequest_LsShare_MONITORING NSRequest_ShareRequest_LsShare_OutFormat = 1 - NSRequest_ShareRequest_LsShare_LISTING NSRequest_ShareRequest_LsShare_OutFormat = 2 - NSRequest_ShareRequest_LsShare_JSON NSRequest_ShareRequest_LsShare_OutFormat = 3 -) - -var NSRequest_ShareRequest_LsShare_OutFormat_name = map[int32]string{ - 0: "NONE", - 1: "MONITORING", - 2: "LISTING", - 3: "JSON", -} - -var NSRequest_ShareRequest_LsShare_OutFormat_value = map[string]int32{ - "NONE": 0, - "MONITORING": 1, - "LISTING": 2, - "JSON": 3, -} - -func (x NSRequest_ShareRequest_LsShare_OutFormat) String() string { - return proto.EnumName(NSRequest_ShareRequest_LsShare_OutFormat_name, int32(x)) -} - -func (NSRequest_ShareRequest_LsShare_OutFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 15, 0, 0} -} - -type NSRequest_ShareRequest_OperateShare_Op int32 - -const ( - NSRequest_ShareRequest_OperateShare_CREATE NSRequest_ShareRequest_OperateShare_Op = 0 - NSRequest_ShareRequest_OperateShare_REMOVE NSRequest_ShareRequest_OperateShare_Op = 1 - NSRequest_ShareRequest_OperateShare_SHARE NSRequest_ShareRequest_OperateShare_Op = 2 - NSRequest_ShareRequest_OperateShare_UNSHARE NSRequest_ShareRequest_OperateShare_Op = 3 - NSRequest_ShareRequest_OperateShare_ACCESS NSRequest_ShareRequest_OperateShare_Op = 4 - NSRequest_ShareRequest_OperateShare_MODIFY NSRequest_ShareRequest_OperateShare_Op = 5 -) - -var NSRequest_ShareRequest_OperateShare_Op_name = map[int32]string{ - 0: "CREATE", - 1: "REMOVE", - 2: "SHARE", - 3: "UNSHARE", - 4: "ACCESS", - 5: "MODIFY", -} - -var NSRequest_ShareRequest_OperateShare_Op_value = map[string]int32{ - "CREATE": 0, - "REMOVE": 1, - "SHARE": 2, - "UNSHARE": 3, - "ACCESS": 4, - "MODIFY": 5, -} - -func (x NSRequest_ShareRequest_OperateShare_Op) String() string { - return proto.EnumName(NSRequest_ShareRequest_OperateShare_Op_name, int32(x)) -} - -func (NSRequest_ShareRequest_OperateShare_Op) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 15, 1, 0} -} - -type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE int32 - -const ( - NSResponse_RecycleResponse_RecycleInfo_FILE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 0 - NSResponse_RecycleResponse_RecycleInfo_TREE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 1 -) - -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{ - 0: "FILE", - 1: "TREE", -} - -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{ - "FILE": 0, - "TREE": 1, -} - -func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) String() string { - return proto.EnumName(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, int32(x)) -} - -func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0, 0} -} - -type PingRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PingRequest) Reset() { *m = PingRequest{} } -func (m *PingRequest) String() string { return proto.CompactTextString(m) } -func (*PingRequest) ProtoMessage() {} -func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} -} - -func (m *PingRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingRequest.Unmarshal(m, b) -} -func (m *PingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingRequest.Marshal(b, m, deterministic) -} -func (m *PingRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingRequest.Merge(m, src) -} -func (m *PingRequest) XXX_Size() int { - return xxx_messageInfo_PingRequest.Size(m) -} -func (m *PingRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PingRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_PingRequest proto.InternalMessageInfo - -func (m *PingRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -func (m *PingRequest) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -type PingReply struct { - Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PingReply) Reset() { *m = PingReply{} } -func (m *PingReply) String() string { return proto.CompactTextString(m) } -func (*PingReply) ProtoMessage() {} -func (*PingReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} -} - -func (m *PingReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingReply.Unmarshal(m, b) -} -func (m *PingReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingReply.Marshal(b, m, deterministic) -} -func (m *PingReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingReply.Merge(m, src) -} -func (m *PingReply) XXX_Size() int { - return xxx_messageInfo_PingReply.Size(m) -} -func (m *PingReply) XXX_DiscardUnknown() { - xxx_messageInfo_PingReply.DiscardUnknown(m) -} - -var xxx_messageInfo_PingReply proto.InternalMessageInfo - -func (m *PingReply) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -type ContainerInsertRequest struct { - Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ContainerInsertRequest) Reset() { *m = ContainerInsertRequest{} } -func (m *ContainerInsertRequest) String() string { return proto.CompactTextString(m) } -func (*ContainerInsertRequest) ProtoMessage() {} -func (*ContainerInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} -} - -func (m *ContainerInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerInsertRequest.Unmarshal(m, b) -} -func (m *ContainerInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerInsertRequest.Marshal(b, m, deterministic) -} -func (m *ContainerInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerInsertRequest.Merge(m, src) -} -func (m *ContainerInsertRequest) XXX_Size() int { - return xxx_messageInfo_ContainerInsertRequest.Size(m) -} -func (m *ContainerInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerInsertRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ContainerInsertRequest proto.InternalMessageInfo - -func (m *ContainerInsertRequest) GetContainer() []*ContainerMdProto { - if m != nil { - return m.Container - } - return nil -} - -func (m *ContainerInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -func (m *ContainerInsertRequest) GetInheritMd() bool { - if m != nil { - return m.InheritMd - } - return false -} - -type FileInsertRequest struct { - Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileInsertRequest) Reset() { *m = FileInsertRequest{} } -func (m *FileInsertRequest) String() string { return proto.CompactTextString(m) } -func (*FileInsertRequest) ProtoMessage() {} -func (*FileInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} -} - -func (m *FileInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileInsertRequest.Unmarshal(m, b) -} -func (m *FileInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileInsertRequest.Marshal(b, m, deterministic) -} -func (m *FileInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileInsertRequest.Merge(m, src) -} -func (m *FileInsertRequest) XXX_Size() int { - return xxx_messageInfo_FileInsertRequest.Size(m) -} -func (m *FileInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FileInsertRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FileInsertRequest proto.InternalMessageInfo - -func (m *FileInsertRequest) GetFiles() []*FileMdProto { - if m != nil { - return m.Files - } - return nil -} - -func (m *FileInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -type InsertReply struct { - Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"` - Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InsertReply) Reset() { *m = InsertReply{} } -func (m *InsertReply) String() string { return proto.CompactTextString(m) } -func (*InsertReply) ProtoMessage() {} -func (*InsertReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} -} - -func (m *InsertReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InsertReply.Unmarshal(m, b) -} -func (m *InsertReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InsertReply.Marshal(b, m, deterministic) -} -func (m *InsertReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_InsertReply.Merge(m, src) -} -func (m *InsertReply) XXX_Size() int { - return xxx_messageInfo_InsertReply.Size(m) -} -func (m *InsertReply) XXX_DiscardUnknown() { - xxx_messageInfo_InsertReply.DiscardUnknown(m) -} - -var xxx_messageInfo_InsertReply proto.InternalMessageInfo - -func (m *InsertReply) GetMessage() []string { - if m != nil { - return m.Message - } - return nil -} - -func (m *InsertReply) GetRetc() []uint32 { - if m != nil { - return m.Retc - } - return nil -} - -type Time struct { - Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"` - NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Time) Reset() { *m = Time{} } -func (m *Time) String() string { return proto.CompactTextString(m) } -func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{5} -} - -func (m *Time) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Time.Unmarshal(m, b) -} -func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Time.Marshal(b, m, deterministic) -} -func (m *Time) XXX_Merge(src proto.Message) { - xxx_messageInfo_Time.Merge(m, src) -} -func (m *Time) XXX_Size() int { - return xxx_messageInfo_Time.Size(m) -} -func (m *Time) XXX_DiscardUnknown() { - xxx_messageInfo_Time.DiscardUnknown(m) -} - -var xxx_messageInfo_Time proto.InternalMessageInfo - -func (m *Time) GetSec() uint64 { - if m != nil { - return m.Sec - } - return 0 -} - -func (m *Time) GetNSec() uint64 { - if m != nil { - return m.NSec - } - return 0 -} - -type Checksum struct { - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Checksum) Reset() { *m = Checksum{} } -func (m *Checksum) String() string { return proto.CompactTextString(m) } -func (*Checksum) ProtoMessage() {} -func (*Checksum) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{6} -} - -func (m *Checksum) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Checksum.Unmarshal(m, b) -} -func (m *Checksum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Checksum.Marshal(b, m, deterministic) -} -func (m *Checksum) XXX_Merge(src proto.Message) { - xxx_messageInfo_Checksum.Merge(m, src) -} -func (m *Checksum) XXX_Size() int { - return xxx_messageInfo_Checksum.Size(m) -} -func (m *Checksum) XXX_DiscardUnknown() { - xxx_messageInfo_Checksum.DiscardUnknown(m) -} - -var xxx_messageInfo_Checksum proto.InternalMessageInfo - -func (m *Checksum) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *Checksum) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -type FileMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` - LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"` - Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"` - Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"` - Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"` - UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` - Inode uint64 `protobuf:"varint,18,opt,name=inode,proto3" json:"inode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileMdProto) Reset() { *m = FileMdProto{} } -func (m *FileMdProto) String() string { return proto.CompactTextString(m) } -func (*FileMdProto) ProtoMessage() {} -func (*FileMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{7} -} - -func (m *FileMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileMdProto.Unmarshal(m, b) -} -func (m *FileMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileMdProto.Marshal(b, m, deterministic) -} -func (m *FileMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileMdProto.Merge(m, src) -} -func (m *FileMdProto) XXX_Size() int { - return xxx_messageInfo_FileMdProto.Size(m) -} -func (m *FileMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_FileMdProto.DiscardUnknown(m) -} - -var xxx_messageInfo_FileMdProto proto.InternalMessageInfo - -func (m *FileMdProto) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *FileMdProto) GetContId() uint64 { - if m != nil { - return m.ContId - } - return 0 -} - -func (m *FileMdProto) GetUid() uint64 { - if m != nil { - return m.Uid - } - return 0 -} - -func (m *FileMdProto) GetGid() uint64 { - if m != nil { - return m.Gid - } - return 0 -} - -func (m *FileMdProto) GetSize() uint64 { - if m != nil { - return m.Size - } - return 0 -} - -func (m *FileMdProto) GetLayoutId() uint32 { - if m != nil { - return m.LayoutId - } - return 0 -} - -func (m *FileMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags - } - return 0 -} - -func (m *FileMdProto) GetName() []byte { - if m != nil { - return m.Name - } - return nil -} - -func (m *FileMdProto) GetLinkName() []byte { - if m != nil { - return m.LinkName - } - return nil -} - -func (m *FileMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime - } - return nil -} - -func (m *FileMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime - } - return nil -} - -func (m *FileMdProto) GetChecksum() *Checksum { - if m != nil { - return m.Checksum - } - return nil -} - -func (m *FileMdProto) GetLocations() []uint32 { - if m != nil { - return m.Locations - } - return nil -} - -func (m *FileMdProto) GetUnlinkLocations() []uint32 { - if m != nil { - return m.UnlinkLocations - } - return nil -} - -func (m *FileMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs - } - return nil -} - -func (m *FileMdProto) GetPath() []byte { - if m != nil { - return m.Path - } - return nil -} - -func (m *FileMdProto) GetEtag() string { - if m != nil { - return m.Etag - } - return "" -} - -func (m *FileMdProto) GetInode() uint64 { - if m != nil { - return m.Inode - } - return 0 -} - -type ContainerMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"` - Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` - Inode uint64 `protobuf:"varint,15,opt,name=inode,proto3" json:"inode,omitempty"` - Files uint64 `protobuf:"varint,16,opt,name=files,proto3" json:"files,omitempty"` - Containers uint64 `protobuf:"varint,17,opt,name=containers,proto3" json:"containers,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ContainerMdProto) Reset() { *m = ContainerMdProto{} } -func (m *ContainerMdProto) String() string { return proto.CompactTextString(m) } -func (*ContainerMdProto) ProtoMessage() {} -func (*ContainerMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{8} -} - -func (m *ContainerMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerMdProto.Unmarshal(m, b) -} -func (m *ContainerMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerMdProto.Marshal(b, m, deterministic) -} -func (m *ContainerMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerMdProto.Merge(m, src) -} -func (m *ContainerMdProto) XXX_Size() int { - return xxx_messageInfo_ContainerMdProto.Size(m) -} -func (m *ContainerMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerMdProto.DiscardUnknown(m) -} - -var xxx_messageInfo_ContainerMdProto proto.InternalMessageInfo - -func (m *ContainerMdProto) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *ContainerMdProto) GetParentId() uint64 { - if m != nil { - return m.ParentId - } - return 0 -} - -func (m *ContainerMdProto) GetUid() uint64 { - if m != nil { - return m.Uid - } - return 0 -} - -func (m *ContainerMdProto) GetGid() uint64 { - if m != nil { - return m.Gid - } - return 0 -} - -func (m *ContainerMdProto) GetTreeSize() int64 { - if m != nil { - return m.TreeSize - } - return 0 -} - -func (m *ContainerMdProto) GetMode() uint32 { - if m != nil { - return m.Mode - } - return 0 -} - -func (m *ContainerMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags - } - return 0 -} - -func (m *ContainerMdProto) GetName() []byte { - if m != nil { - return m.Name - } - return nil -} - -func (m *ContainerMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime - } - return nil -} - -func (m *ContainerMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime - } - return nil -} - -func (m *ContainerMdProto) GetStime() *Time { - if m != nil { - return m.Stime - } - return nil -} - -func (m *ContainerMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs - } - return nil -} - -func (m *ContainerMdProto) GetPath() []byte { - if m != nil { - return m.Path - } - return nil -} - -func (m *ContainerMdProto) GetEtag() string { - if m != nil { - return m.Etag - } - return "" -} - -func (m *ContainerMdProto) GetInode() uint64 { - if m != nil { - return m.Inode - } - return 0 -} - -func (m *ContainerMdProto) GetFiles() uint64 { - if m != nil { - return m.Files - } - return 0 -} - -func (m *ContainerMdProto) GetContainers() uint64 { - if m != nil { - return m.Containers - } - return 0 -} - -type QuotaProto struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"` - Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"` - Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"` - Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"` - Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"` - Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"` - Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"` - Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QuotaProto) Reset() { *m = QuotaProto{} } -func (m *QuotaProto) String() string { return proto.CompactTextString(m) } -func (*QuotaProto) ProtoMessage() {} -func (*QuotaProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{9} -} - -func (m *QuotaProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_QuotaProto.Unmarshal(m, b) -} -func (m *QuotaProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_QuotaProto.Marshal(b, m, deterministic) -} -func (m *QuotaProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuotaProto.Merge(m, src) -} -func (m *QuotaProto) XXX_Size() int { - return xxx_messageInfo_QuotaProto.Size(m) -} -func (m *QuotaProto) XXX_DiscardUnknown() { - xxx_messageInfo_QuotaProto.DiscardUnknown(m) -} - -var xxx_messageInfo_QuotaProto proto.InternalMessageInfo - -func (m *QuotaProto) GetPath() []byte { - if m != nil { - return m.Path - } - return nil -} - -func (m *QuotaProto) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *QuotaProto) GetType() QUOTATYPE { - if m != nil { - return m.Type - } - return QUOTATYPE_USER -} - -func (m *QuotaProto) GetUsedbytes() uint64 { - if m != nil { - return m.Usedbytes - } - return 0 -} - -func (m *QuotaProto) GetUsedlogicalbytes() uint64 { - if m != nil { - return m.Usedlogicalbytes - } - return 0 -} - -func (m *QuotaProto) GetUsedfiles() uint64 { - if m != nil { - return m.Usedfiles - } - return 0 -} - -func (m *QuotaProto) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes - } - return 0 -} - -func (m *QuotaProto) GetMaxlogicalbytes() uint64 { - if m != nil { - return m.Maxlogicalbytes - } - return 0 -} - -func (m *QuotaProto) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles - } - return 0 -} - -func (m *QuotaProto) GetPercentageusedbytes() float32 { - if m != nil { - return m.Percentageusedbytes - } - return 0 -} - -func (m *QuotaProto) GetPercentageusedfiles() float32 { - if m != nil { - return m.Percentageusedfiles - } - return 0 -} - -func (m *QuotaProto) GetStatusbytes() string { - if m != nil { - return m.Statusbytes - } - return "" -} - -func (m *QuotaProto) GetStatusfiles() string { - if m != nil { - return m.Statusfiles - } - return "" -} - -type RoleId struct { - Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RoleId) Reset() { *m = RoleId{} } -func (m *RoleId) String() string { return proto.CompactTextString(m) } -func (*RoleId) ProtoMessage() {} -func (*RoleId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{10} -} - -func (m *RoleId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RoleId.Unmarshal(m, b) -} -func (m *RoleId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RoleId.Marshal(b, m, deterministic) -} -func (m *RoleId) XXX_Merge(src proto.Message) { - xxx_messageInfo_RoleId.Merge(m, src) -} -func (m *RoleId) XXX_Size() int { - return xxx_messageInfo_RoleId.Size(m) -} -func (m *RoleId) XXX_DiscardUnknown() { - xxx_messageInfo_RoleId.DiscardUnknown(m) -} - -var xxx_messageInfo_RoleId proto.InternalMessageInfo - -func (m *RoleId) GetUid() uint64 { - if m != nil { - return m.Uid - } - return 0 -} - -func (m *RoleId) GetGid() uint64 { - if m != nil { - return m.Gid - } - return 0 -} - -func (m *RoleId) GetUsername() string { - if m != nil { - return m.Username - } - return "" -} - -func (m *RoleId) GetGroupname() string { - if m != nil { - return m.Groupname - } - return "" -} - -type MDId struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"` - Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"` - Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDId) Reset() { *m = MDId{} } -func (m *MDId) String() string { return proto.CompactTextString(m) } -func (*MDId) ProtoMessage() {} -func (*MDId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{11} -} - -func (m *MDId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDId.Unmarshal(m, b) -} -func (m *MDId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDId.Marshal(b, m, deterministic) -} -func (m *MDId) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDId.Merge(m, src) -} -func (m *MDId) XXX_Size() int { - return xxx_messageInfo_MDId.Size(m) -} -func (m *MDId) XXX_DiscardUnknown() { - xxx_messageInfo_MDId.DiscardUnknown(m) -} - -var xxx_messageInfo_MDId proto.InternalMessageInfo - -func (m *MDId) GetPath() []byte { - if m != nil { - return m.Path - } - return nil -} - -func (m *MDId) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *MDId) GetIno() uint64 { - if m != nil { - return m.Ino - } - return 0 -} - -func (m *MDId) GetType() TYPE { - if m != nil { - return m.Type - } - return TYPE_FILE -} - -type Limit struct { - Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"` - Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` - Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Limit) Reset() { *m = Limit{} } -func (m *Limit) String() string { return proto.CompactTextString(m) } -func (*Limit) ProtoMessage() {} -func (*Limit) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{12} -} - -func (m *Limit) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Limit.Unmarshal(m, b) -} -func (m *Limit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Limit.Marshal(b, m, deterministic) -} -func (m *Limit) XXX_Merge(src proto.Message) { - xxx_messageInfo_Limit.Merge(m, src) -} -func (m *Limit) XXX_Size() int { - return xxx_messageInfo_Limit.Size(m) -} -func (m *Limit) XXX_DiscardUnknown() { - xxx_messageInfo_Limit.DiscardUnknown(m) -} - -var xxx_messageInfo_Limit proto.InternalMessageInfo - -func (m *Limit) GetZero() bool { - if m != nil { - return m.Zero - } - return false -} - -func (m *Limit) GetMin() uint64 { - if m != nil { - return m.Min - } - return 0 -} - -func (m *Limit) GetMax() uint64 { - if m != nil { - return m.Max - } - return 0 -} - -type MDSelection struct { - Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"` - Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"` - Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"` - Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"` - Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"` - Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"` - UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"` - Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"` - Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"` - Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"` - Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"` - Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"` - Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"` - OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"` - GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"` - RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"` - RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"` - Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDSelection) Reset() { *m = MDSelection{} } -func (m *MDSelection) String() string { return proto.CompactTextString(m) } -func (*MDSelection) ProtoMessage() {} -func (*MDSelection) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{13} -} - -func (m *MDSelection) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDSelection.Unmarshal(m, b) -} -func (m *MDSelection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDSelection.Marshal(b, m, deterministic) -} -func (m *MDSelection) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDSelection.Merge(m, src) -} -func (m *MDSelection) XXX_Size() int { - return xxx_messageInfo_MDSelection.Size(m) -} -func (m *MDSelection) XXX_DiscardUnknown() { - xxx_messageInfo_MDSelection.DiscardUnknown(m) -} - -var xxx_messageInfo_MDSelection proto.InternalMessageInfo - -func (m *MDSelection) GetSelect() bool { - if m != nil { - return m.Select - } - return false -} - -func (m *MDSelection) GetCtime() *Limit { - if m != nil { - return m.Ctime - } - return nil -} - -func (m *MDSelection) GetMtime() *Limit { - if m != nil { - return m.Mtime - } - return nil -} - -func (m *MDSelection) GetStime() *Limit { - if m != nil { - return m.Stime - } - return nil -} - -func (m *MDSelection) GetSize() *Limit { - if m != nil { - return m.Size - } - return nil -} - -func (m *MDSelection) GetTreesize() *Limit { - if m != nil { - return m.Treesize - } - return nil -} - -func (m *MDSelection) GetChildren() *Limit { - if m != nil { - return m.Children - } - return nil -} - -func (m *MDSelection) GetLocations() *Limit { - if m != nil { - return m.Locations - } - return nil -} - -func (m *MDSelection) GetUnlinkedLocations() *Limit { - if m != nil { - return m.UnlinkedLocations - } - return nil -} - -func (m *MDSelection) GetLayoutid() uint64 { - if m != nil { - return m.Layoutid - } - return 0 -} - -func (m *MDSelection) GetFlags() uint64 { - if m != nil { - return m.Flags - } - return 0 -} - -func (m *MDSelection) GetSymlink() bool { - if m != nil { - return m.Symlink - } - return false -} - -func (m *MDSelection) GetChecksum() *Checksum { - if m != nil { - return m.Checksum - } - return nil -} - -func (m *MDSelection) GetOwner() uint32 { - if m != nil { - return m.Owner - } - return 0 -} - -func (m *MDSelection) GetGroup() uint32 { - if m != nil { - return m.Group - } - return 0 -} - -func (m *MDSelection) GetOwnerRoot() bool { - if m != nil { - return m.OwnerRoot - } - return false -} - -func (m *MDSelection) GetGroupRoot() bool { - if m != nil { - return m.GroupRoot - } - return false -} - -func (m *MDSelection) GetRegexpFilename() []byte { - if m != nil { - return m.RegexpFilename - } - return nil -} - -func (m *MDSelection) GetRegexpDirname() []byte { - if m != nil { - return m.RegexpDirname - } - return nil -} - -func (m *MDSelection) GetXattr() map[string][]byte { - if m != nil { - return m.Xattr - } - return nil -} - -type MDRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"` - Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDRequest) Reset() { *m = MDRequest{} } -func (m *MDRequest) String() string { return proto.CompactTextString(m) } -func (*MDRequest) ProtoMessage() {} -func (*MDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{14} -} - -func (m *MDRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDRequest.Unmarshal(m, b) -} -func (m *MDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDRequest.Marshal(b, m, deterministic) -} -func (m *MDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDRequest.Merge(m, src) -} -func (m *MDRequest) XXX_Size() int { - return xxx_messageInfo_MDRequest.Size(m) -} -func (m *MDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_MDRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_MDRequest proto.InternalMessageInfo - -func (m *MDRequest) GetType() TYPE { - if m != nil { - return m.Type - } - return TYPE_FILE -} - -func (m *MDRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *MDRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -func (m *MDRequest) GetRole() *RoleId { - if m != nil { - return m.Role - } - return nil -} - -func (m *MDRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection - } - return nil -} - -type MDResponse struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"` - Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDResponse) Reset() { *m = MDResponse{} } -func (m *MDResponse) String() string { return proto.CompactTextString(m) } -func (*MDResponse) ProtoMessage() {} -func (*MDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{15} -} - -func (m *MDResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDResponse.Unmarshal(m, b) -} -func (m *MDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDResponse.Marshal(b, m, deterministic) -} -func (m *MDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDResponse.Merge(m, src) -} -func (m *MDResponse) XXX_Size() int { - return xxx_messageInfo_MDResponse.Size(m) -} -func (m *MDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MDResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MDResponse proto.InternalMessageInfo - -func (m *MDResponse) GetType() TYPE { - if m != nil { - return m.Type - } - return TYPE_FILE -} - -func (m *MDResponse) GetFmd() *FileMdProto { - if m != nil { - return m.Fmd - } - return nil -} - -func (m *MDResponse) GetCmd() *ContainerMdProto { - if m != nil { - return m.Cmd - } - return nil -} - -type FindRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` - Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"` - Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"` - Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FindRequest) Reset() { *m = FindRequest{} } -func (m *FindRequest) String() string { return proto.CompactTextString(m) } -func (*FindRequest) ProtoMessage() {} -func (*FindRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{16} -} - -func (m *FindRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FindRequest.Unmarshal(m, b) -} -func (m *FindRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FindRequest.Marshal(b, m, deterministic) -} -func (m *FindRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FindRequest.Merge(m, src) -} -func (m *FindRequest) XXX_Size() int { - return xxx_messageInfo_FindRequest.Size(m) -} -func (m *FindRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FindRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FindRequest proto.InternalMessageInfo - -func (m *FindRequest) GetType() TYPE { - if m != nil { - return m.Type - } - return TYPE_FILE -} - -func (m *FindRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *FindRequest) GetRole() *RoleId { - if m != nil { - return m.Role - } - return nil -} - -func (m *FindRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -func (m *FindRequest) GetMaxdepth() uint64 { - if m != nil { - return m.Maxdepth - } - return 0 -} - -func (m *FindRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection - } - return nil -} - -type ShareAuth struct { - Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareAuth) Reset() { *m = ShareAuth{} } -func (m *ShareAuth) String() string { return proto.CompactTextString(m) } -func (*ShareAuth) ProtoMessage() {} -func (*ShareAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{17} -} - -func (m *ShareAuth) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareAuth.Unmarshal(m, b) -} -func (m *ShareAuth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareAuth.Marshal(b, m, deterministic) -} -func (m *ShareAuth) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareAuth.Merge(m, src) -} -func (m *ShareAuth) XXX_Size() int { - return xxx_messageInfo_ShareAuth.Size(m) -} -func (m *ShareAuth) XXX_DiscardUnknown() { - xxx_messageInfo_ShareAuth.DiscardUnknown(m) -} - -var xxx_messageInfo_ShareAuth proto.InternalMessageInfo - -func (m *ShareAuth) GetProt() string { - if m != nil { - return m.Prot - } - return "" -} - -func (m *ShareAuth) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *ShareAuth) GetHost() string { - if m != nil { - return m.Host - } - return "" -} - -type ShareProto struct { - Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"` - Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"` - Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` - Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"` - Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"` - Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"` - Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"` - Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareProto) Reset() { *m = ShareProto{} } -func (m *ShareProto) String() string { return proto.CompactTextString(m) } -func (*ShareProto) ProtoMessage() {} -func (*ShareProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{18} -} - -func (m *ShareProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareProto.Unmarshal(m, b) -} -func (m *ShareProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareProto.Marshal(b, m, deterministic) -} -func (m *ShareProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareProto.Merge(m, src) -} -func (m *ShareProto) XXX_Size() int { - return xxx_messageInfo_ShareProto.Size(m) -} -func (m *ShareProto) XXX_DiscardUnknown() { - xxx_messageInfo_ShareProto.DiscardUnknown(m) -} - -var xxx_messageInfo_ShareProto proto.InternalMessageInfo - -func (m *ShareProto) GetPermission() string { - if m != nil { - return m.Permission - } - return "" -} - -func (m *ShareProto) GetExpires() uint64 { - if m != nil { - return m.Expires - } - return 0 -} - -func (m *ShareProto) GetOwner() string { - if m != nil { - return m.Owner - } - return "" -} - -func (m *ShareProto) GetGroup() string { - if m != nil { - return m.Group - } - return "" -} - -func (m *ShareProto) GetGeneration() uint64 { - if m != nil { - return m.Generation - } - return 0 -} - -func (m *ShareProto) GetPath() string { - if m != nil { - return m.Path - } - return "" -} - -func (m *ShareProto) GetAllowtree() bool { - if m != nil { - return m.Allowtree - } - return false -} - -func (m *ShareProto) GetVtoken() string { - if m != nil { - return m.Vtoken - } - return "" -} - -func (m *ShareProto) GetOrigins() []*ShareAuth { - if m != nil { - return m.Origins - } - return nil -} - -type ShareToken struct { - Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"` - Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareToken) Reset() { *m = ShareToken{} } -func (m *ShareToken) String() string { return proto.CompactTextString(m) } -func (*ShareToken) ProtoMessage() {} -func (*ShareToken) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{19} -} - -func (m *ShareToken) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareToken.Unmarshal(m, b) -} -func (m *ShareToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareToken.Marshal(b, m, deterministic) -} -func (m *ShareToken) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareToken.Merge(m, src) -} -func (m *ShareToken) XXX_Size() int { - return xxx_messageInfo_ShareToken.Size(m) -} -func (m *ShareToken) XXX_DiscardUnknown() { - xxx_messageInfo_ShareToken.DiscardUnknown(m) -} - -var xxx_messageInfo_ShareToken proto.InternalMessageInfo - -func (m *ShareToken) GetToken() *ShareProto { - if m != nil { - return m.Token - } - return nil -} - -func (m *ShareToken) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -func (m *ShareToken) GetSerialized() []byte { - if m != nil { - return m.Serialized - } - return nil -} - -func (m *ShareToken) GetSeed() int32 { - if m != nil { - return m.Seed - } - return 0 -} - -type NSRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - Role *RoleId `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - // Actual request data object - // - // Types that are valid to be assigned to Command: - // - // *NSRequest_Mkdir - // *NSRequest_Rmdir - // *NSRequest_Touch - // *NSRequest_Unlink - // *NSRequest_Rm - // *NSRequest_Rename - // *NSRequest_Symlink - // *NSRequest_Version - // *NSRequest_Recycle - // *NSRequest_Xattr - // *NSRequest_Chown - // *NSRequest_Chmod - // *NSRequest_Acl - // *NSRequest_Token - // *NSRequest_Quota - // *NSRequest_Share - Command isNSRequest_Command `protobuf_oneof:"command"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest) Reset() { *m = NSRequest{} } -func (m *NSRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest) ProtoMessage() {} -func (*NSRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20} -} - -func (m *NSRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest.Unmarshal(m, b) -} -func (m *NSRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest.Merge(m, src) -} -func (m *NSRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest.Size(m) -} -func (m *NSRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest proto.InternalMessageInfo - -func (m *NSRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -func (m *NSRequest) GetRole() *RoleId { - if m != nil { - return m.Role - } - return nil -} - -type isNSRequest_Command interface { - isNSRequest_Command() -} - -type NSRequest_Mkdir struct { - Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"` -} - -type NSRequest_Rmdir struct { - Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"` -} - -type NSRequest_Touch struct { - Touch *NSRequest_TouchRequest `protobuf:"bytes,23,opt,name=touch,proto3,oneof"` -} - -type NSRequest_Unlink struct { - Unlink *NSRequest_UnlinkRequest `protobuf:"bytes,24,opt,name=unlink,proto3,oneof"` -} - -type NSRequest_Rm struct { - Rm *NSRequest_RmRequest `protobuf:"bytes,25,opt,name=rm,proto3,oneof"` -} - -type NSRequest_Rename struct { - Rename *NSRequest_RenameRequest `protobuf:"bytes,26,opt,name=rename,proto3,oneof"` -} - -type NSRequest_Symlink struct { - Symlink *NSRequest_SymlinkRequest `protobuf:"bytes,27,opt,name=symlink,proto3,oneof"` -} - -type NSRequest_Version struct { - Version *NSRequest_VersionRequest `protobuf:"bytes,28,opt,name=version,proto3,oneof"` -} - -type NSRequest_Recycle struct { - Recycle *NSRequest_RecycleRequest `protobuf:"bytes,29,opt,name=recycle,proto3,oneof"` -} - -type NSRequest_Xattr struct { - Xattr *NSRequest_SetXAttrRequest `protobuf:"bytes,30,opt,name=xattr,proto3,oneof"` -} - -type NSRequest_Chown struct { - Chown *NSRequest_ChownRequest `protobuf:"bytes,31,opt,name=chown,proto3,oneof"` -} - -type NSRequest_Chmod struct { - Chmod *NSRequest_ChmodRequest `protobuf:"bytes,32,opt,name=chmod,proto3,oneof"` -} - -type NSRequest_Acl struct { - Acl *NSRequest_AclRequest `protobuf:"bytes,33,opt,name=acl,proto3,oneof"` -} - -type NSRequest_Token struct { - Token *NSRequest_TokenRequest `protobuf:"bytes,34,opt,name=token,proto3,oneof"` -} - -type NSRequest_Quota struct { - Quota *NSRequest_QuotaRequest `protobuf:"bytes,35,opt,name=quota,proto3,oneof"` -} - -type NSRequest_Share struct { - Share *NSRequest_ShareRequest `protobuf:"bytes,36,opt,name=share,proto3,oneof"` -} - -func (*NSRequest_Mkdir) isNSRequest_Command() {} - -func (*NSRequest_Rmdir) isNSRequest_Command() {} - -func (*NSRequest_Touch) isNSRequest_Command() {} - -func (*NSRequest_Unlink) isNSRequest_Command() {} - -func (*NSRequest_Rm) isNSRequest_Command() {} - -func (*NSRequest_Rename) isNSRequest_Command() {} - -func (*NSRequest_Symlink) isNSRequest_Command() {} - -func (*NSRequest_Version) isNSRequest_Command() {} - -func (*NSRequest_Recycle) isNSRequest_Command() {} - -func (*NSRequest_Xattr) isNSRequest_Command() {} - -func (*NSRequest_Chown) isNSRequest_Command() {} - -func (*NSRequest_Chmod) isNSRequest_Command() {} - -func (*NSRequest_Acl) isNSRequest_Command() {} - -func (*NSRequest_Token) isNSRequest_Command() {} - -func (*NSRequest_Quota) isNSRequest_Command() {} - -func (*NSRequest_Share) isNSRequest_Command() {} - -func (m *NSRequest) GetCommand() isNSRequest_Command { - if m != nil { - return m.Command - } - return nil -} - -func (m *NSRequest) GetMkdir() *NSRequest_MkdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Mkdir); ok { - return x.Mkdir - } - return nil -} - -func (m *NSRequest) GetRmdir() *NSRequest_RmdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Rmdir); ok { - return x.Rmdir - } - return nil -} - -func (m *NSRequest) GetTouch() *NSRequest_TouchRequest { - if x, ok := m.GetCommand().(*NSRequest_Touch); ok { - return x.Touch - } - return nil -} - -func (m *NSRequest) GetUnlink() *NSRequest_UnlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Unlink); ok { - return x.Unlink - } - return nil -} - -func (m *NSRequest) GetRm() *NSRequest_RmRequest { - if x, ok := m.GetCommand().(*NSRequest_Rm); ok { - return x.Rm - } - return nil -} - -func (m *NSRequest) GetRename() *NSRequest_RenameRequest { - if x, ok := m.GetCommand().(*NSRequest_Rename); ok { - return x.Rename - } - return nil -} - -func (m *NSRequest) GetSymlink() *NSRequest_SymlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Symlink); ok { - return x.Symlink - } - return nil -} - -func (m *NSRequest) GetVersion() *NSRequest_VersionRequest { - if x, ok := m.GetCommand().(*NSRequest_Version); ok { - return x.Version - } - return nil -} - -func (m *NSRequest) GetRecycle() *NSRequest_RecycleRequest { - if x, ok := m.GetCommand().(*NSRequest_Recycle); ok { - return x.Recycle - } - return nil -} - -func (m *NSRequest) GetXattr() *NSRequest_SetXAttrRequest { - if x, ok := m.GetCommand().(*NSRequest_Xattr); ok { - return x.Xattr - } - return nil -} - -func (m *NSRequest) GetChown() *NSRequest_ChownRequest { - if x, ok := m.GetCommand().(*NSRequest_Chown); ok { - return x.Chown - } - return nil -} - -func (m *NSRequest) GetChmod() *NSRequest_ChmodRequest { - if x, ok := m.GetCommand().(*NSRequest_Chmod); ok { - return x.Chmod - } - return nil -} - -func (m *NSRequest) GetAcl() *NSRequest_AclRequest { - if x, ok := m.GetCommand().(*NSRequest_Acl); ok { - return x.Acl - } - return nil -} - -func (m *NSRequest) GetToken() *NSRequest_TokenRequest { - if x, ok := m.GetCommand().(*NSRequest_Token); ok { - return x.Token - } - return nil -} - -func (m *NSRequest) GetQuota() *NSRequest_QuotaRequest { - if x, ok := m.GetCommand().(*NSRequest_Quota); ok { - return x.Quota - } - return nil -} - -func (m *NSRequest) GetShare() *NSRequest_ShareRequest { - if x, ok := m.GetCommand().(*NSRequest_Share); ok { - return x.Share - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NSRequest) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NSRequest_Mkdir)(nil), - (*NSRequest_Rmdir)(nil), - (*NSRequest_Touch)(nil), - (*NSRequest_Unlink)(nil), - (*NSRequest_Rm)(nil), - (*NSRequest_Rename)(nil), - (*NSRequest_Symlink)(nil), - (*NSRequest_Version)(nil), - (*NSRequest_Recycle)(nil), - (*NSRequest_Xattr)(nil), - (*NSRequest_Chown)(nil), - (*NSRequest_Chmod)(nil), - (*NSRequest_Acl)(nil), - (*NSRequest_Token)(nil), - (*NSRequest_Quota)(nil), - (*NSRequest_Share)(nil), - } -} - -type NSRequest_MkdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_MkdirRequest) Reset() { *m = NSRequest_MkdirRequest{} } -func (m *NSRequest_MkdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_MkdirRequest) ProtoMessage() {} -func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 0} -} - -func (m *NSRequest_MkdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_MkdirRequest.Unmarshal(m, b) -} -func (m *NSRequest_MkdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_MkdirRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_MkdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_MkdirRequest.Merge(m, src) -} -func (m *NSRequest_MkdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_MkdirRequest.Size(m) -} -func (m *NSRequest_MkdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_MkdirRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_MkdirRequest proto.InternalMessageInfo - -func (m *NSRequest_MkdirRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_MkdirRequest) GetRecursive() bool { - if m != nil { - return m.Recursive - } - return false -} - -func (m *NSRequest_MkdirRequest) GetMode() int64 { - if m != nil { - return m.Mode - } - return 0 -} - -type NSRequest_RmdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RmdirRequest) Reset() { *m = NSRequest_RmdirRequest{} } -func (m *NSRequest_RmdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmdirRequest) ProtoMessage() {} -func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 1} -} - -func (m *NSRequest_RmdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmdirRequest.Unmarshal(m, b) -} -func (m *NSRequest_RmdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmdirRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RmdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmdirRequest.Merge(m, src) -} -func (m *NSRequest_RmdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmdirRequest.Size(m) -} -func (m *NSRequest_RmdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmdirRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RmdirRequest proto.InternalMessageInfo - -func (m *NSRequest_RmdirRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -type NSRequest_TouchRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_TouchRequest) Reset() { *m = NSRequest_TouchRequest{} } -func (m *NSRequest_TouchRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TouchRequest) ProtoMessage() {} -func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 2} -} - -func (m *NSRequest_TouchRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TouchRequest.Unmarshal(m, b) -} -func (m *NSRequest_TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TouchRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_TouchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TouchRequest.Merge(m, src) -} -func (m *NSRequest_TouchRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TouchRequest.Size(m) -} -func (m *NSRequest_TouchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TouchRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_TouchRequest proto.InternalMessageInfo - -func (m *NSRequest_TouchRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -type NSRequest_UnlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_UnlinkRequest) Reset() { *m = NSRequest_UnlinkRequest{} } -func (m *NSRequest_UnlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_UnlinkRequest) ProtoMessage() {} -func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 3} -} - -func (m *NSRequest_UnlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_UnlinkRequest.Unmarshal(m, b) -} -func (m *NSRequest_UnlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_UnlinkRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_UnlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_UnlinkRequest.Merge(m, src) -} -func (m *NSRequest_UnlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_UnlinkRequest.Size(m) -} -func (m *NSRequest_UnlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_UnlinkRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_UnlinkRequest proto.InternalMessageInfo - -func (m *NSRequest_UnlinkRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_UnlinkRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle - } - return false -} - -type NSRequest_RmRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RmRequest) Reset() { *m = NSRequest_RmRequest{} } -func (m *NSRequest_RmRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmRequest) ProtoMessage() {} -func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 4} -} - -func (m *NSRequest_RmRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmRequest.Unmarshal(m, b) -} -func (m *NSRequest_RmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RmRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmRequest.Merge(m, src) -} -func (m *NSRequest_RmRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmRequest.Size(m) -} -func (m *NSRequest_RmRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RmRequest proto.InternalMessageInfo - -func (m *NSRequest_RmRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_RmRequest) GetRecursive() bool { - if m != nil { - return m.Recursive - } - return false -} - -func (m *NSRequest_RmRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle - } - return false -} - -type NSRequest_RenameRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RenameRequest) Reset() { *m = NSRequest_RenameRequest{} } -func (m *NSRequest_RenameRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RenameRequest) ProtoMessage() {} -func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 5} -} - -func (m *NSRequest_RenameRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RenameRequest.Unmarshal(m, b) -} -func (m *NSRequest_RenameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RenameRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RenameRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RenameRequest.Merge(m, src) -} -func (m *NSRequest_RenameRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RenameRequest.Size(m) -} -func (m *NSRequest_RenameRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RenameRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RenameRequest proto.InternalMessageInfo - -func (m *NSRequest_RenameRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_RenameRequest) GetTarget() []byte { - if m != nil { - return m.Target - } - return nil -} - -type NSRequest_SymlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_SymlinkRequest) Reset() { *m = NSRequest_SymlinkRequest{} } -func (m *NSRequest_SymlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SymlinkRequest) ProtoMessage() {} -func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 6} -} - -func (m *NSRequest_SymlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SymlinkRequest.Unmarshal(m, b) -} -func (m *NSRequest_SymlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SymlinkRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_SymlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SymlinkRequest.Merge(m, src) -} -func (m *NSRequest_SymlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SymlinkRequest.Size(m) -} -func (m *NSRequest_SymlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SymlinkRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_SymlinkRequest proto.InternalMessageInfo - -func (m *NSRequest_SymlinkRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_SymlinkRequest) GetTarget() []byte { - if m != nil { - return m.Target - } - return nil -} - -type NSRequest_VersionRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"` - Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"` - Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_VersionRequest) Reset() { *m = NSRequest_VersionRequest{} } -func (m *NSRequest_VersionRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_VersionRequest) ProtoMessage() {} -func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7} -} - -func (m *NSRequest_VersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_VersionRequest.Unmarshal(m, b) -} -func (m *NSRequest_VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_VersionRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_VersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_VersionRequest.Merge(m, src) -} -func (m *NSRequest_VersionRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_VersionRequest.Size(m) -} -func (m *NSRequest_VersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_VersionRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_VersionRequest proto.InternalMessageInfo - -func (m *NSRequest_VersionRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_VersionRequest_CREATE -} - -func (m *NSRequest_VersionRequest) GetMaxversion() int32 { - if m != nil { - return m.Maxversion - } - return 0 -} - -func (m *NSRequest_VersionRequest) GetGrabversion() string { - if m != nil { - return m.Grabversion - } - return "" -} - -type NSRequest_RecycleRequest struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"` - Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"` - Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"` - Listflag *NSRequest_RecycleRequest_ListFlags `protobuf:"bytes,5,opt,name=listflag,proto3" json:"listflag,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest) Reset() { *m = NSRequest_RecycleRequest{} } -func (m *NSRequest_RecycleRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest) ProtoMessage() {} -func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8} -} - -func (m *NSRequest_RecycleRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest.Merge(m, src) -} -func (m *NSRequest_RecycleRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest.Size(m) -} -func (m *NSRequest_RecycleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RecycleRequest proto.InternalMessageInfo - -func (m *NSRequest_RecycleRequest) GetKey() string { - if m != nil { - return m.Key - } - return "" -} - -func (m *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_RecycleRequest_RESTORE -} - -func (m *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags { - if m != nil { - return m.Restoreflag - } - return nil -} - -func (m *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate { - if m != nil { - return m.Purgedate - } - return nil -} - -func (m *NSRequest_RecycleRequest) GetListflag() *NSRequest_RecycleRequest_ListFlags { - if m != nil { - return m.Listflag - } - return nil -} - -type NSRequest_RecycleRequest_RestoreFlags struct { - Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"` - Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"` - Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest_RestoreFlags) Reset() { *m = NSRequest_RecycleRequest_RestoreFlags{} } -func (m *NSRequest_RecycleRequest_RestoreFlags) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {} -func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} -} - -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Merge(m, src) -} -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Size(m) -} -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags proto.InternalMessageInfo - -func (m *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool { - if m != nil { - return m.Force - } - return false -} - -func (m *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool { - if m != nil { - return m.Mkpath - } - return false -} - -func (m *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool { - if m != nil { - return m.Versions - } - return false -} - -type NSRequest_RecycleRequest_PurgeDate struct { - Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"` - Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"` - Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest_PurgeDate) Reset() { *m = NSRequest_RecycleRequest_PurgeDate{} } -func (m *NSRequest_RecycleRequest_PurgeDate) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {} -func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 1} -} - -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Merge(m, src) -} -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Size(m) -} -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate proto.InternalMessageInfo - -func (m *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 { - if m != nil { - return m.Year - } - return 0 -} - -func (m *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 { - if m != nil { - return m.Month - } - return 0 -} - -func (m *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 { - if m != nil { - return m.Day - } - return 0 -} - -type NSRequest_RecycleRequest_ListFlags struct { - Maxentries int32 `protobuf:"varint,1,opt,name=maxentries,proto3" json:"maxentries,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest_ListFlags) Reset() { *m = NSRequest_RecycleRequest_ListFlags{} } -func (m *NSRequest_RecycleRequest_ListFlags) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_ListFlags) ProtoMessage() {} -func (*NSRequest_RecycleRequest_ListFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 2} -} - -func (m *NSRequest_RecycleRequest_ListFlags) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest_ListFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest_ListFlags) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Merge(m, src) -} -func (m *NSRequest_RecycleRequest_ListFlags) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Size(m) -} -func (m *NSRequest_RecycleRequest_ListFlags) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_RecycleRequest_ListFlags proto.InternalMessageInfo - -func (m *NSRequest_RecycleRequest_ListFlags) GetMaxentries() int32 { - if m != nil { - return m.Maxentries - } - return 0 -} - -type NSRequest_SetXAttrRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"` - Create bool `protobuf:"varint,5,opt,name=create,proto3" json:"create,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_SetXAttrRequest) Reset() { *m = NSRequest_SetXAttrRequest{} } -func (m *NSRequest_SetXAttrRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SetXAttrRequest) ProtoMessage() {} -func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 9} -} - -func (m *NSRequest_SetXAttrRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Unmarshal(m, b) -} -func (m *NSRequest_SetXAttrRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_SetXAttrRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SetXAttrRequest.Merge(m, src) -} -func (m *NSRequest_SetXAttrRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Size(m) -} -func (m *NSRequest_SetXAttrRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SetXAttrRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_SetXAttrRequest proto.InternalMessageInfo - -func (m *NSRequest_SetXAttrRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs - } - return nil -} - -func (m *NSRequest_SetXAttrRequest) GetRecursive() bool { - if m != nil { - return m.Recursive - } - return false -} - -func (m *NSRequest_SetXAttrRequest) GetKeystodelete() []string { - if m != nil { - return m.Keystodelete - } - return nil -} - -func (m *NSRequest_SetXAttrRequest) GetCreate() bool { - if m != nil { - return m.Create - } - return false -} - -type NSRequest_ChownRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_ChownRequest) Reset() { *m = NSRequest_ChownRequest{} } -func (m *NSRequest_ChownRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChownRequest) ProtoMessage() {} -func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 10} -} - -func (m *NSRequest_ChownRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChownRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChownRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChownRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_ChownRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChownRequest.Merge(m, src) -} -func (m *NSRequest_ChownRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChownRequest.Size(m) -} -func (m *NSRequest_ChownRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChownRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_ChownRequest proto.InternalMessageInfo - -func (m *NSRequest_ChownRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_ChownRequest) GetOwner() *RoleId { - if m != nil { - return m.Owner - } - return nil -} - -type NSRequest_ChmodRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_ChmodRequest) Reset() { *m = NSRequest_ChmodRequest{} } -func (m *NSRequest_ChmodRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChmodRequest) ProtoMessage() {} -func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 11} -} - -func (m *NSRequest_ChmodRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChmodRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChmodRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChmodRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_ChmodRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChmodRequest.Merge(m, src) -} -func (m *NSRequest_ChmodRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChmodRequest.Size(m) -} -func (m *NSRequest_ChmodRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChmodRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_ChmodRequest proto.InternalMessageInfo - -func (m *NSRequest_ChmodRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_ChmodRequest) GetMode() int64 { - if m != nil { - return m.Mode - } - return 0 -} - -type NSRequest_AclRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"` - Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"` - Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_AclRequest) Reset() { *m = NSRequest_AclRequest{} } -func (m *NSRequest_AclRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_AclRequest) ProtoMessage() {} -func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12} -} - -func (m *NSRequest_AclRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_AclRequest.Unmarshal(m, b) -} -func (m *NSRequest_AclRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_AclRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_AclRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_AclRequest.Merge(m, src) -} -func (m *NSRequest_AclRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_AclRequest.Size(m) -} -func (m *NSRequest_AclRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_AclRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_AclRequest proto.InternalMessageInfo - -func (m *NSRequest_AclRequest) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND { - if m != nil { - return m.Cmd - } - return NSRequest_AclRequest_NONE -} - -func (m *NSRequest_AclRequest) GetRecursive() bool { - if m != nil { - return m.Recursive - } - return false -} - -func (m *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE { - if m != nil { - return m.Type - } - return NSRequest_AclRequest_USER_ACL -} - -func (m *NSRequest_AclRequest) GetRule() string { - if m != nil { - return m.Rule - } - return "" -} - -func (m *NSRequest_AclRequest) GetPosition() uint32 { - if m != nil { - return m.Position - } - return 0 -} - -type NSRequest_TokenRequest struct { - Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_TokenRequest) Reset() { *m = NSRequest_TokenRequest{} } -func (m *NSRequest_TokenRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TokenRequest) ProtoMessage() {} -func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 13} -} - -func (m *NSRequest_TokenRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TokenRequest.Unmarshal(m, b) -} -func (m *NSRequest_TokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TokenRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_TokenRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TokenRequest.Merge(m, src) -} -func (m *NSRequest_TokenRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TokenRequest.Size(m) -} -func (m *NSRequest_TokenRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TokenRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_TokenRequest proto.InternalMessageInfo - -func (m *NSRequest_TokenRequest) GetToken() *ShareToken { - if m != nil { - return m.Token - } - return nil -} - -type NSRequest_QuotaRequest struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"` - Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_QuotaRequest) Reset() { *m = NSRequest_QuotaRequest{} } -func (m *NSRequest_QuotaRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_QuotaRequest) ProtoMessage() {} -func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 14} -} - -func (m *NSRequest_QuotaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_QuotaRequest.Unmarshal(m, b) -} -func (m *NSRequest_QuotaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_QuotaRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_QuotaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_QuotaRequest.Merge(m, src) -} -func (m *NSRequest_QuotaRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_QuotaRequest.Size(m) -} -func (m *NSRequest_QuotaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_QuotaRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_QuotaRequest proto.InternalMessageInfo - -func (m *NSRequest_QuotaRequest) GetPath() []byte { - if m != nil { - return m.Path - } - return nil -} - -func (m *NSRequest_QuotaRequest) GetId() *RoleId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSRequest_QuotaRequest) GetOp() QUOTAOP { - if m != nil { - return m.Op - } - return QUOTAOP_GET -} - -func (m *NSRequest_QuotaRequest) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles - } - return 0 -} - -func (m *NSRequest_QuotaRequest) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes - } - return 0 -} - -func (m *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY { - if m != nil { - return m.Entry - } - return QUOTAENTRY_NONE -} - -type NSRequest_ShareRequest struct { - // Types that are valid to be assigned to Subcmd: - // - // *NSRequest_ShareRequest_Ls - // *NSRequest_ShareRequest_Op - Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_ShareRequest) Reset() { *m = NSRequest_ShareRequest{} } -func (m *NSRequest_ShareRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ShareRequest) ProtoMessage() {} -func (*NSRequest_ShareRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 15} -} - -func (m *NSRequest_ShareRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ShareRequest.Unmarshal(m, b) -} -func (m *NSRequest_ShareRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ShareRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_ShareRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ShareRequest.Merge(m, src) -} -func (m *NSRequest_ShareRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ShareRequest.Size(m) -} -func (m *NSRequest_ShareRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ShareRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_ShareRequest proto.InternalMessageInfo - -type isNSRequest_ShareRequest_Subcmd interface { - isNSRequest_ShareRequest_Subcmd() -} - -type NSRequest_ShareRequest_Ls struct { - Ls *NSRequest_ShareRequest_LsShare `protobuf:"bytes,1,opt,name=ls,proto3,oneof"` -} - -type NSRequest_ShareRequest_Op struct { - Op *NSRequest_ShareRequest_OperateShare `protobuf:"bytes,2,opt,name=op,proto3,oneof"` -} - -func (*NSRequest_ShareRequest_Ls) isNSRequest_ShareRequest_Subcmd() {} - -func (*NSRequest_ShareRequest_Op) isNSRequest_ShareRequest_Subcmd() {} - -func (m *NSRequest_ShareRequest) GetSubcmd() isNSRequest_ShareRequest_Subcmd { - if m != nil { - return m.Subcmd - } - return nil -} - -func (m *NSRequest_ShareRequest) GetLs() *NSRequest_ShareRequest_LsShare { - if x, ok := m.GetSubcmd().(*NSRequest_ShareRequest_Ls); ok { - return x.Ls - } - return nil -} - -func (m *NSRequest_ShareRequest) GetOp() *NSRequest_ShareRequest_OperateShare { - if x, ok := m.GetSubcmd().(*NSRequest_ShareRequest_Op); ok { - return x.Op - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NSRequest_ShareRequest) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NSRequest_ShareRequest_Ls)(nil), - (*NSRequest_ShareRequest_Op)(nil), - } -} - -type NSRequest_ShareRequest_LsShare struct { - Outformat NSRequest_ShareRequest_LsShare_OutFormat `protobuf:"varint,1,opt,name=outformat,proto3,enum=eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat" json:"outformat,omitempty"` - Selection string `protobuf:"bytes,2,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_ShareRequest_LsShare) Reset() { *m = NSRequest_ShareRequest_LsShare{} } -func (m *NSRequest_ShareRequest_LsShare) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ShareRequest_LsShare) ProtoMessage() {} -func (*NSRequest_ShareRequest_LsShare) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 15, 0} -} - -func (m *NSRequest_ShareRequest_LsShare) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Unmarshal(m, b) -} -func (m *NSRequest_ShareRequest_LsShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Marshal(b, m, deterministic) -} -func (m *NSRequest_ShareRequest_LsShare) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ShareRequest_LsShare.Merge(m, src) -} -func (m *NSRequest_ShareRequest_LsShare) XXX_Size() int { - return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Size(m) -} -func (m *NSRequest_ShareRequest_LsShare) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ShareRequest_LsShare.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_ShareRequest_LsShare proto.InternalMessageInfo - -func (m *NSRequest_ShareRequest_LsShare) GetOutformat() NSRequest_ShareRequest_LsShare_OutFormat { - if m != nil { - return m.Outformat - } - return NSRequest_ShareRequest_LsShare_NONE -} - -func (m *NSRequest_ShareRequest_LsShare) GetSelection() string { - if m != nil { - return m.Selection - } - return "" -} - -type NSRequest_ShareRequest_OperateShare struct { - Op NSRequest_ShareRequest_OperateShare_Op `protobuf:"varint,1,opt,name=op,proto3,enum=eos.rpc.NSRequest_ShareRequest_OperateShare_Op" json:"op,omitempty"` - Share string `protobuf:"bytes,2,opt,name=share,proto3" json:"share,omitempty"` - Acl string `protobuf:"bytes,3,opt,name=acl,proto3" json:"acl,omitempty"` - Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` - User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` - Group string `protobuf:"bytes,6,opt,name=group,proto3" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_ShareRequest_OperateShare) Reset() { *m = NSRequest_ShareRequest_OperateShare{} } -func (m *NSRequest_ShareRequest_OperateShare) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ShareRequest_OperateShare) ProtoMessage() {} -func (*NSRequest_ShareRequest_OperateShare) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 15, 1} -} - -func (m *NSRequest_ShareRequest_OperateShare) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Unmarshal(m, b) -} -func (m *NSRequest_ShareRequest_OperateShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Marshal(b, m, deterministic) -} -func (m *NSRequest_ShareRequest_OperateShare) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Merge(m, src) -} -func (m *NSRequest_ShareRequest_OperateShare) XXX_Size() int { - return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Size(m) -} -func (m *NSRequest_ShareRequest_OperateShare) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ShareRequest_OperateShare.DiscardUnknown(m) -} - -var xxx_messageInfo_NSRequest_ShareRequest_OperateShare proto.InternalMessageInfo - -func (m *NSRequest_ShareRequest_OperateShare) GetOp() NSRequest_ShareRequest_OperateShare_Op { - if m != nil { - return m.Op - } - return NSRequest_ShareRequest_OperateShare_CREATE -} - -func (m *NSRequest_ShareRequest_OperateShare) GetShare() string { - if m != nil { - return m.Share - } - return "" -} - -func (m *NSRequest_ShareRequest_OperateShare) GetAcl() string { - if m != nil { - return m.Acl - } - return "" -} - -func (m *NSRequest_ShareRequest_OperateShare) GetPath() string { - if m != nil { - return m.Path - } - return "" -} - -func (m *NSRequest_ShareRequest_OperateShare) GetUser() string { - if m != nil { - return m.User - } - return "" -} - -func (m *NSRequest_ShareRequest_OperateShare) GetGroup() string { - if m != nil { - return m.Group - } - return "" -} - -type NSResponse struct { - Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"` - Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"` - Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"` - Share *NSResponse_ShareResponse `protobuf:"bytes,6,opt,name=share,proto3" json:"share,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse) Reset() { *m = NSResponse{} } -func (m *NSResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse) ProtoMessage() {} -func (*NSResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21} -} - -func (m *NSResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse.Unmarshal(m, b) -} -func (m *NSResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse.Merge(m, src) -} -func (m *NSResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse.Size(m) -} -func (m *NSResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse proto.InternalMessageInfo - -func (m *NSResponse) GetError() *NSResponse_ErrorResponse { - if m != nil { - return m.Error - } - return nil -} - -func (m *NSResponse) GetVersion() *NSResponse_VersionResponse { - if m != nil { - return m.Version - } - return nil -} - -func (m *NSResponse) GetRecycle() *NSResponse_RecycleResponse { - if m != nil { - return m.Recycle - } - return nil -} - -func (m *NSResponse) GetAcl() *NSResponse_AclResponse { - if m != nil { - return m.Acl - } - return nil -} - -func (m *NSResponse) GetQuota() *NSResponse_QuotaResponse { - if m != nil { - return m.Quota - } - return nil -} - -func (m *NSResponse) GetShare() *NSResponse_ShareResponse { - if m != nil { - return m.Share - } - return nil -} - -type NSResponse_ErrorResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_ErrorResponse) Reset() { *m = NSResponse_ErrorResponse{} } -func (m *NSResponse_ErrorResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ErrorResponse) ProtoMessage() {} -func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 0} -} - -func (m *NSResponse_ErrorResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ErrorResponse.Unmarshal(m, b) -} -func (m *NSResponse_ErrorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ErrorResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_ErrorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ErrorResponse.Merge(m, src) -} -func (m *NSResponse_ErrorResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_ErrorResponse.Size(m) -} -func (m *NSResponse_ErrorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ErrorResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_ErrorResponse proto.InternalMessageInfo - -func (m *NSResponse_ErrorResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_ErrorResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -type NSResponse_VersionResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_VersionResponse) Reset() { *m = NSResponse_VersionResponse{} } -func (m *NSResponse_VersionResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse) ProtoMessage() {} -func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1} -} - -func (m *NSResponse_VersionResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse.Merge(m, src) -} -func (m *NSResponse_VersionResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse.Size(m) -} -func (m *NSResponse_VersionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_VersionResponse proto.InternalMessageInfo - -func (m *NSResponse_VersionResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_VersionResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo { - if m != nil { - return m.Versions - } - return nil -} - -type NSResponse_VersionResponse_VersionInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_VersionResponse_VersionInfo) Reset() { - *m = NSResponse_VersionResponse_VersionInfo{} -} -func (m *NSResponse_VersionResponse_VersionInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {} -func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1, 0} -} - -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Merge(m, src) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Size(m) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_VersionResponse_VersionInfo proto.InternalMessageInfo - -func (m *NSResponse_VersionResponse_VersionInfo) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time { - if m != nil { - return m.Mtime - } - return nil -} - -type NSResponse_RecycleResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse) Reset() { *m = NSResponse_RecycleResponse{} } -func (m *NSResponse_RecycleResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse) ProtoMessage() {} -func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2} -} - -func (m *NSResponse_RecycleResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse.Merge(m, src) -} -func (m *NSResponse_RecycleResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse.Size(m) -} -func (m *NSResponse_RecycleResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_RecycleResponse proto.InternalMessageInfo - -func (m *NSResponse_RecycleResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_RecycleResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo { - if m != nil { - return m.Recycles - } - return nil -} - -type NSResponse_RecycleResponse_RecycleInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"` - Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` - Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"` - Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) Reset() { - *m = NSResponse_RecycleResponse_RecycleInfo{} -} -func (m *NSResponse_RecycleResponse_RecycleInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {} -func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0} -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Merge(m, src) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Size(m) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo proto.InternalMessageInfo - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId { - if m != nil { - return m.Id - } - return nil -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId { - if m != nil { - return m.Owner - } - return nil -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time { - if m != nil { - return m.Dtime - } - return nil -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 { - if m != nil { - return m.Size - } - return 0 -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { - if m != nil { - return m.Type - } - return NSResponse_RecycleResponse_RecycleInfo_FILE -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) GetKey() string { - if m != nil { - return m.Key - } - return "" -} - -type NSResponse_AclResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_AclResponse) Reset() { *m = NSResponse_AclResponse{} } -func (m *NSResponse_AclResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_AclResponse) ProtoMessage() {} -func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 3} -} - -func (m *NSResponse_AclResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_AclResponse.Unmarshal(m, b) -} -func (m *NSResponse_AclResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_AclResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_AclResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_AclResponse.Merge(m, src) -} -func (m *NSResponse_AclResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_AclResponse.Size(m) -} -func (m *NSResponse_AclResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_AclResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_AclResponse proto.InternalMessageInfo - -func (m *NSResponse_AclResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_AclResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *NSResponse_AclResponse) GetRule() string { - if m != nil { - return m.Rule - } - return "" -} - -type NSResponse_QuotaResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_QuotaResponse) Reset() { *m = NSResponse_QuotaResponse{} } -func (m *NSResponse_QuotaResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_QuotaResponse) ProtoMessage() {} -func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 4} -} - -func (m *NSResponse_QuotaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_QuotaResponse.Unmarshal(m, b) -} -func (m *NSResponse_QuotaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_QuotaResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_QuotaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_QuotaResponse.Merge(m, src) -} -func (m *NSResponse_QuotaResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_QuotaResponse.Size(m) -} -func (m *NSResponse_QuotaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_QuotaResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_QuotaResponse proto.InternalMessageInfo - -func (m *NSResponse_QuotaResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_QuotaResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto { - if m != nil { - return m.Quotanode - } - return nil -} - -type NSResponse_ShareInfo struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Root string `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` - Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` - Uid uint64 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"` - Nshared uint64 `protobuf:"varint,5,opt,name=nshared,proto3" json:"nshared,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_ShareInfo) Reset() { *m = NSResponse_ShareInfo{} } -func (m *NSResponse_ShareInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ShareInfo) ProtoMessage() {} -func (*NSResponse_ShareInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 5} -} - -func (m *NSResponse_ShareInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ShareInfo.Unmarshal(m, b) -} -func (m *NSResponse_ShareInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ShareInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_ShareInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ShareInfo.Merge(m, src) -} -func (m *NSResponse_ShareInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_ShareInfo.Size(m) -} -func (m *NSResponse_ShareInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ShareInfo.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_ShareInfo proto.InternalMessageInfo - -func (m *NSResponse_ShareInfo) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NSResponse_ShareInfo) GetRoot() string { - if m != nil { - return m.Root - } - return "" -} - -func (m *NSResponse_ShareInfo) GetRule() string { - if m != nil { - return m.Rule - } - return "" -} - -func (m *NSResponse_ShareInfo) GetUid() uint64 { - if m != nil { - return m.Uid - } - return 0 -} - -func (m *NSResponse_ShareInfo) GetNshared() uint64 { - if m != nil { - return m.Nshared - } - return 0 -} - -type NSResponse_ShareAccess struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Granted bool `protobuf:"varint,2,opt,name=granted,proto3" json:"granted,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_ShareAccess) Reset() { *m = NSResponse_ShareAccess{} } -func (m *NSResponse_ShareAccess) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ShareAccess) ProtoMessage() {} -func (*NSResponse_ShareAccess) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 6} -} - -func (m *NSResponse_ShareAccess) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ShareAccess.Unmarshal(m, b) -} -func (m *NSResponse_ShareAccess) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ShareAccess.Marshal(b, m, deterministic) -} -func (m *NSResponse_ShareAccess) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ShareAccess.Merge(m, src) -} -func (m *NSResponse_ShareAccess) XXX_Size() int { - return xxx_messageInfo_NSResponse_ShareAccess.Size(m) -} -func (m *NSResponse_ShareAccess) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ShareAccess.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_ShareAccess proto.InternalMessageInfo - -func (m *NSResponse_ShareAccess) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NSResponse_ShareAccess) GetGranted() bool { - if m != nil { - return m.Granted - } - return false -} - -type NSResponse_ShareResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Shares []*NSResponse_ShareInfo `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` - Access []*NSResponse_ShareAccess `protobuf:"bytes,4,rep,name=access,proto3" json:"access,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_ShareResponse) Reset() { *m = NSResponse_ShareResponse{} } -func (m *NSResponse_ShareResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ShareResponse) ProtoMessage() {} -func (*NSResponse_ShareResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 7} -} - -func (m *NSResponse_ShareResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ShareResponse.Unmarshal(m, b) -} -func (m *NSResponse_ShareResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ShareResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_ShareResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ShareResponse.Merge(m, src) -} -func (m *NSResponse_ShareResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_ShareResponse.Size(m) -} -func (m *NSResponse_ShareResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ShareResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NSResponse_ShareResponse proto.InternalMessageInfo - -func (m *NSResponse_ShareResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NSResponse_ShareResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *NSResponse_ShareResponse) GetShares() []*NSResponse_ShareInfo { - if m != nil { - return m.Shares - } - return nil -} - -func (m *NSResponse_ShareResponse) GetAccess() []*NSResponse_ShareAccess { - if m != nil { - return m.Access - } - return nil -} - -type NsStatRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NsStatRequest) Reset() { *m = NsStatRequest{} } -func (m *NsStatRequest) String() string { return proto.CompactTextString(m) } -func (*NsStatRequest) ProtoMessage() {} -func (*NsStatRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{22} -} - -func (m *NsStatRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatRequest.Unmarshal(m, b) -} -func (m *NsStatRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatRequest.Marshal(b, m, deterministic) -} -func (m *NsStatRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatRequest.Merge(m, src) -} -func (m *NsStatRequest) XXX_Size() int { - return xxx_messageInfo_NsStatRequest.Size(m) -} -func (m *NsStatRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NsStatRequest proto.InternalMessageInfo - -func (m *NsStatRequest) GetAuthkey() string { - if m != nil { - return m.Authkey - } - return "" -} - -type NsStatResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"` - Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"` - BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` - CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"` - CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"` - MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"` - MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"` - MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"` - MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"` - Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"` - Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"` - Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NsStatResponse) Reset() { *m = NsStatResponse{} } -func (m *NsStatResponse) String() string { return proto.CompactTextString(m) } -func (*NsStatResponse) ProtoMessage() {} -func (*NsStatResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{23} -} - -func (m *NsStatResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatResponse.Unmarshal(m, b) -} -func (m *NsStatResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatResponse.Marshal(b, m, deterministic) -} -func (m *NsStatResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatResponse.Merge(m, src) -} -func (m *NsStatResponse) XXX_Size() int { - return xxx_messageInfo_NsStatResponse.Size(m) -} -func (m *NsStatResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NsStatResponse proto.InternalMessageInfo - -func (m *NsStatResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *NsStatResponse) GetEmsg() string { - if m != nil { - return m.Emsg - } - return "" -} - -func (m *NsStatResponse) GetState() string { - if m != nil { - return m.State - } - return "" -} - -func (m *NsStatResponse) GetNfiles() uint64 { - if m != nil { - return m.Nfiles - } - return 0 -} - -func (m *NsStatResponse) GetNcontainers() uint64 { - if m != nil { - return m.Ncontainers - } - return 0 -} - -func (m *NsStatResponse) GetBootTime() uint64 { - if m != nil { - return m.BootTime - } - return 0 -} - -func (m *NsStatResponse) GetCurrentFid() uint64 { - if m != nil { - return m.CurrentFid - } - return 0 -} - -func (m *NsStatResponse) GetCurrentCid() uint64 { - if m != nil { - return m.CurrentCid - } - return 0 -} - -func (m *NsStatResponse) GetMemVirtual() uint64 { - if m != nil { - return m.MemVirtual - } - return 0 -} - -func (m *NsStatResponse) GetMemResident() uint64 { - if m != nil { - return m.MemResident - } - return 0 -} - -func (m *NsStatResponse) GetMemShare() uint64 { - if m != nil { - return m.MemShare - } - return 0 -} - -func (m *NsStatResponse) GetMemGrowth() uint64 { - if m != nil { - return m.MemGrowth - } - return 0 -} - -func (m *NsStatResponse) GetThreads() uint64 { - if m != nil { - return m.Threads - } - return 0 -} - -func (m *NsStatResponse) GetFds() uint64 { - if m != nil { - return m.Fds - } - return 0 -} - -func (m *NsStatResponse) GetUptime() uint64 { - if m != nil { - return m.Uptime - } - return 0 -} - -type ManilaRequest struct { - RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"` - AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"` - Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` - ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"` - ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"` - Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"` - Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"` - Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"` - AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"` - ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"` - ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaRequest) Reset() { *m = ManilaRequest{} } -func (m *ManilaRequest) String() string { return proto.CompactTextString(m) } -func (*ManilaRequest) ProtoMessage() {} -func (*ManilaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{24} -} - -func (m *ManilaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaRequest.Unmarshal(m, b) -} -func (m *ManilaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaRequest.Marshal(b, m, deterministic) -} -func (m *ManilaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaRequest.Merge(m, src) -} -func (m *ManilaRequest) XXX_Size() int { - return xxx_messageInfo_ManilaRequest.Size(m) -} -func (m *ManilaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ManilaRequest proto.InternalMessageInfo - -func (m *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE { - if m != nil { - return m.RequestType - } - return MANILA_REQUEST_TYPE_CREATE_SHARE -} - -func (m *ManilaRequest) GetAuthKey() string { - if m != nil { - return m.AuthKey - } - return "" -} - -func (m *ManilaRequest) GetProtocol() string { - if m != nil { - return m.Protocol - } - return "" -} - -func (m *ManilaRequest) GetShareName() string { - if m != nil { - return m.ShareName - } - return "" -} - -func (m *ManilaRequest) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *ManilaRequest) GetShareId() string { - if m != nil { - return m.ShareId - } - return "" -} - -func (m *ManilaRequest) GetShareGroupId() string { - if m != nil { - return m.ShareGroupId - } - return "" -} - -func (m *ManilaRequest) GetQuota() int32 { - if m != nil { - return m.Quota - } - return 0 -} - -func (m *ManilaRequest) GetCreator() string { - if m != nil { - return m.Creator - } - return "" -} - -func (m *ManilaRequest) GetEgroup() string { - if m != nil { - return m.Egroup - } - return "" -} - -func (m *ManilaRequest) GetAdminEgroup() string { - if m != nil { - return m.AdminEgroup - } - return "" -} - -func (m *ManilaRequest) GetShareHost() string { - if m != nil { - return m.ShareHost - } - return "" -} - -func (m *ManilaRequest) GetShareLocation() string { - if m != nil { - return m.ShareLocation - } - return "" -} - -type ManilaResponse struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` - TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` - NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"` - NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaResponse) Reset() { *m = ManilaResponse{} } -func (m *ManilaResponse) String() string { return proto.CompactTextString(m) } -func (*ManilaResponse) ProtoMessage() {} -func (*ManilaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{25} -} - -func (m *ManilaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaResponse.Unmarshal(m, b) -} -func (m *ManilaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaResponse.Marshal(b, m, deterministic) -} -func (m *ManilaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaResponse.Merge(m, src) -} -func (m *ManilaResponse) XXX_Size() int { - return xxx_messageInfo_ManilaResponse.Size(m) -} -func (m *ManilaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ManilaResponse proto.InternalMessageInfo - -func (m *ManilaResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *ManilaResponse) GetCode() int32 { - if m != nil { - return m.Code - } - return 0 -} - -func (m *ManilaResponse) GetTotalUsed() int64 { - if m != nil { - return m.TotalUsed - } - return 0 -} - -func (m *ManilaResponse) GetTotalCapacity() int64 { - if m != nil { - return m.TotalCapacity - } - return 0 -} - -func (m *ManilaResponse) GetNewShareQuota() int64 { - if m != nil { - return m.NewShareQuota - } - return 0 -} - -func (m *ManilaResponse) GetNewSharePath() string { - if m != nil { - return m.NewSharePath - } - return "" -} - -func init() { - proto.RegisterEnum("eos.rpc.TYPE", TYPE_name, TYPE_value) - proto.RegisterEnum("eos.rpc.QUOTATYPE", QUOTATYPE_name, QUOTATYPE_value) - proto.RegisterEnum("eos.rpc.QUOTAOP", QUOTAOP_name, QUOTAOP_value) - proto.RegisterEnum("eos.rpc.QUOTAENTRY", QUOTAENTRY_name, QUOTAENTRY_value) - proto.RegisterEnum("eos.rpc.MANILA_REQUEST_TYPE", MANILA_REQUEST_TYPE_name, MANILA_REQUEST_TYPE_value) - proto.RegisterEnum("eos.rpc.NSRequest_VersionRequest_VERSION_CMD", NSRequest_VersionRequest_VERSION_CMD_name, NSRequest_VersionRequest_VERSION_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD", NSRequest_RecycleRequest_RECYCLE_CMD_name, NSRequest_RecycleRequest_RECYCLE_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_COMMAND", NSRequest_AclRequest_ACL_COMMAND_name, NSRequest_AclRequest_ACL_COMMAND_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_TYPE", NSRequest_AclRequest_ACL_TYPE_name, NSRequest_AclRequest_ACL_TYPE_value) - proto.RegisterEnum("eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat", NSRequest_ShareRequest_LsShare_OutFormat_name, NSRequest_ShareRequest_LsShare_OutFormat_value) - proto.RegisterEnum("eos.rpc.NSRequest_ShareRequest_OperateShare_Op", NSRequest_ShareRequest_OperateShare_Op_name, NSRequest_ShareRequest_OperateShare_Op_value) - proto.RegisterEnum("eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE", NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value) - proto.RegisterType((*PingRequest)(nil), "eos.rpc.PingRequest") - proto.RegisterType((*PingReply)(nil), "eos.rpc.PingReply") - proto.RegisterType((*ContainerInsertRequest)(nil), "eos.rpc.ContainerInsertRequest") - proto.RegisterType((*FileInsertRequest)(nil), "eos.rpc.FileInsertRequest") - proto.RegisterType((*InsertReply)(nil), "eos.rpc.InsertReply") - proto.RegisterType((*Time)(nil), "eos.rpc.Time") - proto.RegisterType((*Checksum)(nil), "eos.rpc.Checksum") - proto.RegisterType((*FileMdProto)(nil), "eos.rpc.FileMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.FileMdProto.XattrsEntry") - proto.RegisterType((*ContainerMdProto)(nil), "eos.rpc.ContainerMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.ContainerMdProto.XattrsEntry") - proto.RegisterType((*QuotaProto)(nil), "eos.rpc.QuotaProto") - proto.RegisterType((*RoleId)(nil), "eos.rpc.RoleId") - proto.RegisterType((*MDId)(nil), "eos.rpc.MDId") - proto.RegisterType((*Limit)(nil), "eos.rpc.Limit") - proto.RegisterType((*MDSelection)(nil), "eos.rpc.MDSelection") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.MDSelection.XattrEntry") - proto.RegisterType((*MDRequest)(nil), "eos.rpc.MDRequest") - proto.RegisterType((*MDResponse)(nil), "eos.rpc.MDResponse") - proto.RegisterType((*FindRequest)(nil), "eos.rpc.FindRequest") - proto.RegisterType((*ShareAuth)(nil), "eos.rpc.ShareAuth") - proto.RegisterType((*ShareProto)(nil), "eos.rpc.ShareProto") - proto.RegisterType((*ShareToken)(nil), "eos.rpc.ShareToken") - proto.RegisterType((*NSRequest)(nil), "eos.rpc.NSRequest") - proto.RegisterType((*NSRequest_MkdirRequest)(nil), "eos.rpc.NSRequest.MkdirRequest") - proto.RegisterType((*NSRequest_RmdirRequest)(nil), "eos.rpc.NSRequest.RmdirRequest") - proto.RegisterType((*NSRequest_TouchRequest)(nil), "eos.rpc.NSRequest.TouchRequest") - proto.RegisterType((*NSRequest_UnlinkRequest)(nil), "eos.rpc.NSRequest.UnlinkRequest") - proto.RegisterType((*NSRequest_RmRequest)(nil), "eos.rpc.NSRequest.RmRequest") - proto.RegisterType((*NSRequest_RenameRequest)(nil), "eos.rpc.NSRequest.RenameRequest") - proto.RegisterType((*NSRequest_SymlinkRequest)(nil), "eos.rpc.NSRequest.SymlinkRequest") - proto.RegisterType((*NSRequest_VersionRequest)(nil), "eos.rpc.NSRequest.VersionRequest") - proto.RegisterType((*NSRequest_RecycleRequest)(nil), "eos.rpc.NSRequest.RecycleRequest") - proto.RegisterType((*NSRequest_RecycleRequest_RestoreFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.RestoreFlags") - proto.RegisterType((*NSRequest_RecycleRequest_PurgeDate)(nil), "eos.rpc.NSRequest.RecycleRequest.PurgeDate") - proto.RegisterType((*NSRequest_RecycleRequest_ListFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.ListFlags") - proto.RegisterType((*NSRequest_SetXAttrRequest)(nil), "eos.rpc.NSRequest.SetXAttrRequest") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry") - proto.RegisterType((*NSRequest_ChownRequest)(nil), "eos.rpc.NSRequest.ChownRequest") - proto.RegisterType((*NSRequest_ChmodRequest)(nil), "eos.rpc.NSRequest.ChmodRequest") - proto.RegisterType((*NSRequest_AclRequest)(nil), "eos.rpc.NSRequest.AclRequest") - proto.RegisterType((*NSRequest_TokenRequest)(nil), "eos.rpc.NSRequest.TokenRequest") - proto.RegisterType((*NSRequest_QuotaRequest)(nil), "eos.rpc.NSRequest.QuotaRequest") - proto.RegisterType((*NSRequest_ShareRequest)(nil), "eos.rpc.NSRequest.ShareRequest") - proto.RegisterType((*NSRequest_ShareRequest_LsShare)(nil), "eos.rpc.NSRequest.ShareRequest.LsShare") - proto.RegisterType((*NSRequest_ShareRequest_OperateShare)(nil), "eos.rpc.NSRequest.ShareRequest.OperateShare") - proto.RegisterType((*NSResponse)(nil), "eos.rpc.NSResponse") - proto.RegisterType((*NSResponse_ErrorResponse)(nil), "eos.rpc.NSResponse.ErrorResponse") - proto.RegisterType((*NSResponse_VersionResponse)(nil), "eos.rpc.NSResponse.VersionResponse") - proto.RegisterType((*NSResponse_VersionResponse_VersionInfo)(nil), "eos.rpc.NSResponse.VersionResponse.VersionInfo") - proto.RegisterType((*NSResponse_RecycleResponse)(nil), "eos.rpc.NSResponse.RecycleResponse") - proto.RegisterType((*NSResponse_RecycleResponse_RecycleInfo)(nil), "eos.rpc.NSResponse.RecycleResponse.RecycleInfo") - proto.RegisterType((*NSResponse_AclResponse)(nil), "eos.rpc.NSResponse.AclResponse") - proto.RegisterType((*NSResponse_QuotaResponse)(nil), "eos.rpc.NSResponse.QuotaResponse") - proto.RegisterType((*NSResponse_ShareInfo)(nil), "eos.rpc.NSResponse.ShareInfo") - proto.RegisterType((*NSResponse_ShareAccess)(nil), "eos.rpc.NSResponse.ShareAccess") - proto.RegisterType((*NSResponse_ShareResponse)(nil), "eos.rpc.NSResponse.ShareResponse") - proto.RegisterType((*NsStatRequest)(nil), "eos.rpc.NsStatRequest") - proto.RegisterType((*NsStatResponse)(nil), "eos.rpc.NsStatResponse") - proto.RegisterType((*ManilaRequest)(nil), "eos.rpc.ManilaRequest") - proto.RegisterType((*ManilaResponse)(nil), "eos.rpc.ManilaResponse") -} - -func init() { - proto.RegisterFile("Rpc.proto", fileDescriptor_979aee4989bceb08) -} - -var fileDescriptor_979aee4989bceb08 = []byte{ - // 4040 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x3a, 0x4d, 0x77, 0xdb, 0xc6, - 0x76, 0x22, 0x09, 0x52, 0xc4, 0x25, 0x29, 0x31, 0xb0, 0x9b, 0x30, 0x8c, 0x1d, 0x2b, 0x74, 0x9c, - 0x67, 0x3b, 0xb1, 0x1c, 0xbb, 0x4d, 0x9d, 0xc4, 0x2f, 0x4d, 0x69, 0x89, 0x92, 0x99, 0x88, 0xa4, - 0x32, 0xa4, 0x7c, 0xec, 0x6e, 0x78, 0x60, 0x60, 0x44, 0xe1, 0x98, 0x00, 0xf8, 0x00, 0xd0, 0xb6, - 0xb2, 0x6c, 0xbb, 0xe9, 0x3b, 0xa7, 0xbb, 0xb7, 0x7b, 0xbb, 0x9e, 0xb6, 0x9b, 0xee, 0xbb, 0xe8, - 0xaa, 0xbb, 0xbe, 0xf3, 0x16, 0x5d, 0x74, 0xd3, 0x5d, 0xff, 0x40, 0xfb, 0x23, 0x7a, 0xee, 0x9d, - 0x01, 0x30, 0x90, 0x48, 0x51, 0x79, 0x79, 0x1b, 0x9c, 0x99, 0x3b, 0xf7, 0xde, 0x99, 0xb9, 0x73, - 0x3f, 0x67, 0x00, 0x3a, 0x9b, 0x59, 0xdb, 0xb3, 0xc0, 0x8f, 0x7c, 0x63, 0x9d, 0xfb, 0xe1, 0x76, - 0x30, 0xb3, 0x5a, 0x6d, 0xa8, 0x1c, 0x3a, 0xde, 0x84, 0xf1, 0x5f, 0xcd, 0x79, 0x18, 0x19, 0x0d, - 0x58, 0x37, 0xe7, 0xd1, 0xc9, 0x2b, 0x7e, 0xda, 0xc8, 0x6d, 0xe5, 0x6e, 0xeb, 0x2c, 0xee, 0xe2, - 0x88, 0xcb, 0xc3, 0xd0, 0x9c, 0xf0, 0x46, 0x7e, 0x2b, 0x77, 0xbb, 0xca, 0xe2, 0x6e, 0xeb, 0x16, - 0xe8, 0x82, 0xc5, 0x6c, 0x9a, 0x41, 0xcb, 0x65, 0xd1, 0x7e, 0x9d, 0x83, 0x77, 0x77, 0x7c, 0x2f, - 0x32, 0x1d, 0x8f, 0x07, 0x5d, 0x2f, 0xe4, 0x41, 0x14, 0xcf, 0xfa, 0x08, 0x74, 0x2b, 0x1e, 0x69, - 0xe4, 0xb6, 0x0a, 0xb7, 0x2b, 0x0f, 0xdf, 0xdf, 0x96, 0x2b, 0xdc, 0x4e, 0x68, 0x7a, 0xf6, 0x21, - 0xae, 0x9d, 0xa5, 0xb8, 0xea, 0x72, 0xf3, 0xd9, 0xe5, 0x5e, 0x07, 0x70, 0xbc, 0x13, 0x1e, 0x38, - 0xd1, 0xd8, 0xb5, 0x1b, 0x85, 0xad, 0xdc, 0xed, 0x32, 0xd3, 0x25, 0xa4, 0x67, 0xb7, 0x5e, 0xc0, - 0x3b, 0x7b, 0xce, 0x94, 0x67, 0x97, 0x71, 0x17, 0x8a, 0xc7, 0xce, 0x94, 0x87, 0x72, 0x09, 0x57, - 0x93, 0x25, 0x20, 0x6a, 0x3c, 0xbb, 0x40, 0x59, 0x3e, 0x73, 0xeb, 0x31, 0x54, 0x62, 0xb6, 0xe7, - 0x04, 0x52, 0x40, 0x44, 0xd9, 0x35, 0x0c, 0xd0, 0x02, 0x1e, 0x59, 0x8d, 0xfc, 0x56, 0xe1, 0x76, - 0x8d, 0x51, 0xbb, 0x75, 0x0f, 0xb4, 0x91, 0xe3, 0x72, 0xa3, 0x0e, 0x85, 0x90, 0x5b, 0x24, 0x42, - 0x8d, 0x61, 0xd3, 0xb8, 0x02, 0x45, 0x6f, 0x8c, 0xb0, 0x3c, 0xc1, 0x34, 0x6f, 0xc8, 0xad, 0xd6, - 0x9f, 0x41, 0x79, 0xe7, 0x84, 0x5b, 0xaf, 0xc2, 0xb9, 0x6b, 0x5c, 0x85, 0xe2, 0x6b, 0x73, 0x3a, - 0x8f, 0xe5, 0x2e, 0x3a, 0x38, 0x49, 0x74, 0x3a, 0xe3, 0x72, 0x91, 0xd4, 0x6e, 0xfd, 0x87, 0x06, - 0x15, 0x65, 0x4b, 0xc6, 0x06, 0xe4, 0x1d, 0x5b, 0xce, 0x95, 0x77, 0x6c, 0xe3, 0x3d, 0x58, 0x47, - 0x11, 0x8f, 0x1d, 0x5b, 0x4e, 0x56, 0xc2, 0x6e, 0xd7, 0xc6, 0x55, 0xcd, 0x1d, 0x21, 0x4d, 0x8d, - 0x61, 0x13, 0x21, 0x13, 0xc7, 0x6e, 0x68, 0x02, 0x32, 0x71, 0x6c, 0x9c, 0x30, 0x74, 0x7e, 0xe4, - 0x8d, 0xa2, 0x58, 0x26, 0xb6, 0x8d, 0x0f, 0x40, 0x9f, 0x9a, 0xa7, 0xfe, 0x9c, 0x58, 0x96, 0xb6, - 0x72, 0xb7, 0x6b, 0xac, 0x2c, 0x00, 0x5d, 0x1b, 0xd7, 0x7d, 0x3c, 0x35, 0x27, 0x61, 0x63, 0x9d, - 0x06, 0x44, 0x07, 0xd9, 0x78, 0xa6, 0xcb, 0x1b, 0x65, 0xda, 0x0c, 0xb5, 0x89, 0x8d, 0xe3, 0xbd, - 0x1a, 0xd3, 0x80, 0x4e, 0x03, 0x65, 0x04, 0xf4, 0x71, 0xf0, 0x26, 0x14, 0xad, 0xc8, 0x71, 0x79, - 0x03, 0xb6, 0x72, 0xb7, 0x2b, 0x0f, 0x6b, 0xc9, 0xe1, 0xa1, 0x3c, 0x99, 0x18, 0x43, 0x24, 0x97, - 0x90, 0x2a, 0x0b, 0x91, 0x68, 0xcc, 0xb8, 0x07, 0x65, 0x4b, 0x0a, 0xb5, 0x51, 0x25, 0xbc, 0x77, - 0x52, 0x65, 0x94, 0x03, 0x2c, 0x41, 0x31, 0xae, 0x81, 0x3e, 0xf5, 0x2d, 0x33, 0x72, 0x7c, 0x2f, - 0x6c, 0xd4, 0xe8, 0x2c, 0x53, 0x80, 0x71, 0x07, 0xea, 0x73, 0x8f, 0x56, 0x9d, 0x22, 0x6d, 0x10, - 0xd2, 0xa6, 0x80, 0x1f, 0x24, 0xa8, 0x5f, 0x42, 0xe9, 0xad, 0x19, 0x45, 0x41, 0xd8, 0xd8, 0x24, - 0xfd, 0xdb, 0x5a, 0xa4, 0x7f, 0xdb, 0xcf, 0x09, 0xa5, 0xe3, 0x45, 0xc1, 0x29, 0x93, 0xf8, 0x28, - 0xac, 0x99, 0x19, 0x9d, 0x34, 0xea, 0x42, 0x58, 0xd8, 0x46, 0x18, 0x8f, 0xcc, 0x49, 0xe3, 0x1d, - 0x71, 0xf0, 0xd8, 0x46, 0x51, 0x3b, 0x9e, 0x6f, 0xf3, 0x86, 0x41, 0x87, 0x23, 0x3a, 0xcd, 0xaf, - 0xa0, 0xa2, 0x30, 0xc5, 0x23, 0x4d, 0xcd, 0x1f, 0x9b, 0xa9, 0x66, 0xe5, 0x15, 0xcd, 0xfa, 0x3a, - 0xff, 0x65, 0xae, 0xf5, 0x5b, 0x0d, 0xea, 0x67, 0xed, 0xf3, 0x9c, 0x3a, 0x7d, 0x00, 0xfa, 0xcc, - 0x0c, 0xb8, 0xaa, 0x50, 0x65, 0x01, 0xb8, 0xa4, 0x4a, 0x7d, 0x00, 0x7a, 0x14, 0x70, 0x3e, 0x26, - 0xbd, 0x42, 0xf5, 0x29, 0xb0, 0x32, 0x02, 0x86, 0xa8, 0x5b, 0x06, 0x68, 0x2e, 0x6e, 0xa9, 0x48, - 0xda, 0x43, 0xed, 0x9f, 0xa0, 0x52, 0x89, 0xd6, 0xe8, 0x97, 0xd1, 0x1a, 0xb8, 0x40, 0x6b, 0x6e, - 0x42, 0x31, 0xbc, 0x40, 0xb5, 0x68, 0xcc, 0xf8, 0x26, 0x39, 0xe2, 0x2a, 0x1d, 0xf1, 0xad, 0xa5, - 0x5e, 0xee, 0xc2, 0x73, 0xae, 0x2d, 0x38, 0xe7, 0x8d, 0x45, 0xe7, 0xbc, 0xa9, 0x9c, 0x33, 0x49, - 0x85, 0xdc, 0x5b, 0x5d, 0x40, 0x85, 0x23, 0xfb, 0x10, 0x20, 0xf1, 0xa7, 0x21, 0x69, 0x8b, 0xc6, - 0x14, 0xc8, 0xcf, 0xd1, 0x8e, 0xff, 0x2c, 0x00, 0xfc, 0x30, 0xf7, 0x23, 0x53, 0xe8, 0x45, 0xbc, - 0xfa, 0x5c, 0x76, 0xf5, 0x74, 0x26, 0xd2, 0x3d, 0xd1, 0x99, 0x7c, 0x22, 0x5d, 0x16, 0xea, 0xc4, - 0xc6, 0x43, 0x23, 0x11, 0xd1, 0x0f, 0x47, 0x83, 0x51, 0x7b, 0xf4, 0xe2, 0xb0, 0x23, 0xdc, 0x18, - 0x1a, 0xde, 0x3c, 0xe4, 0xf6, 0xcb, 0xd3, 0x88, 0x87, 0x52, 0x5d, 0x52, 0x80, 0x71, 0x17, 0xea, - 0xd8, 0x99, 0xfa, 0x13, 0xc7, 0x32, 0xa7, 0x02, 0x49, 0xf8, 0xa4, 0x73, 0xf0, 0x98, 0x93, 0x90, - 0x4e, 0x29, 0xe5, 0x24, 0x24, 0xd4, 0x84, 0xb2, 0x6b, 0xbe, 0x15, 0x1c, 0xd6, 0x85, 0xfa, 0xc6, - 0x7d, 0xe3, 0x36, 0x6c, 0xba, 0xe6, 0xdb, 0xcc, 0x24, 0x65, 0x42, 0x39, 0x0b, 0x96, 0x5c, 0xc4, - 0x14, 0x7a, 0xc2, 0x45, 0xcc, 0xf0, 0x39, 0x5c, 0x99, 0xf1, 0xc0, 0xe2, 0x5e, 0x64, 0x4e, 0x78, - 0xba, 0x27, 0x54, 0xb7, 0x3c, 0x5b, 0x34, 0x74, 0x9e, 0x42, 0x30, 0xae, 0x2c, 0xa2, 0x10, 0x73, - 0x6c, 0x41, 0x25, 0x8c, 0xcc, 0x68, 0x1e, 0x0a, 0xde, 0x55, 0x12, 0xb8, 0x0a, 0x4a, 0x31, 0x04, - 0xaf, 0x9a, 0x8a, 0x41, 0xa0, 0xd6, 0x31, 0x94, 0x98, 0x3f, 0xe5, 0xa9, 0xd9, 0xe6, 0xce, 0x99, - 0x6d, 0x3e, 0x35, 0xdb, 0x26, 0x94, 0xe7, 0x21, 0x0f, 0xe8, 0x7c, 0x0b, 0xc4, 0x2c, 0xe9, 0xa3, - 0xc4, 0x27, 0x81, 0x3f, 0x9f, 0xd1, 0xa0, 0x46, 0x83, 0x29, 0xa0, 0x35, 0x06, 0xad, 0xb7, 0xdb, - 0xb5, 0x17, 0x6a, 0x8c, 0xf0, 0x2e, 0x38, 0x4d, 0x89, 0xbc, 0x4b, 0x1d, 0x0a, 0x8e, 0xe7, 0xd3, - 0x04, 0x25, 0x86, 0x4d, 0xe3, 0x23, 0xa9, 0x3f, 0x1a, 0xe9, 0x8f, 0x62, 0x88, 0x89, 0xea, 0xb4, - 0xbe, 0x85, 0xe2, 0x81, 0xe3, 0x3a, 0x11, 0xce, 0xf0, 0x23, 0x0f, 0x7c, 0x9a, 0xa1, 0xcc, 0xa8, - 0x8d, 0x1c, 0x5d, 0xc7, 0x8b, 0x77, 0xe2, 0x3a, 0x1e, 0x41, 0xcc, 0xb7, 0xb1, 0x93, 0x72, 0xcd, - 0xb7, 0xad, 0x7f, 0x2e, 0x41, 0xa5, 0xb7, 0x3b, 0xe4, 0x53, 0x6e, 0xa1, 0xf3, 0x36, 0xde, 0x85, - 0x52, 0x48, 0x1d, 0xc9, 0x49, 0xf6, 0x8c, 0x8f, 0x63, 0xff, 0x92, 0x27, 0xaf, 0xb0, 0x91, 0x2c, - 0x86, 0xa6, 0x8f, 0x1d, 0xcc, 0xc7, 0xb1, 0x83, 0x29, 0x2c, 0xc6, 0x72, 0x63, 0x2c, 0xe1, 0x61, - 0xb4, 0xc5, 0x58, 0xc2, 0xc5, 0xb4, 0x94, 0xf8, 0x7b, 0x1e, 0x49, 0xc4, 0xe3, 0xbb, 0x40, 0xfe, - 0x33, 0xf1, 0xa7, 0xe7, 0xf1, 0x92, 0x71, 0xc4, 0xb5, 0x4e, 0x9c, 0xa9, 0x1d, 0x70, 0x8f, 0xb4, - 0x7f, 0x01, 0x6e, 0x3c, 0x6e, 0x7c, 0xa6, 0x86, 0xc2, 0xf2, 0x42, 0x64, 0x25, 0x34, 0x7e, 0x03, - 0x86, 0x08, 0x81, 0xdc, 0x56, 0x82, 0xa3, 0xbe, 0x90, 0xec, 0x9d, 0x18, 0x33, 0x0d, 0x97, 0x4d, - 0x90, 0x39, 0x84, 0x63, 0x93, 0xa5, 0x68, 0x2c, 0xe9, 0xa7, 0x01, 0xa0, 0x22, 0x5d, 0x1d, 0x05, - 0x80, 0x06, 0xac, 0x87, 0xa7, 0x2e, 0xf2, 0x21, 0xf5, 0x2f, 0xb3, 0xb8, 0x9b, 0x09, 0xf9, 0xb5, - 0xd5, 0x21, 0xff, 0x2a, 0x14, 0xfd, 0x37, 0x98, 0xab, 0x6e, 0x88, 0xf8, 0x42, 0x1d, 0x84, 0x92, - 0x0a, 0x93, 0xd7, 0xad, 0x31, 0xd1, 0xc1, 0x44, 0x94, 0x86, 0xc7, 0x81, 0xef, 0x47, 0xe4, 0x7a, - 0xcb, 0x4c, 0x27, 0x08, 0xf3, 0xfd, 0x08, 0x87, 0x09, 0x4f, 0x0c, 0xbf, 0x23, 0x86, 0x09, 0x42, - 0xc3, 0xbf, 0x80, 0xcd, 0x80, 0x4f, 0xf8, 0xdb, 0xd9, 0x18, 0x2d, 0x90, 0xac, 0xc5, 0x20, 0x63, - 0xd8, 0x10, 0xe0, 0x3d, 0x09, 0x35, 0x6e, 0x81, 0x84, 0x8c, 0x6d, 0x47, 0x98, 0xdc, 0x15, 0xc2, - 0xab, 0x09, 0xe8, 0xae, 0x00, 0x1a, 0x5f, 0x40, 0x91, 0x62, 0x49, 0xe3, 0x2a, 0xc5, 0x9f, 0x1b, - 0xc9, 0x2e, 0x15, 0x65, 0x16, 0xa1, 0x47, 0x44, 0x1e, 0x81, 0xdd, 0xfc, 0x12, 0x20, 0x05, 0xfe, - 0xa4, 0x18, 0xf0, 0xef, 0x39, 0xd0, 0x7b, 0xbb, 0x71, 0x86, 0x1d, 0x9b, 0x66, 0x6e, 0xa9, 0x69, - 0x1a, 0xd7, 0x13, 0xfb, 0x56, 0x83, 0x28, 0xba, 0x03, 0x32, 0x77, 0x25, 0xef, 0x2e, 0x64, 0x33, - 0xfe, 0x9b, 0xa0, 0x05, 0xfe, 0x34, 0xb6, 0x8e, 0xcd, 0x84, 0x54, 0x78, 0x2c, 0x46, 0x83, 0xc6, - 0x43, 0xd0, 0xc3, 0x78, 0x9f, 0xd2, 0x44, 0xae, 0x2e, 0x92, 0x01, 0x4b, 0xd1, 0x5a, 0x7f, 0x9b, - 0x03, 0xc0, 0x2d, 0x84, 0x33, 0xdf, 0x0b, 0xf9, 0x65, 0xf6, 0xf0, 0x09, 0x14, 0x8e, 0xdd, 0x78, - 0x13, 0x8b, 0xcb, 0x08, 0x44, 0x30, 0x3e, 0x85, 0x82, 0x25, 0xab, 0x93, 0x0b, 0x2b, 0x1e, 0xc4, - 0x6a, 0xfd, 0x4f, 0x0e, 0xb3, 0x76, 0xcf, 0xfe, 0xe3, 0xc9, 0x32, 0x96, 0x58, 0xe1, 0x22, 0x89, - 0x29, 0x02, 0xd7, 0xb2, 0x02, 0x17, 0x11, 0xcd, 0xe6, 0xb3, 0xe8, 0x44, 0x46, 0xd6, 0xa4, 0x9f, - 0x95, 0x73, 0xe9, 0x72, 0x72, 0xde, 0x07, 0x7d, 0x78, 0x62, 0x06, 0xbc, 0x3d, 0x17, 0x89, 0x01, - 0x56, 0xaa, 0x52, 0xc9, 0xa8, 0xbd, 0x30, 0x59, 0x30, 0x40, 0x3b, 0xf1, 0xc3, 0x48, 0x2a, 0x03, - 0xb5, 0x5b, 0xbf, 0xce, 0x03, 0x10, 0x27, 0x91, 0x77, 0x7c, 0x08, 0x30, 0xe3, 0x81, 0xeb, 0x84, - 0x21, 0x2e, 0x46, 0x30, 0x54, 0x20, 0xb8, 0x43, 0xfe, 0x76, 0xe6, 0x04, 0x3c, 0x94, 0x3e, 0x3f, - 0xee, 0xa6, 0x76, 0x2e, 0xb8, 0x9f, 0xb5, 0x73, 0x21, 0x0f, 0x69, 0xe7, 0x1f, 0x02, 0x4c, 0xb8, - 0xc7, 0x03, 0x33, 0x51, 0x2d, 0x8d, 0x29, 0x90, 0x24, 0x96, 0x95, 0xe4, 0x86, 0x30, 0x96, 0x5d, - 0x03, 0xdd, 0x9c, 0x4e, 0xfd, 0x37, 0xe8, 0x6c, 0xc9, 0xb9, 0x96, 0x59, 0x0a, 0xc0, 0x98, 0xf2, - 0x3a, 0xf2, 0x5f, 0x71, 0x8f, 0x5c, 0xa9, 0xce, 0x64, 0xcf, 0xf8, 0x0c, 0xd6, 0xfd, 0xc0, 0x99, - 0x38, 0xe4, 0x2c, 0xd1, 0x8a, 0xd3, 0x14, 0x29, 0x91, 0x1f, 0x8b, 0x51, 0x5a, 0x7f, 0x97, 0x93, - 0xc2, 0x18, 0x11, 0xf1, 0x1d, 0x28, 0x0a, 0x9e, 0x39, 0x3a, 0x94, 0x2b, 0x59, 0x52, 0x59, 0xe2, - 0x8a, 0x79, 0xae, 0x81, 0x1e, 0x3a, 0x13, 0xcf, 0x8c, 0xe6, 0x41, 0x6c, 0xd8, 0x29, 0x00, 0xf7, - 0x1b, 0xf2, 0xc0, 0x31, 0xa7, 0xce, 0x8f, 0x5c, 0xa8, 0x70, 0x95, 0x29, 0x10, 0xaa, 0x03, 0x39, - 0x17, 0x79, 0x7c, 0x91, 0x51, 0xbb, 0xf5, 0xd7, 0x37, 0x40, 0xef, 0x0f, 0x57, 0xdf, 0x35, 0xc4, - 0x8a, 0x99, 0xbf, 0x48, 0x31, 0x1f, 0x41, 0xd1, 0x7d, 0x65, 0x3b, 0x41, 0xe3, 0x4f, 0x08, 0x2b, - 0x75, 0x65, 0xc9, 0x0c, 0xdb, 0x3d, 0x1c, 0x97, 0x9d, 0xa7, 0x6b, 0x4c, 0xe0, 0x23, 0x61, 0xe0, - 0x22, 0xe1, 0xbb, 0x4b, 0x09, 0x99, 0x9b, 0x25, 0x24, 0x7c, 0x24, 0x8c, 0xfc, 0xb9, 0x75, 0xd2, - 0x78, 0x6f, 0x29, 0xe1, 0x08, 0xc7, 0x15, 0x42, 0xc2, 0x37, 0xbe, 0x86, 0x92, 0x88, 0x5f, 0x8d, - 0x06, 0x51, 0x6e, 0x2d, 0xa0, 0x3c, 0x22, 0x84, 0x94, 0x54, 0x52, 0x18, 0xdb, 0x90, 0x0f, 0xdc, - 0xc6, 0xfb, 0x44, 0x77, 0x6d, 0xe1, 0x52, 0x53, 0x9a, 0x7c, 0xe0, 0xe2, 0x5c, 0x81, 0x08, 0x14, - 0xcd, 0xa5, 0x73, 0x31, 0x42, 0x50, 0xe6, 0x12, 0x14, 0xc6, 0x37, 0x69, 0x80, 0xfc, 0x80, 0x88, - 0x3f, 0x5a, 0x40, 0x3c, 0x14, 0x18, 0x29, 0x75, 0x12, 0x45, 0xbf, 0x81, 0xf5, 0xd7, 0x3c, 0x20, - 0x2b, 0xbb, 0xb6, 0x94, 0xfc, 0x99, 0xc0, 0x50, 0xc8, 0x25, 0x0d, 0x92, 0x07, 0xdc, 0x3a, 0xb5, - 0xa6, 0xbc, 0x71, 0x7d, 0x29, 0x39, 0x13, 0x18, 0x0a, 0xb9, 0xa4, 0x31, 0xbe, 0x8e, 0x43, 0xdb, - 0x87, 0x44, 0xdc, 0x5a, 0xb4, 0x74, 0x1e, 0x3d, 0x6f, 0x47, 0x91, 0x7a, 0xb2, 0x44, 0x82, 0x27, - 0x6b, 0x9d, 0xf8, 0x6f, 0xbc, 0xc6, 0x8d, 0xa5, 0x27, 0xbb, 0x83, 0xe3, 0x0a, 0x21, 0xe1, 0x0b, - 0x42, 0xd7, 0xb7, 0x1b, 0x5b, 0x17, 0x10, 0xba, 0xbe, 0x9d, 0x21, 0x74, 0x7d, 0xdb, 0x78, 0x00, - 0x05, 0xd3, 0x9a, 0x36, 0x3e, 0x22, 0xb2, 0xeb, 0x0b, 0xc8, 0xda, 0xd6, 0x34, 0x25, 0x42, 0x5c, - 0xa1, 0x7e, 0x68, 0xba, 0xad, 0x0b, 0xd4, 0xef, 0x15, 0xf7, 0x32, 0xea, 0x87, 0x86, 0xfc, 0x08, - 0x8a, 0xbf, 0xc2, 0x32, 0xac, 0x71, 0x73, 0x29, 0x21, 0x95, 0x69, 0x0a, 0x21, 0xe1, 0x23, 0x61, - 0x88, 0x6e, 0xa1, 0xf1, 0xf1, 0x52, 0x42, 0x72, 0x1b, 0x0a, 0x21, 0xe1, 0x37, 0xc7, 0x50, 0x55, - 0x6d, 0x4f, 0x06, 0xa2, 0xdc, 0xb2, 0x40, 0x74, 0x0d, 0xf4, 0x80, 0x5b, 0xf3, 0x20, 0x74, 0x5e, - 0x0b, 0xa3, 0x2f, 0xb3, 0x14, 0x90, 0x54, 0xf8, 0x05, 0xaa, 0xfc, 0xa9, 0xdd, 0xbc, 0x07, 0x55, - 0xd5, 0x46, 0x57, 0x4c, 0x80, 0xe8, 0xaa, 0x65, 0xae, 0x42, 0x3f, 0x80, 0x5a, 0xc6, 0x1c, 0x2f, - 0xb1, 0x7e, 0xcf, 0x8f, 0x75, 0x57, 0xde, 0x35, 0x26, 0x80, 0xe6, 0x31, 0xe8, 0x89, 0x91, 0xfe, - 0x3c, 0x49, 0x5c, 0x3c, 0xcf, 0x1e, 0xd4, 0x32, 0x86, 0xbd, 0x6a, 0xae, 0x77, 0xa1, 0x14, 0x99, - 0xc1, 0x84, 0x47, 0xd2, 0xb9, 0xcb, 0x5e, 0x73, 0x1f, 0x36, 0xb2, 0x36, 0xfe, 0x87, 0x32, 0xfa, - 0xbf, 0x1c, 0x6c, 0x64, 0xcd, 0x7d, 0x15, 0xa7, 0x6f, 0x45, 0x42, 0x94, 0xa7, 0x94, 0xe6, 0xde, - 0x4a, 0xef, 0xb1, 0xfd, 0xac, 0xc3, 0x86, 0xdd, 0x41, 0x7f, 0xbc, 0xd3, 0xdb, 0xa5, 0x24, 0x09, - 0xa3, 0x92, 0x6b, 0xbe, 0x8d, 0xbd, 0x50, 0x81, 0x62, 0x8f, 0x02, 0xc1, 0x1a, 0x77, 0x12, 0x98, - 0x2f, 0x63, 0x04, 0x11, 0xc1, 0x55, 0x50, 0xeb, 0x4b, 0xa8, 0x28, 0x5c, 0x0d, 0x80, 0xd2, 0x0e, - 0xeb, 0xb4, 0x47, 0x9d, 0xfa, 0x9a, 0xa1, 0x43, 0xf1, 0xf0, 0x88, 0xed, 0x77, 0xea, 0x39, 0xa3, - 0x0c, 0xda, 0x41, 0x77, 0x38, 0xaa, 0xe7, 0xb1, 0xb5, 0xcf, 0xda, 0x4f, 0xea, 0x85, 0xe6, 0xef, - 0x35, 0xd8, 0xc8, 0xba, 0xa7, 0x05, 0x99, 0xf2, 0xca, 0x1d, 0x66, 0x39, 0x6c, 0xb3, 0xce, 0xce, - 0x8b, 0x9d, 0x83, 0x4e, 0xba, 0xc3, 0x43, 0xa8, 0x04, 0x3c, 0x8c, 0xfc, 0x80, 0x63, 0x51, 0x23, - 0x73, 0xb7, 0xed, 0x4b, 0x30, 0x12, 0x44, 0x7b, 0x58, 0x09, 0x31, 0x95, 0x85, 0xd1, 0x05, 0x7d, - 0x36, 0x0f, 0x26, 0xdc, 0x36, 0xa3, 0x38, 0x7b, 0xfe, 0x74, 0x35, 0xbf, 0x43, 0x24, 0xd9, 0x35, - 0x23, 0xce, 0x52, 0x6a, 0x63, 0x1f, 0xca, 0x53, 0x27, 0x8c, 0x68, 0x65, 0xc5, 0xcb, 0x72, 0x3a, - 0x70, 0xc2, 0x48, 0x2c, 0x2b, 0x21, 0x6e, 0x3e, 0x87, 0xaa, 0xba, 0x60, 0x2a, 0xe8, 0xfc, 0xc0, - 0xe2, 0xb2, 0xbc, 0x16, 0x1d, 0x54, 0x3c, 0xf7, 0x15, 0x65, 0x55, 0xc2, 0x54, 0x64, 0x0f, 0x33, - 0x53, 0x79, 0x9c, 0xa1, 0x34, 0x93, 0xa4, 0xdf, 0xdc, 0x07, 0x3d, 0x59, 0x3a, 0xba, 0x96, 0x53, - 0x6e, 0x06, 0xc4, 0xb5, 0xc8, 0xa8, 0x8d, 0x53, 0xb9, 0xbe, 0x27, 0x79, 0x16, 0x99, 0xe8, 0xe0, - 0x49, 0xda, 0xe6, 0xa9, 0xd4, 0x28, 0x6c, 0x36, 0x3f, 0x05, 0x3d, 0x59, 0xb9, 0xd4, 0x3b, 0xee, - 0x45, 0x81, 0x43, 0xef, 0x07, 0xb1, 0xde, 0x49, 0x48, 0xeb, 0x3e, 0x54, 0x94, 0x93, 0x34, 0x2a, - 0xb0, 0xce, 0x3a, 0xc3, 0xd1, 0x80, 0x2d, 0x53, 0xab, 0xe6, 0xdf, 0xe7, 0x61, 0xf3, 0x4c, 0xb8, - 0x5a, 0x65, 0x3c, 0x7b, 0xc9, 0xe5, 0x62, 0x9e, 0xd2, 0xc2, 0xed, 0xd5, 0x11, 0x70, 0xe1, 0x2d, - 0x63, 0xc6, 0x07, 0x15, 0xce, 0xfa, 0xa0, 0x16, 0x54, 0x5f, 0xf1, 0xd3, 0x30, 0xf2, 0x6d, 0x3e, - 0xe5, 0xa4, 0x30, 0x85, 0xdb, 0x3a, 0xcb, 0xc0, 0xf0, 0x5c, 0xac, 0x80, 0xa3, 0x3a, 0x15, 0xc5, - 0xb9, 0x88, 0xde, 0xcf, 0xb8, 0x4b, 0x6c, 0x8e, 0xa0, 0xaa, 0x46, 0xe0, 0x55, 0xb2, 0xb8, 0x15, - 0x67, 0xee, 0x4b, 0x52, 0x48, 0x31, 0xda, 0x6c, 0x23, 0xd7, 0x34, 0x3c, 0xaf, 0xe2, 0x1a, 0x47, - 0xa2, 0xbc, 0x12, 0x89, 0x7e, 0x97, 0x07, 0x48, 0x63, 0xf5, 0x2a, 0x0e, 0x8f, 0x55, 0xf3, 0xbf, - 0x73, 0x61, 0xd8, 0xdf, 0x6e, 0xef, 0x1c, 0x8c, 0x77, 0x06, 0xbd, 0x5e, 0xbb, 0x2f, 0x4d, 0xff, - 0xe2, 0x83, 0xf9, 0x3a, 0x73, 0xed, 0xf5, 0xc9, 0x6a, 0xde, 0x4a, 0xa1, 0x68, 0x80, 0x16, 0xcc, - 0xa7, 0xe2, 0xb8, 0x74, 0x46, 0x6d, 0x34, 0xa2, 0x99, 0x1f, 0x3a, 0x49, 0x05, 0x57, 0x63, 0x49, - 0xbf, 0x75, 0x0f, 0x2a, 0xca, 0xea, 0x50, 0x6d, 0xfb, 0x83, 0x3e, 0xea, 0x32, 0x40, 0xa9, 0x37, - 0xd8, 0xed, 0xee, 0xbd, 0x50, 0x95, 0xb9, 0x75, 0x0b, 0xca, 0xf1, 0x84, 0x46, 0x15, 0xca, 0x47, - 0xc3, 0x0e, 0x1b, 0xb7, 0x77, 0x0e, 0xea, 0x6b, 0x68, 0x08, 0xc3, 0x17, 0x43, 0xea, 0xe4, 0x9a, - 0x5f, 0x61, 0x94, 0x4e, 0x13, 0x98, 0x15, 0xb5, 0x8a, 0x40, 0x15, 0x18, 0xcd, 0xdf, 0xe5, 0xa0, - 0xaa, 0xe6, 0x30, 0x0b, 0xaf, 0x0e, 0x6f, 0x28, 0xe5, 0xf0, 0x39, 0x8d, 0xc0, 0xd3, 0xd9, 0x82, - 0xbc, 0x3f, 0x93, 0xf7, 0xce, 0xf5, 0xec, 0xbd, 0xf3, 0xe0, 0x90, 0xe5, 0xfd, 0x59, 0xe6, 0x16, - 0x57, 0x3b, 0x73, 0x8b, 0xab, 0xde, 0x13, 0x17, 0xcf, 0xdc, 0x13, 0xdf, 0x81, 0x22, 0xba, 0x82, - 0x53, 0x92, 0xe4, 0x86, 0xb2, 0x15, 0x62, 0xde, 0xe9, 0x8f, 0xd8, 0x0b, 0x26, 0x30, 0x9a, 0xff, - 0xa5, 0x41, 0x55, 0xcd, 0xaa, 0x8c, 0xaf, 0x20, 0x3f, 0x0d, 0xa5, 0x0c, 0x7e, 0xb1, 0x22, 0x05, - 0xdb, 0x3e, 0x08, 0xa9, 0x8b, 0xc5, 0xc0, 0x34, 0x34, 0xfe, 0x82, 0x36, 0x24, 0x76, 0xfc, 0xd9, - 0x2a, 0xd2, 0xc1, 0x0c, 0x6b, 0x55, 0x9e, 0xd0, 0xfb, 0xb3, 0xe6, 0xbf, 0xe6, 0x60, 0x5d, 0x72, - 0x34, 0x06, 0xa0, 0xfb, 0xf3, 0xe8, 0xd8, 0x0f, 0x5c, 0x33, 0x92, 0x97, 0x0e, 0x0f, 0x2e, 0xb9, - 0x9a, 0xed, 0xc1, 0x3c, 0xda, 0x23, 0x42, 0x96, 0xf2, 0xa0, 0xfa, 0x32, 0xb9, 0x23, 0x10, 0x35, - 0xbd, 0x72, 0x1b, 0xf0, 0x4b, 0xd0, 0x13, 0x2a, 0x45, 0xc1, 0x36, 0x00, 0x7a, 0x83, 0x7e, 0x77, - 0x34, 0x60, 0xdd, 0xfe, 0x7e, 0x3d, 0x87, 0x0a, 0x84, 0x4a, 0x86, 0x1d, 0x8a, 0xc5, 0xdf, 0x0d, - 0x07, 0xfd, 0x7a, 0xa1, 0xf9, 0x37, 0x79, 0xa8, 0xaa, 0xfb, 0x31, 0xbe, 0x25, 0x49, 0x88, 0x65, - 0xdf, 0xff, 0x29, 0x92, 0xd8, 0x1e, 0xcc, 0xe8, 0xe4, 0xaf, 0xc6, 0xb9, 0xb0, 0x58, 0xa9, 0xe8, - 0xa0, 0x0b, 0xc3, 0x34, 0x5e, 0xdc, 0x0f, 0x50, 0x96, 0x1e, 0x2b, 0x9e, 0xa6, 0xd4, 0xf9, 0x06, - 0x68, 0xf3, 0x90, 0x07, 0xb1, 0x79, 0x61, 0x3b, 0xbd, 0x45, 0x28, 0x29, 0xb7, 0x08, 0xad, 0x03, - 0xc8, 0x0f, 0x66, 0x99, 0xa4, 0x03, 0xa0, 0xc4, 0x3a, 0xbd, 0xc1, 0x33, 0x0c, 0x0f, 0x3a, 0x14, - 0x87, 0x4f, 0xdb, 0xac, 0x53, 0xcf, 0xe3, 0xbe, 0x8f, 0xfa, 0xa2, 0x53, 0x40, 0x9c, 0xf6, 0xce, - 0x4e, 0x67, 0x38, 0xac, 0x6b, 0x8a, 0x05, 0x16, 0x9f, 0x94, 0xa1, 0x14, 0xce, 0x5f, 0x5a, 0xae, - 0xfd, 0x44, 0x87, 0x75, 0xcb, 0x77, 0x5d, 0xd3, 0xb3, 0x5b, 0xff, 0x58, 0x05, 0xc0, 0x7d, 0xcb, - 0xeb, 0xac, 0x47, 0x50, 0xe4, 0x41, 0xe0, 0x07, 0x52, 0xc1, 0xb2, 0x35, 0x97, 0xc0, 0xd9, 0xee, - 0x20, 0x42, 0xdc, 0x63, 0x02, 0x5f, 0xad, 0xf6, 0x84, 0x82, 0xdd, 0x5c, 0x44, 0x9a, 0x24, 0x6c, - 0x92, 0x78, 0x51, 0xb5, 0x57, 0x58, 0x4e, 0x9e, 0xa4, 0x0a, 0x31, 0x79, 0x5c, 0xed, 0xc9, 0xfa, - 0x49, 0x5b, 0x50, 0x98, 0x48, 0x52, 0xf2, 0x76, 0x92, 0x2c, 0xae, 0x9f, 0x44, 0x19, 0x54, 0x5c, - 0xbe, 0x53, 0xe9, 0x43, 0xe2, 0x9d, 0x9e, 0x29, 0x83, 0x4a, 0xcb, 0x09, 0xa5, 0xfe, 0xc4, 0x84, - 0xa2, 0x0c, 0xfa, 0x02, 0x6a, 0x19, 0xd1, 0xa1, 0x22, 0x58, 0x18, 0x40, 0x72, 0x22, 0x80, 0x60, - 0x9b, 0x1e, 0x17, 0xc2, 0x89, 0x54, 0x2b, 0x6c, 0x36, 0xff, 0x3b, 0x07, 0x9b, 0x67, 0xe4, 0x76, - 0x39, 0x4a, 0xe3, 0xfb, 0x4c, 0xe2, 0x83, 0x49, 0xc0, 0xfd, 0x4b, 0x1c, 0x4a, 0xdc, 0xef, 0x7a, - 0xc7, 0xbe, 0x92, 0x29, 0xfd, 0x00, 0x15, 0x65, 0x60, 0x55, 0x64, 0x4b, 0x1e, 0x49, 0xf3, 0xcb, - 0x1f, 0x49, 0x9b, 0xbf, 0x2d, 0xc0, 0xe6, 0x99, 0x23, 0xbd, 0xfc, 0xce, 0xe4, 0xd1, 0x5f, 0xb8, - 0xb3, 0x33, 0xcc, 0xe3, 0xbe, 0xd8, 0x59, 0xcc, 0xa0, 0xf9, 0x9b, 0x3c, 0x54, 0x94, 0x91, 0x3f, - 0x4e, 0x32, 0x81, 0x12, 0xb0, 0x95, 0x57, 0x9c, 0xb3, 0x12, 0xa0, 0xb1, 0xe4, 0xf7, 0x08, 0x4d, - 0xf9, 0x3d, 0xe2, 0x50, 0x46, 0xee, 0x22, 0x79, 0xa7, 0x5f, 0xfe, 0xc4, 0x7d, 0x6d, 0xef, 0x76, - 0x0e, 0x3a, 0xa3, 0xee, 0xa0, 0xaf, 0xc4, 0x73, 0x99, 0x59, 0x95, 0x92, 0xcc, 0xaa, 0xd5, 0x82, - 0xaa, 0x8a, 0x87, 0xae, 0x72, 0xaf, 0x7b, 0x80, 0x0e, 0xa6, 0x0c, 0xda, 0x88, 0x75, 0x3a, 0xf5, - 0x5c, 0x73, 0x1f, 0x2a, 0x8a, 0xd1, 0x5c, 0xf2, 0x60, 0xe2, 0xd4, 0xa1, 0x90, 0xa6, 0x0e, 0xcd, - 0x13, 0xa8, 0x65, 0x0c, 0xe9, 0x92, 0xac, 0x1e, 0x80, 0x4e, 0x06, 0xe7, 0x89, 0x6a, 0xbf, 0x90, - 0x89, 0xf9, 0xe9, 0x43, 0x32, 0x4b, 0xb1, 0x9a, 0xa1, 0xbc, 0x33, 0xa6, 0x63, 0x8c, 0xef, 0x87, - 0x73, 0xd9, 0xfb, 0x61, 0x7a, 0x59, 0x91, 0x77, 0xc6, 0xd8, 0x5e, 0xb4, 0xe4, 0xf8, 0x41, 0x53, - 0x4b, 0x1f, 0x34, 0x1b, 0xb0, 0xee, 0x91, 0x19, 0xdb, 0x32, 0x9a, 0xc7, 0xdd, 0xe6, 0x63, 0xa8, - 0x88, 0x8b, 0x56, 0xcb, 0xe2, 0x61, 0xb8, 0x70, 0xda, 0x06, 0xac, 0x4f, 0x02, 0xd3, 0x8b, 0xb8, - 0x2d, 0x4b, 0x93, 0xb8, 0xdb, 0xfc, 0xa7, 0x1c, 0xd4, 0x32, 0xce, 0xe2, 0x92, 0xc2, 0xf9, 0x02, - 0x4a, 0x34, 0x7d, 0xac, 0xfe, 0xd7, 0x97, 0x7a, 0x21, 0x52, 0x76, 0x89, 0x6c, 0x3c, 0x82, 0x92, - 0x49, 0xcb, 0xa4, 0x44, 0x7d, 0x89, 0xab, 0x54, 0x76, 0xc3, 0x24, 0x7a, 0xeb, 0x0e, 0xd4, 0xfa, - 0xe1, 0x30, 0x32, 0xa3, 0x95, 0xd7, 0xb5, 0xad, 0x7f, 0x29, 0xc0, 0x46, 0x8c, 0x7b, 0xc1, 0x9e, - 0x0c, 0xd0, 0x78, 0xba, 0x29, 0x6a, 0x53, 0x54, 0x8d, 0xb0, 0x50, 0x90, 0x37, 0xec, 0xd4, 0xc1, - 0xfa, 0xc1, 0x53, 0x73, 0x2c, 0xd9, 0xc3, 0xea, 0xdd, 0x53, 0x7e, 0x56, 0x10, 0xc7, 0xa2, 0x82, - 0x8c, 0x0f, 0x40, 0x7f, 0xe9, 0xfb, 0xd1, 0x98, 0xec, 0x50, 0xbc, 0xe4, 0x97, 0x11, 0x40, 0x3f, - 0x55, 0xdd, 0x80, 0x8a, 0x35, 0x0f, 0xe8, 0x4f, 0x94, 0x63, 0xc7, 0x96, 0x6f, 0xf9, 0x20, 0x41, - 0x7b, 0x8e, 0xad, 0x22, 0x58, 0x8e, 0x2d, 0x5f, 0xf2, 0x63, 0x84, 0x1d, 0x81, 0xe0, 0x72, 0x77, - 0xfc, 0xda, 0x09, 0xa2, 0xb9, 0x39, 0x95, 0xef, 0xf8, 0xe0, 0x72, 0xf7, 0x99, 0x80, 0x18, 0x1f, - 0x41, 0x15, 0x11, 0x02, 0x1e, 0x3a, 0x36, 0xf7, 0x22, 0xf9, 0x30, 0x89, 0x44, 0x4c, 0x82, 0x70, - 0x89, 0x88, 0x22, 0x22, 0x4a, 0x45, 0xe6, 0x89, 0xdc, 0x15, 0x69, 0xca, 0x75, 0x40, 0x6e, 0xe3, - 0x49, 0xe0, 0xbf, 0x89, 0x4e, 0xe8, 0x95, 0x52, 0x63, 0x88, 0xbe, 0x4f, 0x00, 0x3c, 0x83, 0xe8, - 0x24, 0xe0, 0xa6, 0x2d, 0x9e, 0xe7, 0x35, 0x16, 0x77, 0x51, 0x61, 0x8e, 0xed, 0x90, 0x1e, 0x24, - 0x35, 0x86, 0x4d, 0x14, 0xe2, 0x7c, 0x46, 0x72, 0x10, 0x7f, 0x81, 0xc8, 0x5e, 0xeb, 0xdf, 0x0a, - 0x50, 0xeb, 0x99, 0x9e, 0x33, 0x4d, 0x72, 0xe5, 0x6f, 0xa1, 0x1a, 0x88, 0xe6, 0x58, 0x79, 0x51, - 0x4a, 0x2f, 0x9b, 0x7b, 0xed, 0x7e, 0xf7, 0xa0, 0x3d, 0x66, 0x9d, 0x1f, 0x8e, 0x3a, 0xc3, 0x91, - 0xa8, 0x1b, 0x2a, 0x92, 0x62, 0x84, 0xee, 0xe6, 0x7d, 0x28, 0xa3, 0x2e, 0x8c, 0xcf, 0xfc, 0x0d, - 0xf7, 0xbd, 0x78, 0x24, 0xa2, 0x3f, 0x0e, 0x2d, 0x3f, 0xce, 0x92, 0x92, 0x3e, 0x6e, 0x96, 0xa4, - 0x30, 0x56, 0xff, 0x02, 0x20, 0x08, 0xfd, 0xd1, 0xb5, 0x05, 0x15, 0x9b, 0x87, 0x56, 0xe0, 0xcc, - 0x92, 0x27, 0x15, 0x9d, 0xa9, 0x20, 0x9c, 0x57, 0x30, 0x90, 0xbf, 0x95, 0xe9, 0x6c, 0x9d, 0xfa, - 0x5d, 0xdb, 0xf8, 0x18, 0x36, 0xc4, 0x90, 0x78, 0x5d, 0x95, 0xc7, 0xad, 0xb3, 0x2a, 0x41, 0xf7, - 0x11, 0x28, 0xfe, 0x3d, 0x13, 0x29, 0x41, 0x59, 0xd4, 0xfa, 0x22, 0xde, 0x37, 0x60, 0x9d, 0x0a, - 0x56, 0x3f, 0xa0, 0x13, 0xd6, 0x59, 0xdc, 0x45, 0x99, 0x72, 0x91, 0xb5, 0x81, 0x78, 0x92, 0x11, - 0x3d, 0x3c, 0x76, 0xd3, 0x76, 0x1d, 0x6f, 0x2c, 0x47, 0x2b, 0x62, 0xad, 0x04, 0xeb, 0x24, 0xef, - 0xc0, 0x62, 0x41, 0xf4, 0x5c, 0x55, 0x55, 0x36, 0xfb, 0xd4, 0x0f, 0x23, 0xe3, 0x56, 0xbc, 0xde, - 0xf8, 0x25, 0x5c, 0xfe, 0x7f, 0x51, 0x23, 0x68, 0xfc, 0xea, 0xdd, 0xfa, 0x7d, 0x0e, 0x36, 0xe2, - 0xc3, 0x93, 0xa6, 0x26, 0x5d, 0x45, 0x2e, 0xe3, 0x92, 0xad, 0xb8, 0x4c, 0x2d, 0x4a, 0xe3, 0xbb, - 0x0e, 0x10, 0xf9, 0x91, 0x39, 0x1d, 0xcf, 0x43, 0xf9, 0x5c, 0x53, 0x60, 0x3a, 0x41, 0x8e, 0x42, - 0x8e, 0x21, 0x6e, 0x43, 0x0c, 0x5b, 0xe6, 0xcc, 0xb4, 0x9c, 0x48, 0x3c, 0xf6, 0x15, 0x58, 0x8d, - 0xa0, 0x3b, 0x12, 0x68, 0x7c, 0x02, 0x9b, 0x1e, 0x7f, 0x23, 0x74, 0x77, 0x9c, 0x26, 0x53, 0x05, - 0x56, 0xf3, 0xf8, 0x1b, 0xd2, 0x60, 0x72, 0xd3, 0x28, 0xfd, 0x14, 0x4f, 0x79, 0xf6, 0xaa, 0xc6, - 0x68, 0x87, 0x66, 0x74, 0x72, 0xf7, 0xcf, 0x41, 0x3b, 0x13, 0x8b, 0x6a, 0xa0, 0xef, 0x0c, 0xfa, - 0xa3, 0x76, 0xb7, 0xdf, 0x61, 0x0b, 0x92, 0xfb, 0xe1, 0xa8, 0x3d, 0xaa, 0x17, 0xee, 0xde, 0x03, - 0x3d, 0xf9, 0x17, 0x08, 0xc1, 0x58, 0x4f, 0x8a, 0x7b, 0x94, 0x7d, 0x36, 0x38, 0x3a, 0x14, 0xd9, - 0xf1, 0x21, 0x1b, 0x7c, 0xd7, 0xd9, 0x41, 0xf4, 0xfb, 0xb0, 0x2e, 0x4b, 0x38, 0x63, 0x1d, 0x0a, - 0xfb, 0x9d, 0x51, 0x7d, 0x0d, 0x1b, 0xc3, 0xce, 0xa8, 0x9e, 0x33, 0x4a, 0x90, 0x67, 0xbd, 0x7a, - 0x9e, 0xd2, 0xec, 0x5e, 0x7f, 0xb0, 0xdb, 0x21, 0xfe, 0x90, 0x96, 0x65, 0xd9, 0xe2, 0xf6, 0xd9, - 0xe0, 0xe0, 0xa8, 0x27, 0x53, 0xf1, 0x2e, 0xa1, 0xe7, 0xef, 0xfe, 0x26, 0x07, 0x57, 0x16, 0x98, - 0x88, 0x51, 0x87, 0xaa, 0xc8, 0xe2, 0xc7, 0x22, 0x4f, 0x5f, 0x43, 0x08, 0x05, 0xe1, 0x18, 0x92, - 0x43, 0x48, 0xe7, 0xf9, 0xa8, 0xd3, 0xdf, 0x1d, 0xc7, 0x89, 0x7d, 0x1d, 0xaa, 0xc3, 0xa7, 0xac, - 0xdb, 0xff, 0x7e, 0x1c, 0x67, 0xf7, 0x57, 0x60, 0xb3, 0xd7, 0xee, 0xb7, 0xf7, 0x3b, 0xe3, 0xce, - 0x73, 0x29, 0x0d, 0x8d, 0xca, 0xe8, 0xbe, 0x00, 0xd7, 0x8b, 0x86, 0x01, 0x1b, 0xfb, 0x9d, 0xd1, - 0x78, 0xa7, 0x7d, 0xd8, 0xde, 0xe9, 0x8e, 0xba, 0x9d, 0x61, 0xbd, 0xf4, 0xf0, 0x7f, 0x0b, 0x50, - 0xe8, 0xf8, 0xa1, 0xf1, 0x10, 0xb4, 0x43, 0xc7, 0x9b, 0x18, 0xe9, 0xfb, 0xab, 0xf2, 0xc3, 0x6f, - 0xd3, 0x38, 0x03, 0x9d, 0x4d, 0x4f, 0x5b, 0x6b, 0xc6, 0x03, 0xc8, 0xf7, 0x76, 0x0d, 0x43, 0x49, - 0x85, 0x62, 0xfc, 0x2b, 0x19, 0x98, 0x50, 0xc1, 0xd6, 0xda, 0xe7, 0x39, 0xe3, 0x0b, 0xd0, 0xf6, - 0x1c, 0xcf, 0x36, 0xd4, 0xe7, 0xee, 0xe4, 0xb1, 0x7a, 0x39, 0xd9, 0x63, 0x28, 0x89, 0xd0, 0x61, - 0xbc, 0x9b, 0x46, 0x26, 0x35, 0xee, 0x34, 0xdf, 0x3b, 0x07, 0x8f, 0xc9, 0x8d, 0xef, 0x60, 0xf3, - 0xcc, 0x1f, 0xc5, 0xc6, 0x8d, 0xf3, 0xaf, 0xe8, 0x99, 0x9f, 0x7c, 0x9b, 0xe9, 0xfa, 0x94, 0xbf, - 0x74, 0x5b, 0x6b, 0xc6, 0x5f, 0x02, 0xa4, 0x7f, 0x04, 0x1b, 0xcd, 0xcc, 0xa3, 0xfd, 0xe5, 0x38, - 0x3c, 0x00, 0xad, 0xf3, 0x96, 0x5b, 0x8a, 0xd8, 0x92, 0xf2, 0x52, 0xd9, 0x7f, 0x1a, 0x76, 0x5b, - 0x6b, 0xc6, 0x53, 0xb8, 0x22, 0xac, 0x79, 0xc8, 0x83, 0xd7, 0x3c, 0xb9, 0xe8, 0x4b, 0x45, 0x91, - 0x71, 0xd4, 0x8a, 0x28, 0xb2, 0x3e, 0xa0, 0xb5, 0xf6, 0xe4, 0x08, 0x36, 0x1d, 0x7f, 0x7b, 0x82, - 0x63, 0x12, 0xe7, 0x49, 0xb9, 0xe3, 0x87, 0x94, 0x30, 0x1d, 0xe6, 0xfe, 0xea, 0xf3, 0x89, 0x13, - 0x9d, 0xcc, 0x5f, 0x6e, 0x5b, 0xbe, 0x7b, 0xdf, 0xe2, 0x81, 0x77, 0x8f, 0xfb, 0xe1, 0x7d, 0xc4, - 0xbe, 0x47, 0xde, 0xf8, 0x3e, 0x7d, 0x5f, 0xce, 0x8f, 0x1f, 0x73, 0x3f, 0x1c, 0x23, 0xfc, 0x1f, - 0xf2, 0x85, 0xce, 0x60, 0xf8, 0xb2, 0x44, 0x03, 0x7f, 0xfa, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x8f, 0xfd, 0x31, 0xde, 0x3b, 0x2e, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConnInterface - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// EosClient is the client API for Eos service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type EosClient interface { - // Replies to a ping - Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) - // Replies to MD requests with a stream - MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) - // Replies to Find requests with a stream - Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) - // Replies to a NsStat operation - NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) -} - -type eosClient struct { - cc grpc.ClientConnInterface -} - -func NewEosClient(cc grpc.ClientConnInterface) EosClient { - return &eosClient{cc} -} - -func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { - out := new(PingReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...) - if err != nil { - return nil, err - } - x := &eosMDClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Eos_MDClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream -} - -type eosMDClient struct { - grpc.ClientStream -} - -func (x *eosMDClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...) - if err != nil { - return nil, err - } - x := &eosFindClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Eos_FindClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream -} - -type eosFindClient struct { - grpc.ClientStream -} - -func (x *eosFindClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) { - out := new(NsStatResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) { - out := new(NSResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) { - out := new(ManilaResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// EosServer is the server API for Eos service. -type EosServer interface { - // Replies to a ping - Ping(context.Context, *PingRequest) (*PingReply, error) - // Replies to MD requests with a stream - MD(*MDRequest, Eos_MDServer) error - // Replies to Find requests with a stream - Find(*FindRequest, Eos_FindServer) error - // Replies to a NsStat operation - NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) - FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(context.Context, *NSRequest) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) -} - -// UnimplementedEosServer can be embedded to have forward compatible implementations. -type UnimplementedEosServer struct { -} - -func (*UnimplementedEosServer) Ping(ctx context.Context, req *PingRequest) (*PingReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") -} -func (*UnimplementedEosServer) MD(req *MDRequest, srv Eos_MDServer) error { - return status.Errorf(codes.Unimplemented, "method MD not implemented") -} -func (*UnimplementedEosServer) Find(req *FindRequest, srv Eos_FindServer) error { - return status.Errorf(codes.Unimplemented, "method Find not implemented") -} -func (*UnimplementedEosServer) NsStat(ctx context.Context, req *NsStatRequest) (*NsStatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented") -} -func (*UnimplementedEosServer) ContainerInsert(ctx context.Context, req *ContainerInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented") -} -func (*UnimplementedEosServer) FileInsert(ctx context.Context, req *FileInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented") -} -func (*UnimplementedEosServer) Exec(ctx context.Context, req *NSRequest) (*NSResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") -} -func (*UnimplementedEosServer) ManilaServerRequest(ctx context.Context, req *ManilaRequest) (*ManilaResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented") -} - -func RegisterEosServer(s *grpc.Server, srv EosServer) { - s.RegisterService(&_Eos_serviceDesc, srv) -} - -func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Ping(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Ping(ctx, req.(*PingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(MDRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(EosServer).MD(m, &eosMDServer{stream}) -} - -type Eos_MDServer interface { - Send(*MDResponse) error - grpc.ServerStream -} - -type eosMDServer struct { - grpc.ServerStream -} - -func (x *eosMDServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) -} - -func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(FindRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(EosServer).Find(m, &eosFindServer{stream}) -} - -type Eos_FindServer interface { - Send(*MDResponse) error - grpc.ServerStream -} - -type eosFindServer struct { - grpc.ServerStream -} - -func (x *eosFindServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) -} - -func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NsStatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).NsStat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/NsStat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ContainerInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ContainerInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ContainerInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FileInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).FileInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/FileInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NSRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Exec(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Exec", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Exec(ctx, req.(*NSRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ManilaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ManilaServerRequest(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ManilaServerRequest", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Eos_serviceDesc = grpc.ServiceDesc{ - ServiceName: "eos.rpc.Eos", - HandlerType: (*EosServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Ping", - Handler: _Eos_Ping_Handler, - }, - { - MethodName: "NsStat", - Handler: _Eos_NsStat_Handler, - }, - { - MethodName: "ContainerInsert", - Handler: _Eos_ContainerInsert_Handler, - }, - { - MethodName: "FileInsert", - Handler: _Eos_FileInsert_Handler, - }, - { - MethodName: "Exec", - Handler: _Eos_Exec_Handler, - }, - { - MethodName: "ManilaServerRequest", - Handler: _Eos_ManilaServerRequest_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "MD", - Handler: _Eos_MD_Handler, - ServerStreams: true, - }, - { - StreamName: "Find", - Handler: _Eos_Find_Handler, - ServerStreams: true, - }, - }, - Metadata: "Rpc.proto", -} diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto deleted file mode 100644 index 97c68bdaa5..0000000000 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto +++ /dev/null @@ -1,604 +0,0 @@ -// @project The CERN Tape Archive (CTA) -// @brief CTA-EOS gRPC API for CASTOR-EOS migration -// @copyright Copyright 2019 CERN -// @license This program is free software: you can redistribute it and/or -// modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied -// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -// PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public -// License along with this program. If not, see -// . - -// NOTE: Compile for Go with: -// protoc ./eos_grpc.proto --go_out=plugins=grpc:. - -syntax = "proto3"; - -package eos.rpc; - -option java_multiple_files = true; -option java_package = "io.grpc.eos.rpc"; -option java_outer_classname = "EosProto"; -option objc_class_prefix = "EOS"; -option go_package = "github.com/cern-eos/grpc-proto/protobuf;eos_grpc"; - -service Eos { - // Replies to a ping - rpc Ping(PingRequest) returns (PingReply) {} - - // --------------------------------------------------------------------- - // NAMESPACE - // --------------------------------------------------------------------- - - // Replies to MD requests with a stream - rpc MD(MDRequest) returns (stream MDResponse) {} - - // Replies to Find requests with a stream - rpc Find(FindRequest) returns (stream MDResponse) {} - - // Replies to a NsStat operation - rpc NsStat(NsStatRequest) returns (NsStatResponse) {} - - // Replies to an insert - rpc ContainerInsert(ContainerInsertRequest) returns (InsertReply) {} - rpc FileInsert(FileInsertRequest) returns (InsertReply) {} - - // Replies to a NsRequest operation - rpc Exec(NSRequest) returns (NSResponse) {} - - // --------------------------------------------------------------------- - // OPENSTACK - // --------------------------------------------------------------------- - - // Manila Driver - rpc ManilaServerRequest(ManilaRequest) returns (ManilaResponse) {} -} - -message PingRequest { - string authkey = 1; - bytes message = 2; -} - -message PingReply { bytes message = 1; } - -// --------------------------------------------------------------------- -// NAMESPACE -// --------------------------------------------------------------------- - -message ContainerInsertRequest { - repeated ContainerMdProto container = 1; - string authkey = 2; - bool inherit_md = 3; -} - -message FileInsertRequest { - repeated FileMdProto files = 1; - string authkey = 2; -} - -message InsertReply { - repeated string message = 1; - repeated uint32 retc = 2; -} - -message Time { - uint64 sec = 1; - uint64 n_sec = 2; -} - -message Checksum { - bytes value = 1; - string type = 2; -} - -message FileMdProto { - uint64 id = 1; - uint64 cont_id = 2; - uint64 uid = 3; - uint64 gid = 4; - uint64 size = 5; - uint32 layout_id = 6; - uint32 flags = 7; - bytes name = 8; - bytes link_name = 9; - Time ctime = 10; // change time - Time mtime = 11; // modification time - Checksum checksum = 12; - repeated uint32 locations = 13; - repeated uint32 unlink_locations = 14; - map xattrs = 15; - bytes path = 16; - string etag = 17; - uint64 inode = 18; -} - -message ContainerMdProto { - uint64 id = 1; - uint64 parent_id = 2; - uint64 uid = 3; - uint64 gid = 4; - int64 tree_size = 6; - uint32 mode = 5; - uint32 flags = 7; - bytes name = 8; - Time ctime = 9; // change time - Time mtime = 10; // modification time - Time stime = 11; // sync time - map xattrs = 12; - bytes path = 13; - string etag = 14; - uint64 inode = 15; -} - -enum TYPE { - FILE = 0; - CONTAINER = 1; - LISTING = 2; - STAT = 3; -} - -enum QUOTATYPE { - USER = 0; - GROUP = 2; - PROJECT = 3; -} - -enum QUOTAOP { - GET = 0; - SET = 1; - RM = 2; - RMNODE = 3; -} - -enum QUOTAENTRY { - NONE = 0; - VOLUME = 1; - INODE = 2; -} - -message QuotaProto { - bytes path = 1; // quota node path - string name = 2; // associated name for the given type - QUOTATYPE type = 3; // user,group,project or all quota - uint64 usedbytes = 4; // bytes used physical - uint64 usedlogicalbytes = 5; // bytes used logical - uint64 usedfiles = 6; // number of files used - uint64 maxbytes = 7; // maximum number of bytes (volume quota) - uint64 maxlogicalbytes = - 8; // maximum number of logical bytes (logical volume quota) - uint64 maxfiles = 9; // maximum number of files (inode quota) - float percentageusedbytes = - 10; // percentage of volume quota used from 0 to 100 - float percentageusedfiles = 11; // percentag of inode quota used from 0 to 100 - string statusbytes = 12; // status string for volume quota ok,warning,exceeded - string statusfiles = 13; // status string for inode quota ok,warning,exceeded -} - -message RoleId { - uint64 uid = 1; - uint64 gid = 2; - string username = 3; - string groupname = 4; -} - -message MDId { - bytes path = 1; - fixed64 id = 2; - fixed64 ino = 3; - TYPE type = 4; -} - -message Limit { - bool zero = 1; - uint64 min = 2; - uint64 max = 3; -} - -message MDSelection { - bool select = 1; - Limit ctime = 2; - Limit mtime = 3; - Limit stime = 4; - Limit size = 5; - Limit treesize = 6; - Limit children = 7; - Limit locations = 8; - Limit unlinked_locations = 9; - uint64 layoutid = 10; - uint64 flags = 11; - bool symlink = 12; - Checksum checksum = 13; - uint32 owner = 14; - uint32 group = 15; - bool owner_root = 16; - bool group_root = 17; - bytes regexp_filename = 18; - bytes regexp_dirname = 19; - map xattr = 20; -} - -message MDRequest { - TYPE type = 1; - MDId id = 2; - string authkey = 3; - RoleId role = 4; - MDSelection selection = 5; -} - -message MDResponse { - TYPE type = 1; - FileMdProto fmd = 2; - ContainerMdProto cmd = 3; -} - -message FindRequest { - TYPE type = 1; - MDId id = 2; - RoleId role = 3; - string authkey = 4; - uint64 maxdepth = 5; - MDSelection selection = 6; -} - -message ShareAuth { - string prot = 1; - string name = 2; - string host = 3; -} - -message ShareProto { - string permission = 1; - uint64 expires = 2; - string owner = 3; - string group = 4; - uint64 generation = 5; - string path = 6; - bool allowtree = 7; - string vtoken = 8; - repeated ShareAuth origins = 9; -} - -message ShareToken { - ShareProto token = 1; - bytes signature = 2; - bytes serialized = 3; - int32 seed = 4; -} - -message NSRequest { - message MkdirRequest { - MDId id = 1; - bool recursive = 2; - int64 mode = 3; - } - - message RmdirRequest { MDId id = 1; } - - message TouchRequest { MDId id = 1; } - - message UnlinkRequest { - MDId id = 1; - bool norecycle = 3; - } - - message RmRequest { - MDId id = 1; - bool recursive = 2; - bool norecycle = 3; - } - - message RenameRequest { - MDId id = 1; - bytes target = 2; - } - - message SymlinkRequest { - MDId id = 1; - bytes target = 2; - } - - message VersionRequest { - enum VERSION_CMD { - CREATE = 0; - PURGE = 1; - LIST = 2; - GRAB = 3; - } - MDId id = 1; - VERSION_CMD cmd = 2; - int32 maxversion = 3; - string grabversion = 4; - } - - message RecycleRequest { - string key = 1; - enum RECYCLE_CMD { - RESTORE = 0; - PURGE = 1; - LIST = 2; - } - RECYCLE_CMD cmd = 2; - - message RestoreFlags { - bool force = 1; - bool mkpath = 2; - bool versions = 3; - } - - message PurgeDate { - int32 year = 1; - int32 month = 2; - int32 day = 3; - } - - RestoreFlags restoreflag = 3; - PurgeDate purgedate = 4; - } - - message SetXAttrRequest { - MDId id = 1; - map xattrs = 2; - bool recursive = 3; - repeated string keystodelete = 4; - bool create = 5; - } - - message ChownRequest { - MDId id = 1; - RoleId owner = 2; - } - - message ChmodRequest { - MDId id = 1; - int64 mode = 2; - } - - message AclRequest { - enum ACL_COMMAND { - NONE = 0; - MODIFY = 1; - LIST = 2; - } - - enum ACL_TYPE { - USER_ACL = 0; - SYS_ACL = 1; - } - - MDId id = 1; - ACL_COMMAND cmd = 2; - bool recursive = 3; - ACL_TYPE type = 4; - string rule = 5; - uint32 position = 6; - } - - message TokenRequest { ShareToken token = 1; } - - message QuotaRequest { - bytes path = 1; - RoleId id = 2; - QUOTAOP op = 3; // get or set, rm or rmnode - uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting - uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting - QUOTAENTRY entry = 6; // select volume or inode entry for deletion - } - - message ShareRequest { - message LsShare { - enum OutFormat { - NONE = 0; // - MONITORING = 1; // [-m] - LISTING = 2; // [-l] - JSON = 3; // [grpc] - } - OutFormat outformat = 1; // - string selection = 2; // - } - - message OperateShare { - enum Op { - CREATE = 0; - REMOVE = 1; - SHARE = 2; - UNSHARE = 3; - ACCESS = 4; - MODIFY = 5; - } - Op op = 1; - string share = 2; - string acl = 3; - string path = 4; - string user = 5; - string group = 6; - } - - oneof subcmd { - LsShare ls = 1; - OperateShare op = 2; - } - } - - string authkey = 1; - RoleId role = 2; - - // Actual request data object - oneof command { - MkdirRequest mkdir = 21; - RmdirRequest rmdir = 22; - TouchRequest touch = 23; - UnlinkRequest unlink = 24; - RmRequest rm = 25; - RenameRequest rename = 26; - SymlinkRequest symlink = 27; - VersionRequest version = 28; - RecycleRequest recycle = 29; - SetXAttrRequest xattr = 30; - ChownRequest chown = 31; - ChmodRequest chmod = 32; - AclRequest acl = 33; - TokenRequest token = 34; - QuotaRequest quota = 35; - ShareRequest share = 36; - } -} - -message NSResponse { - message ErrorResponse { - int64 code = 1; - string msg = 2; - } - - message VersionResponse { - message VersionInfo { - MDId id = 1; - Time mtime = 2; - } - int64 code = 1; - string msg = 2; - repeated VersionInfo versions = 3; - } - - message RecycleResponse { - int64 code = 1; - string msg = 2; - - message RecycleInfo { - enum DELETIONTYPE { - FILE = 0; - TREE = 1; - } - MDId id = 1; - RoleId owner = 2; - Time dtime = 3; - uint64 size = 4; - DELETIONTYPE type = 5; - string key = 6; - } - - repeated RecycleInfo recycles = 3; - } - - message AclResponse { - int64 code = 1; - string msg = 2; - string rule = 3; - } - - message QuotaResponse { - int64 code = 1; - string msg = 2; - repeated QuotaProto quotanode = 3; - } - - message ShareInfo { - string name = 1; - string root = 2; - string rule = 3; - uint64 uid = 4; - uint64 nshared = 5; - } - - message ShareAccess { - string name = 1; - bool granted = 2; - } - - message ShareResponse { - int64 code = 1; - string msg = 2; - repeated ShareInfo shares = 3; - repeated ShareAccess access = 4; - } - - ErrorResponse error = 1; - VersionResponse version = 2; - RecycleResponse recycle = 3; - AclResponse acl = 4; - QuotaResponse quota = 5; - ShareResponse share = 6; -} - -message NsStatRequest { string authkey = 1; } - -message NsStatResponse { - int64 code = 1; - string emsg = 2; - string state = 3; - uint64 nfiles = 4; - uint64 ncontainers = 5; - uint64 boot_time = 6; - uint64 current_fid = 7; - uint64 current_cid = 8; - uint64 mem_virtual = 9; - uint64 mem_resident = 10; - uint64 mem_share = 11; - uint64 mem_growth = 12; - uint64 threads = 13; - uint64 fds = 14; - uint64 uptime = 15; -} - -// --------------------------------------------------------------------- -// OPENSTACK -// --------------------------------------------------------------------- - -enum MANILA_REQUEST_TYPE { - CREATE_SHARE = 0; - DELETE_SHARE = 1; - EXTEND_SHARE = 2; - SHRINK_SHARE = 3; - MANAGE_EXISTING = 4; - UNMANAGE = 5; - GET_CAPACITIES = 6; - /* EXTRA FUNCTIONS NOT IMPLEMENTED */ - /* - CREATE_SNAPSHOT = 7; - DELETE_SNAPSHOT = 8; - CREATE_SHARE_FROM_SNAPSHOT = 9; - ENSURE_SHARE = 10; - ALLOW_ACCESS = 11; - DENY_ACCESS = 12; - GET_SHARE_STATS = 13; - DO_SETUP = 14; - SETUP_SERVER = 15; - TEARDOWN_SERVER = 16; - GET_NETWORK_ALLOCATIONS_NUMBER = 17; - VERIFY_SHARE_SERVER_HANDLING = 18; - CREATE_SHARE_GROUP = 19; - DELETE_SHARE_GROUP = 20; - */ -} - -message ManilaRequest { - MANILA_REQUEST_TYPE request_type = 1; - string auth_key = 2; - string protocol = 3; - string share_name = 4; - string description = 5; - string share_id = 6; - string share_group_id = 7; - int32 quota = 8; - string creator = 9; - string egroup = 10; - string admin_egroup = 11; - string share_host = 12; - string share_location = 13; -} - -message ManilaResponse { - string msg = 1; // for generic messages - int32 code = 2; // < 1 is an error -- > 1 is OK - int64 total_used = 3; - int64 total_capacity = 4; - int64 new_share_quota = 5; - string new_share_path = 6; -} diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 8858bcbedb..8a86c1b5cd 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -23,23 +23,20 @@ package eosgrpc import ( - "bytes" "context" "encoding/hex" "fmt" "io" "os" - "os/exec" "path" "strconv" "strings" - "syscall" "time" + erpc "github.com/cern-eos/go-eosgrpc" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/eosclient" - erpc "github.com/cs3org/reva/pkg/eosclient/eosgrpc/eos_grpc" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/storage/utils/acl" "github.com/google/uuid" @@ -204,7 +201,7 @@ func (c *Client) getRespError(rsp *erpc.NSResponse, err error) error { } // Common code to create and initialize a NSRequest. -func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization) (*erpc.NSRequest, error) { +func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization, app string) (*erpc.NSRequest, error) { // Stuff filename, uid, gid into the MDRequest type log := appctx.GetLogger(ctx) @@ -223,12 +220,15 @@ func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization } rq.Role.Uid = uidInt rq.Role.Gid = gidInt + if app != "" { + rq.Role.App = app + } rq.Authkey = c.opt.Authkey return rq, nil } -// Common code to create and initialize a NSRequest. +// Common code to create and initialize a MDRequest. func (c *Client) initMDRequest(ctx context.Context, auth eosclient.Authorization) (*erpc.MDRequest, error) { // Stuff filename, uid, gid into the MDRequest type @@ -260,7 +260,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat log.Info().Str("func", "AddACL").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Init a new NSRequest - rq, err := c.initNSRequest(ctx, rootAuth) + rq, err := c.initNSRequest(ctx, rootAuth, "") if err != nil { return err } @@ -311,7 +311,7 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori sysACL := acls.Serialize() // Init a new NSRequest - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -388,7 +388,7 @@ func (c *Client) getACLForPath(ctx context.Context, auth eosclient.Authorization log.Info().Str("func", "GetACLForPath").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return nil, err } @@ -507,12 +507,12 @@ func (c *Client) fixupACLs(ctx context.Context, auth eosclient.Authorization, in } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error { log := appctx.GetLogger(ctx) log.Info().Str("func", "SetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, app) if err != nil { return err } @@ -557,12 +557,12 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr } // UnsetAttr unsets an extended attribute on a path. -func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path, app string) error { log := appctx.GetLogger(ctx) log.Info().Str("func", "UnsetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, app) if err != nil { return err } @@ -572,7 +572,6 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at var ktd = []string{attr.GetKey()} msg.Keystodelete = ktd msg.Recursive = recursive - msg.Id = new(erpc.MDId) msg.Id.Path = []byte(path) @@ -725,7 +724,7 @@ func (c *Client) GetQuota(ctx context.Context, username string, rootAuth eosclie log.Info().Str("func", "GetQuota").Str("rootuid,rootgid", rootAuth.Role.UID+","+rootAuth.Role.GID).Str("username", username).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, rootAuth) + rq, err := c.initNSRequest(ctx, rootAuth, "") if err != nil { return nil, err } @@ -801,7 +800,7 @@ func (c *Client) SetQuota(ctx context.Context, rootAuth eosclient.Authorization, // return errtypes.NotSupported("eosgrpc: SetQuota not implemented") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, rootAuth) + rq, err := c.initNSRequest(ctx, rootAuth, "") if err != nil { return err } @@ -859,7 +858,7 @@ func (c *Client) Touch(ctx context.Context, auth eosclient.Authorization, path s log.Info().Str("func", "Touch").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -894,7 +893,7 @@ func (c *Client) Chown(ctx context.Context, auth, chownAuth eosclient.Authorizat log.Info().Str("func", "Chown").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("chownuid,chowngid", chownAuth.Role.UID+","+chownAuth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -938,7 +937,7 @@ func (c *Client) Chmod(ctx context.Context, auth eosclient.Authorization, mode, log.Info().Str("func", "Chmod").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("mode", mode).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -979,7 +978,7 @@ func (c *Client) CreateDir(ctx context.Context, auth eosclient.Authorization, pa log.Info().Str("func", "Createdir").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1020,7 +1019,7 @@ func (c *Client) rm(ctx context.Context, auth eosclient.Authorization, path stri log.Info().Str("func", "rm").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1055,7 +1054,7 @@ func (c *Client) rmdir(ctx context.Context, auth eosclient.Authorization, path s log.Info().Str("func", "rmdir").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1110,7 +1109,7 @@ func (c *Client) Rename(ctx context.Context, auth eosclient.Authorization, oldPa log.Info().Str("func", "Rename").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("oldPath", oldPath).Str("newPath", newPath).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1322,7 +1321,7 @@ func (c *Client) Read(ctx context.Context, auth eosclient.Authorization, path st // Write writes a file to the mgm // Somehow the same considerations as Read apply. -func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser) error { +func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser, app string) error { log := appctx.GetLogger(ctx) log.Info().Str("func", "Write").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") var length int64 @@ -1355,24 +1354,10 @@ func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path s defer wfd.Close() defer os.RemoveAll(fd.Name()) - return c.httpcl.PUTFile(ctx, u.Username, auth, path, wfd, length) + return c.httpcl.PUTFile(ctx, u.Username, auth, path, wfd, length, app) } - return c.httpcl.PUTFile(ctx, u.Username, auth, path, stream, length) - - // return c.httpcl.PUTFile(ctx, remoteuser, auth, urlpathng, stream) - // return c.WriteFile(ctx, uid, gid, path, fd.Name()) -} - -// WriteFile writes an existing file to the mgm. Old xrdcp utility. -func (c *Client) WriteFile(ctx context.Context, auth eosclient.Authorization, path, source string) error { - log := appctx.GetLogger(ctx) - log.Info().Str("func", "WriteFile").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Str("source", source).Msg("") - - xrdPath := fmt.Sprintf("%s//%s", c.opt.URL, path) - cmd := exec.CommandContext(ctx, c.opt.XrdcopyBinary, "--nopbar", "--silent", "-f", source, xrdPath, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s", auth.Role.UID, auth.Role.GID)) - _, _, err := c.execute(ctx, cmd) - return err + return c.httpcl.PUTFile(ctx, u.Username, auth, path, stream, length, app) } // ListDeletedEntries returns a list of the deleted entries. @@ -1381,7 +1366,7 @@ func (c *Client) ListDeletedEntries(ctx context.Context, auth eosclient.Authoriz log.Info().Str("func", "ListDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return nil, err } @@ -1449,7 +1434,7 @@ func (c *Client) RestoreDeletedEntry(ctx context.Context, auth eosclient.Authori log.Info().Str("func", "RestoreDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("key", key).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1487,7 +1472,7 @@ func (c *Client) PurgeDeletedEntries(ctx context.Context, auth eosclient.Authori log.Info().Str("func", "PurgeDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1534,7 +1519,7 @@ func (c *Client) RollbackToVersion(ctx context.Context, auth eosclient.Authoriza log.Info().Str("func", "RollbackToVersion").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Str("version", version).Msg("") // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, auth, "") if err != nil { return err } @@ -1677,51 +1662,3 @@ func (c *Client) grpcMDResponseToFileInfo(ctx context.Context, st *erpc.MDRespon } return fi, nil } - -// exec executes the command and returns the stdout, stderr and return code. -func (c *Client) execute(ctx context.Context, cmd *exec.Cmd) (string, string, error) { - log := appctx.GetLogger(ctx) - - outBuf := &bytes.Buffer{} - errBuf := &bytes.Buffer{} - cmd.Stdout = outBuf - cmd.Stderr = errBuf - cmd.Env = []string{ - "EOS_MGM_URL=" + c.opt.URL, - } - - if c.opt.UseKeytab { - cmd.Env = append(cmd.Env, "XrdSecPROTOCOL="+c.opt.SecProtocol) - cmd.Env = append(cmd.Env, "XrdSecSSSKT="+c.opt.Keytab) - } - - err := cmd.Run() - - var exitStatus int - if exiterr, ok := err.(*exec.ExitError); ok { - // The program has exited with an exit code != 0 - // This works on both Unix and Windows. Although package - // syscall is generally platform dependent, WaitStatus is - // defined for both Unix and Windows and in both cases has - // an ExitStatus() method with the same signature. - if status, ok := exiterr.Sys().(syscall.WaitStatus); ok { - exitStatus = status.ExitStatus() - switch exitStatus { - case 0: - err = nil - case 2: - err = errtypes.NotFound(errBuf.String()) - } - } - } - - args := fmt.Sprintf("%s", cmd.Args) - env := fmt.Sprintf("%s", cmd.Env) - log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd") - - if err != nil && exitStatus != 2 { // don't wrap the errtypes.NotFoundError - err = errors.Wrap(err, "eosclient: error while executing command") - } - - return outBuf.String(), errBuf.String(), err -} diff --git a/pkg/eosclient/eosgrpc/eoshttp.go b/pkg/eosclient/eosgrpc/eoshttp.go index e75fc8c409..ee1aa3aacf 100644 --- a/pkg/eosclient/eosgrpc/eoshttp.go +++ b/pkg/eosclient/eosgrpc/eoshttp.go @@ -210,8 +210,8 @@ func (c *EOSHTTPClient) doReq(req *http.Request, remoteuser string) (*http.Respo return resp, err } -// If the error is not nil, take that -// If there is an error coming from EOS, erturn a descriptive error. +// If the error is not nil, take that. +// If there is an error coming from EOS, return a descriptive error. func (c *EOSHTTPClient) getRespError(rsp *http.Response, err error) error { if err != nil { return err @@ -228,6 +228,8 @@ func (c *EOSHTTPClient) getRespError(rsp *http.Response, err error) error { return errtypes.PermissionDenied(rspdesc(rsp)) case http.StatusNotFound: return errtypes.NotFound(rspdesc(rsp)) + case http.StatusConflict: + return errtypes.Conflict(rspdesc(rsp)) } return errtypes.InternalError("Err from EOS: " + rspdesc(rsp)) @@ -281,6 +283,8 @@ func (c *EOSHTTPClient) GETFile(ctx context.Context, remoteuser string, auth eos log.Error().Str("func", "GETFile").Str("url", finalurl).Str("err", err.Error()).Msg("can't create request") return nil, err } + // similar to eosbinary.go::Read() + req.Header.Set("app", "reva_eosclient::read") ntries := 0 nredirs := 0 @@ -360,9 +364,9 @@ func (c *EOSHTTPClient) GETFile(ctx context.Context, remoteuser string, auth eos } // PUTFile does an entire PUT to upload a full file, taking the data from a stream. -func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eosclient.Authorization, urlpath string, stream io.ReadCloser, length int64) error { +func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eosclient.Authorization, urlpath string, stream io.ReadCloser, length int64, app string) error { log := appctx.GetLogger(ctx) - log.Info().Str("func", "PUTFile").Str("remoteuser", remoteuser).Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", urlpath).Int64("length", length).Msg("") + log.Info().Str("func", "PUTFile").Str("remoteuser", remoteuser).Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", urlpath).Int64("length", length).Str("app", app).Msg("") // Now send the req and see what happens finalurl, err := c.buildFullURL(urlpath, auth) @@ -376,6 +380,9 @@ func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eos return err } + if app != "" { + req.Header.Set("app", app) + } req.Close = true ntries := 0 diff --git a/pkg/errtypes/errtypes.go b/pkg/errtypes/errtypes.go index 119bc7f8a9..f67f7a452e 100644 --- a/pkg/errtypes/errtypes.go +++ b/pkg/errtypes/errtypes.go @@ -94,6 +94,14 @@ func (e BadRequest) Error() string { return "error: bad request: " + string(e) } // IsBadRequest implements the IsBadRequest interface. func (e BadRequest) IsBadRequest() {} +// Conflict is the error to use when the server found a conflict when processing the request (e.g. with an existing lock). +type Conflict string + +func (e Conflict) Error() string { return "error: conflict: " + string(e) } + +// IsConflict implements the IsConflict interface. +func (e Conflict) IsConflict() {} + // ChecksumMismatch is the error to use when the sent hash does not match the calculated hash. type ChecksumMismatch string diff --git a/pkg/ocm/provider/authorizer/open/open.go b/pkg/ocm/provider/authorizer/open/open.go index 88516d6d3d..bad5a6a41b 100644 --- a/pkg/ocm/provider/authorizer/open/open.go +++ b/pkg/ocm/provider/authorizer/open/open.go @@ -20,15 +20,17 @@ package open import ( "context" - "encoding/json" - "os" + "net/url" + "path/filepath" "strings" + "time" ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" - "github.com/cs3org/reva/pkg/errtypes" + client "github.com/cs3org/reva/internal/http/services/opencloudmesh/ocmd" "github.com/cs3org/reva/pkg/ocm/provider" "github.com/cs3org/reva/pkg/ocm/provider/authorizer/registry" "github.com/cs3org/reva/pkg/utils/cfg" + "github.com/pkg/errors" ) func init() { @@ -42,19 +44,7 @@ func New(ctx context.Context, m map[string]interface{}) (provider.Authorizer, er return nil, err } - f, err := os.ReadFile(c.Providers) - if err != nil { - return nil, err - } - providers := []*ocmprovider.ProviderInfo{} - err = json.Unmarshal(f, &providers) - if err != nil { - return nil, err - } - a := &authorizer{} - a.providers = a.getOCMProviders(providers) - return a, nil } @@ -64,9 +54,6 @@ type config struct { } func (c *config) ApplyDefaults() { - if c.Providers == "" { - c.Providers = "/etc/revad/ocm-providers.json" - } } type authorizer struct { @@ -79,7 +66,58 @@ func (a *authorizer) GetInfoByDomain(ctx context.Context, domain string) (*ocmpr return p, nil } } - return nil, errtypes.NotFound(domain) + + var endpoint string + if !strings.HasPrefix(domain, "http://") && !strings.HasPrefix(domain, "https://") { + endpoint = "https://" + domain + } else { + endpoint = domain + } + + // not yet known: try to discover the remote OCM endpoint + ocmClient := client.NewClient(time.Duration(10)*time.Second, true) + ocmCaps, err := ocmClient.Discover(ctx, endpoint) + if err != nil { + return nil, errors.Wrap(err, "error probing OCM services at remote server") + } + var path string + for _, t := range ocmCaps.ResourceTypes { + webdavRoot, ok := t.Protocols["webdav"] + if ok { + // assume the first resourceType that exposes a webdav root is OK to use: as a matter of fact, + // no implementation exists yet that exposes multiple resource types with different roots. + path = filepath.Join(ocmCaps.Endpoint, webdavRoot) + } + } + host, _ := url.Parse(ocmCaps.Endpoint) + + // return a provider info record for this domain, including the OCM service + return &ocmprovider.ProviderInfo{ + Name: "ocm_" + domain, + FullName: ocmCaps.Provider, + Description: "OCM service at " + domain, + Organization: domain, + Domain: domain, + Homepage: "", + Email: "", + Properties: map[string]string{}, + Services: []*ocmprovider.Service{ + { + Endpoint: &ocmprovider.ServiceEndpoint{ + Type: &ocmprovider.ServiceType{Name: "OCM"}, + Path: ocmCaps.Endpoint, + }, + Host: host.Hostname(), + }, + { + Endpoint: &ocmprovider.ServiceEndpoint{ + Type: &ocmprovider.ServiceType{Name: "Webdav"}, + Path: path, + }, + Host: host.Hostname(), + }, + }, + }, nil } func (a *authorizer) IsProviderAllowed(ctx context.Context, provider *ocmprovider.ProviderInfo) error { @@ -89,22 +127,3 @@ func (a *authorizer) IsProviderAllowed(ctx context.Context, provider *ocmprovide func (a *authorizer) ListAllProviders(ctx context.Context) ([]*ocmprovider.ProviderInfo, error) { return a.providers, nil } - -func (a *authorizer) getOCMProviders(providers []*ocmprovider.ProviderInfo) (po []*ocmprovider.ProviderInfo) { - for _, p := range providers { - _, err := a.getOCMHost(p) - if err == nil { - po = append(po, p) - } - } - return -} - -func (a *authorizer) getOCMHost(provider *ocmprovider.ProviderInfo) (string, error) { - for _, s := range provider.Services { - if s.Endpoint.Type.Name == "OCM" { - return s.Host, nil - } - } - return "", errtypes.NotFound("OCM Host") -} diff --git a/pkg/ocm/share/sender/sender.go b/pkg/ocm/share/sender/sender.go deleted file mode 100644 index 05d6890bde..0000000000 --- a/pkg/ocm/share/sender/sender.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018-2024 CERN -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// In applying this license, CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - -package sender - -import ( - "context" - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - "path" - "strings" - "time" - - ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" - "github.com/cs3org/reva/pkg/appctx" - "github.com/cs3org/reva/pkg/httpclient" - "github.com/pkg/errors" -) - -const createOCMCoreShareEndpoint = "shares" - -func getOCMEndpoint(originProvider *ocmprovider.ProviderInfo) (string, error) { - for _, s := range originProvider.Services { - if s.Endpoint.Type.Name == "OCM" { - return s.Endpoint.Path, nil - } - } - return "", errors.New("json: ocm endpoint not specified for mesh provider") -} - -// Send executes the POST to the OCM shares endpoint to create the share at the -// remote site. -func Send(ctx context.Context, requestBodyMap map[string]interface{}, pi *ocmprovider.ProviderInfo) error { - requestBody, err := json.Marshal(requestBodyMap) - if err != nil { - err = errors.Wrap(err, "error marshalling request body") - return err - } - ocmEndpoint, err := getOCMEndpoint(pi) - if err != nil { - return err - } - u, err := url.Parse(ocmEndpoint) - if err != nil { - return err - } - u.Path = path.Join(u.Path, createOCMCoreShareEndpoint) - recipientURL := u.String() - - log := appctx.GetLogger(ctx) - log.Info().Msgf("in OCM Send! %s %s", recipientURL, requestBody) - - req, err := http.NewRequest(http.MethodPost, recipientURL, strings.NewReader(string(requestBody))) - if err != nil { - return errors.Wrap(err, "sender: error framing post request") - } - req.Header.Set("Content-Type", "application/json") - client := httpclient.New( - httpclient.Timeout(5 * time.Second), - ) - - resp, err := client.Do(req) - if err != nil { - err = errors.Wrap(err, "sender: error sending post request") - return err - } - - defer resp.Body.Close() - if (resp.StatusCode != http.StatusCreated) && (resp.StatusCode != http.StatusOK) { - respBody, e := io.ReadAll(resp.Body) - if e != nil { - e = errors.Wrap(e, "sender: error reading request body") - return e - } - err = errors.Wrap(fmt.Errorf("%s: %s", resp.Status, string(respBody)), "sender: error from "+ocmEndpoint) - return err - } - return nil -} diff --git a/pkg/ocm/storage/outcoming/ocm.go b/pkg/ocm/storage/outcoming/ocm.go index ed843a8b20..b771106f2d 100644 --- a/pkg/ocm/storage/outcoming/ocm.go +++ b/pkg/ocm/storage/outcoming/ocm.go @@ -32,8 +32,9 @@ import ( rpcv1beta1 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" ocmv1beta1 "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" - typepb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" + typespb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" "github.com/cs3org/reva/internal/http/services/datagateway" + "github.com/cs3org/reva/internal/http/services/owncloud/ocdav" "github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions" "github.com/cs3org/reva/pkg/appctx" @@ -68,6 +69,7 @@ func (c *config) ApplyDefaults() { } // New creates an OCM storage driver. +// This driver exposes local resources to remote OCM users. func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { var c config if err := cfg.Decode(m, &c); err != nil { @@ -148,6 +150,9 @@ func (d *driver) shareAndRelativePathFromRef(ctx context.Context, ref *provider. } path = makeRelative(path) + log := appctx.GetLogger(ctx) + log.Info().Interface("ref", ref).Str("path", path).Str("token", token).Msg("Accessing OCM share") + share, err := d.resolveToken(ctx, token) if err != nil { return nil, "", err @@ -392,14 +397,19 @@ func getUploadProtocol(protocols []*gateway.FileUploadProtocol, protocol string) return "", "", false } -func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io.ReadCloser) error { +func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io.ReadCloser, metadata map[string]string) error { share, rel, err := d.shareAndRelativePathFromRef(ctx, ref) if err != nil { return err } + if metadata == nil { + metadata = map[string]string{} + } return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { - initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{Ref: newRef}) + initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{ + Ref: newRef, + LockId: metadata["lockid"]}) switch { case err != nil: return err @@ -418,6 +428,12 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io } httpReq.Header.Set(datagateway.TokenTransportHeader, token) + if lockid := metadata["lockid"]; lockid != "" { + httpReq.Header.Set(ocdav.HeaderLockID, lockid) + } + if lockholder := metadata["lockholder"]; lockholder != "" { + httpReq.Header.Set(ocdav.HeaderLockHolder, lockholder) + } httpRes, err := httpclient.New().Do(httpReq) if err != nil { @@ -669,7 +685,7 @@ func (d *driver) RestoreRevision(ctx context.Context, ref *provider.Reference, k return errtypes.NotSupported("operation not supported") } -func (d *driver) ListRecycle(ctx context.Context, basePath, key, relativePath string, from, to *typepb.Timestamp) ([]*provider.RecycleItem, error) { +func (d *driver) ListRecycle(ctx context.Context, basePath, key, relativePath string, from, to *typespb.Timestamp) ([]*provider.RecycleItem, error) { return nil, errtypes.NotSupported("operation not supported") } diff --git a/pkg/ocm/storage/received/ocm.go b/pkg/ocm/storage/received/ocm.go index bcb684b9a8..75a0f38ff6 100644 --- a/pkg/ocm/storage/received/ocm.go +++ b/pkg/ocm/storage/received/ocm.go @@ -33,6 +33,7 @@ import ( provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" typepb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" "github.com/cs3org/reva/internal/http/services/owncloud/ocdav" + "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/mime" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -62,6 +63,7 @@ func (c *config) ApplyDefaults() { } // New creates an OCM storage driver. +// This driver exposes remote OCM resources to local users. func New(ctx context.Context, m map[string]interface{}) (storage.FS, error) { var c config if err := cfg.Decode(m, &c); err != nil { @@ -153,11 +155,12 @@ func (d *driver) webdavClient(ctx context.Context, ref *provider.Reference) (*go return nil, nil, "", err } - // FIXME: it's still not clear from the OCM APIs how to use the shared secret - // will use as a token in the bearer authentication as this is the reva implementation + // use the secret as bearer authentication according to OCM v1.1+ c := gowebdav.NewClient(endpoint, "", "") c.SetHeader("Authorization", "Bearer "+secret) + log := appctx.GetLogger(ctx) + log.Info().Str("endpoint", endpoint).Interface("share", share).Str("rel", rel).Str("secret", secret).Msg("Accessing OCM share") return c, share, rel, nil } @@ -282,7 +285,7 @@ func (d *driver) InitiateUpload(ctx context.Context, ref *provider.Reference, _ }, nil } -func (d *driver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error { +func (d *driver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, _ map[string]string) error { client, _, rel, err := d.webdavClient(ctx, ref) if err != nil { return err diff --git a/pkg/rhttp/datatx/manager/simple/simple.go b/pkg/rhttp/datatx/manager/simple/simple.go index 40bbd3104e..a776ba3f7b 100644 --- a/pkg/rhttp/datatx/manager/simple/simple.go +++ b/pkg/rhttp/datatx/manager/simple/simple.go @@ -23,6 +23,7 @@ import ( "net/http" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/cs3org/reva/internal/http/services/owncloud/ocdav" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rhttp/datatx" @@ -75,8 +76,15 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) { defer r.Body.Close() ref := &provider.Reference{Path: fn} + metadata := map[string]string{} + if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" { + metadata["lockid"] = lockid + } + if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" { + metadata["lockholder"] = lockholder + } - err := fs.Upload(ctx, ref, r.Body) + err := fs.Upload(ctx, ref, r.Body, metadata) switch v := err.(type) { case nil: w.WriteHeader(http.StatusOK) @@ -92,6 +100,8 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) { w.WriteHeader(http.StatusUnauthorized) case errtypes.InsufficientStorage: w.WriteHeader(http.StatusInsufficientStorage) + case errtypes.Conflict: + w.WriteHeader(http.StatusConflict) default: sublog.Error().Err(v).Msg("error uploading file") w.WriteHeader(http.StatusInternalServerError) diff --git a/pkg/rhttp/datatx/manager/spaces/spaces.go b/pkg/rhttp/datatx/manager/spaces/spaces.go index 07a346d32e..ee87211026 100644 --- a/pkg/rhttp/datatx/manager/spaces/spaces.go +++ b/pkg/rhttp/datatx/manager/spaces/spaces.go @@ -25,6 +25,7 @@ import ( "strings" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/cs3org/reva/internal/http/services/owncloud/ocdav" "github.com/cs3org/reva/pkg/appctx" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/rhttp/datatx" @@ -96,7 +97,15 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) { ResourceId: &provider.ResourceId{StorageId: storageid, OpaqueId: opaqeid}, Path: fn, } - err = fs.Upload(ctx, ref, r.Body) + metadata := map[string]string{} + if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" { + metadata["lockid"] = lockid + } + if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" { + metadata["lockholder"] = lockholder + } + + err = fs.Upload(ctx, ref, r.Body, metadata) switch v := err.(type) { case nil: w.WriteHeader(http.StatusOK) @@ -112,6 +121,8 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) { w.WriteHeader(http.StatusUnauthorized) case errtypes.InsufficientStorage: w.WriteHeader(http.StatusInsufficientStorage) + case errtypes.Conflict: + w.WriteHeader(http.StatusConflict) default: sublog.Error().Err(v).Msg("error uploading file") w.WriteHeader(http.StatusInternalServerError) diff --git a/pkg/storage/fs/cephfs/upload.go b/pkg/storage/fs/cephfs/upload.go index d5cc71a863..64ac7f7179 100644 --- a/pkg/storage/fs/cephfs/upload.go +++ b/pkg/storage/fs/cephfs/upload.go @@ -31,10 +31,12 @@ import ( "github.com/pkg/errors" ) -func (fs *cephfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error { +func (fs *cephfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error { user := fs.makeUser(ctx) p := ref.GetPath() + // TODO(lopresti) validate lock metadata if present + ok, err := IsChunked(p) if err != nil { return errors.Wrap(err, "cephfs: error checking path") diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go index db081d3d73..e66307ca49 100644 --- a/pkg/storage/fs/nextcloud/nextcloud.go +++ b/pkg/storage/fs/nextcloud/nextcloud.go @@ -317,8 +317,8 @@ func (nc *StorageDriver) InitiateUpload(ctx context.Context, ref *provider.Refer return res, err } -// Upload as defined in the storage.FS interface. -func (nc *StorageDriver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error { +// Upload as defined in the storage.FS interface. The metadata parameters (e.g. lock context) are ignored. +func (nc *StorageDriver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, _ map[string]string) error { req, err := nc.prepareRequest(ctx, http.MethodPut, filepath.Join("/Upload/home", ref.Path), r) if err != nil { return err diff --git a/pkg/storage/fs/nextcloud/nextcloud_test.go b/pkg/storage/fs/nextcloud/nextcloud_test.go index 38c4b73214..8d56566ace 100644 --- a/pkg/storage/fs/nextcloud/nextcloud_test.go +++ b/pkg/storage/fs/nextcloud/nextcloud_test.go @@ -327,7 +327,7 @@ var _ = Describe("Nextcloud", func() { }) }) - // Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error + // Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error Describe("Upload", func() { It("calls the Upload endpoint", func() { nc, called, teardown := setUpNextcloudServer() @@ -342,7 +342,7 @@ var _ = Describe("Nextcloud", func() { } stringReader := strings.NewReader("shiny!") stringReadCloser := io.NopCloser(stringReader) - err := nc.Upload(ctx, ref, stringReadCloser) + err := nc.Upload(ctx, ref, stringReadCloser, map[string]string{}) Expect(err).ToNot(HaveOccurred()) checkCalled(called, `PUT /apps/sciencemesh/~tester/api/storage/Upload/home/some/file/path.txt shiny!`) }) diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 54de8aefa1..1ce30d9142 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -39,7 +39,7 @@ type FS interface { GetMD(ctx context.Context, ref *provider.Reference, mdKeys []string) (*provider.ResourceInfo, error) ListFolder(ctx context.Context, ref *provider.Reference, mdKeys []string) ([]*provider.ResourceInfo, error) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) - Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error + Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error Download(ctx context.Context, ref *provider.Reference) (io.ReadCloser, error) ListRevisions(ctx context.Context, ref *provider.Reference) ([]*provider.FileVersion, error) DownloadRevision(ctx context.Context, ref *provider.Reference, key string) (io.ReadCloser, error) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index d98bde1fe5..50c5af028b 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -62,8 +62,10 @@ import ( ) const ( - refTargetAttrKey = "reva.target" - lwShareAttrKey = "reva.lwshare" + refTargetAttrKey = "reva.target" // used as user attr to store a reference + lwShareAttrKey = "reva.lwshare" // used to store grants to lightweight accounts + lockPayloadKey = "reva.lockpayload" // used to store lock payloads + eosLockKey = "app.lock" // this is the key known by EOS to enforce a lock. ) const ( @@ -73,12 +75,6 @@ const ( UserAttr ) -// EosLockKey is the key in the xattrs known by EOS to enforce a lock. -const EosLockKey = "app.lock" - -// LockPayloadKey is the key in the xattrs used to store the lock payload. -const LockPayloadKey = "reva.lockpayload" - var hiddenReg = regexp.MustCompile(`\.sys\..#.`) var eosLockReg = regexp.MustCompile(`expires:\d+,type:[a-z]+,owner:.+:.+`) @@ -541,9 +537,9 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen return errtypes.BadRequest(fmt.Sprintf("eosfs: key or value is empty: key:%s, value:%s", k, v)) } - // do not allow to set a lock key attr - if k == LockPayloadKey || k == EosLockKey { - return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s not allowed", k)) + // do not allow to override system-reserved keys + if k == lockPayloadKey || k == eosLockKey || k == lwShareAttrKey || k == refTargetAttrKey { + return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s is reserved", k)) } attr := &eosclient.Attribute{ @@ -554,7 +550,7 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen // TODO(labkode): SetArbitraryMetadata does not have semantics for recursivity. // We set it to false - err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, fn) + err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, fn, "") if err != nil { return errors.Wrap(err, "eosfs: error setting xattr in eos driver") } @@ -587,7 +583,7 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer Key: k, } - err := fs.c.UnsetAttr(ctx, rootAuth, attr, false, fn) + err := fs.c.UnsetAttr(ctx, rootAuth, attr, false, fn, "") if err != nil { if errors.Is(err, eosclient.AttrNotExistsError) { continue @@ -598,18 +594,26 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer return nil } +func (fs *eosfs) EncodeAppName(a string) string { + // this function returns the string to be used as EOS "app" tag, both in uploads and when handling locks; + // note that the GET (and PUT) operations in eosbinary.go and eoshttp.go use a `reva_eosclient::read` + // (resp. `write`) tag when no locks are involved. + r := strings.NewReplacer(" ", "_") + return "reva_eosclient::app_" + strings.ToLower(r.Replace(a)) +} + func (fs *eosfs) getLockPayloads(ctx context.Context, path string) (string, string, error) { // sys attributes want root auth, buddy rootauth, err := fs.getRootAuth(ctx) if err != nil { return "", "", err } - data, err := fs.c.GetAttr(ctx, rootauth, "sys."+LockPayloadKey, path) + data, err := fs.c.GetAttr(ctx, rootauth, "sys."+lockPayloadKey, path) if err != nil { return "", "", err } - eoslock, err := fs.c.GetAttr(ctx, rootauth, "sys."+EosLockKey, path) + eoslock, err := fs.c.GetAttr(ctx, rootauth, "sys."+eosLockKey, path) if err != nil { return "", "", err } @@ -617,7 +621,7 @@ func (fs *eosfs) getLockPayloads(ctx context.Context, path string) (string, stri return data.Val, eoslock.Val, nil } -func (fs *eosfs) removeLockAttrs(ctx context.Context, path string) error { +func (fs *eosfs) removeLockAttrs(ctx context.Context, path, app string) error { rootAuth, err := fs.getRootAuth(ctx) if err != nil { return err @@ -625,16 +629,16 @@ func (fs *eosfs) removeLockAttrs(ctx context.Context, path string) error { err = fs.c.UnsetAttr(ctx, rootAuth, &eosclient.Attribute{ Type: SystemAttr, - Key: EosLockKey, - }, false, path) + Key: eosLockKey, + }, false, path, app) if err != nil { return errors.Wrap(err, "eosfs: error unsetting the eos lock") } err = fs.c.UnsetAttr(ctx, rootAuth, &eosclient.Attribute{ Type: SystemAttr, - Key: LockPayloadKey, - }, false, path) + Key: lockPayloadKey, + }, false, path, app) if err != nil { return errors.Wrap(err, "eosfs: error unsetting the lock payload") } @@ -665,9 +669,9 @@ func (fs *eosfs) getLock(ctx context.Context, user *userpb.User, path string, re return nil, errors.Wrap(err, "eosfs: malformed lock payload") } - if time.Unix(int64(l.Expiration.Seconds), 0).After(time.Now()) { + if time.Unix(int64(l.Expiration.Seconds), 0).Before(time.Now()) { // the lock expired - if err := fs.removeLockAttrs(ctx, path); err != nil { + if err := fs.removeLockAttrs(ctx, path, fs.EncodeAppName(l.AppName)); err != nil { return nil, err } return nil, errtypes.NotFound("lock not found for ref") @@ -708,7 +712,7 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string) return err } - encodedLock, eosLock, err := encodeLock(lock) + encodedLock, eosLock, err := fs.encodeLock(lock) if err != nil { return errors.Wrap(err, "eosfs: error encoding lock") } @@ -716,12 +720,12 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string) // set eos lock err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ Type: SystemAttr, - Key: EosLockKey, + Key: eosLockKey, Val: eosLock, - }, false, false, path) + }, false, false, path, fs.EncodeAppName(lock.AppName)) switch { - case errors.Is(err, eosclient.AttrAlreadyExistsError): - return errtypes.BadRequest("resource already locked") + case errors.Is(err, eosclient.FileIsLockedError): + return errtypes.Conflict("resource already locked") case err != nil: return errors.Wrap(err, "eosfs: error setting eos lock") } @@ -729,9 +733,9 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string) // set payload err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ Type: SystemAttr, - Key: LockPayloadKey, + Key: lockPayloadKey, Val: encodedLock, - }, false, false, path) + }, false, false, path, fs.EncodeAppName(lock.AppName)) if err != nil { return errors.Wrap(err, "eosfs: error setting lock payload") } @@ -826,14 +830,15 @@ func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref * return resInfo.PermissionSet.InitiateFileDownload, nil } -func encodeLock(l *provider.Lock) (string, string, error) { +func (fs *eosfs) encodeLock(l *provider.Lock) (string, string, error) { data, err := json.Marshal(l) if err != nil { return "", "", err } var a string if l.AppName != "" { - a = l.AppName + // cf. upload implementation + a = fs.EncodeAppName(l.AppName) } else { a = "*" } @@ -974,7 +979,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov } path = fs.wrap(ctx, path) - return fs.removeLockAttrs(ctx, path) + return fs.removeLockAttrs(ctx, path, fs.EncodeAppName(lock.AppName)) } func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error { @@ -1003,7 +1008,7 @@ func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provi Key: fmt.Sprintf("%s.%s", lwShareAttrKey, eosACL.Qualifier), Val: eosACL.Permissions, } - if err := fs.c.SetAttr(ctx, rootAuth, attr, false, true, fn); err != nil { + if err := fs.c.SetAttr(ctx, rootAuth, attr, false, true, fn, ""); err != nil { return errors.Wrap(err, "eosfs: error adding acl for lightweight account") } return nil @@ -1106,7 +1111,7 @@ func (fs *eosfs) RemoveGrant(ctx context.Context, ref *provider.Reference, g *pr Type: SystemAttr, Key: fmt.Sprintf("%s.%s", lwShareAttrKey, eosACL.Qualifier), } - if err := fs.c.UnsetAttr(ctx, rootAuth, attr, true, fn); err != nil { + if err := fs.c.UnsetAttr(ctx, rootAuth, attr, true, fn, ""); err != nil { return errors.Wrap(err, "eosfs: error removing acl for lightweight account") } return nil @@ -1593,7 +1598,7 @@ func (fs *eosfs) createUserDir(ctx context.Context, u *userpb.User, path string, } for _, attr := range attrs { - err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path) + err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path, "") if err != nil { return errors.Wrap(err, "eosfs: error setting attribute") } @@ -1676,7 +1681,7 @@ func (fs *eosfs) CreateReference(ctx context.Context, p string, targetURI *url.U Val: targetURI.String(), } - if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp); err != nil { + if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp, ""); err != nil { err = errors.Wrapf(err, "eosfs: error setting reva.ref attr on file: %q", tmp) return err } @@ -2253,7 +2258,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( } } - // filter 'sys' attrs and the reserved lock + // filter 'sys' attrs filteredAttrs := make(map[string]string) for k, v := range eosFileInfo.Attrs { if !strings.HasPrefix(k, "sys") { @@ -2276,6 +2281,9 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( Seconds: eosFileInfo.MTimeSec, Nanos: eosFileInfo.MTimeNanos, }, + ArbitraryMetadata: &provider.ArbitraryMetadata{ + Metadata: filteredAttrs, + }, Opaque: &types.Opaque{ Map: map[string]*types.OpaqueEntry{ "eos": { @@ -2284,11 +2292,17 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( }, }, }, - ArbitraryMetadata: &provider.ArbitraryMetadata{ - Metadata: filteredAttrs, - }, } - + if eosFileInfo.Attrs[eosLockKey] != "" { + // populate the lock if decodable, log failure (but move on) if not + l, err := decodeLock(eosFileInfo.Attrs[lockPayloadKey], eosFileInfo.Attrs[eosLockKey]) + if err != nil { + sublog := appctx.GetLogger(ctx).With().Logger() + sublog.Warn().Interface("xattrs", eosFileInfo.Attrs).Msg("could not decode lock, leaving empty") + } else { + info.Lock = l + } + } if eosFileInfo.IsDir { info.Opaque.Map["disable_tus"] = &types.OpaqueEntry{ Decoder: "plain", diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go index 2c53920fe1..fb46c2699d 100644 --- a/pkg/storage/utils/eosfs/upload.go +++ b/pkg/storage/utils/eosfs/upload.go @@ -30,7 +30,7 @@ import ( "github.com/pkg/errors" ) -func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error { +func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error { p, err := fs.resolve(ctx, ref) if err != nil { return errors.Wrap(err, "eos: error resolving reference") @@ -75,7 +75,18 @@ func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadC if err != nil { return err } - return fs.c.Write(ctx, auth, fn, r) + + if metadata == nil { + metadata = map[string]string{} + } + app := metadata["lockholder"] + if app == "" { + app = "reva_eosclient::write" + } else { + // if we have a lock context, the app for EOS must match the lock holder + app = fs.EncodeAppName(app) + } + return fs.c.Write(ctx, auth, fn, r, app) } func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) { diff --git a/pkg/storage/utils/localfs/upload.go b/pkg/storage/utils/localfs/upload.go index 67967fa495..604cd26b4f 100644 --- a/pkg/storage/utils/localfs/upload.go +++ b/pkg/storage/utils/localfs/upload.go @@ -39,7 +39,7 @@ import ( var defaultFilePerm = os.FileMode(0664) -func (fs *localfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error { +func (fs *localfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error { upload, err := fs.GetUpload(ctx, ref.GetPath()) if err != nil { return errors.Wrap(err, "localfs: error retrieving upload") diff --git a/tests/helpers/helpers.go b/tests/helpers/helpers.go index d84923b15c..2354c72be0 100644 --- a/tests/helpers/helpers.go +++ b/tests/helpers/helpers.go @@ -105,7 +105,7 @@ func Upload(ctx context.Context, fs storage.FS, ref *provider.Reference, content return errors.New("simple upload method not available") } uploadRef := &provider.Reference{Path: "/" + uploadID} - err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(content))) + err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(content)), map[string]string{}) return err } diff --git a/tests/integration/grpc/fixtures/ocm-share/ocm-server-cernbox-grpc.toml b/tests/integration/grpc/fixtures/ocm-share/ocm-server-cernbox-grpc.toml index c2c077b74c..9e40fe48f6 100644 --- a/tests/integration/grpc/fixtures/ocm-share/ocm-server-cernbox-grpc.toml +++ b/tests/integration/grpc/fixtures/ocm-share/ocm-server-cernbox-grpc.toml @@ -58,6 +58,7 @@ providers = "{{file_providers}}" [grpc.services.ocmshareprovider] driver = "json" webdav_endpoint = "http://{{cernboxwebdav_address}}" +webapp_template = "http://{{cernboxwebdav_address}}/external/sciencemesh/{{.Token}}{relative-path-to-shared-resource}" provider_domain = "cernbox.cern.ch" [grpc.services.ocmshareprovider.drivers.json] diff --git a/tests/integration/grpc/fixtures/ocm-share/ocm-server-cesnet-grpc.toml b/tests/integration/grpc/fixtures/ocm-share/ocm-server-cesnet-grpc.toml index 3a225319ab..399b310561 100644 --- a/tests/integration/grpc/fixtures/ocm-share/ocm-server-cesnet-grpc.toml +++ b/tests/integration/grpc/fixtures/ocm-share/ocm-server-cesnet-grpc.toml @@ -38,6 +38,7 @@ providers = "{{file_providers}}" [grpc.services.ocmshareprovider] driver = "json" webdav_endpoint = "http://{{cesnethttp_address}}" +webapp_template = "http://{{cesnethttp_address}}/external/sciencemesh/{{.Token}}{relative-path-to-shared-resource}" provider_domain = "cesnet.cz" [grpc.services.ocmshareprovider.drivers.json] diff --git a/tests/integration/grpc/ocm_share_test.go.disabled b/tests/integration/grpc/ocm_share_test.go.disabled index fabcb593ee..a560528179 100644 --- a/tests/integration/grpc/ocm_share_test.go.disabled +++ b/tests/integration/grpc/ocm_share_test.go.disabled @@ -219,6 +219,7 @@ var _ = Describe("ocm share", func() { Expect(ok).To(BeTrue()) webdavClient := gowebdav.NewClient(webdav.WebdavOptions.Uri, "", "") + webdavClient.SetHeader("Authorization", "Bearer "+webdav.WebdavOptions.SharedSecret) d, err := webdavClient.Read(".") Expect(err).ToNot(HaveOccurred()) Expect(d).To(Equal([]byte("test"))) @@ -299,6 +300,7 @@ var _ = Describe("ocm share", func() { Expect(ok).To(BeTrue()) webdavClient := gowebdav.NewClient(webdav.WebdavOptions.Uri, "", "") + webdavClient.SetHeader("Authorization", "Bearer "+webdav.WebdavOptions.SharedSecret) data := []byte("new-content") webdavClient.SetHeader(ocdav.HeaderUploadLength, strconv.Itoa(len(data))) err = webdavClient.Write(".", data, 0) @@ -394,7 +396,7 @@ var _ = Describe("ocm share", func() { Expect(ok).To(BeTrue()) webdavClient := gowebdav.NewClient(webdav.WebdavOptions.Uri, "", "") - + webdavClient.SetHeader("Authorization", "Bearer "+webdav.WebdavOptions.SharedSecret) ok, err = helpers.SameContentWebDAV(webdavClient, fileToShare.Path, structure) Expect(err).ToNot(HaveOccurred()) Expect(ok).To(BeTrue()) @@ -499,6 +501,7 @@ var _ = Describe("ocm share", func() { webdavClient := gowebdav.NewClient(webdav.WebdavOptions.Uri, "", "") data := []byte("new-content") webdavClient.SetHeader(ocdav.HeaderUploadLength, strconv.Itoa(len(data))) + webdavClient.SetHeader("Authorization", "Bearer "+webdav.WebdavOptions.SharedSecret) err = webdavClient.Write("new-file", data, 0) Expect(err).ToNot(HaveOccurred())