mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-02-02 13:02:56 +00:00
[chore] some tidy ups (#3677)
* small formatting changes (no logic) * improve code comments * fix import cycle * shutup stinky linter
This commit is contained in:
parent
3617e27afa
commit
726d2ba483
|
@ -36,42 +36,42 @@ type Application interface {
|
||||||
// DeleteApplicationByClientID deletes the application with corresponding client_id value from the database.
|
// DeleteApplicationByClientID deletes the application with corresponding client_id value from the database.
|
||||||
DeleteApplicationByClientID(ctx context.Context, clientID string) error
|
DeleteApplicationByClientID(ctx context.Context, clientID string) error
|
||||||
|
|
||||||
// GetClientByID ...
|
// GetClientByID fetches the application client from database with ID.
|
||||||
GetClientByID(ctx context.Context, id string) (*gtsmodel.Client, error)
|
GetClientByID(ctx context.Context, id string) (*gtsmodel.Client, error)
|
||||||
|
|
||||||
// PutClient ...
|
// PutClient puts the given application client in the database.
|
||||||
PutClient(ctx context.Context, client *gtsmodel.Client) error
|
PutClient(ctx context.Context, client *gtsmodel.Client) error
|
||||||
|
|
||||||
// DeleteClientByID ...
|
// DeleteClientByID deletes the application client from database with ID.
|
||||||
DeleteClientByID(ctx context.Context, id string) error
|
DeleteClientByID(ctx context.Context, id string) error
|
||||||
|
|
||||||
// GetAllTokens ...
|
// GetAllTokens fetches all client oauth tokens from database.
|
||||||
GetAllTokens(ctx context.Context) ([]*gtsmodel.Token, error)
|
GetAllTokens(ctx context.Context) ([]*gtsmodel.Token, error)
|
||||||
|
|
||||||
// GetTokenByID ...
|
// GetTokenByID fetches the client oauth token from database with ID.
|
||||||
GetTokenByID(ctx context.Context, id string) (*gtsmodel.Token, error)
|
GetTokenByID(ctx context.Context, id string) (*gtsmodel.Token, error)
|
||||||
|
|
||||||
// GetTokenByCode ...
|
// GetTokenByCode fetches the client oauth token from database with code.
|
||||||
GetTokenByCode(ctx context.Context, code string) (*gtsmodel.Token, error)
|
GetTokenByCode(ctx context.Context, code string) (*gtsmodel.Token, error)
|
||||||
|
|
||||||
// GetTokenByAccess ...
|
// GetTokenByAccess fetches the client oauth token from database with access code.
|
||||||
GetTokenByAccess(ctx context.Context, access string) (*gtsmodel.Token, error)
|
GetTokenByAccess(ctx context.Context, access string) (*gtsmodel.Token, error)
|
||||||
|
|
||||||
// GetTokenByRefresh ...
|
// GetTokenByRefresh fetches the client oauth token from database with refresh code.
|
||||||
GetTokenByRefresh(ctx context.Context, refresh string) (*gtsmodel.Token, error)
|
GetTokenByRefresh(ctx context.Context, refresh string) (*gtsmodel.Token, error)
|
||||||
|
|
||||||
// PutToken ...
|
// PutToken puts given client oauth token in the database.
|
||||||
PutToken(ctx context.Context, token *gtsmodel.Token) error
|
PutToken(ctx context.Context, token *gtsmodel.Token) error
|
||||||
|
|
||||||
// DeleteTokenByID ...
|
// DeleteTokenByID deletes client oauth token from database with ID.
|
||||||
DeleteTokenByID(ctx context.Context, id string) error
|
DeleteTokenByID(ctx context.Context, id string) error
|
||||||
|
|
||||||
// DeleteTokenByCode ...
|
// DeleteTokenByCode deletes client oauth token from database with code.
|
||||||
DeleteTokenByCode(ctx context.Context, code string) error
|
DeleteTokenByCode(ctx context.Context, code string) error
|
||||||
|
|
||||||
// DeleteTokenByAccess ...
|
// DeleteTokenByAccess deletes client oauth token from database with access code.
|
||||||
DeleteTokenByAccess(ctx context.Context, access string) error
|
DeleteTokenByAccess(ctx context.Context, access string) error
|
||||||
|
|
||||||
// DeleteTokenByRefresh ...
|
// DeleteTokenByRefresh deletes client oauth token from database with refresh code.
|
||||||
DeleteTokenByRefresh(ctx context.Context, refresh string) error
|
DeleteTokenByRefresh(ctx context.Context, refresh string) error
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
// Token is a translation of the gotosocial token with the ExpiresIn fields replaced with ExpiresAt.
|
// Token is a translation of the gotosocial token
|
||||||
|
// with the ExpiresIn fields replaced with ExpiresAt.
|
||||||
type Token struct {
|
type Token struct {
|
||||||
ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` // id of this item in the database
|
ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"` // id of this item in the database
|
||||||
CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // when was item created
|
CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // when was item created
|
||||||
|
|
|
@ -178,6 +178,9 @@ func New(cfg Config) *Client {
|
||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RoundTrip allows httpclient.Client{} to be used as an http.Transport{}, just calling Client{}.Do().
|
||||||
|
func (c *Client) RoundTrip(r *http.Request) (rsp *http.Response, err error) { return c.Do(r) }
|
||||||
|
|
||||||
// Do will essentially perform http.Client{}.Do() with retry-backoff functionality.
|
// Do will essentially perform http.Client{}.Do() with retry-backoff functionality.
|
||||||
func (c *Client) Do(r *http.Request) (rsp *http.Response, err error) {
|
func (c *Client) Do(r *http.Request) (rsp *http.Response, err error) {
|
||||||
|
|
||||||
|
|
|
@ -33,30 +33,20 @@
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/filter/usermute"
|
"github.com/superseriousbusiness/gotosocial/internal/filter/usermute"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/httpclient"
|
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/log"
|
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/state"
|
"github.com/superseriousbusiness/gotosocial/internal/state"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/text"
|
"github.com/superseriousbusiness/gotosocial/internal/text"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/typeutils"
|
"github.com/superseriousbusiness/gotosocial/internal/typeutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// realSender is the production Web Push sender, backed by an HTTP client, DB, and worker pool.
|
// realSender is the production Web Push sender,
|
||||||
|
// backed by an HTTP client, DB, and worker pool.
|
||||||
type realSender struct {
|
type realSender struct {
|
||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
state *state.State
|
state *state.State
|
||||||
converter *typeutils.Converter
|
converter *typeutils.Converter
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRealSender creates a Sender from an http.Client instead of an httpclient.Client.
|
|
||||||
// This should only be used by NewSender and in tests.
|
|
||||||
func NewRealSender(httpClient *http.Client, state *state.State, converter *typeutils.Converter) Sender {
|
|
||||||
return &realSender{
|
|
||||||
httpClient: httpClient,
|
|
||||||
state: state,
|
|
||||||
converter: converter,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *realSender) Send(
|
func (r *realSender) Send(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
notification *gtsmodel.Notification,
|
notification *gtsmodel.Notification,
|
||||||
|
@ -329,13 +319,3 @@ func formatNotificationBody(apiNotification *apimodel.Notification) string {
|
||||||
func firstNBytesTrimSpace(s string, n int) string {
|
func firstNBytesTrimSpace(s string, n int) string {
|
||||||
return strings.TrimSpace(text.FirstNBytesByWords(strings.TrimSpace(s), n))
|
return strings.TrimSpace(text.FirstNBytesByWords(strings.TrimSpace(s), n))
|
||||||
}
|
}
|
||||||
|
|
||||||
// gtsHTTPClientRoundTripper helps wrap a GtS HTTP client back into a regular HTTP client,
|
|
||||||
// so that webpush-go can use our IP filters, bad hosts list, and retries.
|
|
||||||
type gtsHTTPClientRoundTripper struct {
|
|
||||||
httpClient *httpclient.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *gtsHTTPClientRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) {
|
|
||||||
return r.httpClient.Do(request)
|
|
||||||
}
|
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
// for go:linkname
|
||||||
|
_ "unsafe"
|
||||||
|
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/cleaner"
|
"github.com/superseriousbusiness/gotosocial/internal/cleaner"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/db"
|
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||||
|
@ -120,7 +123,7 @@ func (suite *RealSenderStandardTestSuite) SetupTest() {
|
||||||
suite.oauthServer = testrig.NewTestOauthServer(suite.db)
|
suite.oauthServer = testrig.NewTestOauthServer(suite.db)
|
||||||
suite.emailSender = testrig.NewEmailSender("../../web/template/", nil)
|
suite.emailSender = testrig.NewEmailSender("../../web/template/", nil)
|
||||||
|
|
||||||
suite.webPushSender = webpush.NewRealSender(
|
suite.webPushSender = newSenderWith(
|
||||||
&http.Client{
|
&http.Client{
|
||||||
Transport: suite,
|
Transport: suite,
|
||||||
},
|
},
|
||||||
|
@ -261,3 +264,6 @@ func (suite *RealSenderStandardTestSuite) TestServerError() {
|
||||||
func TestRealSenderStandardTestSuite(t *testing.T) {
|
func TestRealSenderStandardTestSuite(t *testing.T) {
|
||||||
suite.Run(t, &RealSenderStandardTestSuite{})
|
suite.Run(t, &RealSenderStandardTestSuite{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:linkname newSenderWith github.com/superseriousbusiness/gotosocial/internal/webpush.newSenderWith
|
||||||
|
func newSenderWith(*http.Client, *state.State, *typeutils.Converter) webpush.Sender
|
||||||
|
|
|
@ -30,7 +30,9 @@
|
||||||
|
|
||||||
// Sender can send Web Push notifications.
|
// Sender can send Web Push notifications.
|
||||||
type Sender interface {
|
type Sender interface {
|
||||||
// Send queues up a notification for delivery to all of an account's Web Push subscriptions.
|
|
||||||
|
// Send queues up a notification for delivery to
|
||||||
|
// all of an account's Web Push subscriptions.
|
||||||
Send(
|
Send(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
notification *gtsmodel.Notification,
|
notification *gtsmodel.Notification,
|
||||||
|
@ -41,14 +43,26 @@ type Sender interface {
|
||||||
|
|
||||||
// NewSender creates a new sender from an HTTP client, DB, and worker pool.
|
// NewSender creates a new sender from an HTTP client, DB, and worker pool.
|
||||||
func NewSender(httpClient *httpclient.Client, state *state.State, converter *typeutils.Converter) Sender {
|
func NewSender(httpClient *httpclient.Client, state *state.State, converter *typeutils.Converter) Sender {
|
||||||
return NewRealSender(
|
return &realSender{
|
||||||
&http.Client{
|
httpClient: &http.Client{
|
||||||
Transport: >sHTTPClientRoundTripper{
|
// Pass in our wrapped httpclient.Client{}
|
||||||
httpClient: httpClient,
|
// type as http.Transport{} in order to take
|
||||||
|
// advantage of retries, SSF protection etc.
|
||||||
|
Transport: httpClient,
|
||||||
|
|
||||||
|
// Other http.Client{} fields are already
|
||||||
|
// set in embedded httpclient.Client{}.
|
||||||
},
|
},
|
||||||
// Other fields are already set on the http.Client inside the httpclient.Client.
|
state: state,
|
||||||
},
|
converter: converter,
|
||||||
state,
|
}
|
||||||
converter,
|
}
|
||||||
)
|
|
||||||
|
// an internal function purely existing for the webpush test package to link to and use a custom http.Client{}.
|
||||||
|
func newSenderWith(client *http.Client, state *state.State, converter *typeutils.Converter) Sender { //nolint:unused
|
||||||
|
return &realSender{
|
||||||
|
httpClient: client,
|
||||||
|
state: state,
|
||||||
|
converter: converter,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue