this repo has no description
1package state 2 3import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "log" 8 "net/http" 9 10 "github.com/bluesky-social/indigo/atproto/identity" 11 "github.com/go-chi/chi/v5" 12 "github.com/sotangled/tangled/appview/pages" 13 "github.com/sotangled/tangled/types" 14) 15 16func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) { 17 repoName, knot, id, err := repoKnotAndId(r) 18 if err != nil { 19 log.Println("failed to get repo and knot", err) 20 return 21 } 22 23 resp, err := http.Get(fmt.Sprintf("http://%s/%s/%s", knot, id.DID.String(), repoName)) 24 if err != nil { 25 log.Println("failed to reach knotserver", err) 26 return 27 } 28 defer resp.Body.Close() 29 30 body, err := io.ReadAll(resp.Body) 31 if err != nil { 32 log.Fatalf("Error reading response body: %v", err) 33 return 34 } 35 36 var result types.RepoIndexResponse 37 err = json.Unmarshal(body, &result) 38 if err != nil { 39 log.Fatalf("Error unmarshalling response body: %v", err) 40 return 41 } 42 43 log.Println(resp.Status, result) 44 45 s.pages.RepoIndexPage(w, pages.RepoIndexParams{ 46 LoggedInUser: s.auth.GetUser(r), 47 RepoInfo: pages.RepoInfo{ 48 OwnerDid: id.DID.String(), 49 OwnerHandle: id.Handle.String(), 50 Name: repoName, 51 }, 52 RepoIndexResponse: result, 53 }) 54 55 return 56} 57 58func (s *State) RepoLog(w http.ResponseWriter, r *http.Request) { 59 repoName, knot, id, err := repoKnotAndId(r) 60 if err != nil { 61 log.Println("failed to get repo and knot", err) 62 return 63 } 64 65 ref := chi.URLParam(r, "ref") 66 resp, err := http.Get(fmt.Sprintf("http://%s/%s/%s/log/%s", knot, id.DID.String(), repoName, ref)) 67 if err != nil { 68 log.Println("failed to reach knotserver", err) 69 return 70 } 71 72 body, err := io.ReadAll(resp.Body) 73 if err != nil { 74 log.Fatalf("Error reading response body: %v", err) 75 return 76 } 77 78 var result types.RepoLogResponse 79 err = json.Unmarshal(body, &result) 80 if err != nil { 81 log.Println("failed to parse json response", err) 82 return 83 } 84 85 s.pages.RepoLog(w, pages.RepoLogParams{ 86 LoggedInUser: s.auth.GetUser(r), 87 RepoInfo: pages.RepoInfo{ 88 OwnerDid: id.DID.String(), 89 OwnerHandle: id.Handle.String(), 90 Name: repoName, 91 }, 92 RepoLogResponse: result, 93 }) 94 return 95} 96 97func repoKnotAndId(r *http.Request) (string, string, identity.Identity, error) { 98 repoName := chi.URLParam(r, "repo") 99 knot, ok := r.Context().Value("knot").(string) 100 if !ok { 101 log.Println("malformed middleware") 102 return "", "", identity.Identity{}, fmt.Errorf("malformed middleware") 103 } 104 id, ok := r.Context().Value("resolvedId").(identity.Identity) 105 if !ok { 106 log.Println("malformed middleware") 107 return "", "", identity.Identity{}, fmt.Errorf("malformed middleware") 108 } 109 110 return repoName, knot, id, nil 111}