refactor(media): 资源分发 - 统一资源访问策略与云存储重定向
This commit is contained in:
1 parent
af6633047c
commit
487c34bfeb
50 files changed
+2112
-1266
No files matched your search
@@ -139,47 +139,41 @@ func (s *Service) OpenSharedCanvasResource(token string, resourceID string) (*mo
|
||||
}
|
||||
|
||||
func (s *Service) OpenSharedCanvasResourceRange(token string, resourceID string, rangeHeader string) (*assets.ResourceStream, error) {
|
||||
userID, resource, err := s.sharedCanvasResource(token, resourceID)
|
||||
userID, resource, _, err := s.sharedCanvasResource(token, resourceID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.host.OpenResourceRange(userID, resource, rangeHeader)
|
||||
}
|
||||
|
||||
func (s *Service) PrepareSharedCanvasResourceDelivery(token string, resourceID string, rangeHeader string) (*assets.ResourceDelivery, error) {
|
||||
userID, resource, err := s.sharedCanvasResource(token, resourceID)
|
||||
func (s *Service) PrepareSharedCanvasResourceDelivery(token string, resourceID string, options assets.AccessOptions, rangeHeader string) (*assets.ResourceDelivery, error) {
|
||||
userID, resource, share, err := s.sharedCanvasResource(token, resourceID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
delivery, err := s.host.PrepareResourceDelivery(userID, resource, assets.ResourceDeliveryOptions{})
|
||||
if err != nil || delivery.RedirectURL != "" {
|
||||
return delivery, err
|
||||
if share.ExpiresAt != nil {
|
||||
options.ExpiresAt = *share.ExpiresAt
|
||||
}
|
||||
stream, err := s.host.OpenResourceRange(userID, resource, rangeHeader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
delivery.Stream = stream
|
||||
return delivery, nil
|
||||
return s.host.PrepareResourceDelivery(userID, resource, options, rangeHeader)
|
||||
}
|
||||
|
||||
func (s *Service) sharedCanvasResource(token string, resourceID string) (string, *model.Resource, error) {
|
||||
func (s *Service) sharedCanvasResource(token string, resourceID string) (string, *model.Resource, *model.CanvasShare, error) {
|
||||
share, project, err := s.sharedCanvasProject(token)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return "", nil, nil, err
|
||||
}
|
||||
_, allowedResources, err := publicCanvasProject(project, token)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return "", nil, nil, err
|
||||
}
|
||||
if !allowedResources[resourceID] {
|
||||
return "", nil, gorm.ErrRecordNotFound
|
||||
return "", nil, nil, gorm.ErrRecordNotFound
|
||||
}
|
||||
resource, err := s.repo.ResourceForUser(share.UserID, resourceID)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return "", nil, nil, err
|
||||
}
|
||||
return share.UserID, resource, nil
|
||||
return share.UserID, resource, share, nil
|
||||
}
|
||||
|
||||
func (s *Service) sharedCanvasProject(token string) (*model.CanvasShare, *model.CanvasProject, error) {
|
||||
|
||||
@@ -11,7 +11,7 @@ type Host interface {
|
||||
EncryptSecret(value string) (string, error)
|
||||
DecryptSecret(value string) (string, error)
|
||||
OpenResourceRange(userID string, resource *model.Resource, rangeHeader string) (*assets.ResourceStream, error)
|
||||
PrepareResourceDelivery(userID string, resource *model.Resource, options assets.ResourceDeliveryOptions) (*assets.ResourceDelivery, error)
|
||||
PrepareResourceDelivery(userID string, resource *model.Resource, options assets.AccessOptions, rangeHeader string) (*assets.ResourceDelivery, error)
|
||||
WithStorageLock(fn func() error) error
|
||||
StructuredQuota(userID, kind string, creating bool, deltaBytes int64) error
|
||||
StructuredReplacementQuota(userID, kind string, count int, bytes int64) error
|
||||
@@ -27,7 +27,7 @@ func (nopHost) DecryptSecret(value string) (string, error) { return value, nil }
|
||||
func (nopHost) OpenResourceRange(string, *model.Resource, string) (*assets.ResourceStream, error) {
|
||||
return nil, nil
|
||||
}
|
||||
func (nopHost) PrepareResourceDelivery(string, *model.Resource, assets.ResourceDeliveryOptions) (*assets.ResourceDelivery, error) {
|
||||
func (nopHost) PrepareResourceDelivery(string, *model.Resource, assets.AccessOptions, string) (*assets.ResourceDelivery, error) {
|
||||
return nil, nil
|
||||
}
|
||||
func (nopHost) WithStorageLock(fn func() error) error {
|
||||
|
||||
Reference in new issue
Block a user