From edbc82bfc14f3ce78b2763c3489c7ad9ad880e45 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Fri, 1 Mar 2024 17:09:58 +0100 Subject: [PATCH 1/2] poc: server side space defaults Signed-off-by: jkoberg --- services/graph/pkg/config/config.go | 1 + services/graph/pkg/service/v0/drives.go | 21 ++++ services/graph/pkg/service/v0/service.go | 6 ++ .../service/v0/spacetemplate/.space/image.jpg | Bin 0 -> 49784 bytes .../service/v0/spacetemplate/.space/readme.md | 1 + services/graph/pkg/service/v0/utils.go | 97 ++++++++++++++++++ 6 files changed, 126 insertions(+) create mode 100644 services/graph/pkg/service/v0/spacetemplate/.space/image.jpg create mode 100644 services/graph/pkg/service/v0/spacetemplate/.space/readme.md diff --git a/services/graph/pkg/config/config.go b/services/graph/pkg/config/config.go index 46db8fc3c1..d9b31431ac 100644 --- a/services/graph/pkg/config/config.go +++ b/services/graph/pkg/config/config.go @@ -45,6 +45,7 @@ type Spaces struct { ExtendedSpacePropertiesCacheTTL int `yaml:"extended_space_properties_cache_ttl" env:"GRAPH_SPACES_EXTENDED_SPACE_PROPERTIES_CACHE_TTL" desc:"Max TTL in seconds for the spaces property cache." introductionVersion:"pre5.0"` UsersCacheTTL int `yaml:"users_cache_ttl" env:"GRAPH_SPACES_USERS_CACHE_TTL" desc:"Max TTL in seconds for the spaces users cache." introductionVersion:"pre5.0"` GroupsCacheTTL int `yaml:"groups_cache_ttl" env:"GRAPH_SPACES_GROUPS_CACHE_TTL" desc:"Max TTL in seconds for the spaces groups cache." introductionVersion:"pre5.0"` + TemplatePath string `yaml:"template_path" env:"GRAPH_SPACES_TEMPLATE_PATH" desc:"The path to a folder containg files and folder that should be created on any space." introductionVersion:"5.0"` } type LDAP struct { diff --git a/services/graph/pkg/service/v0/drives.go b/services/graph/pkg/service/v0/drives.go index cad1abb6a9..645e99417b 100644 --- a/services/graph/pkg/service/v0/drives.go +++ b/services/graph/pkg/service/v0/drives.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "io/fs" "math" "net/http" "net/url" @@ -488,6 +489,26 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) { errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) return } + + ctx, cs3, err := g.getCS3Client(gatewayClient, resp.GetStorageSpace().GetRoot()) + if err != nil { + logger.Error().Err(err).Msg("could not get cs3 client") + errorcode.ServiceNotAvailable.Render(w, r, http.StatusInternalServerError, "could not get cs3 client, aborting") + return + } + + fsys, err := fs.Sub(_spaceTemplateFS, "spacetemplate") + if err != nil { + logger.Error().Err(err).Msg("could not create drive: error parsing fs") + errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) + return + } + + if err := applyTemplate(ctx, cs3, gatewayClient, resp.GetStorageSpace().GetRoot(), fsys.(fs.ReadDirFS)); err != nil { + logger.Error().Err(err).Msg("could not apply template to space") + return + } + render.Status(r, http.StatusCreated) render.JSON(w, r, newDrive) } diff --git a/services/graph/pkg/service/v0/service.go b/services/graph/pkg/service/v0/service.go index 25c19b2dce..ff1a28ea37 100644 --- a/services/graph/pkg/service/v0/service.go +++ b/services/graph/pkg/service/v0/service.go @@ -3,6 +3,7 @@ package svc import ( "crypto/tls" "crypto/x509" + "embed" "errors" "fmt" "net/http" @@ -35,6 +36,11 @@ const ( displayNameAttr = "displayName" ) +var ( + //go:embed spacetemplate/* + _spaceTemplateFS embed.FS +) + // Service defines the service handlers. type Service interface { ServeHTTP(http.ResponseWriter, *http.Request) diff --git a/services/graph/pkg/service/v0/spacetemplate/.space/image.jpg b/services/graph/pkg/service/v0/spacetemplate/.space/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11e7f78b4a3d499f5a56a1a9267f7a9f09840008 GIT binary patch literal 49784 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 b``rIdPYQBK_k@J1fKT$@mr_LWcj*5ETKjG7 literal 0 HcmV?d00001 diff --git a/services/graph/pkg/service/v0/spacetemplate/.space/readme.md b/services/graph/pkg/service/v0/spacetemplate/.space/readme.md new file mode 100644 index 0000000000..bcd32e9de0 --- /dev/null +++ b/services/graph/pkg/service/v0/spacetemplate/.space/readme.md @@ -0,0 +1 @@ +Space description goes here diff --git a/services/graph/pkg/service/v0/utils.go b/services/graph/pkg/service/v0/utils.go index ded1ca58c7..09e695652c 100644 --- a/services/graph/pkg/service/v0/utils.go +++ b/services/graph/pkg/service/v0/utils.go @@ -3,14 +3,22 @@ package svc import ( "context" "encoding/json" + "errors" "io" + "io/fs" "net/http" + "os" + "path/filepath" "reflect" + "strings" gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" cs3User "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1" storageprovider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + v1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" + "github.com/cs3org/reva/v2/pkg/storage/utils/metadata" "github.com/cs3org/reva/v2/pkg/storagespace" "github.com/cs3org/reva/v2/pkg/utils" "golang.org/x/sync/errgroup" @@ -425,3 +433,92 @@ func cs3ReceivedShareToLibreGraphPermissions(ctx context.Context, logger *log.Lo return permission, nil } + +func (g Graph) getCS3Client(gwc gateway.GatewayAPIClient, root *storageprovider.ResourceId) (context.Context, *metadata.CS3, error) { + mdc := metadata.NewCS3(g.config.Reva.Address, "com.owncloud.api.storage-users") + mdc.SpaceRoot = root + ctx, err := utils.GetServiceUserContext(g.config.ServiceAccount.ServiceAccountID, gwc, g.config.ServiceAccount.ServiceAccountSecret) + return ctx, mdc, err +} + +func applyTemplate(ctx context.Context, mdc *metadata.CS3, gwc gateway.GatewayAPIClient, root *storageprovider.ResourceId, fsys fs.ReadDirFS) error { + entries, err := fsys.ReadDir(".") + if err != nil { + return err + } + + updateSpaceRequest := &storageprovider.UpdateStorageSpaceRequest{ + // Prepare the object to apply the diff from. The properties on StorageSpace will overwrite + // the original storage space. + StorageSpace: &storageprovider.StorageSpace{ + Id: &storageprovider.StorageSpaceId{ + OpaqueId: storagespace.FormatResourceID(*root), + }, + Root: root, + }, + } + + updateSpaceRequest.StorageSpace.Opaque, err = uploadFolder(ctx, mdc, "", "", updateSpaceRequest.StorageSpace.Opaque, fsys, entries) + if err != nil { + return err + } + + if len(updateSpaceRequest.StorageSpace.Opaque.Map) == 0 { + return nil + } + + resp, err := gwc.UpdateStorageSpace(ctx, updateSpaceRequest) + switch { + case err != nil: + return err + case resp.Status.Code == rpc.Code_CODE_OK: + return nil + default: + return errors.New(resp.Status.Message) + } +} + +func uploadFolder(ctx context.Context, mdc *metadata.CS3, pathOnDisc, pathOnSpace string, opaque *v1beta1.Opaque, fsys fs.ReadDirFS, entries []os.DirEntry) (*v1beta1.Opaque, error) { + for _, entry := range entries { + spacePath := filepath.Join(pathOnSpace, entry.Name()) + discPath := filepath.Join(pathOnDisc, entry.Name()) + + if entry.IsDir() { + err := mdc.MakeDirIfNotExist(ctx, spacePath) + if err != nil { + return opaque, err + } + + entries, err := fsys.ReadDir(discPath) + if err != nil { + return opaque, err + } + + opaque, err = uploadFolder(ctx, mdc, discPath, spacePath, opaque, fsys, entries) + if err != nil { + return opaque, err + } + continue + } + + b, err := fs.ReadFile(fsys, discPath) + if err != nil { + return opaque, err + } + + if err := mdc.SimpleUpload(ctx, spacePath, b); err != nil { + return opaque, err + } + + // TODO: use upload to avoid second stat + i, err := mdc.Stat(ctx, spacePath) + if err != nil { + return opaque, err + } + + identifier := strings.TrimSuffix(entry.Name(), filepath.Ext(entry.Name())) + opaque = utils.AppendPlainToOpaque(opaque, identifier, storagespace.FormatResourceID(*i.Id)) + } + + return opaque, nil +} From a0e264820080d104dbd55c669d7e3dfdde6d804a Mon Sep 17 00:00:00 2001 From: jkoberg Date: Mon, 4 Mar 2024 16:21:54 +0100 Subject: [PATCH 2/2] get template from request Signed-off-by: jkoberg --- services/graph/pkg/config/config.go | 2 +- .../pkg/config/defaults/defaultconfig.go | 7 +- services/graph/pkg/service/v0/drives.go | 34 ++-- .../service/v0/spacetemplate/.space/image.jpg | Bin 49784 -> 0 bytes .../service/v0/spacetemplate/.space/image.png | Bin 0 -> 3856 bytes .../service/v0/spacetemplate/.space/readme.md | 2 +- services/graph/pkg/service/v0/utils.go | 148 ++++++++++-------- 7 files changed, 99 insertions(+), 94 deletions(-) delete mode 100644 services/graph/pkg/service/v0/spacetemplate/.space/image.jpg create mode 100644 services/graph/pkg/service/v0/spacetemplate/.space/image.png diff --git a/services/graph/pkg/config/config.go b/services/graph/pkg/config/config.go index d9b31431ac..a7bd8531d2 100644 --- a/services/graph/pkg/config/config.go +++ b/services/graph/pkg/config/config.go @@ -45,7 +45,7 @@ type Spaces struct { ExtendedSpacePropertiesCacheTTL int `yaml:"extended_space_properties_cache_ttl" env:"GRAPH_SPACES_EXTENDED_SPACE_PROPERTIES_CACHE_TTL" desc:"Max TTL in seconds for the spaces property cache." introductionVersion:"pre5.0"` UsersCacheTTL int `yaml:"users_cache_ttl" env:"GRAPH_SPACES_USERS_CACHE_TTL" desc:"Max TTL in seconds for the spaces users cache." introductionVersion:"pre5.0"` GroupsCacheTTL int `yaml:"groups_cache_ttl" env:"GRAPH_SPACES_GROUPS_CACHE_TTL" desc:"Max TTL in seconds for the spaces groups cache." introductionVersion:"pre5.0"` - TemplatePath string `yaml:"template_path" env:"GRAPH_SPACES_TEMPLATE_PATH" desc:"The path to a folder containg files and folder that should be created on any space." introductionVersion:"5.0"` + StorageUsersAddress string `yaml:"storage_users_address" env:"GRAPH_SPACES_STORAGE_USERS_ADDRESS" desc:"The address of the storage-users service." introductionVersion:"5.0"` } type LDAP struct { diff --git a/services/graph/pkg/config/defaults/defaultconfig.go b/services/graph/pkg/config/defaults/defaultconfig.go index cb0ce6d0f1..df08d4ad7b 100644 --- a/services/graph/pkg/config/defaults/defaultconfig.go +++ b/services/graph/pkg/config/defaults/defaultconfig.go @@ -51,9 +51,10 @@ func DefaultConfig() *config.Config { }, Reva: shared.DefaultRevaConfig(), Spaces: config.Spaces{ - WebDavBase: "https://localhost:9200", - WebDavPath: "/dav/spaces/", - DefaultQuota: "1000000000", + StorageUsersAddress: "com.owncloud.api.storage-users", + WebDavBase: "https://localhost:9200", + WebDavPath: "/dav/spaces/", + DefaultQuota: "1000000000", // 1 minute ExtendedSpacePropertiesCacheTTL: 60, // 1 minute diff --git a/services/graph/pkg/service/v0/drives.go b/services/graph/pkg/service/v0/drives.go index 645e99417b..fcf28430c6 100644 --- a/services/graph/pkg/service/v0/drives.go +++ b/services/graph/pkg/service/v0/drives.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "io/fs" "math" "net/http" "net/url" @@ -483,31 +482,24 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) { return } - newDrive, err := g.cs3StorageSpaceToDrive(r.Context(), webDavBaseURL, resp.StorageSpace) + if driveType == _spaceTypeProject { + opaque, err := g.applySpaceTemplate(gatewayClient, resp.GetStorageSpace().GetRoot(), r.URL.Query().Get("template")) + if err != nil { + logger.Error().Err(err).Msg("could not apply template to space") + errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) + return + } + + resp.StorageSpace.Opaque = utils.MergeOpaques(resp.GetStorageSpace().GetOpaque(), opaque) + } + + newDrive, err := g.cs3StorageSpaceToDrive(r.Context(), webDavBaseURL, resp.GetStorageSpace()) if err != nil { logger.Debug().Err(err).Msg("could not create drive: error parsing drive") errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) return } - - ctx, cs3, err := g.getCS3Client(gatewayClient, resp.GetStorageSpace().GetRoot()) - if err != nil { - logger.Error().Err(err).Msg("could not get cs3 client") - errorcode.ServiceNotAvailable.Render(w, r, http.StatusInternalServerError, "could not get cs3 client, aborting") - return - } - - fsys, err := fs.Sub(_spaceTemplateFS, "spacetemplate") - if err != nil { - logger.Error().Err(err).Msg("could not create drive: error parsing fs") - errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) - return - } - - if err := applyTemplate(ctx, cs3, gatewayClient, resp.GetStorageSpace().GetRoot(), fsys.(fs.ReadDirFS)); err != nil { - logger.Error().Err(err).Msg("could not apply template to space") - return - } + newDrive.Special = g.getSpecialDriveItems(r.Context(), webDavBaseURL, resp.GetStorageSpace()) render.Status(r, http.StatusCreated) render.JSON(w, r, newDrive) diff --git a/services/graph/pkg/service/v0/spacetemplate/.space/image.jpg b/services/graph/pkg/service/v0/spacetemplate/.space/image.jpg deleted file mode 100644 index 11e7f78b4a3d499f5a56a1a9267f7a9f09840008..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49784 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 b``rIdPYQBK_k@J1fKT$@mr_LWcj*5ETKjG7 diff --git a/services/graph/pkg/service/v0/spacetemplate/.space/image.png b/services/graph/pkg/service/v0/spacetemplate/.space/image.png new file mode 100644 index 0000000000000000000000000000000000000000..3b03d6554dd3b398deecc3a808e792a002838295 GIT binary patch literal 3856 zcmeH~>01+77RHNInh*pc5J4pvX_9~-Esr!xWJ#kU1e>M9VjK_x5pY2^QIRDiD4VTB z5ey0e@xcX+EKN6y2u8MugQ6fY3eo`-aKaK5On?NYKzqh{`VW|Adi+pTAMU;9+;i*H z?|m!N)7@E9eYH9O0Gec%?G)%KUA)v(p}T|6+iU>PdQRT%=p7d@&Lw38IH6mg??9)} zOit|!G1^z5HwJezJA`&L*FLm;IZvU_vq)K+!PUD$rJAPDj8bw_x$qMrkpVA7KH}ig zvgeqra5Dcxe^TVI{>mSPbB_vUxCtY9J{_6}1rva8+9^(ZWaexGUmL{-y5Y-3mMW@o z&BI29Fbzw4fTgKRV{Q&#(`5t=g8w^%6>TaEv+(0M;S1_9!JQDx{IZs$6@GPn9 z!(#u?O?wazx5{)Y4s+`_?TUwWv* zFhaZk{_CJ%0>0*Fc4GCMz+DMvjGzI<42R9cD=-zt{wAmg2!kqW)Q+MdO1h%M<$+2;Ky zE>FquzWxDczw$ce*=ISJc(+xW#=B#K&-L0a9#i(}W4bQs8~OFLV5Y^d!@rm8z2K@9 z!nAnx`ePP6qN;T~z2w?!PgUxBf_Y4W00?XGSeT1|_KJtrWN+RLMNzdeehgs0{h^t6 zD@aP;!*Ds!S6&-yioCmw(3lxgY`s9hS9!;ng5hroHOFvK`4)d(KFOM~kMd(p&658z7q(au3a&v$o0q1uc&J zY8@M6ci4IUA^WW`gPFRT7}AaG#_VlmT6;e4!MGu^K-+{x7FVw^Vx3X+`PE^)$${;~ zxQf?qzKiGjIO9AY2Nislzk@MxyAO4$bRxo8?Vb zq3h+9q$fnh*=OEb((Ym@xP$>a?Lc|Uml$XyqTLrnN3WOUT#>*Dp<(nr*2eeQO6KD? zOEFDYD8Z~N#r5eC7^>Byk&8qy#jFjb5bxoxZ-j9~NqmBf>!b-}h6AQGU0itN8*8E*&5j_ceaCV-5-F8wu z2QV-gUORh%SYNI3@wYX$jx+$KAq5DBTNy}8zB2yrk5t$40TgZHt}zY(_LbN4h5uJ4 z@K+<`rF^9e@2v;6)>fFY;8h;10R}Gz3-|QA z>t1M^nxO`6;Hi_c5CLxll?Q|y`H^XNHtR(^u`rbF%1FWsdzWRlvAZ2Nj0-Xk2rc>D zMGvI2ThG)@(*sT|>rh^|5~ug$cgmx0Uiybh;r!%6k>u_T4H&9zHiDodue22rl`cI{ zqg?cqdGUHFxo8E4KPA}RuP;Ga=_y30QGW>DW(awzr%h7#DQvxN+YyY(T9%5Jq5kF?MTcbkz zT97%EwB#%Eze?O+Rnbw}a(l*+YiC|m6cvhI1vlFNVN@q}`EQx}+taIZiG6({^JOwp zv658(yaW8gc$%Ue)-4%X6l7%czBIBP=}joyqLGzuPaM$w4-5=@+9>J0+-%CJGTpp9 z?wKP!r{Vv$&V_IXjKrM0&gnVQ4o#XlO2GV!X(%a9+Cz=J>bfpZ?e0nm_u^0Dbgeif z$=#ARw)#nhkNIH*q&P87-u-5FD@tg_Z+3FqWx{WzZ zJn3K{$xr=eNbrt-OJU>t=#pxjPMjA{K% zize=#m;~j~Q56Kz{K(i#RnhbKF*r*_&5{r1b*z}f^8uN}VzU7g0PUFV{*{3+ji`J5 fF;#!H2~yMtwflf>;