this repo has no description
1package state
2
3import (
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
16func (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
30func (s *State) SettingsKeys(w http.ResponseWriter, r *http.Request) {
31 switch r.Method {
32 case http.MethodGet:
33 w.Write([]byte("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 return
47 }
48
49 if err := s.db.AddPublicKey(did, name, key); err != nil {
50 log.Printf("adding public key: %s", err)
51 return
52 }
53
54 // store in pds too
55 resp, err := comatproto.RepoPutRecord(r.Context(), client, &comatproto.RepoPutRecord_Input{
56 Collection: tangled.PublicKeyNSID,
57 Repo: did,
58 Rkey: s.TID(),
59 Record: &lexutil.LexiconTypeDecoder{
60 Val: &tangled.PublicKey{
61 Created: time.Now().Format(time.RFC3339),
62 Key: key,
63 Name: name,
64 }},
65 })
66 // invalid record
67 if err != nil {
68 log.Printf("failed to create record: %s", err)
69 return
70 }
71
72 log.Println("created atproto record: ", resp.Uri)
73
74 return
75 }
76}