44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
0
|
// Copyright (C) 2025, Jakob Wakeling |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
1
|
// All rights reserved. |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
2
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
3
|
package goit |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
4
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
5
|
type Key struct { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
6
|
ID int64 `json:"id"` |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
7
|
OwnerID int64 `json:"owner_id"` |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
8
|
Type KeyType `json:"type"` |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
9
|
Description string `json:"description"` |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
10
|
Key []byte `json:"key"` |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
11
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
12
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
13
|
type KeyType int32 |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
14
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
15
|
const ( |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
16
|
SSH_Auth KeyType = 0 |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
17
|
) |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
18
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
19
|
func KeyTypeFromString(s string) KeyType { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
20
|
switch s { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
21
|
case "ssh-auth": |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
22
|
return SSH_Auth |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
23
|
default: |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
24
|
return -1 |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
25
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
26
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
27
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
28
|
func (t KeyType) String() string { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
29
|
return [...]string{"ssh-auth"}[t] |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
30
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
31
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
32
|
func GetKeys(uid int64) ([]Key, error) { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
33
|
keys := []Key{} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
34
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
35
|
rows, err := db.Query("SELECT id, owner_id, type, description, key FROM keys WHERE owner_id = ?", uid) |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
36
|
if err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
37
|
return nil, err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
38
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
39
|
defer rows.Close() |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
40
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
41
|
for rows.Next() { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
42
|
k := Key{} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
43
|
if err := rows.Scan(&k.ID, &k.OwnerID, &k.Type, &k.Description, &k.Key); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
44
|
return nil, err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
45
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
46
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
47
|
keys = append(keys, k) |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
48
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
49
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
50
|
if err := rows.Err(); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
51
|
return nil, err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
52
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
53
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
54
|
return keys, nil |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
55
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
56
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
57
|
/* Input key ID is ignored. */ |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
58
|
func AddKey(key Key) error { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
59
|
if _, err := db.Exec( |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
60
|
"INSERT INTO keys (owner_id, type, description, key) VALUES (?, ?, ?, ?)", |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
61
|
key.OwnerID, key.Type, key.Description, key.Key, |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
62
|
); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
63
|
return err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
64
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
65
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
66
|
if err := UpdateAuthorizedKeys(); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
67
|
return err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
68
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
69
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
70
|
return nil |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
71
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
72
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
73
|
func DelKey(kid int64) error { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
74
|
if _, err := db.Exec("DELETE FROM keys WHERE id = ?", kid); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
75
|
return err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
76
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
77
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
78
|
if err := UpdateAuthorizedKeys(); err != nil { |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
79
|
return err |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
80
|
} |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
81
|
|
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
82
|
return nil |
44175af |
Jakob Wakeling |
2025-01-03 15:33:07 |
83
|
} |
|
|
|
84
|
|