Feat: delete objects

This commit is contained in:
HFO4
2019-11-30 15:09:56 +08:00
parent 0cbbe5bb79
commit 93010e3525
26 changed files with 398 additions and 55 deletions

View File

@@ -19,7 +19,7 @@ func CreateDirectory(c *gin.Context) {
// ListDirectory 列出目录下内容
func ListDirectory(c *gin.Context) {
var service explorer.DirectoryService
if err := c.ShouldBindQuery(&service); err == nil {
if err := c.ShouldBindUri(&service); err == nil {
res := service.ListDirectory(c)
c.JSON(200, res)
} else {

View File

@@ -38,7 +38,7 @@ func FileUploadStream(c *gin.Context) {
// 非本地策略时拒绝上传
if user, ok := c.Get("user"); ok && user.(*model.User).Policy.Type != "local" {
c.JSON(200, serializer.Err(serializer.CodePolicyNotAllowed, "当前上传策略无法使用", nil))
c.JSON(200, serializer.Err(serializer.CodePolicyNotAllowed, "当前存储策略无法使用", nil))
return
}

View File

@@ -0,0 +1,22 @@
package controllers
import (
"context"
"github.com/HFO4/cloudreve/service/explorer"
"github.com/gin-gonic/gin"
)
// Delete 删除文件或目录
func Delete(c *gin.Context) {
// 创建上下文
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
var service explorer.ItemService
if err := c.ShouldBindJSON(&service); err == nil {
res := service.Delete(ctx, c)
c.JSON(200, res)
} else {
c.JSON(200, ErrorResponse(err))
}
}

View File

@@ -72,7 +72,13 @@ func InitRouter() *gin.Engine {
// 创建目录
directory.PUT("", controllers.CreateDirectory)
// 列出目录下内容
directory.GET("", controllers.ListDirectory)
directory.GET("*path", controllers.ListDirectory)
}
// 对象,文件和目录的抽象
object := auth.Group("object")
{
object.DELETE("", controllers.Delete)
}
}

View File

@@ -77,7 +77,7 @@ func TestUserSession(t *testing.T) {
AddRow("login_captcha", "0", "login"),
userRows: sqlmock.NewRows([]string{"email", "nick", "password", "options"}).
AddRow("admin@cloudreve.org", "admin", "CKLmDKa1C9SD64vU:76adadd4fd4bad86959155f6f7bc8993c94e7adf", "{}"), policyRows: sqlmock.NewRows([]string{"name", "type", "options"}).
AddRow("默认上传策略", "local", "{\"op_name\":\"123\"}"),
AddRow("默认存储策略", "local", "{\"op_name\":\"123\"}"),
reqBody: `{"userName":"admin@cloudreve.org","captchaCode":"captchaCode","Password":"admin"}`,
expected: serializer.BuildUserResponse(model.User{
Email: "admin@cloudreve.org",
@@ -95,7 +95,7 @@ func TestUserSession(t *testing.T) {
userRows: sqlmock.NewRows([]string{"email", "nick", "password", "options"}).
AddRow("admin@cloudreve.org", "admin", "CKLmDKa1C9SD64vU:76adadd4fd4bad86959155f6f7bc8993c94e7adf", "{}"),
policyRows: sqlmock.NewRows([]string{"name", "type", "options"}).
AddRow("默认上传策略", "local", "{\"op_name\":\"123\"}"),
AddRow("默认存储策略", "local", "{\"op_name\":\"123\"}"),
reqBody: `{"userName":"admin@cloudreve.org","captchaCode":"captchaCode","Password":"admin"}`,
expected: serializer.ParamErr("验证码错误", nil),
},
@@ -106,7 +106,7 @@ func TestUserSession(t *testing.T) {
userRows: sqlmock.NewRows([]string{"email", "nick", "password", "options"}).
AddRow("admin@cloudreve.org", "admin", "CKLmDKa1C9SD64vU:76adadd4fd4bad86959155f6f7bc8993c94e7adf", "{}"),
policyRows: sqlmock.NewRows([]string{"name", "type", "options"}).
AddRow("默认上传策略", "local", "{\"op_name\":\"123\"}"),
AddRow("默认存储策略", "local", "{\"op_name\":\"123\"}"),
reqBody: `{"userName":"admin@cloudreve.org","captchaCode":"captchaCode","Password":"admin123"}`,
expected: serializer.Err(401, "用户邮箱或密码错误", nil),
},
@@ -122,7 +122,7 @@ func TestUserSession(t *testing.T) {
userRows: sqlmock.NewRows([]string{"email", "nick", "password", "options", "status"}).
AddRow("admin@cloudreve.org", "admin", "CKLmDKa1C9SD64vU:76adadd4fd4bad86959155f6f7bc8993c94e7adf", "{}", model.Baned),
policyRows: sqlmock.NewRows([]string{"name", "type", "options"}).
AddRow("默认上传策略", "local", "{\"op_name\":\"123\"}"),
AddRow("默认存储策略", "local", "{\"op_name\":\"123\"}"),
reqBody: `{"userName":"admin@cloudreve.org","captchaCode":"captchaCode","Password":"admin"}`,
expected: serializer.Err(403, "该账号已被封禁", nil),
},
@@ -133,7 +133,7 @@ func TestUserSession(t *testing.T) {
userRows: sqlmock.NewRows([]string{"email", "nick", "password", "options", "status"}).
AddRow("admin@cloudreve.org", "admin", "CKLmDKa1C9SD64vU:76adadd4fd4bad86959155f6f7bc8993c94e7adf", "{}", model.NotActivicated),
policyRows: sqlmock.NewRows([]string{"name", "type", "options"}).
AddRow("默认上传策略", "local", "{\"op_name\":\"123\"}"),
AddRow("默认存储策略", "local", "{\"op_name\":\"123\"}"),
reqBody: `{"userName":"admin@cloudreve.org","captchaCode":"captchaCode","Password":"admin"}`,
expected: serializer.Err(403, "该账号未激活", nil),
},
@@ -273,7 +273,7 @@ func TestListDirectoryRoute(t *testing.T) {
// 成功
req, _ := http.NewRequest(
"GET",
"/api/v3/directory?path=/",
"/api/v3/directory/",
nil,
)
middleware.SessionMock = map[string]interface{}{"user_id": 1}
@@ -286,20 +286,6 @@ func TestListDirectoryRoute(t *testing.T) {
w.Body.Reset()
// 缺少参数
req, _ = http.NewRequest(
"GET",
"/api/v3/directory",
nil,
)
middleware.SessionMock = map[string]interface{}{"user_id": 1}
router.ServeHTTP(w, req)
asserts.Equal(200, w.Code)
resJSON = &serializer.Response{}
err = json.Unmarshal(w.Body.Bytes(), resJSON)
asserts.NoError(err)
asserts.NotEqual(0, resJSON.Code)
}
func TestLocalFileUpload(t *testing.T) {