router.go 15.9 KB
Newer Older
H
HFO4 已提交
1 2 3
package routers

import (
H
HFO4 已提交
4
	"github.com/HFO4/cloudreve/bootstrap"
H
HFO4 已提交
5 6
	"github.com/HFO4/cloudreve/middleware"
	"github.com/HFO4/cloudreve/pkg/conf"
7
	"github.com/HFO4/cloudreve/pkg/hashid"
8
	"github.com/HFO4/cloudreve/pkg/util"
H
HFO4 已提交
9
	"github.com/HFO4/cloudreve/routers/controllers"
H
HFO4 已提交
10
	"github.com/gin-contrib/cors"
H
HFO4 已提交
11
	"github.com/gin-contrib/gzip"
H
HFO4 已提交
12
	"github.com/gin-contrib/static"
H
HFO4 已提交
13 14 15
	"github.com/gin-gonic/gin"
)

16 17 18 19 20
// InitRouter 初始化路由
func InitRouter() *gin.Engine {
	if conf.SystemConfig.Mode == "master" {
		util.Log().Info("当前运行模式:Master")
		return InitMasterRouter()
H
HFO4 已提交
21
	}
22 23 24
	util.Log().Info("当前运行模式:Slave")
	return InitSlaveRouter()

H
HFO4 已提交
25 26
}

27 28
// InitSlaveRouter 初始化从机模式路由
func InitSlaveRouter() *gin.Engine {
H
HFO4 已提交
29
	r := gin.Default()
30
	// 跨域相关
31 32
	InitCORS(r)
	v3 := r.Group("/api/v3/slave")
33 34 35
	// 鉴权中间件
	v3.Use(middleware.SignRequired())

H
HFO4 已提交
36
	/*
37
		路由
H
HFO4 已提交
38
	*/
39
	{
H
HFO4 已提交
40 41
		// Ping
		v3.POST("ping", controllers.SlavePing)
42
		// 上传
43
		v3.POST("upload", controllers.SlaveUpload)
44 45 46 47
		// 下载
		v3.GET("download/:speed/:path/:name", controllers.SlaveDownload)
		// 预览 / 外链
		v3.GET("source/:speed/:path/:name", controllers.SlavePreview)
48 49
		// 缩略图
		v3.GET("thumb/:path", controllers.SlaveThumb)
50 51
		// 删除文件
		v3.POST("delete", controllers.SlaveDelete)
H
HFO4 已提交
52 53
		// 列出文件
		v3.POST("list", controllers.SlaveList)
54 55 56
	}
	return r
}
H
HFO4 已提交
57

58
// InitCORS 初始化跨域配置
59 60 61
func InitCORS(router *gin.Engine) {
	if conf.CORSConfig.AllowOrigins[0] != "UNSET" {
		router.Use(cors.New(cors.Config{
H
HFO4 已提交
62
			AllowOrigins:     conf.CORSConfig.AllowOrigins,
63
			AllowMethods:     conf.CORSConfig.AllowMethods,
H
HFO4 已提交
64 65 66 67
			AllowHeaders:     conf.CORSConfig.AllowHeaders,
			AllowCredentials: conf.CORSConfig.AllowCredentials,
			ExposeHeaders:    conf.CORSConfig.ExposeHeaders,
		}))
68
		return
H
HFO4 已提交
69
	}
H
HFO4 已提交
70

71 72 73 74 75 76 77 78 79
	// slave模式下未启动跨域的警告
	if conf.SystemConfig.Mode == "slave" {
		util.Log().Warning("当前作为存储端(Slave)运行,但未启用跨域配置,可能会导致 Master 端无法正常上传文件")
	}
}

// InitMasterRouter 初始化主机模式路由
func InitMasterRouter() *gin.Engine {
	r := gin.Default()
H
HFO4 已提交
80 81 82 83

	/*
		静态资源
	*/
H
HFO4 已提交
84
	r.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{"/api/"})))
85
	r.Use(middleware.InjectSiteInfo())
H
HFO4 已提交
86
	r.Use(static.Serve("/", bootstrap.StaticFS))
H
HFO4 已提交
87 88
	r.GET("manifest.json", controllers.Manifest)

