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  }