Merge pull request #9 from tailscale-dev/Xe/recent-paste-homepage

cmd/web: show up to top 5 recent pastes on homescreen
This commit is contained in:
Xe Iaso 2023-02-23 13:32:38 -05:00 committed by GitHub
commit 336965494b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 11 deletions

View file

@ -82,12 +82,47 @@ func (s *Server) TailnetIndex(w http.ResponseWriter, r *http.Request) {
return return
} }
q := `
SELECT p.id
, p.filename
, p.created_at
, u.display_name
FROM pastes p
INNER JOIN users u
ON p.user_id = u.id
ORDER BY p.rowid DESC
LIMIT 5
`
jpis := make([]JoinedPasteInfo, 0, 5)
rows, err := s.db.QueryContext(r.Context(), q)
if err != nil {
s.ShowError(w, r, err, http.StatusInternalServerError)
return
}
defer rows.Close()
for rows.Next() {
jpi := JoinedPasteInfo{}
err := rows.Scan(&jpi.ID, &jpi.Filename, &jpi.CreatedAt, &jpi.PasterDisplayName)
if err != nil {
s.ShowError(w, r, err, http.StatusInternalServerError)
return
}
jpis = append(jpis, jpi)
}
err = s.tmpls.ExecuteTemplate(w, "create.tmpl", struct { err = s.tmpls.ExecuteTemplate(w, "create.tmpl", struct {
UserInfo *tailcfg.UserProfile UserInfo *tailcfg.UserProfile
Title string Title string
RecentPastes []JoinedPasteInfo
}{ }{
UserInfo: ui.UserProfile, UserInfo: ui.UserProfile,
Title: "Create new paste", Title: "Create new paste",
RecentPastes: jpis,
}) })
if err != nil { if err != nil {
log.Printf("%s: %v", r.RemoteAddr, err) log.Printf("%s: %v", r.RemoteAddr, err)
@ -214,6 +249,13 @@ VALUES
} }
type JoinedPasteInfo struct {
ID string `json:"id"`
Filename string `json:"fname"`
CreatedAt string `json:"created_at"`
PasterDisplayName string `json:"created_by"`
}
func (s *Server) TailnetPasteIndex(w http.ResponseWriter, r *http.Request) { func (s *Server) TailnetPasteIndex(w http.ResponseWriter, r *http.Request) {
userInfo, err := upsertUserInfo(r.Context(), s.db, s.lc, r.RemoteAddr) userInfo, err := upsertUserInfo(r.Context(), s.db, s.lc, r.RemoteAddr)
if err != nil { if err != nil {
@ -223,13 +265,6 @@ func (s *Server) TailnetPasteIndex(w http.ResponseWriter, r *http.Request) {
_ = userInfo _ = userInfo
type JoinedPasteInfo struct {
ID string `json:"id"`
Filename string `json:"fname"`
CreatedAt string `json:"created_at"`
PasterDisplayName string `json:"created_by"`
}
q := ` q := `
SELECT p.id SELECT p.id
, p.filename , p.filename

View file

@ -9,5 +9,18 @@
<br /> <br />
<br /> <br />
{{if len .RecentPastes | eq 0}}
<p>There are no pastes in the list. Create one to share with your team!</p>
{{else}}
<h2>Recent pastes</h2>
<ul>
{{range .RecentPastes}}
<li><a href="/paste/{{.ID}}">{{.Filename}}</a> - {{.CreatedAt}} - {{.PasterDisplayName}}</li>
{{end}}
</ul>
<a href="/paste/list">See all pastes</a> <a href="/paste/list">See all pastes</a>
{{end}}
{{template "footer" .}} {{template "footer" .}}