forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
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 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}