89
	v3 := r.Group("/api/v3")
H
HFO4 已提交
90

91 92 93 94 95
	/*
		中间件
	*/
	v3.Use(middleware.Session(conf.SystemConfig.SessionSecret))
	// 跨域相关
96
	InitCORS(r)
H
HFO4 已提交
97
	// 测试模式加入Mock助手中间件
H
HFO4 已提交
98
	if gin.Mode() == gin.TestMode {
H
HFO4 已提交
99
		v3.Use(middleware.MockHelper())
H
HFO4 已提交
100
	}
H
HFO4 已提交
101
	v3.Use(middleware.CurrentUser())
H
HFO4 已提交
102

H
HFO4 已提交
103 104 105
	/*
		路由
	*/
H
HFO4 已提交
106
	{
H
HFO4 已提交
107 108 109 110 111 112 113 114
		// 全局设置相关
		site := v3.Group("site")
		{
			// 测试用路由
			site.GET("ping", controllers.Ping)
			// 验证码
			site.GET("captcha", controllers.Captcha)
			// 站点全局配置
115
			site.GET("config", middleware.CSRFInit(), controllers.SiteConfig)
H
HFO4 已提交
116
		}
117

H
HFO4 已提交
118 119
		// 用户相关路由
		user := v3.Group("user")
120 121
		{
			// 用户登录
H
HFO4 已提交
122
			user.POST("session", controllers.UserLogin)
H
HFO4 已提交
123
			// 用户注册
H
HFO4 已提交
124 125 126 127
			user.POST("",
				middleware.IsFunctionEnabled("register_enabled"),
				controllers.UserRegister,
			)
H
HFO4 已提交
128
			// 用二步验证户登录
H
HFO4 已提交
129
			user.POST("2fa", controllers.User2FALogin)
H
HFO4 已提交
130 131 132 133
			// 发送密码重设邮件
			user.POST("reset", controllers.UserSendReset)
			// 通过邮件里的链接重设密码
			user.PATCH("reset", controllers.UserReset)
H
HFO4 已提交
134 135 136 137 138 139
			// 邮件激活
			user.GET("activate/:id",
				middleware.SignRequired(),
				middleware.HashID(hashid.UserID),
				controllers.UserActivate,
			)
140
			// WebAuthn登陆初始化
H
HFO4 已提交
141 142
			user.GET("authn/:username",
				middleware.IsFunctionEnabled("authn_enabled"),
H
HFO4 已提交
143 144
				controllers.StartLoginAuthn,
			)
145
			// WebAuthn登陆
H
HFO4 已提交
146 147
			user.POST("authn/finish/:username",
				middleware.IsFunctionEnabled("authn_enabled"),
H
HFO4 已提交
148 149
				controllers.FinishLoginAuthn,
			)
H
HFO4 已提交
150 151 152 153 154
			// 获取用户主页展示用分享
			user.GET("profile/:id",
				middleware.HashID(hashid.UserID),
				controllers.GetUserShare,
			)
H
HFO4 已提交
155 156 157 158 159
			// 获取用户头像
			user.GET("avatar/:id/:size",
				middleware.HashID(hashid.UserID),
				controllers.GetUserAvatar,
			)
160 161
		}

H
HFO4 已提交
162 163 164 165 166 167
		// 需要携带签名验证的
		sign := v3.Group("")
		sign.Use(middleware.SignRequired())
		{
			file := sign.Group("file")
			{
H
HFO4 已提交
168
				// 文件外链
H
HFO4 已提交
169
				file.GET("get/:id/:name", controllers.AnonymousGetContent)
H
HFO4 已提交
170 171
				// 下載已经打包好的文件
				file.GET("archive/:id/archive.zip", controllers.DownloadArchive)
172 173
				// 下载文件
				file.GET("download/:id", controllers.Download)
H
HFO4 已提交
174 175
			}
		}
H
HFO4 已提交
176

177 178 179
		// 回调接口
		callback := v3.Group("callback")
		{
H
HFO4 已提交
180
			// 远程策略上传回调
181 182 183 184 185
			callback.POST(
				"remote/:key",
				middleware.RemoteCallbackAuth(),
				controllers.RemoteCallback,
			)
H
HFO4 已提交
186 187 188 189 190 191
			// 七牛策略上传回调
			callback.POST(
				"qiniu/:key",
				middleware.QiniuCallbackAuth(),
				controllers.QiniuCallback,
			)
H
HFO4 已提交
192 193 194 195 196 197
			// 阿里云OSS策略上传回调
			callback.POST(
				"oss/:key",
				middleware.OSSCallbackAuth(),
				controllers.OSSCallback,
			)
H
HFO4 已提交
198 199 200 201 202 203
			// 又拍云策略上传回调
			callback.POST(
				"upyun/:key",
				middleware.UpyunCallbackAuth(),
				controllers.UpyunCallback,
			)
H
HFO4 已提交
204 205 206 207 208 209 210 211
			onedrive := callback.Group("onedrive")
			{
				// 文件上传完成
				onedrive.POST(
					"finish/:key",
					middleware.OneDriveCallbackAuth(),
					controllers.OneDriveCallback,
				)
H
HFO4 已提交
212 213 214 215 216
				// 文件上传完成
				onedrive.GET(
					"auth",
					controllers.OneDriveOAuth,
				)
H
HFO4 已提交
217
			}
H
HFO4 已提交
218 219 220 221 222 223
			// 腾讯云COS策略上传回调
			callback.GET(
				"cos/:key",
				middleware.COSCallbackAuth(),
				controllers.COSCallback,
			)
Z
ZZF 已提交
224 225 226 227 228 229
			// AWS S3策略上传回调
			callback.GET(
				"s3/:key",
				middleware.S3CallbackAuth(),
				controllers.S3Callback,
			)
230 231
		}

H
HFO4 已提交
232
		// 分享相关
H
HFO4 已提交
233
		share := v3.Group("share", middleware.ShareAvailable())
H
HFO4 已提交
234 235
		{
			// 获取分享
H
HFO4 已提交
236
			share.GET("info/:id", controllers.GetShare)
237
			// 创建文件下载会话
238
			share.PUT("download/:id",
H
HFO4 已提交
239
				middleware.CheckShareUnlocked(),
H
HFO4 已提交
240 241 242
				middleware.BeforeShareDownload(),
				controllers.GetShareDownload,
			)
H
HFO4 已提交
243
			// 预览分享文件
H
HFO4 已提交
244
			share.GET("preview/:id",
245
				middleware.CSRFCheck(),
H
HFO4 已提交
246
				middleware.CheckShareUnlocked(),
H
HFO4 已提交
247 248 249 250
				middleware.ShareCanPreview(),
				middleware.BeforeShareDownload(),
				controllers.PreviewShare,
			)
H
HFO4 已提交
251
			// 取得Office文档预览地址
H
HFO4 已提交
252 253 254
			share.GET("doc/:id",
				middleware.CheckShareUnlocked(),
				middleware.ShareCanPreview(),
H
HFO4 已提交
255 256 257
				middleware.BeforeShareDownload(),
				controllers.GetShareDocPreview,
			)
H
HFO4 已提交
258
			// 获取文本文件内容
H
HFO4 已提交
259
			share.GET("content/:id",
H
HFO4 已提交
260
				middleware.CheckShareUnlocked(),
H
HFO4 已提交
261 262 263
				middleware.BeforeShareDownload(),
				controllers.PreviewShareText,
			)
H
HFO4 已提交
264 265 266 267 268
			// 分享目录列文件
			share.GET("list/:id/*path",
				middleware.CheckShareUnlocked(),
				controllers.ListSharedFolder,
			)
H
HFO4 已提交
269 270 271 272 273 274
			// 归档打包下载
			share.POST("archive/:id",
				middleware.CheckShareUnlocked(),
				middleware.BeforeShareDownload(),
				controllers.ArchiveShare,
			)
H
HFO4 已提交
275 276 277 278 279
			// 获取README文本文件内容
			share.GET("readme/:id",
				middleware.CheckShareUnlocked(),
				controllers.PreviewShareReadme,
			)
H
HFO4 已提交
280 281 282 283 284 285
			// 获取缩略图
			share.GET("thumb/:id/:file",
				middleware.CheckShareUnlocked(),
				middleware.ShareCanPreview(),
				controllers.ShareThumb,
			)
286 287
			// 搜索公共分享
			v3.Group("share").GET("search", controllers.SearchShare)
H
HFO4 已提交
288 289
		}

H
HFO4 已提交
290 291 292 293
		// 需要登录保护的
		auth := v3.Group("")
		auth.Use(middleware.AuthRequired())
		{
H
HFO4 已提交
294 295 296 297 298
			// 管理
			admin := auth.Group("admin", middleware.IsAdmin())
			{
				// 获取站点概况
				admin.GET("summary", controllers.AdminSummary)
H
HFO4 已提交
299 300 301 302
				// 获取社区新闻
				admin.GET("news", controllers.AdminNews)
				// 更改设置
				admin.PATCH("setting", controllers.AdminChangeSetting)
H
HFO4 已提交
303 304
				// 获取设置
				admin.POST("setting", controllers.AdminGetSetting)
305 306
				// 获取用户组列表
				admin.GET("groups", controllers.AdminGetGroups)
H
HFO4 已提交
307 308
				// 重新加载子服务
				admin.GET("reload/:service", controllers.AdminReloadService)
H
HFO4 已提交
309 310
				// 重新加载子服务
				admin.POST("mailTest", controllers.AdminSendTestMail)
H
HFO4 已提交
311

H
HFO4 已提交
312 313 314 315 316 317 318
				// 离线下载相关
				aria2 := admin.Group("aria2")
				{
					// 测试连接配置
					aria2.POST("test", controllers.AdminTestAria2)
				}

H
HFO4 已提交
319
				// 存储策略管理
H
HFO4 已提交
320 321 322 323 324 325
				policy := admin.Group("policy")
				{
					// 列出存储策略
					policy.POST("list", controllers.AdminListPolicy)
					// 测试本地路径可用性
					policy.POST("test/path", controllers.AdminTestPath)
H
HFO4 已提交
326 327
					// 测试从机通信
					policy.POST("test/slave", controllers.AdminTestSlave)
H
HFO4 已提交
328 329
					// 创建存储策略
					policy.POST("", controllers.AdminAddPolicy)
H
HFO4 已提交
330
					// 创建跨域策略
H
HFO4 已提交
331
					policy.POST("cors", controllers.AdminAddCORS)
H
HFO4 已提交
332 333
					// 创建COS回调函数
					policy.POST("scf", controllers.AdminAddSCF)
H
HFO4 已提交
334 335
					// 获取 OneDrive OAuth URL
					policy.GET(":id/oauth", controllers.AdminOneDriveOAuth)
336 337 338 339
					// 获取 存储策略
					policy.GET(":id", controllers.AdminGetPolicy)
					// 删除 存储策略
					policy.DELETE(":id", controllers.AdminDeletePolicy)
H
HFO4 已提交
340 341
				}

H
HFO4 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354
				// 用户组管理
				group := admin.Group("group")
				{
					// 列出用户组
					group.POST("list", controllers.AdminListGroup)
					// 获取用户组
					group.GET(":id", controllers.AdminGetGroup)
					// 创建/保存用户组
					group.POST("", controllers.AdminAddGroup)
					// 删除
					group.DELETE(":id", controllers.AdminDeleteGroup)
				}

H
HFO4 已提交
355 356 357 358
				user := admin.Group("user")
				{
					// 列出用户
					user.POST("list", controllers.AdminListUser)
H
HFO4 已提交
359 360 361 362
					// 获取用户
					user.GET(":id", controllers.AdminGetUser)
					// 创建/保存用户
					user.POST("", controllers.AdminAddUser)
H
HFO4 已提交
363 364 365 366
					// 删除
					user.POST("delete", controllers.AdminDeleteUser)
					// 封禁/解封用户
					user.PATCH("ban/:id", controllers.AdminBanUser)
H
HFO4 已提交
367 368
				}

H
HFO4 已提交
369 370 371 372 373 374
				file := admin.Group("file")
				{
					// 列出文件
					file.POST("list", controllers.AdminListFile)
					// 预览文件
					file.GET("preview/:id", controllers.AdminGetFile)
H
HFO4 已提交
375 376
					// 删除
					file.POST("delete", controllers.AdminDeleteFile)
377 378 379
					// 列出用户或外部文件系统目录
					file.GET("folders/:type/:id/*path",
						controllers.AdminListFolders)
H
HFO4 已提交
380 381 382 383 384 385
				}

				share := admin.Group("share")
				{
					// 列出分享
					share.POST("list", controllers.AdminListShare)
H
HFO4 已提交
386 387
					// 删除
					share.POST("delete", controllers.AdminDeleteShare)
H
HFO4 已提交
388 389
				}

H
HFO4 已提交
390 391 392 393 394 395 396 397 398 399 400 401 402 403
				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)
404 405
					// 新建文件导入任务
					task.POST("import", controllers.AdminCreateImportTask)
H
HFO4 已提交
406 407
				}

H
HFO4 已提交
408 409
			}

