mirror of https://github.com/cloudreve/Cloudreve
121 lines
3.1 KiB
Go
121 lines
3.1 KiB
Go
package node
|
|
|
|
import (
|
|
"context"
|
|
"github.com/cloudreve/Cloudreve/v4/application/dependency"
|
|
"github.com/cloudreve/Cloudreve/v4/inventory"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/credmanager"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/manager"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/serializer"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/util"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type SlaveNotificationService struct {
|
|
Subject string `uri:"subject" binding:"required"`
|
|
}
|
|
|
|
type (
|
|
OauthCredentialParamCtx struct{}
|
|
OauthCredentialService struct {
|
|
ID string `uri:"id" binding:"required"`
|
|
}
|
|
)
|
|
|
|
// Get 获取主机Oauth策略的AccessToken
|
|
func (s *OauthCredentialService) Get(c *gin.Context) (*credmanager.CredentialResponse, error) {
|
|
dep := dependency.FromContext(c)
|
|
credManager := dep.CredManager()
|
|
|
|
cred, err := credManager.Obtain(c, s.ID)
|
|
if cred == nil || err != nil {
|
|
return nil, serializer.NewError(serializer.CodeNotFound, "Credential not found", err)
|
|
}
|
|
|
|
return &credmanager.CredentialResponse{
|
|
Token: cred.String(),
|
|
ExpireAt: cred.Expiry(),
|
|
}, nil
|
|
}
|
|
|
|
type (
|
|
StatelessPrepareUploadParamCtx struct{}
|
|
)
|
|
|
|
func StatelessPrepareUpload(s *fs.StatelessPrepareUploadService, c *gin.Context) (*fs.StatelessPrepareUploadResponse, error) {
|
|
dep := dependency.FromContext(c)
|
|
userClient := dep.UserClient()
|
|
user, err := userClient.GetLoginUserByID(c, s.UserID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctx := context.WithValue(c.Request.Context(), inventory.UserCtx{}, user)
|
|
fm := manager.NewFileManager(dep, user)
|
|
uploadSession, err := fm.PrepareUpload(ctx, s.UploadRequest)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &fs.StatelessPrepareUploadResponse{
|
|
Session: uploadSession,
|
|
Req: s.UploadRequest,
|
|
}, nil
|
|
}
|
|
|
|
type (
|
|
StatelessCompleteUploadParamCtx struct{}
|
|
)
|
|
|
|
func StatelessCompleteUpload(s *fs.StatelessCompleteUploadService, c *gin.Context) (fs.File, error) {
|
|
dep := dependency.FromContext(c)
|
|
userClient := dep.UserClient()
|
|
user, err := userClient.GetLoginUserByID(c, s.UserID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
util.WithValue(c, inventory.UserCtx{}, user)
|
|
fm := manager.NewFileManager(dep, user)
|
|
return fm.CompleteUpload(c, s.UploadSession)
|
|
}
|
|
|
|
type (
|
|
StatelessOnUploadFailedParamCtx struct{}
|
|
)
|
|
|
|
func StatelessOnUploadFailed(s *fs.StatelessOnUploadFailedService, c *gin.Context) error {
|
|
dep := dependency.FromContext(c)
|
|
userClient := dep.UserClient()
|
|
user, err := userClient.GetLoginUserByID(c, s.UserID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
util.WithValue(c, inventory.UserCtx{}, user)
|
|
fm := manager.NewFileManager(dep, user)
|
|
fm.OnUploadFailed(c, s.UploadSession)
|
|
return nil
|
|
}
|
|
|
|
type StatelessCreateFileParamCtx struct{}
|
|
|
|
func StatelessCreateFile(s *fs.StatelessCreateFileService, c *gin.Context) error {
|
|
dep := dependency.FromContext(c)
|
|
userClient := dep.UserClient()
|
|
user, err := userClient.GetLoginUserByID(c, s.UserID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uri, err := fs.NewUriFromString(s.Path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
util.WithValue(c, inventory.UserCtx{}, user)
|
|
fm := manager.NewFileManager(dep, user)
|
|
_, err = fm.Create(c, uri, s.Type)
|
|
return err
|
|
}
|