mirror of https://github.com/Xhofe/alist
125 lines
2.8 KiB
Go
125 lines
2.8 KiB
Go
package handles
|
|
|
|
import (
|
|
"github.com/alist-org/alist/v3/internal/model"
|
|
"github.com/alist-org/alist/v3/internal/op"
|
|
"github.com/alist-org/alist/v3/server/common"
|
|
"github.com/gin-gonic/gin"
|
|
"strconv"
|
|
)
|
|
|
|
type SSHKeyAddReq struct {
|
|
Title string `json:"title" binding:"required"`
|
|
Key string `json:"key" binding:"required"`
|
|
}
|
|
|
|
func AddMyPublicKey(c *gin.Context) {
|
|
userObj, ok := c.Value("user").(*model.User)
|
|
if !ok || userObj.IsGuest() {
|
|
common.ErrorStrResp(c, "user invalid", 401)
|
|
return
|
|
}
|
|
var req SSHKeyAddReq
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
common.ErrorStrResp(c, "request invalid", 400)
|
|
return
|
|
}
|
|
if req.Title == "" {
|
|
common.ErrorStrResp(c, "request invalid", 400)
|
|
return
|
|
}
|
|
key := &model.SSHPublicKey{
|
|
Title: req.Title,
|
|
KeyStr: req.Key,
|
|
UserId: userObj.ID,
|
|
}
|
|
err, parsed := op.CreateSSHPublicKey(key)
|
|
if !parsed {
|
|
common.ErrorStrResp(c, "provided key invalid", 400)
|
|
return
|
|
} else if err != nil {
|
|
common.ErrorResp(c, err, 500, true)
|
|
return
|
|
}
|
|
common.SuccessResp(c)
|
|
}
|
|
|
|
func ListMyPublicKey(c *gin.Context) {
|
|
userObj, ok := c.Value("user").(*model.User)
|
|
if !ok || userObj.IsGuest() {
|
|
common.ErrorStrResp(c, "user invalid", 401)
|
|
return
|
|
}
|
|
list(c, userObj)
|
|
}
|
|
|
|
func DeleteMyPublicKey(c *gin.Context) {
|
|
userObj, ok := c.Value("user").(*model.User)
|
|
if !ok || userObj.IsGuest() {
|
|
common.ErrorStrResp(c, "user invalid", 401)
|
|
return
|
|
}
|
|
keyId, err := strconv.Atoi(c.Query("id"))
|
|
if err != nil {
|
|
common.ErrorStrResp(c, "id format invalid", 400)
|
|
return
|
|
}
|
|
key, err := op.GetSSHPublicKeyByIdAndUserId(uint(keyId), userObj.ID)
|
|
if err != nil {
|
|
common.ErrorStrResp(c, "failed to get public key", 404)
|
|
return
|
|
}
|
|
err = op.DeleteSSHPublicKeyById(key.ID)
|
|
if err != nil {
|
|
common.ErrorResp(c, err, 500, true)
|
|
return
|
|
}
|
|
common.SuccessResp(c)
|
|
}
|
|
|
|
func ListPublicKeys(c *gin.Context) {
|
|
userId, err := strconv.Atoi(c.Query("uid"))
|
|
if err != nil {
|
|
common.ErrorStrResp(c, "user id format invalid", 400)
|
|
return
|
|
}
|
|
userObj, err := op.GetUserById(uint(userId))
|
|
if err != nil {
|
|
common.ErrorStrResp(c, "user invalid", 404)
|
|
return
|
|
}
|
|
list(c, userObj)
|
|
}
|
|
|
|
func DeletePublicKey(c *gin.Context) {
|
|
keyId, err := strconv.Atoi(c.Query("id"))
|
|
if err != nil {
|
|
common.ErrorStrResp(c, "id format invalid", 400)
|
|
return
|
|
}
|
|
err = op.DeleteSSHPublicKeyById(uint(keyId))
|
|
if err != nil {
|
|
common.ErrorResp(c, err, 500, true)
|
|
return
|
|
}
|
|
common.SuccessResp(c)
|
|
}
|
|
|
|
func list(c *gin.Context, userObj *model.User) {
|
|
var req model.PageReq
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
common.ErrorResp(c, err, 400)
|
|
return
|
|
}
|
|
req.Validate()
|
|
keys, total, err := op.GetSSHPublicKeyByUserId(userObj.ID, req.Page, req.PerPage)
|
|
if err != nil {
|
|
common.ErrorResp(c, err, 500, true)
|
|
return
|
|
}
|
|
common.SuccessResp(c, common.PageResp{
|
|
Content: keys,
|
|
Total: total,
|
|
})
|
|
}
|