13 ErrInvalidSession = errors.New("invalid session")
16 type authService struct {
17 sessionRepo model.SessionRepository
18 appRepo model.AppRepository
22 func NewAuthService(sessionRepo model.SessionRepository, appRepo model.AppRepository, s Service) Service {
23 return &authService{sessionRepo, appRepo, s}
26 func getSessionID(ctx context.Context) (sessionID string, err error) {
27 sessionID, ok := ctx.Value("session_id").(string)
28 if !ok || len(sessionID) < 1 {
29 return "", ErrInvalidSession
34 func (s *authService) getClient(ctx context.Context) (c *mastodon.Client, err error) {
35 sessionID, err := getSessionID(ctx)
37 return nil, ErrInvalidSession
39 session, err := s.sessionRepo.Get(sessionID)
41 return nil, ErrInvalidSession
43 client, err := s.appRepo.Get(session.InstanceDomain)
47 c = mastodon.NewClient(&mastodon.Config{
48 Server: client.InstanceURL,
49 ClientID: client.ClientID,
50 ClientSecret: client.ClientSecret,
51 AccessToken: session.AccessToken,
56 func (s *authService) GetAuthUrl(ctx context.Context, instance string) (
57 redirectUrl string, sessionID string, err error) {
58 return s.Service.GetAuthUrl(ctx, instance)
61 func (s *authService) GetUserToken(ctx context.Context, sessionID string, c *mastodon.Client,
62 code string) (token string, err error) {
63 sessionID, err = getSessionID(ctx)
67 c, err = s.getClient(ctx)
72 token, err = s.Service.GetUserToken(ctx, sessionID, c, code)
77 err = s.sessionRepo.Update(sessionID, token)
85 func (s *authService) ServeHomePage(ctx context.Context, client io.Writer) (err error) {
86 return s.Service.ServeHomePage(ctx, client)
89 func (s *authService) ServeErrorPage(ctx context.Context, client io.Writer, err error) {
90 s.Service.ServeErrorPage(ctx, client, err)
93 func (s *authService) ServeSigninPage(ctx context.Context, client io.Writer) (err error) {
94 return s.Service.ServeSigninPage(ctx, client)
97 func (s *authService) ServeTimelinePage(ctx context.Context, client io.Writer,
98 c *mastodon.Client, maxID string, sinceID string, minID string) (err error) {
99 c, err = s.getClient(ctx)
103 return s.Service.ServeTimelinePage(ctx, client, c, maxID, sinceID, minID)
106 func (s *authService) ServeThreadPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, reply bool) (err error) {
107 c, err = s.getClient(ctx)
111 return s.Service.ServeThreadPage(ctx, client, c, id, reply)
114 func (s *authService) ServeNotificationPage(ctx context.Context, client io.Writer, c *mastodon.Client, maxID string, minID string) (err error) {
115 c, err = s.getClient(ctx)
119 return s.Service.ServeNotificationPage(ctx, client, c, maxID, minID)
122 func (s *authService) ServeUserPage(ctx context.Context, client io.Writer, c *mastodon.Client, id string, maxID string, minID string) (err error) {
123 c, err = s.getClient(ctx)
127 return s.Service.ServeUserPage(ctx, client, c, id, maxID, minID)
130 func (s *authService) ServeAboutPage(ctx context.Context, client io.Writer, c *mastodon.Client) (err error) {
131 c, err = s.getClient(ctx)
135 return s.Service.ServeAboutPage(ctx, client, c)
138 func (s *authService) Like(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
139 c, err = s.getClient(ctx)
143 return s.Service.Like(ctx, client, c, id)
146 func (s *authService) UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
147 c, err = s.getClient(ctx)
151 return s.Service.UnLike(ctx, client, c, id)
154 func (s *authService) Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
155 c, err = s.getClient(ctx)
159 return s.Service.Retweet(ctx, client, c, id)
162 func (s *authService) UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
163 c, err = s.getClient(ctx)
167 return s.Service.UnRetweet(ctx, client, c, id)
170 func (s *authService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string, files []*multipart.FileHeader) (id string, err error) {
171 c, err = s.getClient(ctx)
175 return s.Service.PostTweet(ctx, client, c, content, replyToID, files)
178 func (s *authService) Follow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
179 c, err = s.getClient(ctx)
183 return s.Service.Follow(ctx, client, c, id)
186 func (s *authService) UnFollow(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) {
187 c, err = s.getClient(ctx)
191 return s.Service.UnFollow(ctx, client, c, id)