aboutsummaryrefslogtreecommitdiff
path: root/service/transport.go
diff options
context:
space:
mode:
authorr <r@freesoftwareextremist.com>2023-10-01 13:04:07 +0000
committerr <r@freesoftwareextremist.com>2023-10-01 13:04:07 +0000
commit81bdc7c705d5d21f62927167d5b2c8e4932c9570 (patch)
tree8bdd670af920ac0541391366b5711462d9df0fab /service/transport.go
parent8e3999fc3d9761f9ce71c35a7154a77c251caa66 (diff)
downloadbloat-81bdc7c705d5d21f62927167d5b2c8e4932c9570.tar.gz
bloat-81bdc7c705d5d21f62927167d5b2c8e4932c9570.zip
Add profile edit page
Diffstat (limited to 'service/transport.go')
-rw-r--r--service/transport.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/service/transport.go b/service/transport.go
index 17dfca2..69d08e2 100644
--- a/service/transport.go
+++ b/service/transport.go
@@ -2,11 +2,14 @@ package service
import (
"encoding/json"
+ "fmt"
"log"
+ "mime/multipart"
"net/http"
"strconv"
"time"
+ "bloat/mastodon"
"bloat/model"
"github.com/gorilla/mux"
@@ -202,6 +205,57 @@ func NewHandler(s *service, verbose bool, staticDir string) http.Handler {
return s.FiltersPage(c)
}, SESSION, HTML)
+ profilePage := handle(func(c *client) error {
+ return s.ProfilePage(c)
+ }, SESSION, HTML)
+
+ profileUpdate := handle(func(c *client) error {
+ name := c.r.FormValue("name")
+ bio := c.r.FormValue("bio")
+ var avatar, banner *multipart.FileHeader
+ if f := c.r.MultipartForm.File["avatar"]; len(f) > 0 {
+ avatar = f[0]
+ }
+ if f := c.r.MultipartForm.File["banner"]; len(f) > 0 {
+ banner = f[0]
+ }
+ var fields []mastodon.Field
+ for i := 0; i < 16; i++ {
+ n := c.r.FormValue(fmt.Sprintf("field-name-%d", i))
+ v := c.r.FormValue(fmt.Sprintf("field-value-%d", i))
+ if len(n) == 0 {
+ continue
+ }
+ f := mastodon.Field{Name: n, Value: v}
+ fields = append(fields, f)
+ }
+ locked := c.r.FormValue("locked") == "true"
+ err := s.ProfileUpdate(c, name, bio, avatar, banner, fields, locked)
+ if err != nil {
+ return err
+ }
+ c.redirect("/")
+ return nil
+ }, CSRF, HTML)
+
+ profileDelAvatar := handle(func(c *client) error {
+ err := s.ProfileDelAvatar(c)
+ if err != nil {
+ return err
+ }
+ c.redirect(c.r.FormValue("referrer"))
+ return nil
+ }, CSRF, HTML)
+
+ profileDelBanner := handle(func(c *client) error {
+ err := s.ProfileDelBanner(c)
+ if err != nil {
+ return err
+ }
+ c.redirect(c.r.FormValue("referrer"))
+ return nil
+ }, CSRF, HTML)
+
signin := handle(func(c *client) error {
instance := c.r.FormValue("instance")
url, sess, err := s.NewSession(c, instance)
@@ -682,6 +736,10 @@ func NewHandler(s *service, verbose bool, staticDir string) http.Handler {
r.HandleFunc("/search", searchPage).Methods(http.MethodGet)
r.HandleFunc("/settings", settingsPage).Methods(http.MethodGet)
r.HandleFunc("/filters", filtersPage).Methods(http.MethodGet)
+ r.HandleFunc("/profile", profilePage).Methods(http.MethodGet)
+ r.HandleFunc("/profile", profileUpdate).Methods(http.MethodPost)
+ r.HandleFunc("/profile/delavatar", profileDelAvatar).Methods(http.MethodPost)
+ r.HandleFunc("/profile/delbanner", profileDelBanner).Methods(http.MethodPost)
r.HandleFunc("/signin", signin).Methods(http.MethodPost)
r.HandleFunc("/oauth_callback", oauthCallback).Methods(http.MethodGet)
r.HandleFunc("/post", post).Methods(http.MethodPost)