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}