diff options
-rw-r--r-- | service/service.go | 20 | ||||
-rw-r--r-- | service/transport.go | 22 | ||||
-rw-r--r-- | templates/notification.tmpl | 29 | ||||
-rw-r--r-- | templates/requestlist.tmpl | 34 | ||||
-rw-r--r-- | templates/user.tmpl | 13 |
5 files changed, 114 insertions, 4 deletions
diff --git a/service/service.go b/service/service.go index db44e10..088bcf4 100644 --- a/service/service.go +++ b/service/service.go @@ -486,6 +486,18 @@ func (s *service) UserPage(c *client, id string, pageType string, nextLink = fmt.Sprintf("/user/%s/likes?max_id=%s", id, pg.MaxID) } + case "requests": + if !isCurrent { + return errInvalidArgument + } + users, err = c.GetFollowRequests(ctx, &pg) + if err != nil { + return + } + if len(users) == 20 && len(pg.MaxID) > 0 { + nextLink = fmt.Sprintf("/user/%s/requests?max_id=%s", + id, pg.MaxID) + } default: return errInvalidArgument } @@ -817,6 +829,14 @@ func (s *service) UnFollow(c *client, id string) (err error) { return } +func (s *service) Accept(c *client, id string) (err error) { + return c.FollowRequestAuthorize(ctx, id) +} + +func (s *service) Reject(c *client, id string) (err error) { + return c.FollowRequestReject(ctx, id) +} + func (s *service) Mute(c *client, id string) (err error) { _, err = c.AccountMute(ctx, id) return diff --git a/service/transport.go b/service/transport.go index 80ad7f1..7ba52a4 100644 --- a/service/transport.go +++ b/service/transport.go @@ -403,6 +403,26 @@ func NewHandler(s *service, logger *log.Logger, staticDir string) http.Handler { return nil }, CSRF, HTML) + accept := handle(func(c *client) error { + id, _ := mux.Vars(c.Req)["id"] + err := s.Accept(c, id) + if err != nil { + return err + } + redirect(c, c.Req.Header.Get("Referer")) + return nil + }, CSRF, HTML) + + reject := handle(func(c *client) error { + id, _ := mux.Vars(c.Req)["id"] + err := s.Reject(c, id) + if err != nil { + return err + } + redirect(c, c.Req.Header.Get("Referer")) + return nil + }, CSRF, HTML) + mute := handle(func(c *client) error { id, _ := mux.Vars(c.Req)["id"] err := s.Mute(c, id) @@ -634,6 +654,8 @@ func NewHandler(s *service, logger *log.Logger, staticDir string) http.Handler { r.HandleFunc("/vote/{id}", vote).Methods(http.MethodPost) r.HandleFunc("/follow/{id}", follow).Methods(http.MethodPost) r.HandleFunc("/unfollow/{id}", unfollow).Methods(http.MethodPost) + r.HandleFunc("/accept/{id}", accept).Methods(http.MethodPost) + r.HandleFunc("/reject/{id}", reject).Methods(http.MethodPost) r.HandleFunc("/mute/{id}", mute).Methods(http.MethodPost) r.HandleFunc("/unmute/{id}", unMute).Methods(http.MethodPost) r.HandleFunc("/block/{id}", block).Methods(http.MethodPost) diff --git a/templates/notification.tmpl b/templates/notification.tmpl index 3977aa7..5563425 100644 --- a/templates/notification.tmpl +++ b/templates/notification.tmpl @@ -38,6 +38,35 @@ </div> </div> + {{else if eq .Type "follow_request"}} + <div class="notification-follow-container"> + <div class="status-profile-img-container"> + <a class="img-link" href="/user/{{.Account.ID}}"> + <img class="status-profile-img" src="{{.Account.AvatarStatic}}" title="@{{.Account.Acct}}" alt="profile-avatar" height="48" /> + </a> + </div> + <div class="notification-follow"> + <div class="notification-info-text"> + <bdi class="status-dname"> {{EmojiFilter .Account.DisplayName .Account.Emojis}} </bdi> + <span class="notification-text"> wants to follow you - + <time datetime="{{FormatTimeRFC3339 .CreatedAt}}" title="{{FormatTimeRFC822 .CreatedAt}}">{{TimeSince .CreatedAt}}</time> + </span> + </div> + <div> + <a href="/user/{{.Account.ID}}"> <span class="status-uname"> @{{.Account.Acct}} </span> </a> + </div> + <form class="d-inline" action="/accept/{{.Account.ID}}" method="post" target="_self"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="accept" class="btn-link"> + </form> + - + <form class="d-inline" action="/reject/{{.Account.ID}}" method="post" target="_self"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="reject" class="btn-link"> + </form> + </div> + </div> + {{else if eq .Type "mention"}} {{template "status" (WithContext .Status $.Ctx)}} diff --git a/templates/requestlist.tmpl b/templates/requestlist.tmpl new file mode 100644 index 0000000..232b56d --- /dev/null +++ b/templates/requestlist.tmpl @@ -0,0 +1,34 @@ +{{with .Data}} +<div> + {{range .}} + <div class="user-list-item"> + <div class="user-list-profile-img"> + <a class="img-link" href="/user/{{.ID}}"> + <img class="status-profile-img" src="{{.AvatarStatic}}" title="@{{.Acct}}" alt="avatar" height="48" /> + </a> + </div> + <div class="user-list-name"> + <div> + <div class="status-dname"> {{EmojiFilter .DisplayName .Emojis}} </div> + <a class="img-link" href="/user/{{.ID}}"> + <div class="status-uname"> @{{.Acct}} </div> + </a> + </div> + <form class="d-inline" action="/accept/{{.ID}}" method="post" target="_self"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="accept" class="btn-link"> + </form> + - + <form class="d-inline" action="/reject/{{.ID}}" method="post" target="_self"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="reject" class="btn-link"> + </form> + </div> + </div> + {{else}} + <div class="no-data-found">No data found</div> + {{end}} +</div> +{{else}} +<div class="no-data-found">No data found</div> +{{end}} diff --git a/templates/user.tmpl b/templates/user.tmpl index b3461c6..5ef411a 100644 --- a/templates/user.tmpl +++ b/templates/user.tmpl @@ -99,10 +99,11 @@ </div> {{if .IsCurrent}} <div> - <a href="/user/{{.User.ID}}/bookmarks"> bookmarks </a> - - <a href="/user/{{.User.ID}}/likes"> likes </a> - - <a href="/user/{{.User.ID}}/mutes"> mutes </a> - - <a href="/user/{{.User.ID}}/blocks"> blocks </a> + <a href="/user/{{.User.ID}}/bookmarks"> bookmarks </a> + - <a href="/user/{{.User.ID}}/likes"> likes </a> + - <a href="/user/{{.User.ID}}/mutes"> mutes </a> + - <a href="/user/{{.User.ID}}/blocks"> blocks </a> + {{if .User.Locked}}- <a href="/user/{{.User.ID}}/requests"> requests </a>{{end}} </div> {{end}} <div> @@ -162,6 +163,10 @@ {{else if eq .Type "blocks"}} <div class="page-title"> Blocks </div> {{template "userlist.tmpl" (WithContext .Users $.Ctx)}} + +{{else if eq .Type "requests"}} +<div class="page-title"> Follow requests </div> +{{template "requestlist.tmpl" (WithContext .Users $.Ctx)}} {{end}} <div class="pagination"> |