2019-11-05 12:31:22 +08:00
package routers
import (
2020-11-21 17:34:55 +08:00
"github.com/cloudreve/Cloudreve/v3/middleware"
2021-10-31 09:41:56 +08:00
"github.com/cloudreve/Cloudreve/v3/pkg/auth"
2023-01-09 19:37:46 +08:00
"github.com/cloudreve/Cloudreve/v3/pkg/cache"
2021-11-08 19:54:26 +08:00
"github.com/cloudreve/Cloudreve/v3/pkg/cluster"
2020-11-21 17:34:55 +08:00
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
"github.com/cloudreve/Cloudreve/v3/pkg/hashid"
"github.com/cloudreve/Cloudreve/v3/pkg/util"
2023-01-09 19:37:46 +08:00
wopi2 "github.com/cloudreve/Cloudreve/v3/pkg/wopi"
2020-11-21 17:34:55 +08:00
"github.com/cloudreve/Cloudreve/v3/routers/controllers"
2019-12-13 19:00:58 +08:00
"github.com/gin-contrib/cors"
2020-04-06 09:05:30 +08:00
"github.com/gin-contrib/gzip"
2019-11-05 12:31:22 +08:00
"github.com/gin-gonic/gin"
)
2019-12-23 13:27:18 +08:00
// InitRouter 初始化路由
func InitRouter ( ) * gin . Engine {
if conf . SystemConfig . Mode == "master" {
2022-10-08 18:51:52 +08:00
util . Log ( ) . Info ( "Current running mode: Master." )
2019-12-23 13:27:18 +08:00
return InitMasterRouter ( )
2019-12-16 19:43:00 +08:00
}
2022-10-08 18:51:52 +08:00
util . Log ( ) . Info ( "Current running mode: Slave." )
2019-12-23 13:27:18 +08:00
return InitSlaveRouter ( )
2019-12-16 19:43:00 +08:00
}
2019-12-23 13:27:18 +08:00
// InitSlaveRouter 初始化从机模式路由
func InitSlaveRouter ( ) * gin . Engine {
2019-11-14 14:24:39 +08:00
r := gin . Default ( )
2019-12-23 13:27:18 +08:00
// 跨域相关
2019-12-29 13:15:09 +08:00
InitCORS ( r )
v3 := r . Group ( "/api/v3/slave" )
2019-12-23 13:27:18 +08:00
// 鉴权中间件
2021-10-31 09:41:56 +08:00
v3 . Use ( middleware . SignRequired ( auth . General ) )
// 主机信息解析
v3 . Use ( middleware . MasterMetadata ( ) )
2022-04-13 17:53:46 +08:00
// 禁止缓存
v3 . Use ( middleware . CacheControl ( ) )
2019-12-23 13:27:18 +08:00
2019-11-12 16:53:32 +08:00
/ *
2019-12-23 13:27:18 +08:00
路由
2019-11-12 16:53:32 +08:00
* /
2019-12-23 13:27:18 +08:00
{
2020-02-27 11:17:59 +08:00
// Ping
v3 . POST ( "ping" , controllers . SlavePing )
2021-10-31 09:41:56 +08:00
// 测试 Aria2 RPC 连接
v3 . POST ( "ping/aria2" , controllers . AdminTestAria2 )
// 接收主机心跳包
v3 . POST ( "heartbeat" , controllers . SlaveHeartbeat )
2019-12-31 14:21:57 +08:00
// 上传
2022-03-13 16:18:39 +08:00
upload := v3 . Group ( "upload" )
{
// 上传分片
upload . POST ( ":sessionId" , controllers . SlaveUpload )
// 创建上传会话上传
upload . PUT ( "" , controllers . SlaveGetUploadSession )
// 删除上传会话
upload . DELETE ( ":sessionId" , controllers . SlaveDeleteUploadSession )
}
2019-12-31 14:21:57 +08:00
// 下载
v3 . GET ( "download/:speed/:path/:name" , controllers . SlaveDownload )
// 预览 / 外链
v3 . GET ( "source/:speed/:path/:name" , controllers . SlavePreview )
2020-01-02 13:10:04 +08:00
// 缩略图
v3 . GET ( "thumb/:path" , controllers . SlaveThumb )
2020-01-01 20:15:05 +08:00
// 删除文件
v3 . POST ( "delete" , controllers . SlaveDelete )
2020-04-28 10:02:53 +08:00
// 列出文件
v3 . POST ( "list" , controllers . SlaveList )
2021-10-31 09:41:56 +08:00
// 离线下载
aria2 := v3 . Group ( "aria2" )
2021-11-08 19:54:26 +08:00
aria2 . Use ( middleware . UseSlaveAria2Instance ( cluster . DefaultController ) )
2021-10-31 09:41:56 +08:00
{
// 创建离线下载任务
aria2 . POST ( "task" , controllers . SlaveAria2Create )
// 获取任务状态
aria2 . POST ( "status" , controllers . SlaveAria2Status )
// 取消离线下载任务
aria2 . POST ( "cancel" , controllers . SlaveCancelAria2Task )
// 选取任务文件
aria2 . POST ( "select" , controllers . SlaveSelectTask )
// 删除任务临时文件
aria2 . POST ( "delete" , controllers . SlaveDeleteTempFile )
}
// 异步任务
task := v3 . Group ( "task" )
{
task . PUT ( "transfer" , controllers . SlaveCreateTransferTask )
}
2019-12-23 13:27:18 +08:00
}
return r
}
2019-11-12 16:53:32 +08:00
2019-12-23 13:27:18 +08:00
// InitCORS 初始化跨域配置
2019-12-29 13:15:09 +08:00
func InitCORS ( router * gin . Engine ) {
if conf . CORSConfig . AllowOrigins [ 0 ] != "UNSET" {
router . Use ( cors . New ( cors . Config {
2019-12-13 19:00:58 +08:00
AllowOrigins : conf . CORSConfig . AllowOrigins ,
2019-12-29 13:15:09 +08:00
AllowMethods : conf . CORSConfig . AllowMethods ,
2019-12-13 19:00:58 +08:00
AllowHeaders : conf . CORSConfig . AllowHeaders ,
AllowCredentials : conf . CORSConfig . AllowCredentials ,
ExposeHeaders : conf . CORSConfig . ExposeHeaders ,
} ) )
2019-12-23 13:27:18 +08:00
return
2019-12-13 19:00:58 +08:00
}
2019-11-23 15:09:46 +08:00
2019-12-23 13:27:18 +08:00
// slave模式下未启动跨域的警告
if conf . SystemConfig . Mode == "slave" {
2022-10-08 18:51:52 +08:00
util . Log ( ) . Warning ( "You are running Cloudreve as slave node, if you are using slave storage policy, please enable CORS feature in config file, otherwise file cannot be uploaded from Master site." )
2019-12-23 13:27:18 +08:00
}
}
// InitMasterRouter 初始化主机模式路由
func InitMasterRouter ( ) * gin . Engine {
r := gin . Default ( )
2020-02-23 11:41:39 +08:00
/ *
静态资源
* /
2020-04-06 09:05:30 +08:00
r . Use ( gzip . Gzip ( gzip . DefaultCompression , gzip . WithExcludedPaths ( [ ] string { "/api/" } ) ) )
2020-12-08 17:36:19 +08:00
r . Use ( middleware . FrontendFileHandler ( ) )
2020-02-23 11:41:39 +08:00
r . GET ( "manifest.json" , controllers . Manifest )
2019-12-23 13:27:18 +08:00
v3 := r . Group ( "/api/v3" )
2020-02-23 10:19:13 +08:00
2019-12-23 13:27:18 +08:00
/ *
中间件
* /
v3 . Use ( middleware . Session ( conf . SystemConfig . SessionSecret ) )
// 跨域相关
2019-12-29 13:15:09 +08:00
InitCORS ( r )
2019-11-14 14:45:06 +08:00
// 测试模式加入Mock助手中间件
2019-11-12 16:53:32 +08:00
if gin . Mode ( ) == gin . TestMode {
2019-12-16 19:43:00 +08:00
v3 . Use ( middleware . MockHelper ( ) )
2019-11-12 16:53:32 +08:00
}
2022-04-13 17:53:46 +08:00
// 用户会话
2019-12-16 19:43:00 +08:00
v3 . Use ( middleware . CurrentUser ( ) )
2019-11-11 19:13:17 +08:00
2022-04-13 17:53:46 +08:00
// 禁止缓存
v3 . Use ( middleware . CacheControl ( ) )
2019-11-12 16:53:32 +08:00
/ *
路由
* /
2019-11-05 12:31:22 +08:00
{
2022-10-29 11:06:07 +08:00
// Redirect file source link
source := r . Group ( "f" )
{
source . GET ( ":id/:name" ,
middleware . HashID ( hashid . SourceLinkID ) ,
middleware . ValidateSourceLink ( ) ,
controllers . AnonymousPermLink )
}
2019-12-10 17:10:34 +08:00
// 全局设置相关
site := v3 . Group ( "site" )
{
// 测试用路由
site . GET ( "ping" , controllers . Ping )
// 验证码
site . GET ( "captcha" , controllers . Captcha )
// 站点全局配置
2020-03-17 15:57:38 +08:00
site . GET ( "config" , middleware . CSRFInit ( ) , controllers . SiteConfig )
2019-12-10 17:10:34 +08:00
}
2019-12-10 11:55:28 +08:00
2019-12-10 17:10:34 +08:00
// 用户相关路由
user := v3 . Group ( "user" )
2019-12-10 11:55:28 +08:00
{
// 用户登录
2021-03-22 18:28:12 +08:00
user . POST ( "session" , middleware . CaptchaRequired ( "login_captcha" ) , controllers . UserLogin )
2020-02-21 15:15:14 +08:00
// 用户注册
2020-02-22 10:36:50 +08:00
user . POST ( "" ,
middleware . IsFunctionEnabled ( "register_enabled" ) ,
2021-03-22 18:28:12 +08:00
middleware . CaptchaRequired ( "reg_captcha" ) ,
2020-02-22 10:36:50 +08:00
controllers . UserRegister ,
)
2020-02-22 09:50:34 +08:00
// 用二步验证户登录
2020-02-21 13:48:34 +08:00
user . POST ( "2fa" , controllers . User2FALogin )
2020-02-22 10:36:50 +08:00
// 发送密码重设邮件
2021-03-22 18:28:12 +08:00
user . POST ( "reset" , middleware . CaptchaRequired ( "forget_captcha" ) , controllers . UserSendReset )
2020-02-22 10:36:50 +08:00
// 通过邮件里的链接重设密码
user . PATCH ( "reset" , controllers . UserReset )
2020-02-22 09:50:34 +08:00
// 邮件激活
user . GET ( "activate/:id" ,
2021-10-31 09:41:56 +08:00
middleware . SignRequired ( auth . General ) ,
2020-02-22 09:50:34 +08:00
middleware . HashID ( hashid . UserID ) ,
controllers . UserActivate ,
)
2019-12-10 11:55:28 +08:00
// WebAuthn登陆初始化
2020-02-21 10:08:47 +08:00
user . GET ( "authn/:username" ,
middleware . IsFunctionEnabled ( "authn_enabled" ) ,
2020-02-22 10:36:50 +08:00
controllers . StartLoginAuthn ,
)
2019-12-10 11:55:28 +08:00
// WebAuthn登陆
2020-02-21 10:08:47 +08:00
user . POST ( "authn/finish/:username" ,
middleware . IsFunctionEnabled ( "authn_enabled" ) ,
2020-02-22 10:36:50 +08:00
controllers . FinishLoginAuthn ,
)
2020-02-18 15:34:40 +08:00
// 获取用户主页展示用分享
user . GET ( "profile/:id" ,
middleware . HashID ( hashid . UserID ) ,
controllers . GetUserShare ,
)
2020-02-19 16:05:54 +08:00
// 获取用户头像
user . GET ( "avatar/:id/:size" ,
middleware . HashID ( hashid . UserID ) ,
2022-12-14 15:28:19 +08:00
middleware . StaticResourceCache ( ) ,
2020-02-19 16:05:54 +08:00
controllers . GetUserAvatar ,
)
2019-12-10 11:55:28 +08:00
}
2019-12-10 17:10:34 +08:00
// 需要携带签名验证的
sign := v3 . Group ( "" )
2021-10-31 09:41:56 +08:00
sign . Use ( middleware . SignRequired ( auth . General ) )
2019-12-10 17:10:34 +08:00
{
file := sign . Group ( "file" )
{
2021-03-20 12:33:39 +08:00
// 文件外链(直接输出文件数据)
2022-12-14 15:28:19 +08:00
file . GET ( "get/:id/:name" ,
middleware . Sandbox ( ) ,
middleware . StaticResourceCache ( ) ,
controllers . AnonymousGetContent ,
)
2021-03-20 12:33:39 +08:00
// 文件外链(301跳转)
2022-10-29 11:06:07 +08:00
file . GET ( "source/:id/:name" , controllers . AnonymousPermLinkDeprecated )
2019-12-13 20:46:11 +08:00
// 下载文件
2022-12-14 15:28:19 +08:00
file . GET ( "download/:id" ,
middleware . StaticResourceCache ( ) ,
controllers . Download ,
)
2022-04-13 17:53:46 +08:00
// 打包并下载文件
file . GET ( "archive/:sessionID/archive.zip" , controllers . DownloadArchive )
2019-12-10 17:10:34 +08:00
}
2022-12-19 17:34:57 +08:00
2022-12-19 17:35:39 +08:00
// Copy user session
sign . GET (
"user/session/copy/:id" ,
middleware . MobileRequestOnly ( ) ,
controllers . UserPerformCopySession ,
)
2019-12-10 17:10:34 +08:00
}
2019-11-05 12:31:22 +08:00
2021-10-31 09:41:56 +08:00
// 从机的 RPC 通信
slave := v3 . Group ( "slave" )
2021-11-08 19:54:26 +08:00
slave . Use ( middleware . SlaveRPCSignRequired ( cluster . Default ) )
2021-10-31 09:41:56 +08:00
{
// 事件通知
slave . PUT ( "notification/:subject" , controllers . SlaveNotificationPush )
// 上传
2022-03-13 16:20:50 +08:00
upload := slave . Group ( "upload" )
{
// 上传分片
upload . POST ( ":sessionId" , controllers . SlaveUpload )
// 创建上传会话上传
upload . PUT ( "" , controllers . SlaveGetUploadSession )
// 删除上传会话
upload . DELETE ( ":sessionId" , controllers . SlaveDeleteUploadSession )
}
2021-10-31 09:41:56 +08:00
// OneDrive 存储策略凭证
slave . GET ( "credential/onedrive/:id" , controllers . SlaveGetOneDriveCredential )
}
2019-12-30 19:08:38 +08:00
// 回调接口
callback := v3 . Group ( "callback" )
{
2020-01-15 10:14:15 +08:00
// 远程策略上传回调
2019-12-30 19:08:38 +08:00
callback . POST (
2022-03-03 19:17:25 +08:00
"remote/:sessionID/:key" ,
middleware . UseUploadSession ( "remote" ) ,
2019-12-30 19:08:38 +08:00
middleware . RemoteCallbackAuth ( ) ,
controllers . RemoteCallback ,
)
2020-01-15 10:14:15 +08:00
// 七牛策略上传回调
callback . POST (
2022-03-20 11:26:26 +08:00
"qiniu/:sessionID" ,
middleware . UseUploadSession ( "qiniu" ) ,
2020-01-15 10:14:15 +08:00
middleware . QiniuCallbackAuth ( ) ,
controllers . QiniuCallback ,
)
2020-01-16 13:36:13 +08:00
// 阿里云OSS策略上传回调
callback . POST (
2022-03-20 11:23:55 +08:00
"oss/:sessionID" ,
middleware . UseUploadSession ( "oss" ) ,
2020-01-16 13:36:13 +08:00
middleware . OSSCallbackAuth ( ) ,
controllers . OSSCallback ,
)
2020-01-18 10:40:03 +08:00
// 又拍云策略上传回调
callback . POST (
2022-03-20 11:27:43 +08:00
"upyun/:sessionID" ,
middleware . UseUploadSession ( "upyun" ) ,
2020-01-18 10:40:03 +08:00
middleware . UpyunCallbackAuth ( ) ,
controllers . UpyunCallback ,
)
2020-01-20 14:34:21 +08:00
onedrive := callback . Group ( "onedrive" )
{
// 文件上传完成
onedrive . POST (
2022-03-20 11:16:25 +08:00
"finish/:sessionID" ,
middleware . UseUploadSession ( "onedrive" ) ,
2020-01-20 14:34:21 +08:00
middleware . OneDriveCallbackAuth ( ) ,
controllers . OneDriveCallback ,
)
2022-03-20 11:16:25 +08:00
// OAuth 完成
2020-03-01 17:57:18 +08:00
onedrive . GET (
"auth" ,
controllers . OneDriveOAuth ,
)
2020-01-20 14:34:21 +08:00
}
2020-01-23 12:38:32 +08:00
// 腾讯云COS策略上传回调
callback . GET (
2022-03-20 11:27:17 +08:00
"cos/:sessionID" ,
middleware . UseUploadSession ( "cos" ) ,
2020-01-23 12:38:32 +08:00
controllers . COSCallback ,
)
2020-06-05 14:45:24 +08:00
// AWS S3策略上传回调
callback . GET (
2022-03-20 11:29:50 +08:00
"s3/:sessionID" ,
middleware . UseUploadSession ( "s3" ) ,
2020-06-05 14:45:24 +08:00
controllers . S3Callback ,
)
2019-12-30 19:08:38 +08:00
}
2020-01-26 14:57:07 +08:00
// 分享相关
2020-01-29 13:45:27 +08:00
share := v3 . Group ( "share" , middleware . ShareAvailable ( ) )
2020-01-26 14:57:07 +08:00
{
// 获取分享
2020-01-28 13:40:19 +08:00
share . GET ( "info/:id" , controllers . GetShare )
2020-01-28 12:41:00 +08:00
// 创建文件下载会话
2020-01-30 14:22:03 +08:00
share . PUT ( "download/:id" ,
2020-01-30 13:21:21 +08:00
middleware . CheckShareUnlocked ( ) ,
2020-01-29 13:45:27 +08:00
middleware . BeforeShareDownload ( ) ,
controllers . GetShareDownload ,
)
2020-01-28 13:40:19 +08:00
// 预览分享文件
2020-01-29 13:45:27 +08:00
share . GET ( "preview/:id" ,
2020-03-17 15:57:38 +08:00
middleware . CSRFCheck ( ) ,
2020-01-30 13:21:21 +08:00
middleware . CheckShareUnlocked ( ) ,
2020-01-29 13:45:27 +08:00
middleware . ShareCanPreview ( ) ,
middleware . BeforeShareDownload ( ) ,
controllers . PreviewShare ,
)
2020-01-29 12:16:52 +08:00
// 取得Office文档预览地址
2020-01-30 13:21:21 +08:00
share . GET ( "doc/:id" ,
middleware . CheckShareUnlocked ( ) ,
middleware . ShareCanPreview ( ) ,
2020-01-29 13:45:27 +08:00
middleware . BeforeShareDownload ( ) ,
controllers . GetShareDocPreview ,
)
2020-01-29 12:16:52 +08:00
// 获取文本文件内容
2020-01-29 13:45:27 +08:00
share . GET ( "content/:id" ,
2020-01-30 13:21:21 +08:00
middleware . CheckShareUnlocked ( ) ,
2020-01-29 13:45:27 +08:00
middleware . BeforeShareDownload ( ) ,
controllers . PreviewShareText ,
)
2020-01-30 13:21:21 +08:00
// 分享目录列文件
share . GET ( "list/:id/*path" ,
middleware . CheckShareUnlocked ( ) ,
controllers . ListSharedFolder ,
)
2022-04-29 20:03:52 +08:00
// 分享目录搜索
share . GET ( "search/:id/:type/:keywords" ,
middleware . CheckShareUnlocked ( ) ,
controllers . SearchSharedFolder ,
)
2020-01-31 13:18:32 +08:00
// 归档打包下载
share . POST ( "archive/:id" ,
middleware . CheckShareUnlocked ( ) ,
middleware . BeforeShareDownload ( ) ,
controllers . ArchiveShare ,
)
2020-01-31 15:12:15 +08:00
// 获取README文本文件内容
share . GET ( "readme/:id" ,
middleware . CheckShareUnlocked ( ) ,
controllers . PreviewShareReadme ,
)
2020-02-01 10:34:23 +08:00
// 获取缩略图
share . GET ( "thumb/:id/:file" ,
middleware . CheckShareUnlocked ( ) ,
middleware . ShareCanPreview ( ) ,
controllers . ShareThumb ,
)
2020-05-01 09:33:59 +08:00
// 搜索公共分享
v3 . Group ( "share" ) . GET ( "search" , controllers . SearchShare )
2020-01-26 14:57:07 +08:00
}
2023-01-09 19:37:46 +08:00
wopi := v3 . Group (
"wopi" ,
middleware . HashID ( hashid . FileID ) ,
middleware . WopiAccessValidation ( wopi2 . Default , cache . Store ) ,
)
{
// 获取文件信息
wopi . GET ( "files/:id" , controllers . CheckFileInfo )
// 获取文件内容
wopi . GET ( "files/:id/contents" , controllers . GetFile )
// 更新文件内容
wopi . POST ( "files/:id/contents" , middleware . WopiWriteAccess ( ) , controllers . PutFile )
// 通用文件操作
wopi . POST ( "files/:id" , middleware . WopiWriteAccess ( ) , controllers . ModifyFile )
}
2019-11-12 15:34:54 +08:00
// 需要登录保护的
auth := v3 . Group ( "" )
auth . Use ( middleware . AuthRequired ( ) )
{
2020-02-22 16:22:04 +08:00
// 管理
admin := auth . Group ( "admin" , middleware . IsAdmin ( ) )
{
// 获取站点概况
admin . GET ( "summary" , controllers . AdminSummary )
2020-02-23 10:19:13 +08:00
// 获取社区新闻
admin . GET ( "news" , controllers . AdminNews )
// 更改设置
admin . PATCH ( "setting" , controllers . AdminChangeSetting )
2020-02-23 11:41:39 +08:00
// 获取设置
admin . POST ( "setting" , controllers . AdminGetSetting )
2020-02-23 15:19:38 +08:00
// 获取用户组列表
admin . GET ( "groups" , controllers . AdminGetGroups )
2020-02-23 15:33:53 +08:00
// 重新加载子服务
admin . GET ( "reload/:service" , controllers . AdminReloadService )
2020-02-23 18:40:14 +08:00
// 重新加载子服务
admin . POST ( "mailTest" , controllers . AdminSendTestMail )
2020-02-24 15:52:13 +08:00
2020-02-26 15:11:06 +08:00
// 离线下载相关
aria2 := admin . Group ( "aria2" )
{
// 测试连接配置
aria2 . POST ( "test" , controllers . AdminTestAria2 )
}
2020-03-07 13:00:51 +08:00
// 存储策略管理
2020-02-26 15:11:06 +08:00
policy := admin . Group ( "policy" )
{
// 列出存储策略
policy . POST ( "list" , controllers . AdminListPolicy )
// 测试本地路径可用性
policy . POST ( "test/path" , controllers . AdminTestPath )
2020-02-27 11:17:59 +08:00
// 测试从机通信
policy . POST ( "test/slave" , controllers . AdminTestSlave )
2020-02-26 15:11:06 +08:00
// 创建存储策略
policy . POST ( "" , controllers . AdminAddPolicy )
2020-03-01 16:25:56 +08:00
// 创建跨域策略
2020-02-27 15:12:15 +08:00
policy . POST ( "cors" , controllers . AdminAddCORS )
2020-03-01 16:25:56 +08:00
// 创建COS回调函数
policy . POST ( "scf" , controllers . AdminAddSCF )
2020-03-01 17:57:18 +08:00
// 获取 OneDrive OAuth URL
policy . GET ( ":id/oauth" , controllers . AdminOneDriveOAuth )
2020-03-02 16:20:33 +08:00
// 获取 存储策略
policy . GET ( ":id" , controllers . AdminGetPolicy )
// 删除 存储策略
policy . DELETE ( ":id" , controllers . AdminDeletePolicy )
2020-02-26 15:11:06 +08:00
}
2020-03-07 13:00:51 +08:00
// 用户组管理
group := admin . Group ( "group" )
{
// 列出用户组
group . POST ( "list" , controllers . AdminListGroup )
// 获取用户组
group . GET ( ":id" , controllers . AdminGetGroup )
// 创建/保存用户组
group . POST ( "" , controllers . AdminAddGroup )
// 删除
group . DELETE ( ":id" , controllers . AdminDeleteGroup )
}
2020-03-07 14:04:18 +08:00
user := admin . Group ( "user" )
{
// 列出用户
user . POST ( "list" , controllers . AdminListUser )
2020-03-08 10:49:34 +08:00
// 获取用户
user . GET ( ":id" , controllers . AdminGetUser )
// 创建/保存用户
user . POST ( "" , controllers . AdminAddUser )
2020-03-08 12:54:04 +08:00
// 删除
user . POST ( "delete" , controllers . AdminDeleteUser )
// 封禁/解封用户
user . PATCH ( "ban/:id" , controllers . AdminBanUser )
2020-03-07 14:04:18 +08:00
}
2020-03-08 13:53:13 +08:00
file := admin . Group ( "file" )
{
// 列出文件
file . POST ( "list" , controllers . AdminListFile )
// 预览文件
2022-11-21 19:08:51 +08:00
file . GET ( "preview/:id" , middleware . Sandbox ( ) , controllers . AdminGetFile )
2020-03-09 10:17:59 +08:00
// 删除
file . POST ( "delete" , controllers . AdminDeleteFile )
2020-05-02 10:22:28 +08:00
// 列出用户或外部文件系统目录
file . GET ( "folders/:type/:id/*path" ,
controllers . AdminListFolders )
2020-03-09 10:17:59 +08:00
}
share := admin . Group ( "share" )
{
// 列出分享
share . POST ( "list" , controllers . AdminListShare )
2020-03-09 10:59:42 +08:00
// 删除
share . POST ( "delete" , controllers . AdminDeleteShare )
2020-03-08 13:53:13 +08:00
}
2020-03-09 12:30:43 +08:00
download := admin . Group ( "download" )
{
// 列出任务
download . POST ( "list" , controllers . AdminListDownload )
// 删除
download . POST ( "delete" , controllers . AdminDeleteDownload )
}
task := admin . Group ( "task" )
{
// 列出任务
task . POST ( "list" , controllers . AdminListTask )
// 删除
task . POST ( "delete" , controllers . AdminDeleteTask )
2020-04-27 14:39:16 +08:00
// 新建文件导入任务
task . POST ( "import" , controllers . AdminCreateImportTask )
2020-03-09 12:30:43 +08:00
}
2021-10-31 09:41:56 +08:00
node := admin . Group ( "node" )
{
// 列出从机节点
node . POST ( "list" , controllers . AdminListNodes )
// 列出从机节点
node . POST ( "aria2/test" , controllers . AdminTestAria2 )
// 创建/保存节点
node . POST ( "" , controllers . AdminAddNode )
// 启用/暂停节点
node . PATCH ( "enable/:id/:desired" , controllers . AdminToggleNode )
// 删除节点
node . DELETE ( ":id" , controllers . AdminDeleteNode )
// 获取节点
node . GET ( ":id" , controllers . AdminGetNode )
}
2020-02-22 16:22:04 +08:00
}
2019-11-23 15:37:13 +08:00
// 用户
2019-11-23 16:58:56 +08:00
user := auth . Group ( "user" )
2019-11-12 15:34:54 +08:00
{
// 当前登录用户信息
2019-11-23 16:58:56 +08:00
user . GET ( "me" , controllers . UserMe )
2020-01-28 13:40:19 +08:00
// 存储信息
2019-12-07 15:05:48 +08:00
user . GET ( "storage" , controllers . UserStorage )
2020-01-28 13:40:19 +08:00
// 退出登录
user . DELETE ( "session" , controllers . UserSignOut )
2022-12-19 17:34:57 +08:00
// Generate temp URL for copying client-side session, used in adding accounts
// for mobile App.
user . GET ( "session" , controllers . UserPrepareCopySession )
2019-12-08 22:17:36 +08:00
// WebAuthn 注册相关
2020-02-21 10:08:47 +08:00
authn := user . Group ( "authn" ,
middleware . IsFunctionEnabled ( "authn_enabled" ) )
2019-12-08 22:17:36 +08:00
{
authn . PUT ( "" , controllers . StartRegAuthn )
authn . PUT ( "finish" , controllers . FinishRegAuthn )
}
2020-02-18 13:45:59 +08:00
// 用户设置
setting := user . Group ( "setting" )
{
2020-02-18 14:45:38 +08:00
// 任务队列
setting . GET ( "tasks" , controllers . UserTasks )
2020-02-19 16:05:54 +08:00
// 获取当前用户设定
setting . GET ( "" , controllers . UserSetting )
// 从文件上传头像
setting . POST ( "avatar" , controllers . UploadAvatar )
// 设定为Gravatar头像
setting . PUT ( "avatar" , controllers . UseGravatar )
// 更改用户设定
setting . PATCH ( ":option" , controllers . UpdateOption )
2020-02-20 12:42:38 +08:00
// 获得二步验证初始化信息
setting . GET ( "2fa" , controllers . UserInit2FA )
2020-02-18 13:45:59 +08:00
}
2019-11-12 15:34:54 +08:00
}
2019-11-15 18:12:34 +08:00
// 文件
2020-02-10 13:10:59 +08:00
file := auth . Group ( "file" , middleware . HashID ( hashid . FileID ) )
2019-11-15 18:12:34 +08:00
{
2022-02-27 14:16:36 +08:00
// 上传
upload := file . Group ( "upload" )
{
// 文件上传
upload . POST ( ":sessionId/:index" , controllers . FileUpload )
// 创建上传会话
2022-02-27 14:22:09 +08:00
upload . PUT ( "" , controllers . GetUploadSession )
2022-02-27 14:16:36 +08:00
// 删除给定上传会话
2022-02-27 14:22:09 +08:00
upload . DELETE ( ":sessionId" , controllers . DeleteUploadSession )
2022-02-27 14:16:36 +08:00
// 删除全部上传会话
2022-02-27 14:22:09 +08:00
upload . DELETE ( "" , controllers . DeleteAllUploadSession )
2022-02-27 14:16:36 +08:00
}
2019-12-15 14:01:37 +08:00
// 更新文件
2020-02-10 13:10:59 +08:00
file . PUT ( "update/:id" , controllers . PutContent )
2020-05-09 10:35:18 +08:00
// 创建空白文件
file . POST ( "create" , controllers . CreateFile )
2019-12-13 20:46:11 +08:00
// 创建文件下载会话
2020-02-10 13:10:59 +08:00
file . PUT ( "download/:id" , controllers . CreateDownloadSession )
2019-12-14 15:06:30 +08:00
// 预览文件
2022-11-21 19:08:51 +08:00
file . GET ( "preview/:id" , middleware . Sandbox ( ) , controllers . Preview )
2020-01-04 15:49:08 +08:00
// 获取文本文件内容
2022-11-21 19:08:51 +08:00
file . GET ( "content/:id" , middleware . Sandbox ( ) , controllers . PreviewText )
2019-12-16 13:24:09 +08:00
// 取得Office文档预览地址
2020-02-10 13:10:59 +08:00
file . GET ( "doc/:id" , controllers . GetDocPreview )
2019-12-13 20:46:11 +08:00
// 获取缩略图
2019-12-08 22:17:36 +08:00
file . GET ( "thumb/:id" , controllers . Thumb )
2019-12-10 11:55:28 +08:00
// 取得文件外链
2022-04-29 19:59:25 +08:00
file . POST ( "source" , controllers . GetSource )
2019-12-13 15:10:44 +08:00
// 打包要下载的文件
file . POST ( "archive" , controllers . Archive )
2020-02-02 14:40:07 +08:00
// 创建文件压缩任务
file . POST ( "compress" , controllers . Compress )
2020-02-03 13:23:33 +08:00
// 创建文件解压缩任务
file . POST ( "decompress" , controllers . Decompress )
2020-02-10 10:33:39 +08:00
// 创建文件解压缩任务
file . GET ( "search/:type/:keywords" , controllers . SearchFile )
2019-11-15 18:12:34 +08:00
}
2020-02-04 10:48:26 +08:00
// 离线下载任务
2020-02-04 15:29:52 +08:00
aria2 := auth . Group ( "aria2" )
{
2020-02-05 15:11:34 +08:00
// 创建URL下载任务
2020-02-04 15:29:52 +08:00
aria2 . POST ( "url" , controllers . AddAria2URL )
2020-02-05 15:11:34 +08:00
// 创建种子下载任务
2020-02-10 13:10:59 +08:00
aria2 . POST ( "torrent/:id" , middleware . HashID ( hashid . FileID ) , controllers . AddAria2Torrent )
2020-02-05 15:11:34 +08:00
// 重新选择要下载的文件
aria2 . PUT ( "select/:gid" , controllers . SelectAria2File )
2020-11-23 19:24:56 +08:00
// 取消或删除下载任务
2020-02-06 10:07:46 +08:00
aria2 . DELETE ( "task/:gid" , controllers . CancelAria2Download )
2020-02-08 15:37:51 +08:00
// 获取正在下载中的任务
aria2 . GET ( "downloading" , controllers . ListDownloading )
2020-02-10 10:33:39 +08:00
// 获取已完成的任务
aria2 . GET ( "finished" , controllers . ListFinished )
2020-02-04 15:29:52 +08:00
}
2020-02-04 10:48:26 +08:00
2019-11-23 15:37:13 +08:00
// 目录
2019-11-23 16:58:56 +08:00
directory := auth . Group ( "directory" )
2019-11-23 15:37:13 +08:00
{
2019-11-24 11:33:30 +08:00
// 创建目录
directory . PUT ( "" , controllers . CreateDirectory )
2019-11-24 13:06:15 +08:00
// 列出目录下内容
2019-11-30 15:09:56 +08:00
directory . GET ( "*path" , controllers . ListDirectory )
}
// 对象,文件和目录的抽象
object := auth . Group ( "object" )
{
2019-12-01 18:31:29 +08:00
// 删除对象
2019-11-30 15:09:56 +08:00
object . DELETE ( "" , controllers . Delete )
2019-12-03 14:20:23 +08:00
// 移动对象
2019-12-01 18:31:29 +08:00
object . PATCH ( "" , controllers . Move )
2019-12-03 14:20:23 +08:00
// 复制对象
object . POST ( "copy" , controllers . Copy )
2019-12-07 15:54:07 +08:00
// 重命名对象
object . POST ( "rename" , controllers . Rename )
2021-03-11 14:50:02 +08:00
// 获取对象属性
object . GET ( "property/:id" , controllers . GetProperty )
2019-11-23 15:37:13 +08:00
}
2020-01-26 13:07:05 +08:00
// 分享
share := auth . Group ( "share" )
{
// 创建新分享
share . POST ( "" , controllers . CreateShare )
2020-02-13 11:53:24 +08:00
// 列出我的分享
share . GET ( "" , controllers . ListShare )
// 更新分享属性
share . PATCH ( ":id" ,
middleware . ShareAvailable ( ) ,
middleware . ShareOwner ( ) ,
controllers . UpdateShare ,
)
// 删除分享
share . DELETE ( ":id" ,
controllers . DeleteShare ,
)
2020-01-26 13:07:05 +08:00
}
2020-02-12 11:38:04 +08:00
// 用户标签
tag := auth . Group ( "tag" )
{
// 创建文件分类标签
tag . POST ( "filter" , controllers . CreateFilterTag )
// 创建目录快捷方式标签
tag . POST ( "link" , controllers . CreateLinkTag )
// 删除标签
tag . DELETE ( ":id" , middleware . HashID ( hashid . TagID ) , controllers . DeleteTag )
}
2020-02-18 12:10:28 +08:00
// WebDAV管理相关
webdav := auth . Group ( "webdav" )
{
// 获取账号信息
webdav . GET ( "accounts" , controllers . GetWebDAVAccounts )
// 新建账号
webdav . POST ( "accounts" , controllers . CreateWebDAVAccounts )
// 删除账号
webdav . DELETE ( "accounts/:id" , controllers . DeleteWebDAVAccounts )
2023-02-07 19:43:28 +08:00
// 更新账号可读性
webdav . PATCH ( "accounts" , controllers . UpdateWebDAVAccountsReadonly )
2020-02-18 12:10:28 +08:00
}
2019-11-12 15:34:54 +08:00
}
2019-11-05 12:31:22 +08:00
}
2019-12-16 19:43:00 +08:00
// 初始化WebDAV相关路由
2019-12-17 12:02:50 +08:00
initWebDAV ( r . Group ( "dav" ) )
2019-11-05 12:31:22 +08:00
return r
}
2019-12-23 13:27:18 +08:00
// initWebDAV 初始化WebDAV相关路由
func initWebDAV ( group * gin . RouterGroup ) {
{
group . Use ( middleware . WebDAVAuth ( ) )
group . Any ( "/*path" , controllers . ServeWebDAV )
group . Any ( "" , controllers . ServeWebDAV )
group . Handle ( "PROPFIND" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "PROPFIND" , "" , controllers . ServeWebDAV )
group . Handle ( "MKCOL" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "LOCK" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "UNLOCK" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "PROPPATCH" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "COPY" , "/*path" , controllers . ServeWebDAV )
group . Handle ( "MOVE" , "/*path" , controllers . ServeWebDAV )
}
}