--- /dev/null
+package model
+
+import "mastodon"
+
+type Client struct {
+ *mastodon.Client
+ Session Session
+}
)
type Session struct {
- ID string `json:"id"`
- InstanceDomain string `json:"instance_domain"`
- AccessToken string `json:"access_token"`
+ ID string `json:"id"`
+ InstanceDomain string `json:"instance_domain"`
+ AccessToken string `json:"access_token"`
+ Settings Settings `json:"settings"`
}
type SessionRepository interface {
--- /dev/null
+package model
+
+type Settings struct {
+}
return sessionID, nil
}
-func (s *authService) getClient(ctx context.Context) (c *mastodon.Client, err error) {
+func (s *authService) getClient(ctx context.Context) (c *model.Client, err error) {
sessionID, err := getSessionID(ctx)
if err != nil {
return nil, ErrInvalidSession
if err != nil {
return
}
- c = mastodon.NewClient(&mastodon.Config{
+ mc := mastodon.NewClient(&mastodon.Config{
Server: client.InstanceURL,
ClientID: client.ClientID,
ClientSecret: client.ClientSecret,
AccessToken: session.AccessToken,
})
+ c = &model.Client{Client: mc}
return c, nil
}
return s.Service.GetAuthUrl(ctx, instance)
}
-func (s *authService) GetUserToken(ctx context.Context, sessionID string, c *mastodon.Client,
+func (s *authService) GetUserToken(ctx context.Context, sessionID string, c *model.Client,
code string) (token string, err error) {
sessionID, err = getSessionID(ctx)
if err != nil {
}
func (s *authService) ServeTimelinePage(ctx context.Context, client io.Writer,
- c *mastodon.Client, maxID string, sinceID string, minID string) (err error) {
+ c *model.Client, maxID string, sinceID string, minID string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.ServeTimelinePage(ctx, client, c, maxID, sinceID, minID)
}
-func (s *authService) ServeThreadPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, reply bool) (err error) {
+func (s *authService) ServeThreadPage(ctx context.Context, client io.Writer, c *model.Client, id string, reply bool) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.ServeThreadPage(ctx, client, c, id, reply)
}
-func (s *authService) ServeNotificationPage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, minID string) (err error) {
+func (s *authService) ServeNotificationPage(ctx context.Context, client io.Writer, c *model.Client, maxID string, minID string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.ServeNotificationPage(ctx, client, c, maxID, minID)
}
-func (s *authService) ServeUserPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, maxID string, minID string) (err error) {
+func (s *authService) ServeUserPage(ctx context.Context, client io.Writer, c *model.Client, id string, maxID string, minID string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
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) {
+func (s *authService) ServeAboutPage(ctx context.Context, client io.Writer, c *model.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) {
+func (s *authService) Like(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.Like(ctx, client, c, id)
}
-func (s *authService) UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *authService) UnLike(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.UnLike(ctx, client, c, id)
}
-func (s *authService) Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *authService) Retweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.Retweet(ctx, client, c, id)
}
-func (s *authService) UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *authService) UnRetweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.UnRetweet(ctx, client, c, id)
}
-func (s *authService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
+func (s *authService) PostTweet(ctx context.Context, client io.Writer, c *model.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.PostTweet(ctx, client, c, content, replyToID, files)
}
-func (s *authService) Follow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *authService) Follow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
return s.Service.Follow(ctx, client, c, id)
}
-func (s *authService) UnFollow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *authService) UnFollow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
c, err = s.getClient(ctx)
if err != nil {
return
"context"
"io"
"log"
- "mastodon"
"mime/multipart"
"time"
+ "web/model"
)
type loggingService struct {
return s.Service.GetAuthUrl(ctx, instance)
}
-func (s *loggingService) GetUserToken(ctx context.Context, sessionID string, c *mastodon.Client,
+func (s *loggingService) GetUserToken(ctx context.Context, sessionID string, c *model.Client,
code string) (token string, err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, session_id=%v, code=%v, took=%v, err=%v\n",
}
func (s *loggingService) ServeTimelinePage(ctx context.Context, client io.Writer,
- c *mastodon.Client, maxID string, sinceID string, minID string) (err error) {
+ c *model.Client, maxID string, sinceID string, minID string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, max_id=%v, since_id=%v, min_id=%v, took=%v, err=%v\n",
"ServeTimelinePage", maxID, sinceID, minID, time.Since(begin), err)
return s.Service.ServeTimelinePage(ctx, client, c, maxID, sinceID, minID)
}
-func (s *loggingService) ServeThreadPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, reply bool) (err error) {
+func (s *loggingService) ServeThreadPage(ctx context.Context, client io.Writer, c *model.Client, id string, reply bool) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, reply=%v, took=%v, err=%v\n",
"ServeThreadPage", id, reply, time.Since(begin), err)
return s.Service.ServeThreadPage(ctx, client, c, id, reply)
}
-func (s *loggingService) ServeNotificationPage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, minID string) (err error) {
+func (s *loggingService) ServeNotificationPage(ctx context.Context, client io.Writer, c *model.Client, maxID string, minID string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, max_id=%v, min_id=%v, took=%v, err=%v\n",
"ServeNotificationPage", maxID, minID, time.Since(begin), err)
return s.Service.ServeNotificationPage(ctx, client, c, maxID, minID)
}
-func (s *loggingService) ServeUserPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, maxID string, minID string) (err error) {
+func (s *loggingService) ServeUserPage(ctx context.Context, client io.Writer, c *model.Client, id string, maxID string, minID string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, max_id=%v, min_id=%v, took=%v, err=%v\n",
"ServeUserPage", id, maxID, minID, time.Since(begin), err)
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) {
+func (s *loggingService) ServeAboutPage(ctx context.Context, client io.Writer, c *model.Client) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, took=%v, err=%v\n",
"ServeAboutPage", time.Since(begin), err)
return s.Service.ServeAboutPage(ctx, client, c)
}
-func (s *loggingService) Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) Like(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"Like", id, time.Since(begin), err)
return s.Service.Like(ctx, client, c, id)
}
-func (s *loggingService) UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) UnLike(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"UnLike", id, time.Since(begin), err)
return s.Service.UnLike(ctx, client, c, id)
}
-func (s *loggingService) Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) Retweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"Retweet", id, time.Since(begin), err)
return s.Service.Retweet(ctx, client, c, id)
}
-func (s *loggingService) UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) UnRetweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"UnRetweet", id, time.Since(begin), err)
return s.Service.UnRetweet(ctx, client, c, id)
}
-func (s *loggingService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
+func (s *loggingService) PostTweet(ctx context.Context, client io.Writer, c *model.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, content=%v, reply_to_id=%v, took=%v, err=%v\n",
"PostTweet", content, replyToID, time.Since(begin), err)
return s.Service.PostTweet(ctx, client, c, content, replyToID, files)
}
-func (s *loggingService) Follow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) Follow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"Follow", id, time.Since(begin), err)
return s.Service.Follow(ctx, client, c, id)
}
-func (s *loggingService) UnFollow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (s *loggingService) UnFollow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"UnFollow", id, time.Since(begin), err)
type Service interface {
ServeHomePage(ctx context.Context, client io.Writer) (err error)
GetAuthUrl(ctx context.Context, instance string) (url string, sessionID string, err error)
- GetUserToken(ctx context.Context, sessionID string, c *mastodon.Client, token string) (accessToken string, err error)
+ GetUserToken(ctx context.Context, sessionID string, c *model.Client, token string) (accessToken string, err error)
ServeErrorPage(ctx context.Context, client io.Writer, err error)
ServeSigninPage(ctx context.Context, client io.Writer) (err error)
- ServeTimelinePage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, sinceID string, minID string) (err error)
- 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)
- UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
- PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error)
- Follow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
- UnFollow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error)
+ ServeTimelinePage(ctx context.Context, client io.Writer, c *model.Client, maxID string, sinceID string, minID string) (err error)
+ ServeThreadPage(ctx context.Context, client io.Writer, c *model.Client, id string, reply bool) (err error)
+ ServeNotificationPage(ctx context.Context, client io.Writer, c *model.Client, maxID string, minID string) (err error)
+ ServeUserPage(ctx context.Context, client io.Writer, c *model.Client, id string, maxID string, minID string) (err error)
+ ServeAboutPage(ctx context.Context, client io.Writer, c *model.Client) (err error)
+ Like(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
+ UnLike(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
+ Retweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
+ UnRetweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
+ PostTweet(ctx context.Context, client io.Writer, c *model.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error)
+ Follow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
+ UnFollow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error)
}
type service struct {
return
}
-func (svc *service) GetUserToken(ctx context.Context, sessionID string, c *mastodon.Client,
+func (svc *service) GetUserToken(ctx context.Context, sessionID string, c *model.Client,
code string) (token string, err error) {
if len(code) < 1 {
err = ErrInvalidArgument
}
func (svc *service) ServeTimelinePage(ctx context.Context, client io.Writer,
- c *mastodon.Client, maxID string, sinceID string, minID string) (err error) {
+ c *model.Client, maxID string, sinceID string, minID string) (err error) {
var hasNext, hasPrev bool
var nextLink, prevLink string
return
}
-func (svc *service) ServeThreadPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, reply bool) (err error) {
+func (svc *service) ServeThreadPage(ctx context.Context, client io.Writer, c *model.Client, id string, reply bool) (err error) {
status, err := c.GetStatus(ctx, id)
if err != nil {
return
return
}
-func (svc *service) ServeNotificationPage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, minID string) (err error) {
+func (svc *service) ServeNotificationPage(ctx context.Context, client io.Writer, c *model.Client, maxID string, minID string) (err error) {
var hasNext bool
var nextLink string
return
}
-func (svc *service) ServeUserPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, maxID string, minID string) (err error) {
+func (svc *service) ServeUserPage(ctx context.Context, client io.Writer, c *model.Client, id string, maxID string, minID string) (err error) {
user, err := c.GetAccount(ctx, id)
if err != nil {
return
return
}
-func (svc *service) ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error) {
+func (svc *service) ServeAboutPage(ctx context.Context, client io.Writer, c *model.Client) (err error) {
navbarData, err := svc.getNavbarTemplateData(ctx, client, c)
if err != nil {
return
return
}
-func (svc *service) getNavbarTemplateData(ctx context.Context, client io.Writer, c *mastodon.Client) (data *renderer.NavbarTemplateData, err error) {
+func (svc *service) getNavbarTemplateData(ctx context.Context, client io.Writer, c *model.Client) (data *renderer.NavbarTemplateData, err error) {
notifications, err := c.GetNotifications(ctx, nil)
if err != nil {
return
return
}
-func (svc *service) Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) Like(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.Favourite(ctx, id)
return
}
-func (svc *service) UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) UnLike(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.Unfavourite(ctx, id)
return
}
-func (svc *service) Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) Retweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.Reblog(ctx, id)
return
}
-func (svc *service) UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) UnRetweet(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.Unreblog(ctx, id)
return
}
-func (svc *service) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
+func (svc *service) PostTweet(ctx context.Context, client io.Writer, c *model.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
var mediaIds []string
for _, f := range files {
a, err := c.UploadMediaFromMultipartFileHeader(ctx, f)
return s.ID, nil
}
-func (svc *service) Follow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) Follow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.AccountFollow(ctx, id)
return
}
-func (svc *service) UnFollow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
+func (svc *service) UnFollow(ctx context.Context, client io.Writer, c *model.Client, id string) (err error) {
_, err = c.AccountUnfollow(ctx, id)
return
}
if key == nil {
return
}
+
keyStr, ok := key.(string)
if !ok {
return