Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/internal/op/sshkey.go
1560 views
1
package op
2
3
import (
4
"github.com/alist-org/alist/v3/internal/db"
5
"github.com/alist-org/alist/v3/internal/model"
6
"github.com/pkg/errors"
7
"golang.org/x/crypto/ssh"
8
"time"
9
)
10
11
func CreateSSHPublicKey(k *model.SSHPublicKey) (error, bool) {
12
_, err := db.GetSSHPublicKeyByUserTitle(k.UserId, k.Title)
13
if err == nil {
14
return errors.New("key with the same title already exists"), true
15
}
16
pubKey, _, _, _, err := ssh.ParseAuthorizedKey([]byte(k.KeyStr))
17
if err != nil {
18
return err, false
19
}
20
k.Fingerprint = ssh.FingerprintSHA256(pubKey)
21
k.AddedTime = time.Now()
22
k.LastUsedTime = k.AddedTime
23
return db.CreateSSHPublicKey(k), true
24
}
25
26
func GetSSHPublicKeyByUserId(userId uint, pageIndex, pageSize int) (keys []model.SSHPublicKey, count int64, err error) {
27
return db.GetSSHPublicKeyByUserId(userId, pageIndex, pageSize)
28
}
29
30
func GetSSHPublicKeyByIdAndUserId(id uint, userId uint) (*model.SSHPublicKey, error) {
31
key, err := db.GetSSHPublicKeyById(id)
32
if err != nil {
33
return nil, err
34
}
35
if key.UserId != userId {
36
return nil, errors.Wrapf(err, "failed get old key")
37
}
38
return key, nil
39
}
40
41
func UpdateSSHPublicKey(k *model.SSHPublicKey) error {
42
return db.UpdateSSHPublicKey(k)
43
}
44
45
func DeleteSSHPublicKeyById(keyId uint) error {
46
return db.DeleteSSHPublicKeyById(keyId)
47
}
48
49