79 lines
2.1 kB
1
package state
2
3
import (
4
"log"
5
"net/http"
6
"strings"
7
"time"
8
9
comatproto "github.com/bluesky-social/indigo/api/atproto"
10
lexutil "github.com/bluesky-social/indigo/lex/util"
11
"github.com/gliderlabs/ssh"
12
"github.com/sotangled/tangled/api/tangled"
13
"github.com/sotangled/tangled/appview/pages"
14
)
15
16
func (s *State) Settings(w http.ResponseWriter, r *http.Request) {
17
// for now, this is just pubkeys
18
user := s.auth.GetUser(r)
19
pubKeys, err := s.db.GetPublicKeys(user.Did)
20
if err != nil {
21
log.Println(err)
22
}
23
24
s.pages.Settings(w, pages.SettingsParams{
25
LoggedInUser: user,
26
PubKeys: pubKeys,
27
})
28
}
29
30
func (s *State) SettingsKeys(w http.ResponseWriter, r *http.Request) {
31
switch r.Method {
32
case http.MethodGet:
33
s.pages.Notice(w, "settings-keys", "Unimplemented.")
34
log.Println("unimplemented")
35
return
36
case http.MethodPut:
37
did := s.auth.GetDid(r)
38
key := r.FormValue("key")
39
key = strings.TrimSpace(key)
40
name := r.FormValue("name")
41
client, _ := s.auth.AuthorizedClient(r)
42
43
_, _, _, _, err := ssh.ParseAuthorizedKey([]byte(key))
44
if err != nil {
45
log.Printf("parsing public key: %s", err)
46
s.pages.Notice(w, "settings-keys", "That doesn't look like a valid public key. Make sure it's a <strong>public</strong> key.")
47
return
48
}
49
50
if err := s.db.AddPublicKey(did, name, key); err != nil {
51
log.Printf("adding public key: %s", err)
52
s.pages.Notice(w, "settings-keys", "Failed to add public key.")
53
return
54
}
55
56
// store in pds too
57
resp, err := comatproto.RepoPutRecord(r.Context(), client, &comatproto.RepoPutRecord_Input{
58
Collection: tangled.PublicKeyNSID,
59
Repo: did,
60
Rkey: s.TID(),
61
Record: &lexutil.LexiconTypeDecoder{
62
Val: &tangled.PublicKey{
63
Created: time.Now().Format(time.RFC3339),
64
Key: key,
65
Name: name,
66
}},
67
})
68
// invalid record
69
if err != nil {
70
log.Printf("failed to create record: %s", err)
71
s.pages.Notice(w, "settings-keys", "Failed to create record.")
72
return
73
}
74
75
log.Println("created atproto record: ", resp.Uri)
76
s.pages.HxLocation(w, "/settings")
77
return
78
}
79
}
80