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,
 | |
| 	})
 | |
| }
 |