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 ctx := r.Context()
18 repoName := chi.URLParam(r, "repo")
19
20 knot, ok := ctx.Value("knot").(string)
21 if !ok {
22 log.Println("malformed middleware")
23 w.WriteHeader(http.StatusInternalServerError)
24 return
25 }
26
27 id, ok := ctx.Value("resolvedId").(identity.Identity)
28 if !ok {
29 log.Println("malformed middleware")
30 w.WriteHeader(http.StatusInternalServerError)
31 return
32 }
33
34 resp, err := http.Get(fmt.Sprintf("http://%s/%s/%s", knot, id.DID.String(), repoName))
35 if err != nil {
36 log.Println("failed to reach knotserver", err)
37 return
38 }
39 defer resp.Body.Close()
40
41 // Read the response body
42 body, err := io.ReadAll(resp.Body)
43 if err != nil {
44 log.Fatalf("Error reading response body: %v", err)
45 return
46 }
47
48 var result types.RepoIndexResponse
49 err = json.Unmarshal(body, &result)
50 if err != nil {
51 log.Fatalf("Error unmarshalling response body: %v", err)
52 return
53 }
54
55 log.Println(resp.Status, result)
56
57 user := s.auth.GetUser(r)
58 s.pages.RepoIndexPage(w, pages.RepoIndexParams{
59 LoggedInUser: user,
60 UserDid: id.DID.String(),
61 UserHandle: id.Handle.String(),
62 Name: repoName,
63 RepoIndexResponse: result,
64 })
65
66 return
67}