Add about page
authorr <r@freesoftwareextremist.com>
Sat, 21 Dec 2019 05:48:48 +0000 (05:48 +0000)
committerr <r@freesoftwareextremist.com>
Sat, 21 Dec 2019 05:48:48 +0000 (05:48 +0000)
renderer/model.go
renderer/renderer.go
service/auth.go
service/logging.go
service/service.go
service/transport.go
templates/about.tmpl [new file with mode: 0644]
templates/navigation.tmpl

index 7e52850fe729fcbd0be1ad46b6a4776c106e283c..053c2fd30b6aeaddd1b09970ac6824d5e83f5a00 100644 (file)
@@ -86,3 +86,13 @@ func NewUserPageTemplateData(user *mastodon.Account, statuses []*mastodon.Status
                NavbarData: navbarData,
        }
 }
+
+type AboutPageTemplateData struct {
+       NavbarData *NavbarTemplateData
+}
+
+func NewAboutPageTemplateData(navbarData *NavbarTemplateData) *AboutPageTemplateData {
+       return &AboutPageTemplateData{
+               NavbarData: navbarData,
+       }
+}
index 9bbe06e0a1e0b12c76d9ef2a8a0fd350afeb740f..c9cae2840f4245570fef68b58520bbc99563df60 100644 (file)
@@ -19,6 +19,7 @@ type Renderer interface {
        RenderThreadPage(ctx context.Context, writer io.Writer, data *ThreadPageTemplateData) (err error)
        RenderNotificationPage(ctx context.Context, writer io.Writer, data *NotificationPageTemplateData) (err error)
        RenderUserPage(ctx context.Context, writer io.Writer, data *UserPageTemplateData) (err error)
+       RenderAboutPage(ctx context.Context, writer io.Writer, data *AboutPageTemplateData) (err error)
 }
 
 type renderer struct {
@@ -71,6 +72,9 @@ func (r *renderer) RenderUserPage(ctx context.Context, writer io.Writer, data *U
        return r.template.ExecuteTemplate(writer, "user.tmpl", data)
 }
 
+func (r *renderer) RenderAboutPage(ctx context.Context, writer io.Writer, data *AboutPageTemplateData) (err error) {
+       return r.template.ExecuteTemplate(writer, "about.tmpl", data)
+}
 
 func EmojiFilter(content string, emojis []mastodon.Emoji) string {
        var replacements []string
index 2b6fdd6ec955d478f5d71d098acca1b3c320f3c0..3cdf357a98337d66fd8502e676c039e7c1aafda8 100644 (file)
@@ -127,6 +127,14 @@ func (s *authService) ServeUserPage(ctx context.Context, client io.Writer, c *ma
        return s.Service.ServeUserPage(ctx, client, c, id, maxID, minID)
 }
 
+func (s *authService) ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error) {
+       c, err = s.getClient(ctx)
+       if err != nil {
+               return
+       }
+       return s.Service.ServeAboutPage(ctx, client, c)
+}
+
 func (s *authService) Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
        c, err = s.getClient(ctx)
        if err != nil {
index 9b398af309317e5a6d6bdd361684895756b34335..e0d47ed0007c0351f84f1f2e2a10fd9e279ec30c 100644 (file)
@@ -93,6 +93,14 @@ func (s *loggingService) ServeUserPage(ctx context.Context, client io.Writer, c
        return s.Service.ServeUserPage(ctx, client, c, id, maxID, minID)
 }
 
+func (s *loggingService) ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error) {
+       defer func(begin time.Time) {
+               s.logger.Printf("method=%v, took=%v, err=%v\n",
+                       "ServeAboutPage", time.Since(begin), err)
+       }(time.Now())
+       return s.Service.ServeAboutPage(ctx, client, c)
+}
+
 func (s *loggingService) Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
        defer func(begin time.Time) {
                s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
index 63f74d360efd814d3aa2b952be0abb3bf752cac9..4d74449bc59fc1a3aac59dd57725e70018b19880 100644 (file)
@@ -33,6 +33,7 @@ type Service interface {
        ServeThreadPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, reply bool) (err error)
        ServeNotificationPage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, minID string) (err error)
        ServeUserPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, maxID string, minID string) (err error)
+       ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error)
        Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
        UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
        Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
@@ -411,6 +412,21 @@ func (svc *service) ServeUserPage(ctx context.Context, client io.Writer, c *mast
        return
 }
 
+func (svc *service) ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error) {
+       navbarData, err := svc.getNavbarTemplateData(ctx, client, c)
+       if err != nil {
+               return
+       }
+
+       data := renderer.NewAboutPageTemplateData(navbarData)
+       err = svc.renderer.RenderAboutPage(ctx, client, data)
+       if err != nil {
+               return
+       }
+
+       return
+}
+
 func (svc *service) getNavbarTemplateData(ctx context.Context, client io.Writer, c *mastodon.Client) (data *renderer.NavbarTemplateData, err error) {
        notifications, err := c.GetNotifications(ctx, nil)
        if err != nil {
index 6759fcc0fa2bfda266e8bce954e658ffc8f77112..2b7566291a8b03d3aa9b31d99d59dfedb38f9a9e 100644 (file)
@@ -228,6 +228,16 @@ func NewHandler(s Service, staticDir string) http.Handler {
                w.WriteHeader(http.StatusFound)
        }).Methods(http.MethodPost)
 
+       r.HandleFunc("/about", func(w http.ResponseWriter, req *http.Request) {
+               ctx := getContextWithSession(context.Background(), req)
+
+               err := s.ServeAboutPage(ctx, w, nil)
+               if err != nil {
+                       s.ServeErrorPage(ctx, w, err)
+                       return
+               }
+       }).Methods(http.MethodGet)
+
        r.HandleFunc("/signout", func(w http.ResponseWriter, req *http.Request) {
                // TODO remove session from database
                w.Header().Add("Set-Cookie", fmt.Sprintf("session_id=;max-age=0"))
diff --git a/templates/about.tmpl b/templates/about.tmpl
new file mode 100644 (file)
index 0000000..0b4bea0
--- /dev/null
@@ -0,0 +1,18 @@
+{{template "header.tmpl"}}
+{{template "navigation.tmpl" .NavbarData}}
+<div class="page-title"> About </div>
+
+<div>
+       <p>
+               A web client for <a href="https://pleroma.social" target="_blank">Mastodon Network</a>.
+       </p>
+       <p>
+               The source code is released under 
+               <a href="https://creativecommons.org/share-your-work/public-domain/cc0" target="_blank">CC0</a> 
+               and is available on 
+               <a href="https://git.freesoftwareextremist.com/web" target="_blank">git.freesoftwareextremist.com/web</a>.
+       </P>
+</div>
+
+{{template "footer.tmpl"}}
+
index d86971c920419d2709be1fcb88e53172983fe2b3..53386772afbbfc5a67a0ef8945f7cb8c7e3b50f0 100644 (file)
@@ -1,5 +1,6 @@
 <div class="navigation">
        <a href="/timeline">home</a>
        <a href="/notifications">notifications{{if gt .NotificationCount 0}} ({{.NotificationCount}}){{end}}</a>
+       <a href="/about">about</a>
        <a href="/signout">sign out</a>
 </div>