diff --git a/appview/pages/pages.go b/appview/pages/pages.go
index 31262d40..b92b1f8d 100644
--- a/appview/pages/pages.go
+++ b/appview/pages/pages.go
@@ -11,6 +11,7 @@ import (
"github.com/sotangled/tangled/appview/auth"
"github.com/sotangled/tangled/appview/db"
+ "github.com/sotangled/tangled/types"
)
//go:embed templates/*
@@ -125,3 +126,15 @@ type ProfilePageParams struct {
func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error {
return p.execute("user/profile", w, params)
}
+
+type RepoIndexParams struct {
+ LoggedInUser *auth.User
+ Name string
+ UserDid string
+ UserHandle string
+ types.RepoIndexResponse
+}
+
+func (p *Pages) RepoIndexPage(w io.Writer, params RepoIndexParams) error {
+ return p.execute("repo/index", w, params)
+}
diff --git a/appview/pages/templates/repo/repo.html b/appview/pages/templates/repo/index.html
similarity index 51%
rename from appview/pages/templates/repo/repo.html
rename to appview/pages/templates/repo/index.html
index dbb09edf..03d0e087 100644
--- a/appview/pages/templates/repo/repo.html
+++ b/appview/pages/templates/repo/index.html
@@ -1,16 +1,21 @@
-
-{{ template "layouts/head" . }}
+{{define "title"}} {{ or .UserHandle .UserDid }} / {{ .Name }} {{end}}
-{{ template "layouts/repo-header" . }}
+{{define "content"}}
+{{- $id := "" -}}
+{{- if .UserHandle -}}
+ {{- $id = printf "@%s" .UserHandle -}}
+{{- else -}}
+ {{- $id = .UserDid -}}
+{{- end -}}
-
- {{ template "layouts/nav" . }}
+
+{{ $id }} / {{ .Name }}
+
- {{ $repo := .name }}
- {{ range .commits }}
+ {{ range .Commits }}
@@ -19,18 +24,18 @@
{{ end }}
-{{- if .readme }}
+{{- if .Readme }}
- {{- .readme -}}
+ {{- .Readme -}}
{{- end -}}
clone
-git clone https://{{ .servername }}/{{ .name }}
+git clone https://tangled.sh/{{ $id }}/{{ .Name }}
-
-
+{{end}}
+
diff --git a/appview/pages/templates/user/profile.html b/appview/pages/templates/user/profile.html
index 51d4f919..5043dc11 100644
--- a/appview/pages/templates/user/profile.html
+++ b/appview/pages/templates/user/profile.html
@@ -8,7 +8,7 @@
{{range .Repos}}
-
-
name: {{.Name}}
+ name: {{.Name}}
knot: {{.Knot}}
{{else}}
diff --git a/appview/state/repo.go b/appview/state/repo.go
index 95e7f6f1..2ee07558 100644
--- a/appview/state/repo.go
+++ b/appview/state/repo.go
@@ -1,6 +1,7 @@
package state
import (
+ "encoding/json"
"fmt"
"io"
"log"
@@ -8,6 +9,8 @@ import (
"github.com/bluesky-social/indigo/atproto/identity"
"github.com/go-chi/chi/v5"
+ "github.com/sotangled/tangled/appview/pages"
+ "github.com/sotangled/tangled/types"
)
func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
@@ -33,9 +36,32 @@ func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
log.Println("failed to reach knotserver", err)
return
}
+ defer resp.Body.Close()
- txt, err := io.ReadAll(resp.Body)
- log.Println(resp.Status, string(txt))
+ // Read the response body
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ log.Fatalf("Error reading response body: %v", err)
+ return
+ }
+
+ var result types.RepoIndexResponse
+ err = json.Unmarshal(body, &result)
+ if err != nil {
+ log.Fatalf("Error unmarshalling response body: %v", err)
+ return
+ }
+
+ 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,
+ RepoIndexResponse: result,
+ })
return
}
diff --git a/knotserver/routes.go b/knotserver/routes.go
index e9a7ec69..98469f88 100644
--- a/knotserver/routes.go
+++ b/knotserver/routes.go
@@ -21,10 +21,11 @@ import (
"github.com/russross/blackfriday/v2"
"github.com/sotangled/tangled/knotserver/db"
"github.com/sotangled/tangled/knotserver/git"
+ "github.com/sotangled/tangled/types"
)
func (h *Handle) Index(w http.ResponseWriter, r *http.Request) {
- w.Write([]byte("This is a knot, part of the wider Tangle network: https://knots.sh"))
+ w.Write([]byte("This is a knot, part of the wider Tangle network: https://tangled.sh"))
}
func (h *Handle) RepoIndex(w http.ResponseWriter, r *http.Request) {
@@ -34,7 +35,10 @@ func (h *Handle) RepoIndex(w http.ResponseWriter, r *http.Request) {
gr, err := git.Open(path, "")
if err != nil {
if errors.Is(err, plumbing.ErrReferenceNotFound) {
- writeMsg(w, "repo empty")
+ resp := types.RepoIndexResponse{
+ IsEmpty: true,
+ }
+ writeJSON(w, resp)
return
} else {
l.Error("opening repo", "error", err.Error())
@@ -86,13 +90,15 @@ func (h *Handle) RepoIndex(w http.ResponseWriter, r *http.Request) {
if len(commits) >= 3 {
commits = commits[:3]
}
- data := make(map[string]any)
- data["ref"] = mainBranch
- data["readme"] = readmeContent
- data["commits"] = commits
- data["desc"] = getDescription(path)
+ resp := types.RepoIndexResponse{
+ IsEmpty: false,
+ Ref: mainBranch,
+ Commits: commits,
+ Description: getDescription(path),
+ Readme: readmeContent,
+ }
- writeJSON(w, data)
+ writeJSON(w, resp)
return
}
diff --git a/types/repo.go b/types/repo.go
new file mode 100644
index 00000000..97267524
--- /dev/null
+++ b/types/repo.go
@@ -0,0 +1,15 @@
+package types
+
+import (
+ "html/template"
+
+ "github.com/go-git/go-git/v5/plumbing/object"
+)
+
+type RepoIndexResponse struct {
+ IsEmpty bool `json:"is_empty"`
+ Ref string `json:"ref,omitempty"`
+ Readme template.HTML `json:"readme,omitempty"`
+ Commits []*object.Commit `json:"commits,omitempty"`
+ Description string `json:"description,omitempty"`
+}