H
HFO4 已提交
410
			// 用户
H
HFO4 已提交
411
			user := auth.Group("user")
H
HFO4 已提交
412 413
			{
				// 当前登录用户信息
H
HFO4 已提交
414
				user.GET("me", controllers.UserMe)
H
HFO4 已提交
415
				// 存储信息
416
				user.GET("storage", controllers.UserStorage)
H
HFO4 已提交
417 418
				// 退出登录
				user.DELETE("session", controllers.UserSignOut)
H
HFO4 已提交
419 420

				// WebAuthn 注册相关
H
HFO4 已提交
421 422
				authn := user.Group("authn",
					middleware.IsFunctionEnabled("authn_enabled"))
H
HFO4 已提交
423 424 425 426
				{
					authn.PUT("", controllers.StartRegAuthn)
					authn.PUT("finish", controllers.FinishRegAuthn)
				}
H
HFO4 已提交
427 428 429 430

				// 用户设置
				setting := user.Group("setting")
				{
H
HFO4 已提交
431 432
					// 任务队列
					setting.GET("tasks", controllers.UserTasks)
H
HFO4 已提交
433 434 435 436 437 438 439 440
					// 获取当前用户设定
					setting.GET("", controllers.UserSetting)
					// 从文件上传头像
					setting.POST("avatar", controllers.UploadAvatar)
					// 设定为Gravatar头像
					setting.PUT("avatar", controllers.UseGravatar)
					// 更改用户设定
					setting.PATCH(":option", controllers.UpdateOption)
H
HFO4 已提交
441 442
					// 获得二步验证初始化信息
					setting.GET("2fa", controllers.UserInit2FA)
H
HFO4 已提交
443
				}
H
HFO4 已提交
444 445
			}

