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 }