2021-10-26 14:28:37 +00:00
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"github.com/Xhofe/alist/drivers"
|
|
|
|
"github.com/Xhofe/alist/model"
|
2021-11-13 07:53:26 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
2021-11-13 11:31:35 +00:00
|
|
|
log "github.com/sirupsen/logrus"
|
2021-11-13 09:10:44 +00:00
|
|
|
"strconv"
|
2021-10-30 09:34:34 +00:00
|
|
|
"time"
|
2021-10-26 14:28:37 +00:00
|
|
|
)
|
|
|
|
|
2021-11-13 07:53:26 +00:00
|
|
|
func GetAccounts(c *gin.Context) {
|
2021-11-03 02:37:33 +00:00
|
|
|
accounts, err := model.GetAccounts()
|
|
|
|
if err != nil {
|
2021-11-13 07:53:26 +00:00
|
|
|
ErrorResp(c, err, 500)
|
|
|
|
return
|
2021-11-03 02:37:33 +00:00
|
|
|
}
|
2021-11-13 07:53:26 +00:00
|
|
|
SuccessResp(c, accounts)
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|
|
|
|
|
2021-11-13 08:49:03 +00:00
|
|
|
func CreateAccount(c *gin.Context) {
|
|
|
|
var req model.Account
|
|
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
|
|
ErrorResp(c, err, 400)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
driver, ok := drivers.GetDriver(req.Type)
|
|
|
|
if !ok {
|
|
|
|
ErrorResp(c, fmt.Errorf("no [%s] driver", req.Type), 400)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
now := time.Now()
|
|
|
|
req.UpdatedAt = &now
|
2021-11-13 11:31:35 +00:00
|
|
|
if err := model.CreateAccount(&req); err != nil {
|
2021-11-13 08:49:03 +00:00
|
|
|
ErrorResp(c, err, 500)
|
|
|
|
} else {
|
2021-11-13 11:31:35 +00:00
|
|
|
log.Debugf("new account: %+v", req)
|
2021-11-13 08:49:03 +00:00
|
|
|
err = driver.Save(&req, nil)
|
|
|
|
if err != nil {
|
|
|
|
ErrorResp(c, err, 500)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
SuccessResp(c)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-13 07:53:26 +00:00
|
|
|
func SaveAccount(c *gin.Context) {
|
2021-10-26 14:28:37 +00:00
|
|
|
var req model.Account
|
2021-11-13 07:53:26 +00:00
|
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
|
|
ErrorResp(c, err, 400)
|
|
|
|
return
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|
|
|
|
driver, ok := drivers.GetDriver(req.Type)
|
|
|
|
if !ok {
|
2021-11-13 07:53:26 +00:00
|
|
|
ErrorResp(c, fmt.Errorf("no [%s] driver", req.Type), 400)
|
|
|
|
return
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|
2021-11-15 06:54:22 +00:00
|
|
|
old, err := model.GetAccountById(req.ID)
|
|
|
|
if err != nil {
|
|
|
|
ErrorResp(c, err, 400)
|
|
|
|
return
|
|
|
|
}
|
2021-10-30 09:34:34 +00:00
|
|
|
now := time.Now()
|
|
|
|
req.UpdatedAt = &now
|
2021-11-17 07:25:31 +00:00
|
|
|
if old.Name != req.Name {
|
|
|
|
model.DeleteAccountFromMap(old.Name)
|
|
|
|
}
|
2021-11-13 11:31:35 +00:00
|
|
|
if err := model.SaveAccount(&req); err != nil {
|
2021-11-13 07:53:26 +00:00
|
|
|
ErrorResp(c, err, 500)
|
2021-10-26 14:28:37 +00:00
|
|
|
} else {
|
2021-11-13 11:31:35 +00:00
|
|
|
log.Debugf("save account: %+v", req)
|
2021-11-15 06:54:22 +00:00
|
|
|
err = driver.Save(&req, old)
|
2021-10-27 10:59:03 +00:00
|
|
|
if err != nil {
|
2021-11-13 07:53:26 +00:00
|
|
|
ErrorResp(c, err, 500)
|
|
|
|
return
|
2021-10-27 10:59:03 +00:00
|
|
|
}
|
2021-11-13 07:53:26 +00:00
|
|
|
SuccessResp(c)
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-13 07:53:26 +00:00
|
|
|
func DeleteAccount(c *gin.Context) {
|
2021-11-13 09:10:44 +00:00
|
|
|
idStr := c.Query("id")
|
|
|
|
id, err := strconv.Atoi(idStr)
|
|
|
|
if err != nil {
|
|
|
|
ErrorResp(c, err, 400)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := model.DeleteAccount(uint(id)); err != nil {
|
2021-11-13 07:53:26 +00:00
|
|
|
ErrorResp(c, err, 500)
|
|
|
|
return
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|
2021-11-13 07:53:26 +00:00
|
|
|
SuccessResp(c)
|
2021-10-26 14:28:37 +00:00
|
|
|
}
|