H
HFO4 已提交
446
			// 文件
447
			file := auth.Group("file", middleware.HashID(hashid.FileID))
H
HFO4 已提交
448
			{
H
HFO4 已提交
449
				// 文件上传
H
HFO4 已提交
450
				file.POST("upload", controllers.FileUploadStream)
H
HFO4 已提交
451 452
				// 获取上传凭证
				file.GET("upload/credential", controllers.GetUploadCredential)
H
HFO4 已提交
453
				// 更新文件
454
				file.PUT("update/:id", controllers.PutContent)
455 456
				// 创建空白文件
				file.POST("create", controllers.CreateFile)
457
				// 创建文件下载会话
458
				file.PUT("download/:id", controllers.CreateDownloadSession)
459
				// 预览文件
460
				file.GET("preview/:id", controllers.Preview)
461
				// 获取文本文件内容
462
				file.GET("content/:id", controllers.PreviewText)
463
				// 取得Office文档预览地址
464
				file.GET("doc/:id", controllers.GetDocPreview)
465
				// 获取缩略图
H
HFO4 已提交
466
				file.GET("thumb/:id", controllers.Thumb)
467 468
				// 取得文件外链
				file.GET("source/:id", controllers.GetSource)
H
HFO4 已提交
469 470
				// 打包要下载的文件
				file.POST("archive", controllers.Archive)
H
HFO4 已提交
471 472
				// 创建文件压缩任务
				file.POST("compress", controllers.Compress)
H
HFO4 已提交
473 474
				// 创建文件解压缩任务
				file.POST("decompress", controllers.Decompress)
475 476
				// 创建文件解压缩任务
				file.GET("search/:type/:keywords", controllers.SearchFile)
H
HFO4 已提交
477 478
			}

