github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/routers/controllers/slave.go (about)

     1  package controllers
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/cloudreve/Cloudreve/v3/pkg/request"
     7  	"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
     8  	"github.com/cloudreve/Cloudreve/v3/service/admin"
     9  	"github.com/cloudreve/Cloudreve/v3/service/aria2"
    10  	"github.com/cloudreve/Cloudreve/v3/service/explorer"
    11  	"github.com/cloudreve/Cloudreve/v3/service/node"
    12  	"github.com/gin-gonic/gin"
    13  )
    14  
    15  // SlaveUpload 从机文件上传
    16  func SlaveUpload(c *gin.Context) {
    17  	// 创建上下文
    18  	ctx, cancel := context.WithCancel(context.Background())
    19  	defer cancel()
    20  
    21  	var service explorer.UploadService
    22  	if err := c.ShouldBindUri(&service); err == nil {
    23  		res := service.SlaveUpload(ctx, c)
    24  		c.JSON(200, res)
    25  		request.BlackHole(c.Request.Body)
    26  	} else {
    27  		c.JSON(200, ErrorResponse(err))
    28  	}
    29  }
    30  
    31  // SlaveGetUploadSession 从机创建上传会话
    32  func SlaveGetUploadSession(c *gin.Context) {
    33  	// 创建上下文
    34  	ctx, cancel := context.WithCancel(context.Background())
    35  	defer cancel()
    36  
    37  	var service explorer.SlaveCreateUploadSessionService
    38  	if err := c.ShouldBindJSON(&service); err == nil {
    39  		res := service.Create(ctx, c)
    40  		c.JSON(200, res)
    41  	} else {
    42  		c.JSON(200, ErrorResponse(err))
    43  	}
    44  }
    45  
    46  // SlaveDeleteUploadSession 从机删除上传会话
    47  func SlaveDeleteUploadSession(c *gin.Context) {
    48  	// 创建上下文
    49  	ctx, cancel := context.WithCancel(context.Background())
    50  	defer cancel()
    51  
    52  	var service explorer.UploadSessionService
    53  	if err := c.ShouldBindUri(&service); err == nil {
    54  		res := service.SlaveDelete(ctx, c)
    55  		c.JSON(200, res)
    56  	} else {
    57  		c.JSON(200, ErrorResponse(err))
    58  	}
    59  }
    60  
    61  // SlaveDownload 从机文件下载,此请求返回的HTTP状态码不全为200
    62  func SlaveDownload(c *gin.Context) {
    63  	// 创建上下文
    64  	ctx, cancel := context.WithCancel(context.Background())
    65  	defer cancel()
    66  
    67  	var service explorer.SlaveDownloadService
    68  	if err := c.ShouldBindUri(&service); err == nil {
    69  		res := service.ServeFile(ctx, c, true)
    70  		if res.Code != 0 {
    71  			c.JSON(400, res)
    72  		}
    73  	} else {
    74  		c.JSON(400, ErrorResponse(err))
    75  	}
    76  }
    77  
    78  // SlavePreview 从机文件预览
    79  func SlavePreview(c *gin.Context) {
    80  	// 创建上下文
    81  	ctx, cancel := context.WithCancel(context.Background())
    82  	defer cancel()
    83  
    84  	var service explorer.SlaveDownloadService
    85  	if err := c.ShouldBindUri(&service); err == nil {
    86  		res := service.ServeFile(ctx, c, false)
    87  		if res.Code != 0 {
    88  			c.JSON(200, res)
    89  		}
    90  	} else {
    91  		c.JSON(200, ErrorResponse(err))
    92  	}
    93  }
    94  
    95  // SlaveThumb 从机文件缩略图
    96  func SlaveThumb(c *gin.Context) {
    97  	// 创建上下文
    98  	ctx, cancel := context.WithCancel(context.Background())
    99  	defer cancel()
   100  
   101  	var service explorer.SlaveFileService
   102  	if err := c.ShouldBindUri(&service); err == nil {
   103  		res := service.Thumb(ctx, c)
   104  		if res.Code != 0 {
   105  			c.JSON(200, res)
   106  		}
   107  	} else {
   108  		c.JSON(200, ErrorResponse(err))
   109  	}
   110  }
   111  
   112  // SlaveDelete 从机删除
   113  func SlaveDelete(c *gin.Context) {
   114  	// 创建上下文
   115  	ctx, cancel := context.WithCancel(context.Background())
   116  	defer cancel()
   117  
   118  	var service explorer.SlaveFilesService
   119  	if err := c.ShouldBindJSON(&service); err == nil {
   120  		res := service.Delete(ctx, c)
   121  		c.JSON(200, res)
   122  	} else {
   123  		c.JSON(200, ErrorResponse(err))
   124  	}
   125  }
   126  
   127  // SlavePing 从机测试
   128  func SlavePing(c *gin.Context) {
   129  	var service admin.SlavePingService
   130  	if err := c.ShouldBindJSON(&service); err == nil {
   131  		res := service.Test()
   132  		c.JSON(200, res)
   133  	} else {
   134  		c.JSON(200, ErrorResponse(err))
   135  	}
   136  }
   137  
   138  // SlaveList 从机列出文件
   139  func SlaveList(c *gin.Context) {
   140  	var service explorer.SlaveListService
   141  	if err := c.ShouldBindJSON(&service); err == nil {
   142  		res := service.List(c)
   143  		c.JSON(200, res)
   144  	} else {
   145  		c.JSON(200, ErrorResponse(err))
   146  	}
   147  }
   148  
   149  // SlaveHeartbeat 接受主机心跳包
   150  func SlaveHeartbeat(c *gin.Context) {
   151  	var service serializer.NodePingReq
   152  	if err := c.ShouldBindJSON(&service); err == nil {
   153  		res := node.HandleMasterHeartbeat(&service)
   154  		c.JSON(200, res)
   155  	} else {
   156  		c.JSON(200, ErrorResponse(err))
   157  	}
   158  }
   159  
   160  // SlaveAria2Create 创建 Aria2 任务
   161  func SlaveAria2Create(c *gin.Context) {
   162  	var service serializer.SlaveAria2Call
   163  	if err := c.ShouldBindJSON(&service); err == nil {
   164  		res := aria2.Add(c, &service)
   165  		c.JSON(200, res)
   166  	} else {
   167  		c.JSON(200, ErrorResponse(err))
   168  	}
   169  }
   170  
   171  // SlaveAria2Status 查询从机 Aria2 任务状态
   172  func SlaveAria2Status(c *gin.Context) {
   173  	var service serializer.SlaveAria2Call
   174  	if err := c.ShouldBindJSON(&service); err == nil {
   175  		res := aria2.SlaveStatus(c, &service)
   176  		c.JSON(200, res)
   177  	} else {
   178  		c.JSON(200, ErrorResponse(err))
   179  	}
   180  }
   181  
   182  // SlaveCancelAria2Task 取消从机离线下载任务
   183  func SlaveCancelAria2Task(c *gin.Context) {
   184  	var service serializer.SlaveAria2Call
   185  	if err := c.ShouldBindJSON(&service); err == nil {
   186  		res := aria2.SlaveCancel(c, &service)
   187  		c.JSON(200, res)
   188  	} else {
   189  		c.JSON(200, ErrorResponse(err))
   190  	}
   191  }
   192  
   193  // SlaveSelectTask 从机选取离线下载文件
   194  func SlaveSelectTask(c *gin.Context) {
   195  	var service serializer.SlaveAria2Call
   196  	if err := c.ShouldBindJSON(&service); err == nil {
   197  		res := aria2.SlaveSelect(c, &service)
   198  		c.JSON(200, res)
   199  	} else {
   200  		c.JSON(200, ErrorResponse(err))
   201  	}
   202  }
   203  
   204  // SlaveCreateTransferTask 从机创建中转任务
   205  func SlaveCreateTransferTask(c *gin.Context) {
   206  	var service serializer.SlaveTransferReq
   207  	if err := c.ShouldBindJSON(&service); err == nil {
   208  		res := explorer.CreateTransferTask(c, &service)
   209  		c.JSON(200, res)
   210  	} else {
   211  		c.JSON(200, ErrorResponse(err))
   212  	}
   213  }
   214  
   215  // SlaveNotificationPush 处理从机发送的消息推送
   216  func SlaveNotificationPush(c *gin.Context) {
   217  	var service node.SlaveNotificationService
   218  	if err := c.ShouldBindUri(&service); err == nil {
   219  		res := service.HandleSlaveNotificationPush(c)
   220  		c.JSON(200, res)
   221  	} else {
   222  		c.JSON(200, ErrorResponse(err))
   223  	}
   224  }
   225  
   226  // SlaveGetOauthCredential 从机获取主机的OneDrive存储策略凭证
   227  func SlaveGetOauthCredential(c *gin.Context) {
   228  	var service node.OauthCredentialService
   229  	if err := c.ShouldBindUri(&service); err == nil {
   230  		res := service.Get(c)
   231  		c.JSON(200, res)
   232  	} else {
   233  		c.JSON(200, ErrorResponse(err))
   234  	}
   235  }
   236  
   237  // SlaveSelectTask 从机删除离线下载临时文件
   238  func SlaveDeleteTempFile(c *gin.Context) {
   239  	var service serializer.SlaveAria2Call
   240  	if err := c.ShouldBindJSON(&service); err == nil {
   241  		res := aria2.SlaveDeleteTemp(c, &service)
   242  		c.JSON(200, res)
   243  	} else {
   244  		c.JSON(200, ErrorResponse(err))
   245  	}
   246  }