mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2025-12-30 17:00:57 -06:00
added the translation
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
go Bugfix: Added ShareUpdate activity
|
||||
Bugfix: Added ShareUpdate activity
|
||||
|
||||
Added the ShareUpdate activity in the space context.
|
||||
|
||||
|
||||
4
go.mod
4
go.mod
@@ -15,7 +15,7 @@ require (
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible
|
||||
github.com/coreos/go-oidc/v3 v3.11.0
|
||||
github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb
|
||||
github.com/cs3org/reva/v2 v2.24.2-0.20240918135034-5a494dc2ebf7
|
||||
github.com/cs3org/reva/v2 v2.24.2-0.20240919151635-556263192484
|
||||
github.com/dhowden/tag v0.0.0-20230630033851-978a0926ee25
|
||||
github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e
|
||||
github.com/egirna/icap-client v0.1.1
|
||||
@@ -368,5 +368,3 @@ replace github.com/go-micro/plugins/v4/store/nats-js-kv => github.com/kobergj/pl
|
||||
// exclude the v2 line of go-sqlite3 which was released accidentally and prevents pulling in newer versions of go-sqlite3
|
||||
// see https://github.com/mattn/go-sqlite3/issues/965 for more details
|
||||
exclude github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||
|
||||
replace github.com/cs3org/reva/v2 => github.com/2403905/reva/v2 v2.24.1-0.20240918144132-2e1d422f27f7
|
||||
|
||||
4
go.sum
4
go.sum
@@ -39,8 +39,6 @@ contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9
|
||||
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
|
||||
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/2403905/reva/v2 v2.24.1-0.20240918144132-2e1d422f27f7 h1:hGa5dN1E/WgehwO6XRwYlMZGvfw6LExMFlGCqBSyZ3U=
|
||||
github.com/2403905/reva/v2 v2.24.1-0.20240918144132-2e1d422f27f7/go.mod h1:p7CHBXcg6sSqB+0JMNDfC1S7TSh9FghXkw1kTV3KcJI=
|
||||
github.com/Acconut/go-httptest-recorder v1.0.0 h1:TAv2dfnqp/l+SUvIaMAUK4GeN4+wqb6KZsFFFTGhoJg=
|
||||
github.com/Acconut/go-httptest-recorder v1.0.0/go.mod h1:CwQyhTH1kq/gLyWiRieo7c0uokpu3PXeyF/nZjUNtmM=
|
||||
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
@@ -257,6 +255,8 @@ github.com/crewjam/saml v0.4.14 h1:g9FBNx62osKusnFzs3QTN5L9CVA/Egfgm+stJShzw/c=
|
||||
github.com/crewjam/saml v0.4.14/go.mod h1:UVSZCf18jJkk6GpWNVqcyQJMD5HsRugBPf4I1nl2mME=
|
||||
github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb h1:KmYZDReplv/yfwc1LNYpDcVhVujC3Pasv6WjXx1haSU=
|
||||
github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb/go.mod h1:yyP8PRo0EZou3nSH7H4qjlzQwaydPeIRNgX50npQHpE=
|
||||
github.com/cs3org/reva/v2 v2.24.2-0.20240919151635-556263192484 h1:MeHzCFCh5WttP2hz7UTCHgV6WQXrucQXSyQs5+aIrcY=
|
||||
github.com/cs3org/reva/v2 v2.24.2-0.20240919151635-556263192484/go.mod h1:p7CHBXcg6sSqB+0JMNDfC1S7TSh9FghXkw1kTV3KcJI=
|
||||
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||
|
||||
@@ -115,6 +115,9 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
|
||||
vars map[string]interface{}
|
||||
)
|
||||
|
||||
loc := l10n.MustGetUserLocale(r.Context(), activeUser.GetId().GetOpaqueId(), r.Header.Get(l10n.HeaderAcceptLanguage), s.valService)
|
||||
t := l10n.NewTranslatorFromCommonConfig(s.cfg.DefaultLanguage, _domain, s.cfg.TranslationPath, _localeFS, _localeSubPath)
|
||||
|
||||
switch ev := s.unwrapEvent(e).(type) {
|
||||
case nil:
|
||||
// error already logged in unwrapEvent
|
||||
@@ -158,7 +161,7 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
|
||||
}
|
||||
message = MessageShareUpdated
|
||||
ts = utils.TSToTime(ev.MTime)
|
||||
vars, err = s.GetVars(ctx, WithResource(toRef(ev.ItemID), false), WithUser(ev.Executant, ""), WithFieldMask(ev.UpdateMask))
|
||||
vars, err = s.GetVars(ctx, WithResource(toRef(ev.ItemID), false), WithUser(ev.Executant, ""), WithTranslation(&t, loc, "field", ev.UpdateMask))
|
||||
case events.ShareRemoved:
|
||||
message = MessageShareDeleted
|
||||
ts = ev.Timestamp
|
||||
@@ -176,7 +179,8 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
|
||||
vars, err = s.GetVars(ctx,
|
||||
WithResource(toRef(ev.ItemID), false),
|
||||
WithUser(ev.Executant, ""),
|
||||
WithLinkFieldUpdated(&ev))
|
||||
WithTranslation(&t, loc, "field", []string{ev.FieldUpdated}),
|
||||
WithVar("token", ev.ItemID.GetOpaqueId(), ev.Token))
|
||||
case events.LinkRemoved:
|
||||
message = MessageLinkDeleted
|
||||
ts = utils.TSToTime(ev.Timestamp)
|
||||
@@ -196,9 +200,6 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
|
||||
continue
|
||||
}
|
||||
|
||||
loc := l10n.MustGetUserLocale(r.Context(), activeUser.GetId().GetOpaqueId(), r.Header.Get(l10n.HeaderAcceptLanguage), s.valService)
|
||||
t := l10n.NewTranslatorFromCommonConfig(s.cfg.DefaultLanguage, _domain, s.cfg.TranslationPath, _localeFS, _localeSubPath)
|
||||
|
||||
resp.Activities = append(resp.Activities, NewActivity(t.Translate(message, loc), ts, e.GetId(), vars))
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/cs3org/reva/v2/pkg/events"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -35,6 +34,22 @@ var (
|
||||
MessageLinkDeleted = l10n.Template("{user} removed link to {resource}")
|
||||
MessageSpaceShared = l10n.Template("{user} added {sharee} as member of {space}")
|
||||
MessageSpaceUnshared = l10n.Template("{user} removed {sharee} from {space}")
|
||||
|
||||
StrSomeField = l10n.Template(_someField)
|
||||
StrPermission = l10n.Template(_permission)
|
||||
StrPassword = l10n.Template(_password)
|
||||
StrExpirationDate = l10n.Template(_expirationDate)
|
||||
StrDisplayName = l10n.Template(_displayName)
|
||||
StrDescription = l10n.Template(_description)
|
||||
)
|
||||
|
||||
const (
|
||||
_someField = "some field"
|
||||
_permission = "permission"
|
||||
_password = "password"
|
||||
_expirationDate = "expiration date"
|
||||
_displayName = "display name"
|
||||
_description = "description"
|
||||
)
|
||||
|
||||
// GetActivitiesResponse is the response on GET activities requests
|
||||
@@ -230,42 +245,29 @@ func WithSpace(spaceid *provider.StorageSpaceId) ActivityOption {
|
||||
}
|
||||
}
|
||||
|
||||
// WithLinkFieldUpdated sets the field and token variables for an activity
|
||||
func WithLinkFieldUpdated(e *events.LinkUpdated) ActivityOption {
|
||||
// WithTranslation sets a variable that translation is needed for
|
||||
func WithTranslation(t *l10n.Translator, locale string, key string, values []string) ActivityOption {
|
||||
return func(_ context.Context, _ gateway.GatewayAPIClient, vars map[string]interface{}) error {
|
||||
f := "some field"
|
||||
switch e.FieldUpdated {
|
||||
case "TYPE_PERMISSIONS":
|
||||
f = "permission"
|
||||
case "TYPE_PASSWORD":
|
||||
f = "password"
|
||||
case "TYPE_EXPIRATION":
|
||||
f = "expiration date"
|
||||
case "TYPE_DISPLAYNAME":
|
||||
f = "display name"
|
||||
case "TYPE_DESCRIPTION":
|
||||
f = "description"
|
||||
f := t.Translate(StrSomeField, locale)
|
||||
if len(values) > 0 {
|
||||
for i := range values {
|
||||
values[i] = t.Translate(mapField(values[i]), locale)
|
||||
}
|
||||
f = strings.Join(values, ", ")
|
||||
}
|
||||
vars["field"] = Resource{
|
||||
ID: e.ItemID.GetOpaqueId(),
|
||||
vars[key] = Resource{
|
||||
Name: f,
|
||||
}
|
||||
vars["token"] = Resource{
|
||||
ID: e.ItemID.GetOpaqueId(),
|
||||
Name: e.Token,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func WithFieldMask(mask []string) ActivityOption {
|
||||
// WithVar sets a variable for an activity
|
||||
func WithVar(key, id, name string) ActivityOption {
|
||||
return func(_ context.Context, _ gateway.GatewayAPIClient, vars map[string]interface{}) error {
|
||||
f := "some field"
|
||||
if len(mask) > 0 {
|
||||
f = strings.Join(mask, ", ")
|
||||
}
|
||||
vars["field"] = Resource{
|
||||
Name: f,
|
||||
vars[key] = Resource{
|
||||
ID: id,
|
||||
Name: name,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -299,3 +301,19 @@ func (s *ActivitylogService) GetVars(ctx context.Context, opts ...ActivityOption
|
||||
|
||||
return vars, nil
|
||||
}
|
||||
|
||||
func mapField(val string) string {
|
||||
switch val {
|
||||
case "TYPE_PERMISSIONS", "permission":
|
||||
return _permission
|
||||
case "TYPE_PASSWORD", "password":
|
||||
return _password
|
||||
case "TYPE_EXPIRATION", "expiration":
|
||||
return _expirationDate
|
||||
case "TYPE_DISPLAYNAME":
|
||||
return _displayName
|
||||
case "TYPE_DESCRIPTION":
|
||||
return _description
|
||||
}
|
||||
return _someField
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ func ShareUpdated(ev events.ShareUpdated) AuditEventShareUpdated {
|
||||
func LinkUpdated(ev events.LinkUpdated) AuditEventShareUpdated {
|
||||
uid := ev.Sharer.OpaqueId
|
||||
with, typ := "", _linktype
|
||||
base := BasicAuditEvent(uid, formatTime(ev.MTime), MessageLinkUpdated(uid, ev.ShareID.OpaqueId, ev.FieldUpdated), updateType(ev.FieldUpdated))
|
||||
base := BasicAuditEvent(uid, formatTime(ev.MTime), MessageLinkUpdated(uid, ev.ShareID.GetOpaqueId(), ev.FieldUpdated), updateType(ev.FieldUpdated))
|
||||
return AuditEventShareUpdated{
|
||||
AuditEventSharing: SharingAuditEvent(ev.ShareID.GetOpaqueId(), ev.ItemID.OpaqueId, uid, base),
|
||||
ShareOwner: uid,
|
||||
|
||||
12
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/apps.go
generated
vendored
12
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/apps.go
generated
vendored
@@ -35,13 +35,13 @@ import (
|
||||
)
|
||||
|
||||
type appsHandler struct {
|
||||
gatewayClient gateway.GatewayAPIClient
|
||||
ocmMountPoint string
|
||||
gatewaySelector *pool.Selector[gateway.GatewayAPIClient]
|
||||
ocmMountPoint string
|
||||
}
|
||||
|
||||
func (h *appsHandler) init(c *config) error {
|
||||
var err error
|
||||
h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc)
|
||||
h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -99,7 +99,11 @@ func (h *appsHandler) OpenInApp(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (h *appsHandler) webappTemplate(ctx context.Context, id *ocmpb.ShareId) (string, error) {
|
||||
res, err := h.gatewayClient.GetReceivedOCMShare(ctx, &ocmpb.GetReceivedOCMShareRequest{
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
res, err := gc.GetReceivedOCMShare(ctx, &ocmpb.GetReceivedOCMShareRequest{
|
||||
Ref: &ocmpb.ShareReference{
|
||||
Spec: &ocmpb.ShareReference_Id{
|
||||
Id: id,
|
||||
|
||||
11
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/providers.go
generated
vendored
11
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/providers.go
generated
vendored
@@ -32,12 +32,12 @@ import (
|
||||
)
|
||||
|
||||
type providersHandler struct {
|
||||
gatewayClient gateway.GatewayAPIClient
|
||||
gatewaySelector *pool.Selector[gateway.GatewayAPIClient]
|
||||
}
|
||||
|
||||
func (h *providersHandler) init(c *config) error {
|
||||
var err error
|
||||
h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc)
|
||||
h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -55,7 +55,12 @@ func (h *providersHandler) ListProviders(w http.ResponseWriter, r *http.Request)
|
||||
ctx := r.Context()
|
||||
term := strings.ToLower(r.URL.Query().Get("search"))
|
||||
|
||||
listRes, err := h.gatewayClient.ListAllProviders(ctx, &providerpb.ListAllProvidersRequest{})
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
listRes, err := gc.ListAllProviders(ctx, &providerpb.ListAllProvidersRequest{})
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error listing all providers", err)
|
||||
return
|
||||
|
||||
46
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/token.go
generated
vendored
46
vendor/github.com/cs3org/reva/v2/internal/http/services/sciencemesh/token.go
generated
vendored
@@ -40,7 +40,7 @@ import (
|
||||
)
|
||||
|
||||
type tokenHandler struct {
|
||||
gatewayClient gateway.GatewayAPIClient
|
||||
gatewaySelector *pool.Selector[gateway.GatewayAPIClient]
|
||||
meshDirectoryURL string
|
||||
providerDomain string
|
||||
eventStream events.Stream
|
||||
@@ -48,7 +48,7 @@ type tokenHandler struct {
|
||||
|
||||
func (h *tokenHandler) init(c *config) error {
|
||||
var err error
|
||||
h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc)
|
||||
h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -85,7 +85,12 @@ func (h *tokenHandler) Generate(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
ctx := r.Context()
|
||||
genTokenRes, err := h.gatewayClient.GenerateInviteToken(ctx, &invitepb.GenerateInviteTokenRequest{
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
genTokenRes, err := gc.GenerateInviteToken(ctx, &invitepb.GenerateInviteTokenRequest{
|
||||
Description: req.Description,
|
||||
})
|
||||
switch {
|
||||
@@ -185,7 +190,12 @@ func (h *tokenHandler) AcceptInvite(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
providerInfo, err := h.gatewayClient.GetInfoByDomain(ctx, &ocmprovider.GetInfoByDomainRequest{
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
providerInfo, err := gc.GetInfoByDomain(ctx, &ocmprovider.GetInfoByDomainRequest{
|
||||
Domain: req.ProviderDomain,
|
||||
})
|
||||
if err != nil {
|
||||
@@ -197,13 +207,18 @@ func (h *tokenHandler) AcceptInvite(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
gc, err = h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
forwardInviteReq := &invitepb.ForwardInviteRequest{
|
||||
InviteToken: &invitepb.InviteToken{
|
||||
Token: req.Token,
|
||||
},
|
||||
OriginSystemProvider: providerInfo.ProviderInfo,
|
||||
}
|
||||
forwardInviteResponse, err := h.gatewayClient.ForwardInvite(ctx, forwardInviteReq)
|
||||
forwardInviteResponse, err := gc.ForwardInvite(ctx, forwardInviteReq)
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error sending a grpc forward invite request", err)
|
||||
return
|
||||
@@ -258,7 +273,12 @@ type remoteUser struct {
|
||||
func (h *tokenHandler) FindAccepted(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
|
||||
res, err := h.gatewayClient.FindAcceptedUsers(ctx, &invitepb.FindAcceptedUsersRequest{})
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
res, err := gc.FindAcceptedUsers(ctx, &invitepb.FindAcceptedUsersRequest{})
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error sending a grpc find accepted users request", err)
|
||||
return
|
||||
@@ -292,7 +312,12 @@ func (h *tokenHandler) DeleteAccepted(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
res, err := h.gatewayClient.DeleteAcceptedUser(ctx, &invitepb.DeleteAcceptedUserRequest{
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
res, err := gc.DeleteAcceptedUser(ctx, &invitepb.DeleteAcceptedUserRequest{
|
||||
RemoteUserId: &userpb.UserId{
|
||||
Idp: req.Idp,
|
||||
OpaqueId: req.UserID,
|
||||
@@ -331,7 +356,12 @@ func getDeleteAcceptedRequest(r *http.Request) (*deleteAcceptedRequest, error) {
|
||||
func (h *tokenHandler) ListInvite(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
|
||||
res, err := h.gatewayClient.ListInviteTokens(ctx, &invitepb.ListInviteTokensRequest{})
|
||||
gc, err := h.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err)
|
||||
return
|
||||
}
|
||||
res, err := gc.ListInviteTokens(ctx, &invitepb.ListInviteTokensRequest{})
|
||||
if err != nil {
|
||||
reqres.WriteError(w, r, reqres.APIErrorServerError, "error listing tokens", err)
|
||||
return
|
||||
|
||||
24
vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/session.go
generated
vendored
24
vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/session.go
generated
vendored
@@ -26,6 +26,8 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/google/renameio/v2"
|
||||
"github.com/rogpeppe/go-internal/lockedfile"
|
||||
tusd "github.com/tus/tusd/v2/pkg/handler"
|
||||
|
||||
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
|
||||
@@ -74,7 +76,13 @@ func (s *OcisSession) executantUser() *userpb.User {
|
||||
|
||||
// Purge deletes the upload session metadata and written binary data
|
||||
func (s *OcisSession) Purge(ctx context.Context) error {
|
||||
if err := os.Remove(sessionPath(s.store.root, s.info.ID)); err != nil {
|
||||
sessionPath := sessionPath(s.store.root, s.info.ID)
|
||||
f, err := lockedfile.OpenFile(sessionPath+".lock", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
if err := os.Remove(sessionPath); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := os.Remove(s.binPath()); err != nil {
|
||||
@@ -93,10 +101,12 @@ func (s *OcisSession) TouchBin() error {
|
||||
}
|
||||
|
||||
// Persist writes the upload session metadata to disk
|
||||
// events can update the scan outcome and the finished event might read an empty file because of race conditions
|
||||
// so we need to lock the file while writing and use atomic writes
|
||||
func (s *OcisSession) Persist(ctx context.Context) error {
|
||||
uploadPath := sessionPath(s.store.root, s.info.ID)
|
||||
sessionPath := sessionPath(s.store.root, s.info.ID)
|
||||
// create folder structure (if needed)
|
||||
if err := os.MkdirAll(filepath.Dir(uploadPath), 0700); err != nil {
|
||||
if err := os.MkdirAll(filepath.Dir(sessionPath), 0700); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -105,8 +115,12 @@ func (s *OcisSession) Persist(ctx context.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(uploadPath, d, 0600)
|
||||
f, err := lockedfile.OpenFile(sessionPath+".lock", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
return renameio.WriteFile(sessionPath, d, 0600)
|
||||
}
|
||||
|
||||
// ToFileInfo returns tus compatible FileInfo so the tus handler can access the upload offset
|
||||
|
||||
13
vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/store.go
generated
vendored
13
vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/store.go
generated
vendored
@@ -119,7 +119,7 @@ func (store OcisStore) List(ctx context.Context) ([]*OcisSession, error) {
|
||||
|
||||
// Get returns the upload session for the given upload id
|
||||
func (store OcisStore) Get(ctx context.Context, id string) (*OcisSession, error) {
|
||||
sessionPath := filepath.Join(store.root, "uploads", id+".info")
|
||||
sessionPath := sessionPath(store.root, id)
|
||||
match := _idRegexp.FindStringSubmatch(sessionPath)
|
||||
if match == nil || len(match) < 2 {
|
||||
return nil, fmt.Errorf("invalid upload path")
|
||||
@@ -129,6 +129,15 @@ func (store OcisStore) Get(ctx context.Context, id string) (*OcisSession, error)
|
||||
store: store,
|
||||
info: tusd.FileInfo{},
|
||||
}
|
||||
lock, err := lockedfile.Open(sessionPath + ".lock")
|
||||
if err != nil {
|
||||
if errors.Is(err, iofs.ErrNotExist) {
|
||||
// Interpret os.ErrNotExist as 404 Not Found
|
||||
err = tusd.ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
defer lock.Close()
|
||||
data, err := os.ReadFile(sessionPath)
|
||||
if err != nil {
|
||||
if errors.Is(err, iofs.ErrNotExist) {
|
||||
@@ -137,6 +146,8 @@ func (store OcisStore) Get(ctx context.Context, id string) (*OcisSession, error)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
lock.Close() // release lock asap
|
||||
|
||||
if err := json.Unmarshal(data, &session.info); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
3
vendor/github.com/cs3org/reva/v2/pkg/utils/utils.go
generated
vendored
3
vendor/github.com/cs3org/reva/v2/pkg/utils/utils.go
generated
vendored
@@ -146,6 +146,9 @@ func TSToUnixNano(ts *types.Timestamp) uint64 {
|
||||
|
||||
// TSToTime converts a protobuf Timestamp to Go's time.Time.
|
||||
func TSToTime(ts *types.Timestamp) time.Time {
|
||||
if ts == nil {
|
||||
return time.Time{}
|
||||
}
|
||||
return time.Unix(int64(ts.Seconds), int64(ts.Nanos))
|
||||
}
|
||||
|
||||
|
||||
3
vendor/modules.txt
vendored
3
vendor/modules.txt
vendored
@@ -367,7 +367,7 @@ github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1
|
||||
github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1
|
||||
github.com/cs3org/go-cs3apis/cs3/tx/v1beta1
|
||||
github.com/cs3org/go-cs3apis/cs3/types/v1beta1
|
||||
# github.com/cs3org/reva/v2 v2.24.2-0.20240918135034-5a494dc2ebf7 => github.com/2403905/reva/v2 v2.24.1-0.20240918144132-2e1d422f27f7
|
||||
# github.com/cs3org/reva/v2 v2.24.2-0.20240919151635-556263192484
|
||||
## explicit; go 1.21
|
||||
github.com/cs3org/reva/v2/cmd/revad/internal/grace
|
||||
github.com/cs3org/reva/v2/cmd/revad/runtime
|
||||
@@ -2445,4 +2445,3 @@ stash.kopano.io/kgol/rndm
|
||||
# github.com/egirna/icap-client => github.com/fschade/icap-client v0.0.0-20240802074440-aade4a234387
|
||||
# github.com/unrolled/secure => github.com/DeepDiver1975/secure v0.0.0-20240611112133-abc838fb797c
|
||||
# github.com/go-micro/plugins/v4/store/nats-js-kv => github.com/kobergj/plugins/v4/store/nats-js-kv v0.0.0-20240807130109-f62bb67e8c90
|
||||
# github.com/cs3org/reva/v2 => github.com/2403905/reva/v2 v2.24.1-0.20240918144132-2e1d422f27f7
|
||||
|
||||
Reference in New Issue
Block a user