Show signin button in case of an auth error

This commit is contained in:
r 2021-10-23 13:41:41 +00:00
parent 816281c225
commit 7d389d2258
2 changed files with 23 additions and 3 deletions

View file

@ -3,12 +3,28 @@ package mastodon
import ( import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"net/http" "net/http"
"os" "os"
) )
type Error struct {
code int
err string
}
func (e Error) Error() string {
return e.err
}
func (e Error) IsAuthError() bool {
switch e.code {
case http.StatusForbidden, http.StatusUnauthorized:
return true
}
return false
}
// Base64EncodeFileName returns the base64 data URI format string of the file with the file name. // Base64EncodeFileName returns the base64 data URI format string of the file with the file name.
func Base64EncodeFileName(filename string) (string, error) { func Base64EncodeFileName(filename string) (string, error) {
file, err := os.Open(filename) file, err := os.Open(filename)
@ -51,5 +67,8 @@ func parseAPIError(prefix string, resp *http.Response) error {
errMsg = fmt.Sprintf("%s: %s", errMsg, e.Error) errMsg = fmt.Sprintf("%s: %s", errMsg, e.Error)
} }
return errors.New(errMsg) return Error{
code: resp.StatusCode,
err: errMsg,
}
} }

View file

@ -114,7 +114,8 @@ func (s *service) ErrorPage(c *client, err error, retry bool) error {
var sessionErr bool var sessionErr bool
if err != nil { if err != nil {
errStr = err.Error() errStr = err.Error()
if err == errInvalidSession || err == errInvalidCSRFToken { if me, ok := err.(mastodon.Error); ok && me.IsAuthError() ||
err == errInvalidSession || err == errInvalidCSRFToken {
sessionErr = true sessionErr = true
} }
} }