100 lines
2.0 KiB
Go
100 lines
2.0 KiB
Go
package ssh_key
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"gitee_cli/config"
|
|
"gitee_cli/utils/http_utils"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
)
|
|
|
|
type SSHKey struct {
|
|
Id int `json:"id"`
|
|
Title string `json:"title"`
|
|
Url string `json:"url"`
|
|
Key string `json:"key"`
|
|
}
|
|
|
|
func AddKey(filepath, title string) (SSHKey, error) {
|
|
file, err := os.Open(filepath)
|
|
if err != nil {
|
|
return SSHKey{}, err
|
|
}
|
|
data, err := ioutil.ReadAll(file)
|
|
if err != nil {
|
|
return SSHKey{}, errors.New("读取公钥失败")
|
|
}
|
|
|
|
url := "https://gitee.com/api/v5/user/keys"
|
|
payload := map[string]string{
|
|
"key": string(data),
|
|
"title": title,
|
|
}
|
|
giteeClient := http_utils.NewGiteeClient("POST", url, nil, payload)
|
|
|
|
giteeClient.Do()
|
|
|
|
res, _ := giteeClient.GetRespBody()
|
|
|
|
if giteeClient.IsFail() {
|
|
errResponse := http_utils.ErrMsgV5{}
|
|
err := json.Unmarshal(res, &errResponse)
|
|
if err != nil {
|
|
return SSHKey{}, errors.New("添加公钥失败")
|
|
}
|
|
return SSHKey{}, errors.New(errResponse.Message)
|
|
}
|
|
|
|
sshKey := SSHKey{}
|
|
err = json.Unmarshal(res, &sshKey)
|
|
if err != nil {
|
|
return sshKey, errors.New("解析响应失败")
|
|
}
|
|
return sshKey, nil
|
|
}
|
|
|
|
func ListKeys() ([]SSHKey, error) {
|
|
url := fmt.Sprintf("https://gitee.com/api/v5/users/%s/keys?access_token=%s", config.Conf.UserName, config.Conf.AccessToken)
|
|
|
|
req, err := http.Get(url)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sshKeys := make([]SSHKey, 0)
|
|
|
|
res, err := ioutil.ReadAll(req.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = json.Unmarshal(res, &sshKeys)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return sshKeys, nil
|
|
}
|
|
|
|
func DeleteKey(sshKeyId string) error {
|
|
url := fmt.Sprintf("https://gitee.com/api/v5/user/keys/%s", sshKeyId)
|
|
giteeClient := http_utils.NewGiteeClient("DELETE", url, nil, nil)
|
|
|
|
giteeClient.Do()
|
|
|
|
data, _ := giteeClient.GetRespBody()
|
|
|
|
if giteeClient.IsFail() {
|
|
if giteeClient.Response.StatusCode == http.StatusNotFound {
|
|
return errors.New("公钥不存在")
|
|
}
|
|
errMsg := http_utils.ErrMsgV5{}
|
|
json.Unmarshal(data, &errMsg)
|
|
return errors.New(errMsg.Message)
|
|
}
|
|
return nil
|
|
}
|