479
			// 离线下载任务
H
HFO4 已提交
480 481
			aria2 := auth.Group("aria2")
			{
482
				// 创建URL下载任务
H
HFO4 已提交
483
				aria2.POST("url", controllers.AddAria2URL)
484
				// 创建种子下载任务
485
				aria2.POST("torrent/:id", middleware.HashID(hashid.FileID), controllers.AddAria2Torrent)
486 487
				// 重新选择要下载的文件
				aria2.PUT("select/:gid", controllers.SelectAria2File)
H
HFO4 已提交
488 489
				// 取消下载任务
				aria2.DELETE("task/:gid", controllers.CancelAria2Download)
H
HFO4 已提交
490 491
				// 获取正在下载中的任务
				aria2.GET("downloading", controllers.ListDownloading)
492 493
				// 获取已完成的任务
				aria2.GET("finished", controllers.ListFinished)
H
HFO4 已提交
494
			}
495

H
HFO4 已提交
496
			// 目录
H
HFO4 已提交
497
			directory := auth.Group("directory")
H
HFO4 已提交
498
			{
499 500
				// 创建目录
				directory.PUT("", controllers.CreateDirectory)
H
HFO4 已提交
501
				// 列出目录下内容
H
HFO4 已提交
502 503 504 505 506 507
				directory.GET("*path", controllers.ListDirectory)
			}

			// 对象,文件和目录的抽象
			object := auth.Group("object")
			{
H
HFO4 已提交
508
				// 删除对象
H
HFO4 已提交
509
				object.DELETE("", controllers.Delete)
H
HFO4 已提交
510
				// 移动对象
H
HFO4 已提交
511
				object.PATCH("", controllers.Move)
H
HFO4 已提交
512 513
				// 复制对象
				object.POST("copy", controllers.Copy)
H
HFO4 已提交
514 515
				// 重命名对象
				object.POST("rename", controllers.Rename)
H
HFO4 已提交
516 517
			}

