github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/routers/controllers/admin.go (about) 1 package controllers 2 3 import ( 4 "github.com/cloudreve/Cloudreve/v3/pkg/cluster" 5 "github.com/cloudreve/Cloudreve/v3/pkg/mq" 6 "io" 7 8 model "github.com/cloudreve/Cloudreve/v3/models" 9 "github.com/cloudreve/Cloudreve/v3/pkg/aria2" 10 "github.com/cloudreve/Cloudreve/v3/pkg/email" 11 "github.com/cloudreve/Cloudreve/v3/pkg/request" 12 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 13 "github.com/cloudreve/Cloudreve/v3/pkg/wopi" 14 "github.com/cloudreve/Cloudreve/v3/service/admin" 15 "github.com/gin-gonic/gin" 16 ) 17 18 // AdminSummary 获取管理站点概况 19 func AdminSummary(c *gin.Context) { 20 var service admin.NoParamService 21 if err := c.ShouldBindUri(&service); err == nil { 22 res := service.Summary() 23 c.JSON(200, res) 24 } else { 25 c.JSON(200, ErrorResponse(err)) 26 } 27 } 28 29 // AdminNews 获取社区新闻 30 func AdminNews(c *gin.Context) { 31 tag := "announcements" 32 if c.Query("tag") != "" { 33 tag = c.Query("tag") 34 } 35 r := request.NewClient() 36 res := r.Request("GET", "https://forum.cloudreve.org/api/discussions?include=startUser%2ClastUser%2CstartPost%2Ctags&filter%5Bq%5D=%20tag%3A"+tag+"&sort=-startTime&page%5Blimit%5D=10", nil) 37 if res.Err == nil { 38 io.Copy(c.Writer, res.Response.Body) 39 } 40 } 41 42 // AdminChangeSetting 获取站点设定项 43 func AdminChangeSetting(c *gin.Context) { 44 var service admin.BatchSettingChangeService 45 if err := c.ShouldBindJSON(&service); err == nil { 46 res := service.Change() 47 c.JSON(200, res) 48 } else { 49 c.JSON(200, ErrorResponse(err)) 50 } 51 } 52 53 // AdminGetSetting 获取站点设置 54 func AdminGetSetting(c *gin.Context) { 55 var service admin.BatchSettingGet 56 if err := c.ShouldBindJSON(&service); err == nil { 57 res := service.Get() 58 c.JSON(200, res) 59 } else { 60 c.JSON(200, ErrorResponse(err)) 61 } 62 } 63 64 // AdminGetGroups 获取用户组列表 65 func AdminGetGroups(c *gin.Context) { 66 var service admin.NoParamService 67 if err := c.ShouldBindUri(&service); err == nil { 68 res := service.GroupList() 69 c.JSON(200, res) 70 } else { 71 c.JSON(200, ErrorResponse(err)) 72 } 73 } 74 75 // AdminReloadService 重新加载子服务 76 func AdminReloadService(c *gin.Context) { 77 service := c.Param("service") 78 switch service { 79 case "email": 80 email.Init() 81 case "aria2": 82 aria2.Init(true, cluster.Default, mq.GlobalMQ) 83 case "wopi": 84 wopi.Init() 85 } 86 87 c.JSON(200, serializer.Response{}) 88 } 89 90 // AdminSendTestMail 发送测试邮件 91 func AdminSendTestMail(c *gin.Context) { 92 var service admin.MailTestService 93 if err := c.ShouldBindJSON(&service); err == nil { 94 res := service.Send() 95 c.JSON(200, res) 96 } else { 97 c.JSON(200, ErrorResponse(err)) 98 } 99 } 100 101 // AdminTestThumbGenerator Tests thumb generator 102 func AdminTestThumbGenerator(c *gin.Context) { 103 var service admin.ThumbGeneratorTestService 104 if err := c.ShouldBindJSON(&service); err == nil { 105 res := service.Test(c) 106 c.JSON(200, res) 107 } else { 108 c.JSON(200, ErrorResponse(err)) 109 } 110 } 111 112 // AdminTestAria2 测试aria2连接 113 func AdminTestAria2(c *gin.Context) { 114 var service admin.Aria2TestService 115 if err := c.ShouldBindJSON(&service); err == nil { 116 var res serializer.Response 117 if service.Type == model.MasterNodeType { 118 res = service.TestMaster() 119 } else { 120 res = service.TestSlave() 121 } 122 123 c.JSON(200, res) 124 } else { 125 c.JSON(200, ErrorResponse(err)) 126 } 127 } 128 129 // AdminListPolicy 列出存储策略 130 func AdminListPolicy(c *gin.Context) { 131 var service admin.AdminListService 132 if err := c.ShouldBindJSON(&service); err == nil { 133 res := service.Policies() 134 c.JSON(200, res) 135 } else { 136 c.JSON(200, ErrorResponse(err)) 137 } 138 } 139 140 // AdminTestPath 测试本地路径可用性 141 func AdminTestPath(c *gin.Context) { 142 var service admin.PathTestService 143 if err := c.ShouldBindJSON(&service); err == nil { 144 res := service.Test() 145 c.JSON(200, res) 146 } else { 147 c.JSON(200, ErrorResponse(err)) 148 } 149 } 150 151 // AdminTestSlave 测试从机可用性 152 func AdminTestSlave(c *gin.Context) { 153 var service admin.SlaveTestService 154 if err := c.ShouldBindJSON(&service); err == nil { 155 res := service.Test() 156 c.JSON(200, res) 157 } else { 158 c.JSON(200, ErrorResponse(err)) 159 } 160 } 161 162 // AdminAddPolicy 新建存储策略 163 func AdminAddPolicy(c *gin.Context) { 164 var service admin.AddPolicyService 165 if err := c.ShouldBindJSON(&service); err == nil { 166 res := service.Add() 167 c.JSON(200, res) 168 } else { 169 c.JSON(200, ErrorResponse(err)) 170 } 171 } 172 173 // AdminAddCORS 创建跨域策略 174 func AdminAddCORS(c *gin.Context) { 175 var service admin.PolicyService 176 if err := c.ShouldBindJSON(&service); err == nil { 177 res := service.AddCORS() 178 c.JSON(200, res) 179 } else { 180 c.JSON(200, ErrorResponse(err)) 181 } 182 } 183 184 // AdminAddSCF 创建回调函数 185 func AdminAddSCF(c *gin.Context) { 186 var service admin.PolicyService 187 if err := c.ShouldBindJSON(&service); err == nil { 188 res := service.AddSCF() 189 c.JSON(200, res) 190 } else { 191 c.JSON(200, ErrorResponse(err)) 192 } 193 } 194 195 // AdminOAuthURL 获取 OneDrive OAuth URL 196 func AdminOAuthURL(policyType string) gin.HandlerFunc { 197 return func(c *gin.Context) { 198 var service admin.PolicyService 199 if err := c.ShouldBindUri(&service); err == nil { 200 res := service.GetOAuth(c, policyType) 201 c.JSON(200, res) 202 } else { 203 c.JSON(200, ErrorResponse(err)) 204 } 205 } 206 } 207 208 // AdminGetPolicy 获取存储策略详情 209 func AdminGetPolicy(c *gin.Context) { 210 var service admin.PolicyService 211 if err := c.ShouldBindUri(&service); err == nil { 212 res := service.Get() 213 c.JSON(200, res) 214 } else { 215 c.JSON(200, ErrorResponse(err)) 216 } 217 } 218 219 // AdminDeletePolicy 删除存储策略 220 func AdminDeletePolicy(c *gin.Context) { 221 var service admin.PolicyService 222 if err := c.ShouldBindUri(&service); err == nil { 223 res := service.Delete() 224 c.JSON(200, res) 225 } else { 226 c.JSON(200, ErrorResponse(err)) 227 } 228 } 229 230 // AdminListGroup 列出用户组 231 func AdminListGroup(c *gin.Context) { 232 var service admin.AdminListService 233 if err := c.ShouldBindJSON(&service); err == nil { 234 res := service.Groups() 235 c.JSON(200, res) 236 } else { 237 c.JSON(200, ErrorResponse(err)) 238 } 239 } 240 241 // AdminAddGroup 新建用户组 242 func AdminAddGroup(c *gin.Context) { 243 var service admin.AddGroupService 244 if err := c.ShouldBindJSON(&service); err == nil { 245 res := service.Add() 246 c.JSON(200, res) 247 } else { 248 c.JSON(200, ErrorResponse(err)) 249 } 250 } 251 252 // AdminDeleteGroup 删除用户组 253 func AdminDeleteGroup(c *gin.Context) { 254 var service admin.GroupService 255 if err := c.ShouldBindUri(&service); err == nil { 256 res := service.Delete() 257 c.JSON(200, res) 258 } else { 259 c.JSON(200, ErrorResponse(err)) 260 } 261 } 262 263 // AdminGetGroup 获取用户组详情 264 func AdminGetGroup(c *gin.Context) { 265 var service admin.GroupService 266 if err := c.ShouldBindUri(&service); err == nil { 267 res := service.Get() 268 c.JSON(200, res) 269 } else { 270 c.JSON(200, ErrorResponse(err)) 271 } 272 } 273 274 // AdminListUser 列出用户 275 func AdminListUser(c *gin.Context) { 276 var service admin.AdminListService 277 if err := c.ShouldBindJSON(&service); err == nil { 278 res := service.Users() 279 c.JSON(200, res) 280 } else { 281 c.JSON(200, ErrorResponse(err)) 282 } 283 } 284 285 // AdminAddUser 新建用户组 286 func AdminAddUser(c *gin.Context) { 287 var service admin.AddUserService 288 if err := c.ShouldBindJSON(&service); err == nil { 289 res := service.Add() 290 c.JSON(200, res) 291 } else { 292 c.JSON(200, ErrorResponse(err)) 293 } 294 } 295 296 // AdminGetUser 获取用户详情 297 func AdminGetUser(c *gin.Context) { 298 var service admin.UserService 299 if err := c.ShouldBindUri(&service); err == nil { 300 res := service.Get() 301 c.JSON(200, res) 302 } else { 303 c.JSON(200, ErrorResponse(err)) 304 } 305 } 306 307 // AdminDeleteUser 批量删除用户 308 func AdminDeleteUser(c *gin.Context) { 309 var service admin.UserBatchService 310 if err := c.ShouldBindJSON(&service); err == nil { 311 res := service.Delete() 312 c.JSON(200, res) 313 } else { 314 c.JSON(200, ErrorResponse(err)) 315 } 316 } 317 318 // AdminBanUser 封禁/解封用户 319 func AdminBanUser(c *gin.Context) { 320 var service admin.UserService 321 if err := c.ShouldBindUri(&service); err == nil { 322 res := service.Ban() 323 c.JSON(200, res) 324 } else { 325 c.JSON(200, ErrorResponse(err)) 326 } 327 } 328 329 // AdminListFile 列出文件 330 func AdminListFile(c *gin.Context) { 331 var service admin.AdminListService 332 if err := c.ShouldBindJSON(&service); err == nil { 333 res := service.Files() 334 c.JSON(200, res) 335 } else { 336 c.JSON(200, ErrorResponse(err)) 337 } 338 } 339 340 // AdminGetFile 获取文件 341 func AdminGetFile(c *gin.Context) { 342 var service admin.FileService 343 if err := c.ShouldBindUri(&service); err == nil { 344 res := service.Get(c) 345 // 是否需要重定向 346 if res.Code == -301 { 347 c.Redirect(302, res.Data.(string)) 348 return 349 } 350 // 是否有错误发生 351 if res.Code != 0 { 352 c.JSON(200, res) 353 } 354 } else { 355 c.JSON(200, ErrorResponse(err)) 356 } 357 } 358 359 // AdminDeleteFile 批量删除文件 360 func AdminDeleteFile(c *gin.Context) { 361 var service admin.FileBatchService 362 if err := c.ShouldBindJSON(&service); err == nil { 363 res := service.Delete(c) 364 c.JSON(200, res) 365 } else { 366 c.JSON(200, ErrorResponse(err)) 367 } 368 } 369 370 // AdminListShare 列出分享 371 func AdminListShare(c *gin.Context) { 372 var service admin.AdminListService 373 if err := c.ShouldBindJSON(&service); err == nil { 374 res := service.Shares() 375 c.JSON(200, res) 376 } else { 377 c.JSON(200, ErrorResponse(err)) 378 } 379 } 380 381 // AdminDeleteShare 批量删除分享 382 func AdminDeleteShare(c *gin.Context) { 383 var service admin.ShareBatchService 384 if err := c.ShouldBindJSON(&service); err == nil { 385 res := service.Delete(c) 386 c.JSON(200, res) 387 } else { 388 c.JSON(200, ErrorResponse(err)) 389 } 390 } 391 392 // AdminListDownload 列出离线下载任务 393 func AdminListDownload(c *gin.Context) { 394 var service admin.AdminListService 395 if err := c.ShouldBindJSON(&service); err == nil { 396 res := service.Downloads() 397 c.JSON(200, res) 398 } else { 399 c.JSON(200, ErrorResponse(err)) 400 } 401 } 402 403 // AdminDeleteDownload 批量删除任务 404 func AdminDeleteDownload(c *gin.Context) { 405 var service admin.TaskBatchService 406 if err := c.ShouldBindJSON(&service); err == nil { 407 res := service.Delete(c) 408 c.JSON(200, res) 409 } else { 410 c.JSON(200, ErrorResponse(err)) 411 } 412 } 413 414 // AdminListTask 列出任务 415 func AdminListTask(c *gin.Context) { 416 var service admin.AdminListService 417 if err := c.ShouldBindJSON(&service); err == nil { 418 res := service.Tasks() 419 c.JSON(200, res) 420 } else { 421 c.JSON(200, ErrorResponse(err)) 422 } 423 } 424 425 // AdminDeleteTask 批量删除任务 426 func AdminDeleteTask(c *gin.Context) { 427 var service admin.TaskBatchService 428 if err := c.ShouldBindJSON(&service); err == nil { 429 res := service.DeleteGeneral(c) 430 c.JSON(200, res) 431 } else { 432 c.JSON(200, ErrorResponse(err)) 433 } 434 } 435 436 // AdminCreateImportTask 新建文件导入任务 437 func AdminCreateImportTask(c *gin.Context) { 438 var service admin.ImportTaskService 439 if err := c.ShouldBindJSON(&service); err == nil { 440 res := service.Create(c, CurrentUser(c)) 441 c.JSON(200, res) 442 } else { 443 c.JSON(200, ErrorResponse(err)) 444 } 445 } 446 447 // AdminListFolders 列出用户或外部文件系统目录 448 func AdminListFolders(c *gin.Context) { 449 var service admin.ListFolderService 450 if err := c.ShouldBindUri(&service); err == nil { 451 res := service.List(c) 452 c.JSON(200, res) 453 } else { 454 c.JSON(200, ErrorResponse(err)) 455 } 456 } 457 458 // AdminListNodes 列出从机节点 459 func AdminListNodes(c *gin.Context) { 460 var service admin.AdminListService 461 if err := c.ShouldBindJSON(&service); err == nil { 462 res := service.Nodes() 463 c.JSON(200, res) 464 } else { 465 c.JSON(200, ErrorResponse(err)) 466 } 467 } 468 469 // AdminAddNode 新建节点 470 func AdminAddNode(c *gin.Context) { 471 var service admin.AddNodeService 472 if err := c.ShouldBindJSON(&service); err == nil { 473 res := service.Add() 474 c.JSON(200, res) 475 } else { 476 c.JSON(200, ErrorResponse(err)) 477 } 478 } 479 480 // AdminToggleNode 启用/暂停节点 481 func AdminToggleNode(c *gin.Context) { 482 var service admin.ToggleNodeService 483 if err := c.ShouldBindUri(&service); err == nil { 484 res := service.Toggle() 485 c.JSON(200, res) 486 } else { 487 c.JSON(200, ErrorResponse(err)) 488 } 489 } 490 491 // AdminDeleteGroup 删除用户组 492 func AdminDeleteNode(c *gin.Context) { 493 var service admin.NodeService 494 if err := c.ShouldBindUri(&service); err == nil { 495 res := service.Delete() 496 c.JSON(200, res) 497 } else { 498 c.JSON(200, ErrorResponse(err)) 499 } 500 } 501 502 // AdminGetNode 获取节点详情 503 func AdminGetNode(c *gin.Context) { 504 var service admin.NodeService 505 if err := c.ShouldBindUri(&service); err == nil { 506 res := service.Get() 507 c.JSON(200, res) 508 } else { 509 c.JSON(200, ErrorResponse(err)) 510 } 511 }