- {{ range .commits }}
+ {{ range .Commits }}
@@ -19,5 +19,4 @@
{{ end }}
-
-
+{{end}}
diff --git a/appview/state/repo.go b/appview/state/repo.go
index 2ee07558..c48b9990 100644
--- a/appview/state/repo.go
+++ b/appview/state/repo.go
@@ -14,20 +14,9 @@ import (
)
func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
- ctx := r.Context()
- repoName := chi.URLParam(r, "repo")
-
- knot, ok := ctx.Value("knot").(string)
- if !ok {
- log.Println("malformed middleware")
- w.WriteHeader(http.StatusInternalServerError)
- return
- }
-
- id, ok := ctx.Value("resolvedId").(identity.Identity)
- if !ok {
- log.Println("malformed middleware")
- w.WriteHeader(http.StatusInternalServerError)
+ repoName, knot, id, err := repoKnotAndId(r)
+ if err != nil {
+ log.Println("failed to get repo and knot", err)
return
}
@@ -38,7 +27,6 @@ func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
}
defer resp.Body.Close()
- // Read the response body
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalf("Error reading response body: %v", err)
@@ -54,14 +42,70 @@ func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
log.Println(resp.Status, result)
- user := s.auth.GetUser(r)
s.pages.RepoIndexPage(w, pages.RepoIndexParams{
- LoggedInUser: user,
- UserDid: id.DID.String(),
- UserHandle: id.Handle.String(),
- Name: repoName,
+ LoggedInUser: s.auth.GetUser(r),
+ RepoInfo: pages.RepoInfo{
+ OwnerDid: id.DID.String(),
+ OwnerHandle: id.Handle.String(),
+ Name: repoName,
+ },
RepoIndexResponse: result,
})
return
}
+
+func (s *State) RepoLog(w http.ResponseWriter, r *http.Request) {
+ repoName, knot, id, err := repoKnotAndId(r)
+ if err != nil {
+ log.Println("failed to get repo and knot", err)
+ return
+ }
+
+ ref := chi.URLParam(r, "ref")
+ resp, err := http.Get(fmt.Sprintf("http://%s/%s/%s/log/%s", knot, id.DID.String(), repoName, ref))
+ if err != nil {
+ log.Println("failed to reach knotserver", err)
+ return
+ }
+
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ log.Fatalf("Error reading response body: %v", err)
+ return
+ }
+
+ var result types.RepoLogResponse
+ err = json.Unmarshal(body, &result)
+ if err != nil {
+ log.Println("failed to parse json response", err)
+ return
+ }
+
+ s.pages.RepoLog(w, pages.RepoLogParams{
+ LoggedInUser: s.auth.GetUser(r),
+ RepoInfo: pages.RepoInfo{
+ OwnerDid: id.DID.String(),
+ OwnerHandle: id.Handle.String(),
+ Name: repoName,
+ },
+ RepoLogResponse: result,
+ })
+ return
+}
+
+func repoKnotAndId(r *http.Request) (string, string, identity.Identity, error) {
+ repoName := chi.URLParam(r, "repo")
+ knot, ok := r.Context().Value("knot").(string)
+ if !ok {
+ log.Println("malformed middleware")
+ return "", "", identity.Identity{}, fmt.Errorf("malformed middleware")
+ }
+ id, ok := r.Context().Value("resolvedId").(identity.Identity)
+ if !ok {
+ log.Println("malformed middleware")
+ return "", "", identity.Identity{}, fmt.Errorf("malformed middleware")
+ }
+
+ return repoName, knot, id, nil
+}
diff --git a/appview/state/signer.go b/appview/state/signer.go
index ed106c41..b4036f7b 100644
--- a/appview/state/signer.go
+++ b/appview/state/signer.go
@@ -113,17 +113,3 @@ func (s *SignedClient) AddMember(did string) (*http.Response, error) {
return s.client.Do(req)
}
-
-func (s *SignedClient) RepoIndex(did, repo string) (*http.Response, error) {
- const (
- Method = "GET"
- )
- endpoint := fmt.Sprint("/%s/%s", did, repo)
-
- req, err := s.newRequest(Method, endpoint, nil)
- if err != nil {
- return nil, err
- }
-
- return s.client.Do(req)
-}
diff --git a/appview/state/state.go b/appview/state/state.go
index 59f622e7..0ec9eeec 100644
--- a/appview/state/state.go
+++ b/appview/state/state.go
@@ -601,9 +601,12 @@ func (s *State) UserRouter() http.Handler {
r.Get("/", s.ProfilePage)
r.With(ResolveRepoKnot(s)).Route("/{repo}", func(r chi.Router) {
r.Get("/", s.RepoIndex)
+ r.Get("/log/{ref}", s.RepoLog)
+
// These routes get proxied to the knot
r.Get("/info/refs", s.InfoRefs)
r.Post("/git-upload-pack", s.UploadPack)
+
})
})
diff --git a/knotserver/routes.go b/knotserver/routes.go
index 98469f88..db039538 100644
--- a/knotserver/routes.go
+++ b/knotserver/routes.go
@@ -266,16 +266,17 @@ func (h *Handle) Log(w http.ResponseWriter, r *http.Request) {
commits = commits[start:end]
}
- data := make(map[string]interface{})
- data["commits"] = commits
- data["ref"] = ref
- data["desc"] = getDescription(path)
- data["log"] = true
- data["total"] = total
- data["page"] = page
- data["per_page"] = pageSize
+ resp := types.RepoLogResponse{
+ Commits: commits,
+ Ref: ref,
+ Description: getDescription(path),
+ Log: true,
+ Total: total,
+ Page: page,
+ PerPage: pageSize,
+ }
- writeJSON(w, data)
+ writeJSON(w, resp)
return
}
diff --git a/types/repo.go b/types/repo.go
index 97267524..78d6293f 100644
--- a/types/repo.go
+++ b/types/repo.go
@@ -13,3 +13,13 @@ type RepoIndexResponse struct {
Commits []*object.Commit `json:"commits,omitempty"`
Description string `json:"description,omitempty"`
}
+
+type RepoLogResponse struct {
+ Commits []*object.Commit `json:"commits,omitempty"`
+ Ref string `json:"ref,omitempty"`
+ Description string `json:"description,omitempty"`
+ Log bool `json:"log,omitempty"`
+ Total int `json:"total,omitempty"`
+ Page int `json:"page,omitempty"`
+ PerPage int `json:"per_page,omitempty"`
+}