H
HFO4 已提交
518 519 520 521 522
			// 分享
			share := auth.Group("share")
			{
				// 创建新分享
				share.POST("", controllers.CreateShare)
H
HFO4 已提交
523 524 525 526 527 528 529 530 531 532 533 534
				// 列出我的分享
				share.GET("", controllers.ListShare)
				// 更新分享属性
				share.PATCH(":id",
					middleware.ShareAvailable(),
					middleware.ShareOwner(),
					controllers.UpdateShare,
				)
				// 删除分享
				share.DELETE(":id",
					controllers.DeleteShare,
				)
H
HFO4 已提交
535 536
			}

H
HFO4 已提交
537 538 539 540 541 542 543 544 545 546 547
			// 用户标签
			tag := auth.Group("tag")
			{
				// 创建文件分类标签
				tag.POST("filter", controllers.CreateFilterTag)
				// 创建目录快捷方式标签
				tag.POST("link", controllers.CreateLinkTag)
				// 删除标签
				tag.DELETE(":id", middleware.HashID(hashid.TagID), controllers.DeleteTag)
			}

H
HFO4 已提交
548 549 550 551 552 553 554 555 556 557 558
			// WebDAV管理相关
			webdav := auth.Group("webdav")
			{
				// 获取账号信息
				webdav.GET("accounts", controllers.GetWebDAVAccounts)
				// 新建账号
				webdav.POST("accounts", controllers.CreateWebDAVAccounts)
				// 删除账号
				webdav.DELETE("accounts/:id", controllers.DeleteWebDAVAccounts)
			}

H
HFO4 已提交
559 560
		}

H
HFO4 已提交
561
	}
H
HFO4 已提交
562 563

	// 初始化WebDAV相关路由
564
	initWebDAV(r.Group("dav"))
H
HFO4 已提交
565 566
	return r
}
567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585

// 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)

	}
}