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}