Goit

Simple and lightweight Git web server
git clone https://git.omkov.net/Goit
git clone [email protected]:Goit
Log | Tree | Refs | README | Download

Goit/src/goit/keys.go (85 lines, 1.5 KiB) -rw-r--r-- file download

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