SYMBOL INDEX (3065 symbols across 405 files) FILE: .github/workflows/scripts/commit-checker.py function get_commit_message (line 13) | def get_commit_message(commit_hash: str) -> str: function check_commit_message (line 28) | def check_commit_message(message: str, pattern: str = CONVENTIONAL_COMMI... function check_commit_range (line 35) | def check_commit_range(base_ref: str, head_ref: str) -> list[dict[str, s... function main (line 61) | def main() -> None: FILE: client/client.go type Client (line 18) | type Client struct method Healthcheck (line 63) | func (c *Client) Healthcheck() error { method HealthcheckContext (line 70) | func (c *Client) HealthcheckContext(ctx context.Context) error { method Version (line 90) | func (c *Client) Version() (*VersionResponse, error) { method VersionContext (line 97) | func (c *Client) VersionContext(ctx context.Context) (*VersionResponse... method Me (line 113) | func (c *Client) Me() (*User, error) { method MeContext (line 120) | func (c *Client) MeContext(ctx context.Context) (*User, error) { method Users (line 136) | func (c *Client) Users() (Users, error) { method UsersContext (line 143) | func (c *Client) UsersContext(ctx context.Context) (Users, error) { method UserByID (line 159) | func (c *Client) UserByID(userID int64) (*User, error) { method UserByIDContext (line 166) | func (c *Client) UserByIDContext(ctx context.Context, userID int64) (*... method UserByUsername (line 182) | func (c *Client) UserByUsername(username string) (*User, error) { method UserByUsernameContext (line 189) | func (c *Client) UserByUsernameContext(ctx context.Context, username s... method CreateUser (line 205) | func (c *Client) CreateUser(username, password string, isAdmin bool) (... method CreateUserContext (line 212) | func (c *Client) CreateUserContext(ctx context.Context, username, pass... method UpdateUser (line 232) | func (c *Client) UpdateUser(userID int64, userChanges *UserModificatio... method UpdateUserContext (line 239) | func (c *Client) UpdateUserContext(ctx context.Context, userID int64, ... method DeleteUser (line 255) | func (c *Client) DeleteUser(userID int64) error { method DeleteUserContext (line 262) | func (c *Client) DeleteUserContext(ctx context.Context, userID int64) ... method APIKeys (line 267) | func (c *Client) APIKeys() (APIKeys, error) { method APIKeysContext (line 274) | func (c *Client) APIKeysContext(ctx context.Context) (APIKeys, error) { method CreateAPIKey (line 290) | func (c *Client) CreateAPIKey(description string) (*APIKey, error) { method CreateAPIKeyContext (line 297) | func (c *Client) CreateAPIKeyContext(ctx context.Context, description ... method DeleteAPIKey (line 315) | func (c *Client) DeleteAPIKey(apiKeyID int64) error { method DeleteAPIKeyContext (line 322) | func (c *Client) DeleteAPIKeyContext(ctx context.Context, apiKeyID int... method MarkAllAsRead (line 327) | func (c *Client) MarkAllAsRead(userID int64) error { method MarkAllAsReadContext (line 334) | func (c *Client) MarkAllAsReadContext(ctx context.Context, userID int6... method IntegrationsStatus (line 340) | func (c *Client) IntegrationsStatus() (bool, error) { method IntegrationsStatusContext (line 347) | func (c *Client) IntegrationsStatusContext(ctx context.Context) (bool,... method Discover (line 366) | func (c *Client) Discover(url string) (Subscriptions, error) { method DiscoverContext (line 373) | func (c *Client) DiscoverContext(ctx context.Context, url string) (Sub... method Categories (line 389) | func (c *Client) Categories() (Categories, error) { method CategoriesContext (line 396) | func (c *Client) CategoriesContext(ctx context.Context) (Categories, e... method CategoriesWithCounters (line 412) | func (c *Client) CategoriesWithCounters() (Categories, error) { method CategoriesWithCountersContext (line 419) | func (c *Client) CategoriesWithCountersContext(ctx context.Context) (C... method CreateCategory (line 435) | func (c *Client) CreateCategory(title string) (*Category, error) { method CreateCategoryContext (line 442) | func (c *Client) CreateCategoryContext(ctx context.Context, title stri... method CreateCategoryWithOptions (line 460) | func (c *Client) CreateCategoryWithOptions(createRequest *CategoryCrea... method CreateCategoryWithOptionsContext (line 467) | func (c *Client) CreateCategoryWithOptionsContext(ctx context.Context,... method UpdateCategory (line 482) | func (c *Client) UpdateCategory(categoryID int64, title string) (*Cate... method UpdateCategoryContext (line 489) | func (c *Client) UpdateCategoryContext(ctx context.Context, categoryID... method UpdateCategoryWithOptions (line 507) | func (c *Client) UpdateCategoryWithOptions(categoryID int64, categoryC... method UpdateCategoryWithOptionsContext (line 514) | func (c *Client) UpdateCategoryWithOptionsContext(ctx context.Context,... method MarkCategoryAsRead (line 530) | func (c *Client) MarkCategoryAsRead(categoryID int64) error { method MarkCategoryAsReadContext (line 537) | func (c *Client) MarkCategoryAsReadContext(ctx context.Context, catego... method CategoryFeeds (line 543) | func (c *Client) CategoryFeeds(categoryID int64) (Feeds, error) { method CategoryFeedsContext (line 550) | func (c *Client) CategoryFeedsContext(ctx context.Context, categoryID ... method DeleteCategory (line 566) | func (c *Client) DeleteCategory(categoryID int64) error { method DeleteCategoryContext (line 573) | func (c *Client) DeleteCategoryContext(ctx context.Context, categoryID... method RefreshCategory (line 578) | func (c *Client) RefreshCategory(categoryID int64) error { method RefreshCategoryContext (line 585) | func (c *Client) RefreshCategoryContext(ctx context.Context, categoryI... method Feeds (line 591) | func (c *Client) Feeds() (Feeds, error) { method FeedsContext (line 598) | func (c *Client) FeedsContext(ctx context.Context) (Feeds, error) { method Export (line 614) | func (c *Client) Export() ([]byte, error) { method ExportContext (line 621) | func (c *Client) ExportContext(ctx context.Context) ([]byte, error) { method Import (line 637) | func (c *Client) Import(f io.ReadCloser) error { method ImportContext (line 644) | func (c *Client) ImportContext(ctx context.Context, f io.ReadCloser) e... method Feed (line 650) | func (c *Client) Feed(feedID int64) (*Feed, error) { method FeedContext (line 657) | func (c *Client) FeedContext(ctx context.Context, feedID int64) (*Feed... method CreateFeed (line 673) | func (c *Client) CreateFeed(feedCreationRequest *FeedCreationRequest) ... method CreateFeedContext (line 680) | func (c *Client) CreateFeedContext(ctx context.Context, feedCreationRe... method UpdateFeed (line 700) | func (c *Client) UpdateFeed(feedID int64, feedChanges *FeedModificatio... method UpdateFeedContext (line 707) | func (c *Client) UpdateFeedContext(ctx context.Context, feedID int64, ... method ImportFeedEntry (line 723) | func (c *Client) ImportFeedEntry(feedID int64, payload any) (int64, er... method MarkFeedAsRead (line 749) | func (c *Client) MarkFeedAsRead(feedID int64) error { method MarkFeedAsReadContext (line 756) | func (c *Client) MarkFeedAsReadContext(ctx context.Context, feedID int... method RefreshAllFeeds (line 762) | func (c *Client) RefreshAllFeeds() error { method RefreshAllFeedsContext (line 769) | func (c *Client) RefreshAllFeedsContext(ctx context.Context) error { method RefreshFeed (line 775) | func (c *Client) RefreshFeed(feedID int64) error { method RefreshFeedContext (line 782) | func (c *Client) RefreshFeedContext(ctx context.Context, feedID int64)... method DeleteFeed (line 788) | func (c *Client) DeleteFeed(feedID int64) error { method DeleteFeedContext (line 795) | func (c *Client) DeleteFeedContext(ctx context.Context, feedID int64) ... method FeedIcon (line 800) | func (c *Client) FeedIcon(feedID int64) (*FeedIcon, error) { method FeedIconContext (line 807) | func (c *Client) FeedIconContext(ctx context.Context, feedID int64) (*... method FeedEntry (line 823) | func (c *Client) FeedEntry(feedID, entryID int64) (*Entry, error) { method FeedEntryContext (line 830) | func (c *Client) FeedEntryContext(ctx context.Context, feedID, entryID... method CategoryEntry (line 846) | func (c *Client) CategoryEntry(categoryID, entryID int64) (*Entry, err... method CategoryEntryContext (line 853) | func (c *Client) CategoryEntryContext(ctx context.Context, categoryID,... method Entry (line 869) | func (c *Client) Entry(entryID int64) (*Entry, error) { method EntryContext (line 876) | func (c *Client) EntryContext(ctx context.Context, entryID int64) (*En... method Entries (line 892) | func (c *Client) Entries(filter *Filter) (*EntryResultSet, error) { method EntriesContext (line 899) | func (c *Client) EntriesContext(ctx context.Context, filter *Filter) (... method FeedEntries (line 917) | func (c *Client) FeedEntries(feedID int64, filter *Filter) (*EntryResu... method FeedEntriesContext (line 924) | func (c *Client) FeedEntriesContext(ctx context.Context, feedID int64,... method CategoryEntries (line 942) | func (c *Client) CategoryEntries(categoryID int64, filter *Filter) (*E... method CategoryEntriesContext (line 949) | func (c *Client) CategoryEntriesContext(ctx context.Context, categoryI... method UpdateEntries (line 967) | func (c *Client) UpdateEntries(entryIDs []int64, status string) error { method UpdateEntriesContext (line 974) | func (c *Client) UpdateEntriesContext(ctx context.Context, entryIDs []... method UpdateEntry (line 985) | func (c *Client) UpdateEntry(entryID int64, entryChanges *EntryModific... method UpdateEntryContext (line 992) | func (c *Client) UpdateEntryContext(ctx context.Context, entryID int64... method ToggleStarred (line 1008) | func (c *Client) ToggleStarred(entryID int64) error { method ToggleStarredContext (line 1015) | func (c *Client) ToggleStarredContext(ctx context.Context, entryID int... method SaveEntry (line 1021) | func (c *Client) SaveEntry(entryID int64) error { method SaveEntryContext (line 1028) | func (c *Client) SaveEntryContext(ctx context.Context, entryID int64) ... method FetchEntryOriginalContent (line 1034) | func (c *Client) FetchEntryOriginalContent(entryID int64) (string, err... method FetchEntryOriginalContentContext (line 1041) | func (c *Client) FetchEntryOriginalContentContext(ctx context.Context,... method FetchCounters (line 1060) | func (c *Client) FetchCounters() (*FeedCounters, error) { method FetchCountersContext (line 1067) | func (c *Client) FetchCountersContext(ctx context.Context) (*FeedCount... method FlushHistory (line 1083) | func (c *Client) FlushHistory() error { method FlushHistoryContext (line 1090) | func (c *Client) FlushHistoryContext(ctx context.Context) error { method Icon (line 1096) | func (c *Client) Icon(iconID int64) (*FeedIcon, error) { method IconContext (line 1103) | func (c *Client) IconContext(ctx context.Context, iconID int64) (*Feed... method Enclosure (line 1119) | func (c *Client) Enclosure(enclosureID int64) (*Enclosure, error) { method EnclosureContext (line 1126) | func (c *Client) EnclosureContext(ctx context.Context, enclosureID int... method UpdateEnclosure (line 1142) | func (c *Client) UpdateEnclosure(enclosureID int64, enclosureUpdate *E... method UpdateEnclosureContext (line 1149) | func (c *Client) UpdateEnclosureContext(ctx context.Context, enclosure... function New (line 27) | func New(endpoint string, credentials ...string) *Client { function NewClient (line 32) | func NewClient(endpoint string, credentials ...string) *Client { function NewClientWithOptions (line 44) | func NewClientWithOptions(endpoint string, options ...Option) *Client { function withDefaultTimeout (line 57) | func withDefaultTimeout() (context.Context, func()) { function buildFilterQueryString (line 1154) | func buildFilterQueryString(path string, filter *Filter) string { FILE: client/client_test.go type roundTripperFunc (line 16) | type roundTripperFunc method RoundTrip (line 18) | func (fn roundTripperFunc) RoundTrip(req *http.Request) (*http.Respons... function newFakeHTTPClient (line 22) | func newFakeHTTPClient( function jsonResponseFrom (line 34) | func jsonResponseFrom( function asJSON (line 52) | func asJSON(data any) string { function expectRequest (line 60) | func expectRequest( function expectFromJSON (line 80) | func expectFromJSON[T any]( function TestHealthcheck (line 95) | func TestHealthcheck(t *testing.T) { function TestVersion (line 111) | func TestVersion(t *testing.T) { function TestMe (line 139) | func TestMe(t *testing.T) { function TestUsers (line 190) | func TestUsers(t *testing.T) { function TestUserByID (line 219) | func TestUserByID(t *testing.T) { function TestUserByUsername (line 242) | func TestUserByUsername(t *testing.T) { function TestCreateUser (line 265) | func TestCreateUser(t *testing.T) { function TestUpdateUser (line 301) | func TestUpdateUser(t *testing.T) { function TestDeleteUser (line 333) | func TestDeleteUser(t *testing.T) { function TestAPIKeys (line 346) | func TestAPIKeys(t *testing.T) { function TestCreateAPIKey (line 375) | func TestCreateAPIKey(t *testing.T) { function TestDeleteAPIKey (line 401) | func TestDeleteAPIKey(t *testing.T) { function TestMarkAllAsRead (line 414) | func TestMarkAllAsRead(t *testing.T) { function TestIntegrationsStatus (line 427) | func TestIntegrationsStatus(t *testing.T) { function TestDiscover (line 448) | func TestDiscover(t *testing.T) { function TestCategories (line 474) | func TestCategories(t *testing.T) { function TestCategoriesWithCounters (line 497) | func TestCategoriesWithCounters(t *testing.T) { function TestCreateCategory (line 524) | func TestCreateCategory(t *testing.T) { function TestCreateCategoryWithOptions (line 549) | func TestCreateCategoryWithOptions(t *testing.T) { function TestUpdateCategory (line 579) | func TestUpdateCategory(t *testing.T) { function TestUpdateCategoryWithOptions (line 604) | func TestUpdateCategoryWithOptions(t *testing.T) { function TestMarkCategoryAsRead (line 634) | func TestMarkCategoryAsRead(t *testing.T) { function TestCategoryFeeds (line 647) | func TestCategoryFeeds(t *testing.T) { function TestDeleteCategory (line 670) | func TestDeleteCategory(t *testing.T) { function TestRefreshCategory (line 683) | func TestRefreshCategory(t *testing.T) { function TestFeeds (line 696) | func TestFeeds(t *testing.T) { function TestExport (line 750) | func TestExport(t *testing.T) { function TestImport (line 772) | func TestImport(t *testing.T) { function TestFeed (line 802) | func TestFeed(t *testing.T) { function TestCreateFeed (line 823) | func TestCreateFeed(t *testing.T) { function TestUpdateFeed (line 847) | func TestUpdateFeed(t *testing.T) { function TestMarkFeedAsRead (line 870) | func TestMarkFeedAsRead(t *testing.T) { function TestRefreshAllFeeds (line 883) | func TestRefreshAllFeeds(t *testing.T) { function TestRefreshFeed (line 896) | func TestRefreshFeed(t *testing.T) { function TestDeleteFeed (line 909) | func TestDeleteFeed(t *testing.T) { function TestFeedIcon (line 922) | func TestFeedIcon(t *testing.T) { function TestFeedEntry (line 944) | func TestFeedEntry(t *testing.T) { function TestCategoryEntry (line 965) | func TestCategoryEntry(t *testing.T) { function TestEntry (line 986) | func TestEntry(t *testing.T) { function TestEntries (line 1007) | func TestEntries(t *testing.T) { function TestFeedEntries (line 1034) | func TestFeedEntries(t *testing.T) { function TestCategoryEntries (line 1062) | func TestCategoryEntries(t *testing.T) { function TestUpdateEntries (line 1091) | func TestUpdateEntries(t *testing.T) { function TestUpdateEntry (line 1111) | func TestUpdateEntry(t *testing.T) { function TestToggleStarred (line 1137) | func TestToggleStarred(t *testing.T) { function TestSaveEntry (line 1150) | func TestSaveEntry(t *testing.T) { function TestFetchEntryOriginalContent (line 1163) | func TestFetchEntryOriginalContent(t *testing.T) { function TestFetchCounters (line 1185) | func TestFetchCounters(t *testing.T) { function TestFlushHistory (line 1210) | func TestFlushHistory(t *testing.T) { function TestIcon (line 1223) | func TestIcon(t *testing.T) { function TestEnclosure (line 1245) | func TestEnclosure(t *testing.T) { function TestUpdateEnclosure (line 1267) | func TestUpdateEnclosure(t *testing.T) { FILE: client/model.go constant EntryStatusUnread (line 13) | EntryStatusUnread = "unread" constant EntryStatusRead (line 14) | EntryStatusRead = "read" constant EntryStatusRemoved (line 15) | EntryStatusRemoved = "removed" type User (line 19) | type User struct method String (line 53) | func (u User) String() string { type UserCreationRequest (line 58) | type UserCreationRequest struct type UserModificationRequest (line 67) | type UserModificationRequest struct type Users (line 100) | type Users type Category (line 103) | type Category struct method String (line 112) | func (c Category) String() string { type Categories (line 117) | type Categories type CategoryCreationRequest (line 120) | type CategoryCreationRequest struct type CategoryModificationRequest (line 126) | type CategoryModificationRequest struct type Subscription (line 132) | type Subscription struct method String (line 138) | func (s Subscription) String() string { type Subscriptions (line 143) | type Subscriptions type Feed (line 146) | type Feed struct type FeedCreationRequest (line 181) | type FeedCreationRequest struct type FeedModificationRequest (line 207) | type FeedModificationRequest struct type FeedIcon (line 235) | type FeedIcon struct type FeedCounters (line 241) | type FeedCounters struct type Feeds (line 247) | type Feeds type Entry (line 250) | type Entry struct type EntryModificationRequest (line 273) | type EntryModificationRequest struct type Entries (line 279) | type Entries type Enclosure (line 282) | type Enclosure struct type EnclosureUpdateRequest (line 292) | type EnclosureUpdateRequest struct type Enclosures (line 297) | type Enclosures constant FilterNotStarred (line 300) | FilterNotStarred = "0" constant FilterOnlyStarred (line 301) | FilterOnlyStarred = "1" type Filter (line 305) | type Filter struct type EntryResultSet (line 328) | type EntryResultSet struct type VersionResponse (line 334) | type VersionResponse struct type APIKey (line 345) | type APIKey struct type APIKeys (line 355) | type APIKeys type APIKeyCreationRequest (line 358) | type APIKeyCreationRequest struct function SetOptionalField (line 365) | func SetOptionalField[T any](value T) *T { FILE: client/options.go type Option (line 8) | type Option function WithAPIKey (line 11) | func WithAPIKey(apiKey string) Option { function WithCredentials (line 18) | func WithCredentials(username, password string) Option { function WithHTTPClient (line 26) | func WithHTTPClient(client *http.Client) Option { FILE: client/request.go constant userAgent (line 20) | userAgent = "Miniflux Client Library" constant defaultTimeout (line 21) | defaultTimeout = 80 * time.Second type errorResponse (line 34) | type errorResponse struct type request (line 38) | type request struct method Get (line 46) | func (r *request) Get(ctx context.Context, path string) (io.ReadCloser... method Post (line 50) | func (r *request) Post(ctx context.Context, path string, data any) (io... method PostFile (line 54) | func (r *request) PostFile(ctx context.Context, path string, f io.Read... method Put (line 58) | func (r *request) Put(ctx context.Context, path string, data any) (io.... method Delete (line 62) | func (r *request) Delete(ctx context.Context, path string) error { method execute (line 67) | func (r *request) execute( method buildHeaders (line 154) | func (r *request) buildHeaders() http.Header { method toJSON (line 165) | func (r *request) toJSON(v any) []byte { FILE: internal/api/api.go type handler (line 13) | type handler struct function NewHandler (line 20) | func NewHandler(store *storage.Storage, pool *worker.Pool) http.Handler { FILE: internal/api/api_integration_test.go constant skipIntegrationTestsMessage (line 20) | skipIntegrationTestsMessage = `Set TEST_MINIFLUX_* environment variables... type integrationTestConfig (line 22) | type integrationTestConfig struct method isConfigured (line 56) | func (c *integrationTestConfig) isConfigured() bool { method genRandomUsername (line 60) | func (c *integrationTestConfig) genRandomUsername() string { function newIntegrationTestConfig (line 34) | func newIntegrationTestConfig() *integrationTestConfig { function TestIncorrectEndpoint (line 64) | func TestIncorrectEndpoint(t *testing.T) { function TestHealthcheckEndpoint (line 81) | func TestHealthcheckEndpoint(t *testing.T) { function TestVersionEndpoint (line 93) | func TestVersionEndpoint(t *testing.T) { function TestInvalidCredentials (line 134) | func TestInvalidCredentials(t *testing.T) { function TestGetMeEndpoint (line 151) | func TestGetMeEndpoint(t *testing.T) { function TestGetUsersEndpointAsAdmin (line 168) | func TestGetUsersEndpointAsAdmin(t *testing.T) { function TestGetUsersEndpointAsRegularUser (line 233) | func TestGetUsersEndpointAsRegularUser(t *testing.T) { function TestCreateUserEndpointAsAdmin (line 253) | func TestCreateUserEndpointAsAdmin(t *testing.T) { function TestCreateUserEndpointAsRegularUser (line 313) | func TestCreateUserEndpointAsRegularUser(t *testing.T) { function TestCannotCreateDuplicateUser (line 333) | func TestCannotCreateDuplicateUser(t *testing.T) { function TestRemoveUserEndpointAsAdmin (line 346) | func TestRemoveUserEndpointAsAdmin(t *testing.T) { function TestRemoveUserEndpointAsRegularUser (line 363) | func TestRemoveUserEndpointAsRegularUser(t *testing.T) { function TestGetUserByIDEndpointAsAdmin (line 383) | func TestGetUserByIDEndpointAsAdmin(t *testing.T) { function TestGetUserByIDEndpointAsRegularUser (line 457) | func TestGetUserByIDEndpointAsRegularUser(t *testing.T) { function TestGetUserByUsernameEndpointAsAdmin (line 477) | func TestGetUserByUsernameEndpointAsAdmin(t *testing.T) { function TestGetUserByUsernameEndpointAsRegularUser (line 547) | func TestGetUserByUsernameEndpointAsRegularUser(t *testing.T) { function TestUpdateUserEndpointByChangingDefaultTheme (line 567) | func TestUpdateUserEndpointByChangingDefaultTheme(t *testing.T) { function TestUpdateUserEndpointByChangingExternalFonts (line 596) | func TestUpdateUserEndpointByChangingExternalFonts(t *testing.T) { function TestUpdateUserEndpointByChangingExternalFontsWithInvalidValue (line 625) | func TestUpdateUserEndpointByChangingExternalFontsWithInvalidValue(t *te... function TestUpdateUserEndpointByChangingCustomJS (line 649) | func TestUpdateUserEndpointByChangingCustomJS(t *testing.T) { function TestUpdateUserEndpointByChangingDefaultThemeToInvalidValue (line 678) | func TestUpdateUserEndpointByChangingDefaultThemeToInvalidValue(t *testi... function TestRegularUsersCannotUpdateOtherUsers (line 703) | func TestRegularUsersCannotUpdateOtherUsers(t *testing.T) { function TestAPIKeysEndpoint (line 733) | func TestAPIKeysEndpoint(t *testing.T) { function TestMarkUserAsReadEndpoint (line 843) | func TestMarkUserAsReadEndpoint(t *testing.T) { function TestCannotMarkUserAsReadAsOtherUser (line 880) | func TestCannotMarkUserAsReadAsOtherUser(t *testing.T) { function TestCreateCategoryEndpoint (line 905) | func TestCreateCategoryEndpoint(t *testing.T) { function TestCreateCategoryWithEmptyTitle (line 944) | func TestCreateCategoryWithEmptyTitle(t *testing.T) { function TestCannotCreateDuplicatedCategory (line 957) | func TestCannotCreateDuplicatedCategory(t *testing.T) { function TestCreateCategoryWithOptions (line 983) | func TestCreateCategoryWithOptions(t *testing.T) { function TestUpdateCategoryEndpoint (line 1025) | func TestUpdateCategoryEndpoint(t *testing.T) { function TestUpdateCategoryWithOptions (line 1069) | func TestUpdateCategoryWithOptions(t *testing.T) { function TestUpdateInexistingCategory (line 1150) | func TestUpdateInexistingCategory(t *testing.T) { function TestDeleteCategoryEndpoint (line 1162) | func TestDeleteCategoryEndpoint(t *testing.T) { function TestCannotDeleteInexistingCategory (line 1189) | func TestCannotDeleteInexistingCategory(t *testing.T) { function TestCannotDeleteCategoryOfAnotherUser (line 1202) | func TestCannotDeleteCategoryOfAnotherUser(t *testing.T) { function TestGetCategoriesEndpoint (line 1228) | func TestGetCategoriesEndpoint(t *testing.T) { function TestMarkCategoryAsReadEndpoint (line 1321) | func TestMarkCategoryAsReadEndpoint(t *testing.T) { function TestCreateFeedEndpoint (line 1365) | func TestCreateFeedEndpoint(t *testing.T) { function TestCannotCreateDuplicatedFeed (line 1398) | func TestCannotCreateDuplicatedFeed(t *testing.T) { function TestCreateFeedWithInexistingCategory (line 1433) | func TestCreateFeedWithInexistingCategory(t *testing.T) { function TestCreateFeedWithEmptyFeedURL (line 1459) | func TestCreateFeedWithEmptyFeedURL(t *testing.T) { function TestCreateFeedWithInvalidFeedURL (line 1474) | func TestCreateFeedWithInvalidFeedURL(t *testing.T) { function TestCreateDisabledFeed (line 1489) | func TestCreateDisabledFeed(t *testing.T) { function TestCreateFeedWithDisabledHTTPCache (line 1523) | func TestCreateFeedWithDisabledHTTPCache(t *testing.T) { function TestCreateFeedWithScraperRule (line 1557) | func TestCreateFeedWithScraperRule(t *testing.T) { function TestUpdateFeedEndpoint (line 1591) | func TestUpdateFeedEndpoint(t *testing.T) { function TestCannotHaveDuplicateFeedWhenUpdatingFeed (line 1628) | func TestCannotHaveDuplicateFeedWhenUpdatingFeed(t *testing.T) { function TestUpdateFeedWithInvalidCategory (line 1664) | func TestUpdateFeedWithInvalidCategory(t *testing.T) { function TestMarkFeedAsReadEndpoint (line 1696) | func TestMarkFeedAsReadEndpoint(t *testing.T) { function TestFetchCountersEndpoint (line 1735) | func TestFetchCountersEndpoint(t *testing.T) { function TestDeleteFeedEndpoint (line 1772) | func TestDeleteFeedEndpoint(t *testing.T) { function TestRefreshAllFeedsEndpoint (line 1800) | func TestRefreshAllFeedsEndpoint(t *testing.T) { function TestRefreshFeedEndpoint (line 1821) | func TestRefreshFeedEndpoint(t *testing.T) { function TestGetFeedEndpoint (line 1849) | func TestGetFeedEndpoint(t *testing.T) { function TestGetFeedIcon (line 1894) | func TestGetFeedIcon(t *testing.T) { function TestGetFeedIconWithInexistingFeedID (line 1952) | func TestGetFeedIconWithInexistingFeedID(t *testing.T) { function TestGetFeedsEndpoint (line 1965) | func TestGetFeedsEndpoint(t *testing.T) { function TestGetCategoryFeedsEndpoint (line 2006) | func TestGetCategoryFeedsEndpoint(t *testing.T) { function TestExportEndpoint (line 2053) | func TestExportEndpoint(t *testing.T) { function TestImportEndpoint (line 2087) | func TestImportEndpoint(t *testing.T) { function TestDiscoverSubscriptionsEndpoint (line 2118) | func TestDiscoverSubscriptionsEndpoint(t *testing.T) { function TestDiscoverSubscriptionsWithInvalidURL (line 2143) | func TestDiscoverSubscriptionsWithInvalidURL(t *testing.T) { function TestDiscoverSubscriptionsWithNoSubscription (line 2156) | func TestDiscoverSubscriptionsWithNoSubscription(t *testing.T) { function TestGetAllFeedEntriesEndpoint (line 2168) | func TestGetAllFeedEntriesEndpoint(t *testing.T) { function TestGetAllCategoryEntriesEndpoint (line 2217) | func TestGetAllCategoryEntriesEndpoint(t *testing.T) { function TestGetAllEntriesEndpointWithFilter (line 2272) | func TestGetAllEntriesEndpointWithFilter(t *testing.T) { function TestGetGlobalEntriesEndpoint (line 2359) | func TestGetGlobalEntriesEndpoint(t *testing.T) { function TestCannotGetRemovedEntries (line 2416) | func TestCannotGetRemovedEntries(t *testing.T) { function TestUpdateEnclosureEndpoint (line 2474) | func TestUpdateEnclosureEndpoint(t *testing.T) { function TestGetEnclosureEndpoint (line 2532) | func TestGetEnclosureEndpoint(t *testing.T) { function TestGetEntryEndpoints (line 2586) | func TestGetEntryEndpoints(t *testing.T) { function TestUpdateEntryStatusEndpoint (line 2650) | func TestUpdateEntryStatusEndpoint(t *testing.T) { function TestUpdateEntryEndpoint (line 2692) | func TestUpdateEntryEndpoint(t *testing.T) { function TestToggleStarredEndpoint (line 2752) | func TestToggleStarredEndpoint(t *testing.T) { function TestSaveEntryEndpoint (line 2794) | func TestSaveEntryEndpoint(t *testing.T) { function TestFetchIntegrationsStatusEndpoint (line 2827) | func TestFetchIntegrationsStatusEndpoint(t *testing.T) { function TestFetchContentEndpoint (line 2853) | func TestFetchContentEndpoint(t *testing.T) { function TestFlushHistoryEndpoint (line 2891) | func TestFlushHistoryEndpoint(t *testing.T) { function TestImportFeedEntryEndpoint (line 2937) | func TestImportFeedEntryEndpoint(t *testing.T) { FILE: internal/api/api_key_handlers.go method createAPIKeyHandler (line 18) | func (h *handler) createAPIKeyHandler(w http.ResponseWriter, r *http.Req... method getAPIKeysHandler (line 41) | func (h *handler) getAPIKeysHandler(w http.ResponseWriter, r *http.Reque... method deleteAPIKeyHandler (line 51) | func (h *handler) deleteAPIKeyHandler(w http.ResponseWriter, r *http.Req... FILE: internal/api/api_test.go function TestNewHandlerHandlesOptionsRequests (line 16) | func TestNewHandlerHandlesOptionsRequests(t *testing.T) { function TestVersionHandler (line 45) | func TestVersionHandler(t *testing.T) { function TestNewHandlerSupportsBasePathStripping (line 94) | func TestNewHandlerSupportsBasePathStripping(t *testing.T) { FILE: internal/api/category_handlers.go method createCategoryHandler (line 20) | func (h *handler) createCategoryHandler(w http.ResponseWriter, r *http.R... method updateCategoryHandler (line 43) | func (h *handler) updateCategoryHandler(w http.ResponseWriter, r *http.R... method markCategoryAsReadHandler (line 84) | func (h *handler) markCategoryAsReadHandler(w http.ResponseWriter, r *ht... method getCategoriesHandler (line 112) | func (h *handler) getCategoriesHandler(w http.ResponseWriter, r *http.Re... method removeCategoryHandler (line 130) | func (h *handler) removeCategoryHandler(w http.ResponseWriter, r *http.R... method refreshCategoryHandler (line 152) | func (h *handler) refreshCategoryHandler(w http.ResponseWriter, r *http.... FILE: internal/api/enclosure_handlers.go method getEnclosureByIDHandler (line 18) | func (h *handler) getEnclosureByIDHandler(w http.ResponseWriter, r *http... method updateEnclosureByIDHandler (line 47) | func (h *handler) updateEnclosureByIDHandler(w http.ResponseWriter, r *h... FILE: internal/api/entry_handlers.go method getEntryFromBuilder (line 27) | func (h *handler) getEntryFromBuilder(w http.ResponseWriter, r *http.Req... method getFeedEntryHandler (line 45) | func (h *handler) getFeedEntryHandler(w http.ResponseWriter, r *http.Req... method getCategoryEntryHandler (line 66) | func (h *handler) getCategoryEntryHandler(w http.ResponseWriter, r *http... method getEntryHandler (line 87) | func (h *handler) getEntryHandler(w http.ResponseWriter, r *http.Request) { method getFeedEntriesHandler (line 101) | func (h *handler) getFeedEntriesHandler(w http.ResponseWriter, r *http.R... method getCategoryEntriesHandler (line 111) | func (h *handler) getCategoryEntriesHandler(w http.ResponseWriter, r *ht... method getEntriesHandler (line 120) | func (h *handler) getEntriesHandler(w http.ResponseWriter, r *http.Reque... method findEntries (line 124) | func (h *handler) findEntries(w http.ResponseWriter, r *http.Request, fe... method setEntryStatusHandler (line 207) | func (h *handler) setEntryStatusHandler(w http.ResponseWriter, r *http.R... method toggleStarredHandler (line 227) | func (h *handler) toggleStarredHandler(w http.ResponseWriter, r *http.Re... method saveEntryHandler (line 242) | func (h *handler) saveEntryHandler(w http.ResponseWriter, r *http.Reques... method updateEntryHandler (line 280) | func (h *handler) updateEntryHandler(w http.ResponseWriter, r *http.Requ... method importFeedEntryHandler (line 343) | func (h *handler) importFeedEntryHandler(w http.ResponseWriter, r *http.... method fetchContentHandler (line 447) | func (h *handler) fetchContentHandler(w http.ResponseWriter, r *http.Req... method flushHistoryHandler (line 511) | func (h *handler) flushHistoryHandler(w http.ResponseWriter, r *http.Req... function configureFilters (line 517) | func configureFilters(builder *storage.EntryQueryBuilder, r *http.Reques... FILE: internal/api/feed_handlers.go method createFeedHandler (line 21) | func (h *handler) createFeedHandler(w http.ResponseWriter, r *http.Reque... method refreshFeedHandler (line 54) | func (h *handler) refreshFeedHandler(w http.ResponseWriter, r *http.Requ... method refreshAllFeedsHandler (line 76) | func (h *handler) refreshAllFeedsHandler(w http.ResponseWriter, r *http.... method updateFeedHandler (line 103) | func (h *handler) updateFeedHandler(w http.ResponseWriter, r *http.Reque... method markFeedAsReadHandler (line 149) | func (h *handler) markFeedAsReadHandler(w http.ResponseWriter, r *http.R... method getCategoryFeedsHandler (line 171) | func (h *handler) getCategoryFeedsHandler(w http.ResponseWriter, r *http... method getFeedsHandler (line 200) | func (h *handler) getFeedsHandler(w http.ResponseWriter, r *http.Request) { method fetchCountersHandler (line 210) | func (h *handler) fetchCountersHandler(w http.ResponseWriter, r *http.Re... method getFeedHandler (line 220) | func (h *handler) getFeedHandler(w http.ResponseWriter, r *http.Request) { method removeFeedHandler (line 241) | func (h *handler) removeFeedHandler(w http.ResponseWriter, r *http.Reque... FILE: internal/api/icon_handlers.go method getIconByFeedIDHandler (line 14) | func (h *handler) getIconByFeedIDHandler(w http.ResponseWriter, r *http.... method getIconByIconIDHandler (line 39) | func (h *handler) getIconByIconIDHandler(w http.ResponseWriter, r *http.... FILE: internal/api/messages.go type feedIconResponse (line 10) | type feedIconResponse struct type entriesResponse (line 16) | type entriesResponse struct type integrationsStatusResponse (line 21) | type integrationsStatusResponse struct type entryIDResponse (line 25) | type entryIDResponse struct type entryContentResponse (line 29) | type entryContentResponse struct type entryImportRequest (line 34) | type entryImportRequest struct type feedCreationResponse (line 47) | type feedCreationResponse struct type importFeedsResponse (line 51) | type importFeedsResponse struct type versionResponse (line 55) | type versionResponse struct FILE: internal/api/middleware.go type middleware (line 16) | type middleware struct method withCORSHeaders (line 23) | func (m *middleware) withCORSHeaders(next http.Handler) http.Handler { method validateAPIKeyAuth (line 37) | func (m *middleware) validateAPIKeyAuth(next http.Handler) http.Handler { method validateBasicAuth (line 90) | func (m *middleware) validateBasicAuth(next http.Handler) http.Handler { function newMiddleware (line 20) | func newMiddleware(s *storage.Storage) *middleware { FILE: internal/api/opml_handlers.go method exportFeedsHandler (line 14) | func (h *handler) exportFeedsHandler(w http.ResponseWriter, r *http.Requ... method importFeedsHandler (line 25) | func (h *handler) importFeedsHandler(w http.ResponseWriter, r *http.Requ... FILE: internal/api/subscription_handlers.go method discoverSubscriptionsHandler (line 20) | func (h *handler) discoverSubscriptionsHandler(w http.ResponseWriter, r ... FILE: internal/api/user_handlers.go method currentUserHandler (line 17) | func (h *handler) currentUserHandler(w http.ResponseWriter, r *http.Requ... method createUserHandler (line 27) | func (h *handler) createUserHandler(w http.ResponseWriter, r *http.Reque... method updateUserHandler (line 53) | func (h *handler) updateUserHandler(w http.ResponseWriter, r *http.Reque... method markUserAsReadHandler (line 103) | func (h *handler) markUserAsReadHandler(w http.ResponseWriter, r *http.R... method getIntegrationsStatusHandler (line 128) | func (h *handler) getIntegrationsStatusHandler(w http.ResponseWriter, r ... method usersHandler (line 140) | func (h *handler) usersHandler(w http.ResponseWriter, r *http.Request) { method dispatchUserLookupHandler (line 156) | func (h *handler) dispatchUserLookupHandler(w http.ResponseWriter, r *ht... method userByIDHandler (line 169) | func (h *handler) userByIDHandler(w http.ResponseWriter, r *http.Request) { method userByUsernameHandler (line 196) | func (h *handler) userByUsernameHandler(w http.ResponseWriter, r *http.R... method removeUserHandler (line 217) | func (h *handler) removeUserHandler(w http.ResponseWriter, r *http.Reque... FILE: internal/api/version_handler.go method versionHandler (line 14) | func (h *handler) versionHandler(w http.ResponseWriter, r *http.Request) { FILE: internal/cli/ask_credentials.go function askCredentials (line 16) | func askCredentials() (string, string) { FILE: internal/cli/cleanup_tasks.go function runCleanupTasks (line 16) | func runCleanupTasks(store *storage.Storage) { FILE: internal/cli/cli.go constant flagInfoHelp (line 23) | flagInfoHelp = "Show build information" constant flagVersionHelp (line 24) | flagVersionHelp = "Show application version" constant flagMigrateHelp (line 25) | flagMigrateHelp = "Run SQL migrations" constant flagFlushSessionsHelp (line 26) | flagFlushSessionsHelp = "Flush all sessions (disconnect users)" constant flagCreateAdminHelp (line 27) | flagCreateAdminHelp = "Create an admin user from an interactive ter... constant flagResetPasswordHelp (line 28) | flagResetPasswordHelp = "Reset user password" constant flagResetFeedErrorsHelp (line 29) | flagResetFeedErrorsHelp = "Clear all feed errors for all users" constant flagDebugModeHelp (line 30) | flagDebugModeHelp = "Show debug logs" constant flagConfigFileHelp (line 31) | flagConfigFileHelp = "Load configuration file" constant flagConfigDumpHelp (line 32) | flagConfigDumpHelp = "Print parsed configuration values" constant flagHealthCheckHelp (line 33) | flagHealthCheckHelp = `Perform a health check on the given endpoint... constant flagRefreshFeedsHelp (line 34) | flagRefreshFeedsHelp = "Refresh a batch of feeds and exit" constant flagRunCleanupTasksHelp (line 35) | flagRunCleanupTasksHelp = "Run cleanup tasks (delete old sessions and a... constant flagExportUserFeedsHelp (line 36) | flagExportUserFeedsHelp = "Export user feeds (provide the username as a... constant flagResetNextCheckAtHelp (line 37) | flagResetNextCheckAtHelp = "Reset the next check time for all feeds" function Parse (line 41) | func Parse() { function printErrorAndExit (line 271) | func printErrorAndExit(err error) { FILE: internal/cli/create_admin.go function createAdminUserFromEnvironmentVariables (line 15) | func createAdminUserFromEnvironmentVariables(store *storage.Storage) { function createAdminUserFromInteractiveTerminal (line 19) | func createAdminUserFromInteractiveTerminal(store *storage.Storage) { function createAdminUser (line 24) | func createAdminUser(store *storage.Storage, username, password string) { FILE: internal/cli/daemon.go function startDaemon (line 23) | func startDaemon(store *storage.Storage) { FILE: internal/cli/export_feeds.go function exportUserFeeds (line 13) | func exportUserFeeds(store *storage.Storage, username string) { FILE: internal/cli/flush_sessions.go function flushSessions (line 12) | func flushSessions(store *storage.Storage) { FILE: internal/cli/health_check.go function doHealthCheck (line 15) | func doHealthCheck(healthCheckEndpoint string) { FILE: internal/cli/info.go function info (line 13) | func info() { FILE: internal/cli/logger.go function InitializeDefaultLogger (line 11) | func InitializeDefaultLogger(logLevel string, logFile io.Writer, logForm... FILE: internal/cli/refresh_feeds.go function refreshFeeds (line 17) | func refreshFeeds(store *storage.Storage) { FILE: internal/cli/reset_password.go function resetPassword (line 15) | func resetPassword(store *storage.Storage) { FILE: internal/cli/scheduler.go function runScheduler (line 15) | func runScheduler(store *storage.Storage, pool *worker.Pool) { function feedScheduler (line 33) | func feedScheduler(store *storage.Storage, pool *worker.Pool, frequency ... function cleanupScheduler (line 52) | func cleanupScheduler(store *storage.Storage, frequency time.Duration) { FILE: internal/config/options.go type optionPair (line 15) | type optionPair struct type configValueType (line 20) | type configValueType constant stringType (line 23) | stringType configValueType = iota constant stringListType (line 24) | stringListType constant boolType (line 25) | boolType constant intType (line 26) | intType constant int64Type (line 27) | int64Type constant urlType (line 28) | urlType constant secondType (line 29) | secondType constant minuteType (line 30) | minuteType constant hourType (line 31) | hourType constant dayType (line 32) | dayType constant secretFileType (line 33) | secretFileType constant bytesType (line 34) | bytesType type configValue (line 37) | type configValue struct type configOptions (line 55) | type configOptions struct method AdminPassword (line 611) | func (c *configOptions) AdminPassword() string { method AdminUsername (line 615) | func (c *configOptions) AdminUsername() string { method AuthProxyHeader (line 619) | func (c *configOptions) AuthProxyHeader() string { method AuthProxyUserCreation (line 623) | func (c *configOptions) AuthProxyUserCreation() bool { method BasePath (line 627) | func (c *configOptions) BasePath() string { method BaseURL (line 631) | func (c *configOptions) BaseURL() string { method RootURL (line 635) | func (c *configOptions) RootURL() string { method BatchSize (line 639) | func (c *configOptions) BatchSize() int { method CertDomain (line 643) | func (c *configOptions) CertDomain() string { method CertFile (line 647) | func (c *configOptions) CertFile() string { method CleanupArchiveBatchSize (line 651) | func (c *configOptions) CleanupArchiveBatchSize() int { method CleanupArchiveReadInterval (line 655) | func (c *configOptions) CleanupArchiveReadInterval() time.Duration { method CleanupArchiveUnreadInterval (line 659) | func (c *configOptions) CleanupArchiveUnreadInterval() time.Duration { method CleanupFrequency (line 663) | func (c *configOptions) CleanupFrequency() time.Duration { method CleanupRemoveSessionsInterval (line 667) | func (c *configOptions) CleanupRemoveSessionsInterval() time.Duration { method CreateAdmin (line 671) | func (c *configOptions) CreateAdmin() bool { method DatabaseConnectionLifetime (line 675) | func (c *configOptions) DatabaseConnectionLifetime() time.Duration { method DatabaseMaxConns (line 679) | func (c *configOptions) DatabaseMaxConns() int { method DatabaseMinConns (line 683) | func (c *configOptions) DatabaseMinConns() int { method DatabaseURL (line 687) | func (c *configOptions) DatabaseURL() string { method DisableHSTS (line 691) | func (c *configOptions) DisableHSTS() bool { method DisableHTTPService (line 695) | func (c *configOptions) DisableHTTPService() bool { method DisableLocalAuth (line 699) | func (c *configOptions) DisableLocalAuth() bool { method DisableSchedulerService (line 703) | func (c *configOptions) DisableSchedulerService() bool { method FetchBilibiliWatchTime (line 707) | func (c *configOptions) FetchBilibiliWatchTime() bool { method FetchNebulaWatchTime (line 711) | func (c *configOptions) FetchNebulaWatchTime() bool { method FetchOdyseeWatchTime (line 715) | func (c *configOptions) FetchOdyseeWatchTime() bool { method FetchYouTubeWatchTime (line 719) | func (c *configOptions) FetchYouTubeWatchTime() bool { method ForceRefreshInterval (line 723) | func (c *configOptions) ForceRefreshInterval() time.Duration { method HasHTTPClientProxiesConfigured (line 727) | func (c *configOptions) HasHTTPClientProxiesConfigured() bool { method HasAPI (line 731) | func (c *configOptions) HasAPI() bool { method HasHTTPService (line 735) | func (c *configOptions) HasHTTPService() bool { method HasHSTS (line 739) | func (c *configOptions) HasHSTS() bool { method HasHTTPClientProxyURLConfigured (line 743) | func (c *configOptions) HasHTTPClientProxyURLConfigured() bool { method HasMaintenanceMode (line 747) | func (c *configOptions) HasMaintenanceMode() bool { method HasMetricsCollector (line 751) | func (c *configOptions) HasMetricsCollector() bool { method HasSchedulerService (line 755) | func (c *configOptions) HasSchedulerService() bool { method HasWatchdog (line 759) | func (c *configOptions) HasWatchdog() bool { method HTTPClientMaxBodySize (line 763) | func (c *configOptions) HTTPClientMaxBodySize() int64 { method HTTPClientProxies (line 767) | func (c *configOptions) HTTPClientProxies() []string { method HTTPClientProxyURL (line 771) | func (c *configOptions) HTTPClientProxyURL() *url.URL { method HTTPClientTimeout (line 775) | func (c *configOptions) HTTPClientTimeout() time.Duration { method HTTPClientUserAgent (line 779) | func (c *configOptions) HTTPClientUserAgent() string { method HTTPServerTimeout (line 786) | func (c *configOptions) HTTPServerTimeout() time.Duration { method HTTPS (line 790) | func (c *configOptions) HTTPS() bool { method FetcherAllowPrivateNetworks (line 794) | func (c *configOptions) FetcherAllowPrivateNetworks() bool { method IntegrationAllowPrivateNetworks (line 798) | func (c *configOptions) IntegrationAllowPrivateNetworks() bool { method InvidiousInstance (line 805) | func (c *configOptions) InvidiousInstance() string { method IsAuthProxyUserCreationAllowed (line 809) | func (c *configOptions) IsAuthProxyUserCreationAllowed() bool { method IsDefaultDatabaseURL (line 813) | func (c *configOptions) IsDefaultDatabaseURL() bool { method IsOAuth2UserCreationAllowed (line 817) | func (c *configOptions) IsOAuth2UserCreationAllowed() bool { method CertKeyFile (line 821) | func (c *configOptions) CertKeyFile() string { method ListenAddr (line 825) | func (c *configOptions) ListenAddr() []string { method LogFile (line 829) | func (c *configOptions) LogFile() string { method LogDateTime (line 833) | func (c *configOptions) LogDateTime() bool { method LogFormat (line 837) | func (c *configOptions) LogFormat() string { method LogLevel (line 841) | func (c *configOptions) LogLevel() string { method MaintenanceMessage (line 845) | func (c *configOptions) MaintenanceMessage() string { method MaintenanceMode (line 849) | func (c *configOptions) MaintenanceMode() bool { method MediaCustomProxyURL (line 853) | func (c *configOptions) MediaCustomProxyURL() *url.URL { method MediaProxyHTTPClientTimeout (line 857) | func (c *configOptions) MediaProxyHTTPClientTimeout() time.Duration { method MediaProxyMode (line 861) | func (c *configOptions) MediaProxyMode() string { method MediaProxyPrivateKey (line 865) | func (c *configOptions) MediaProxyPrivateKey() []byte { method MediaProxyResourceTypes (line 869) | func (c *configOptions) MediaProxyResourceTypes() []string { method MetricsAllowedNetworks (line 873) | func (c *configOptions) MetricsAllowedNetworks() []string { method MetricsCollector (line 877) | func (c *configOptions) MetricsCollector() bool { method MetricsPassword (line 881) | func (c *configOptions) MetricsPassword() string { method MetricsRefreshInterval (line 885) | func (c *configOptions) MetricsRefreshInterval() time.Duration { method MetricsUsername (line 889) | func (c *configOptions) MetricsUsername() string { method OAuth2ClientID (line 893) | func (c *configOptions) OAuth2ClientID() string { method OAuth2ClientSecret (line 897) | func (c *configOptions) OAuth2ClientSecret() string { method OAuth2OIDCDiscoveryEndpoint (line 901) | func (c *configOptions) OAuth2OIDCDiscoveryEndpoint() string { method OAuth2OIDCProviderName (line 905) | func (c *configOptions) OAuth2OIDCProviderName() string { method OAuth2Provider (line 909) | func (c *configOptions) OAuth2Provider() string { method OAuth2RedirectURL (line 913) | func (c *configOptions) OAuth2RedirectURL() string { method OAuth2UserCreation (line 917) | func (c *configOptions) OAuth2UserCreation() bool { method PollingFrequency (line 921) | func (c *configOptions) PollingFrequency() time.Duration { method PollingLimitPerHost (line 925) | func (c *configOptions) PollingLimitPerHost() int { method PollingParsingErrorLimit (line 929) | func (c *configOptions) PollingParsingErrorLimit() int { method PollingScheduler (line 933) | func (c *configOptions) PollingScheduler() string { method Port (line 937) | func (c *configOptions) Port() string { method RunMigrations (line 941) | func (c *configOptions) RunMigrations() bool { method SetLogLevel (line 945) | func (c *configOptions) SetLogLevel(level string) { method SetHTTPSValue (line 950) | func (c *configOptions) SetHTTPSValue(value bool) { method SchedulerEntryFrequencyFactor (line 959) | func (c *configOptions) SchedulerEntryFrequencyFactor() int { method SchedulerEntryFrequencyMaxInterval (line 963) | func (c *configOptions) SchedulerEntryFrequencyMaxInterval() time.Dura... method SchedulerEntryFrequencyMinInterval (line 967) | func (c *configOptions) SchedulerEntryFrequencyMinInterval() time.Dura... method SchedulerRoundRobinMaxInterval (line 971) | func (c *configOptions) SchedulerRoundRobinMaxInterval() time.Duration { method SchedulerRoundRobinMinInterval (line 975) | func (c *configOptions) SchedulerRoundRobinMinInterval() time.Duration { method TrustedReverseProxyNetworks (line 979) | func (c *configOptions) TrustedReverseProxyNetworks() []string { method Watchdog (line 983) | func (c *configOptions) Watchdog() bool { method WebAuthn (line 987) | func (c *configOptions) WebAuthn() bool { method WorkerPoolSize (line 991) | func (c *configOptions) WorkerPoolSize() int { method YouTubeAPIKey (line 995) | func (c *configOptions) YouTubeAPIKey() string { method YouTubeEmbedUrlOverride (line 999) | func (c *configOptions) YouTubeEmbedUrlOverride() string { method YouTubeEmbedDomain (line 1003) | func (c *configOptions) YouTubeEmbedDomain() string { method ConfigMap (line 1007) | func (c *configOptions) ConfigMap(redactSecret bool) []*optionPair { method String (line 1021) | func (c *configOptions) String() string { function NewConfigOptions (line 63) | func NewConfigOptions() *configOptions { FILE: internal/config/options_parsing_test.go function TestBaseURLOptionParsing (line 11) | func TestBaseURLOptionParsing(t *testing.T) { function TestWatchdogOptionParsing (line 63) | func TestWatchdogOptionParsing(t *testing.T) { function TestWebAuthnOptionParsing (line 99) | func TestWebAuthnOptionParsing(t *testing.T) { function TestWorkerPoolSizeOptionParsing (line 115) | func TestWorkerPoolSizeOptionParsing(t *testing.T) { function TestYouTubeAPIKeyOptionParsing (line 131) | func TestYouTubeAPIKeyOptionParsing(t *testing.T) { function TestAdminPasswordOptionParsing (line 147) | func TestAdminPasswordOptionParsing(t *testing.T) { function TestAdminUsernameOptionParsing (line 163) | func TestAdminUsernameOptionParsing(t *testing.T) { function TestAuthProxyHeaderOptionParsing (line 179) | func TestAuthProxyHeaderOptionParsing(t *testing.T) { function TestAuthProxyUserCreationOptionParsing (line 195) | func TestAuthProxyUserCreationOptionParsing(t *testing.T) { function TestBatchSizeOptionParsing (line 231) | func TestBatchSizeOptionParsing(t *testing.T) { function TestCertDomainOptionParsing (line 247) | func TestCertDomainOptionParsing(t *testing.T) { function TestCertFileOptionParsing (line 263) | func TestCertFileOptionParsing(t *testing.T) { function TestCleanupArchiveBatchSizeOptionParsing (line 279) | func TestCleanupArchiveBatchSizeOptionParsing(t *testing.T) { function TestCreateAdminOptionParsing (line 295) | func TestCreateAdminOptionParsing(t *testing.T) { function TestDatabaseMaxConnsOptionParsing (line 319) | func TestDatabaseMaxConnsOptionParsing(t *testing.T) { function TestDatabaseMinConnsOptionParsing (line 335) | func TestDatabaseMinConnsOptionParsing(t *testing.T) { function TestDatabaseURLOptionParsing (line 351) | func TestDatabaseURLOptionParsing(t *testing.T) { function TestDisableHSTSOptionParsing (line 375) | func TestDisableHSTSOptionParsing(t *testing.T) { function TestDisableHTTPServiceOptionParsing (line 411) | func TestDisableHTTPServiceOptionParsing(t *testing.T) { function TestDisableLocalAuthOptionParsing (line 447) | func TestDisableLocalAuthOptionParsing(t *testing.T) { function TestDisableSchedulerServiceOptionParsing (line 471) | func TestDisableSchedulerServiceOptionParsing(t *testing.T) { function TestFetchBilibiliWatchTimeOptionParsing (line 507) | func TestFetchBilibiliWatchTimeOptionParsing(t *testing.T) { function TestFetchNebulaWatchTimeOptionParsing (line 531) | func TestFetchNebulaWatchTimeOptionParsing(t *testing.T) { function TestFetchOdyseeWatchTimeOptionParsing (line 555) | func TestFetchOdyseeWatchTimeOptionParsing(t *testing.T) { function TestFetchYouTubeWatchTimeOptionParsing (line 579) | func TestFetchYouTubeWatchTimeOptionParsing(t *testing.T) { function TestHTTPClientMaxBodySizeOptionParsing (line 603) | func TestHTTPClientMaxBodySizeOptionParsing(t *testing.T) { function TestHTTPClientUserAgentOptionParsing (line 621) | func TestHTTPClientUserAgentOptionParsing(t *testing.T) { function TestHTTPSOptionParsing (line 637) | func TestHTTPSOptionParsing(t *testing.T) { function TestInvidiousInstanceOptionParsing (line 661) | func TestInvidiousInstanceOptionParsing(t *testing.T) { function TestCertKeyFileOptionParsing (line 677) | func TestCertKeyFileOptionParsing(t *testing.T) { function TestLogDateTimeOptionParsing (line 693) | func TestLogDateTimeOptionParsing(t *testing.T) { function TestLogFileOptionParsing (line 717) | func TestLogFileOptionParsing(t *testing.T) { function TestLogFormatOptionParsing (line 733) | func TestLogFormatOptionParsing(t *testing.T) { function TestLogLevelOptionParsing (line 749) | func TestLogLevelOptionParsing(t *testing.T) { function TestMaintenanceMessageOptionParsing (line 765) | func TestMaintenanceMessageOptionParsing(t *testing.T) { function TestMaintenanceModeOptionParsing (line 781) | func TestMaintenanceModeOptionParsing(t *testing.T) { function TestMediaProxyModeOptionParsing (line 817) | func TestMediaProxyModeOptionParsing(t *testing.T) { function TestMetricsCollectorOptionParsing (line 833) | func TestMetricsCollectorOptionParsing(t *testing.T) { function TestMetricsPasswordOptionParsing (line 869) | func TestMetricsPasswordOptionParsing(t *testing.T) { function TestMetricsUsernameOptionParsing (line 885) | func TestMetricsUsernameOptionParsing(t *testing.T) { function TestOAuth2ClientIDOptionParsing (line 901) | func TestOAuth2ClientIDOptionParsing(t *testing.T) { function TestOAuth2ClientSecretOptionParsing (line 917) | func TestOAuth2ClientSecretOptionParsing(t *testing.T) { function TestOAuth2OIDCDiscoveryEndpointOptionParsing (line 933) | func TestOAuth2OIDCDiscoveryEndpointOptionParsing(t *testing.T) { function TestOAuth2OIDCProviderNameOptionParsing (line 949) | func TestOAuth2OIDCProviderNameOptionParsing(t *testing.T) { function TestOAuth2ProviderOptionParsing (line 965) | func TestOAuth2ProviderOptionParsing(t *testing.T) { function TestOAuth2RedirectURLOptionParsing (line 993) | func TestOAuth2RedirectURLOptionParsing(t *testing.T) { function TestOAuth2UserCreationOptionParsing (line 1009) | func TestOAuth2UserCreationOptionParsing(t *testing.T) { function TestPollingLimitPerHostOptionParsing (line 1045) | func TestPollingLimitPerHostOptionParsing(t *testing.T) { function TestPollingParsingErrorLimitOptionParsing (line 1061) | func TestPollingParsingErrorLimitOptionParsing(t *testing.T) { function TestPollingSchedulerOptionParsing (line 1077) | func TestPollingSchedulerOptionParsing(t *testing.T) { function TestPortOptionParsing (line 1093) | func TestPortOptionParsing(t *testing.T) { function TestRunMigrationsOptionParsing (line 1114) | func TestRunMigrationsOptionParsing(t *testing.T) { function TestSchedulerEntryFrequencyFactorOptionParsing (line 1138) | func TestSchedulerEntryFrequencyFactorOptionParsing(t *testing.T) { function TestYouTubeEmbedUrlOverrideOptionParsing (line 1154) | func TestYouTubeEmbedUrlOverrideOptionParsing(t *testing.T) { function TestCleanupArchiveReadIntervalOptionParsing (line 1196) | func TestCleanupArchiveReadIntervalOptionParsing(t *testing.T) { function TestCleanupArchiveUnreadIntervalOptionParsing (line 1212) | func TestCleanupArchiveUnreadIntervalOptionParsing(t *testing.T) { function TestCleanupFrequencyOptionParsing (line 1228) | func TestCleanupFrequencyOptionParsing(t *testing.T) { function TestCleanupRemoveSessionsIntervalOptionParsing (line 1244) | func TestCleanupRemoveSessionsIntervalOptionParsing(t *testing.T) { function TestDatabaseConnectionLifetimeOptionParsing (line 1260) | func TestDatabaseConnectionLifetimeOptionParsing(t *testing.T) { function TestForceRefreshIntervalOptionParsing (line 1276) | func TestForceRefreshIntervalOptionParsing(t *testing.T) { function TestHTTPClientProxiesOptionParsing (line 1292) | func TestHTTPClientProxiesOptionParsing(t *testing.T) { function TestHTTPClientProxyOptionParsing (line 1313) | func TestHTTPClientProxyOptionParsing(t *testing.T) { function TestHTTPClientTimeoutOptionParsing (line 1338) | func TestHTTPClientTimeoutOptionParsing(t *testing.T) { function TestFetcherAllowPrivateNetworksOptionParsing (line 1354) | func TestFetcherAllowPrivateNetworksOptionParsing(t *testing.T) { function TestIntegrationAllowPrivateNetworksOptionParsing (line 1378) | func TestIntegrationAllowPrivateNetworksOptionParsing(t *testing.T) { function TestHTTPServerTimeoutOptionParsing (line 1402) | func TestHTTPServerTimeoutOptionParsing(t *testing.T) { function TestListenAddrOptionParsing (line 1418) | func TestListenAddrOptionParsing(t *testing.T) { function TestMediaCustomProxyURLOptionParsing (line 1436) | func TestMediaCustomProxyURLOptionParsing(t *testing.T) { function TestMediaProxyHTTPClientTimeoutOptionParsing (line 1453) | func TestMediaProxyHTTPClientTimeoutOptionParsing(t *testing.T) { function TestMediaProxyPrivateKeyOptionParsing (line 1469) | func TestMediaProxyPrivateKeyOptionParsing(t *testing.T) { function TestMediaProxyResourceTypesOptionParsing (line 1486) | func TestMediaProxyResourceTypesOptionParsing(t *testing.T) { function TestMetricsAllowedNetworksOptionParsing (line 1508) | func TestMetricsAllowedNetworksOptionParsing(t *testing.T) { function TestMetricsRefreshIntervalOptionParsing (line 1526) | func TestMetricsRefreshIntervalOptionParsing(t *testing.T) { function TestPollingFrequencyOptionParsing (line 1542) | func TestPollingFrequencyOptionParsing(t *testing.T) { function TestSchedulerEntryFrequencyMaxIntervalOptionParsing (line 1558) | func TestSchedulerEntryFrequencyMaxIntervalOptionParsing(t *testing.T) { function TestSchedulerEntryFrequencyMinIntervalOptionParsing (line 1574) | func TestSchedulerEntryFrequencyMinIntervalOptionParsing(t *testing.T) { function TestSchedulerRoundRobinMaxIntervalOptionParsing (line 1590) | func TestSchedulerRoundRobinMaxIntervalOptionParsing(t *testing.T) { function TestSchedulerRoundRobinMinIntervalOptionParsing (line 1606) | func TestSchedulerRoundRobinMinIntervalOptionParsing(t *testing.T) { function TestTrustedReverseProxyNetworksOptionParsing (line 1622) | func TestTrustedReverseProxyNetworksOptionParsing(t *testing.T) { function TestYouTubeEmbedDomainOptionParsing (line 1653) | func TestYouTubeEmbedDomainOptionParsing(t *testing.T) { function TestSetLogLevelFunction (line 1670) | func TestSetLogLevelFunction(t *testing.T) { function TestSetHTTPSValueFunction (line 1697) | func TestSetHTTPSValueFunction(t *testing.T) { function TestConfigMap (line 1719) | func TestConfigMap(t *testing.T) { function TestConfigMapWithRedactedSecrets (line 1732) | func TestConfigMapWithRedactedSecrets(t *testing.T) { FILE: internal/config/parser.go type configParser (line 21) | type configParser struct method ParseEnvironmentVariables (line 31) | func (cp *configParser) ParseEnvironmentVariables() (*configOptions, e... method ParseFile (line 39) | func (cp *configParser) ParseFile(filename string) (*configOptions, er... method postParsing (line 53) | func (cp *configParser) postParsing() error { method parseLines (line 100) | func (cp *configParser) parseLines(lines []string) error { method parseLine (line 120) | func (cp *configParser) parseLine(key, value string) error { function NewConfigParser (line 25) | func NewConfigParser() *configParser { function parseStringValue (line 199) | func parseStringValue(value string, fallback string) string { function parseBoolValue (line 206) | func parseBoolValue(value string, fallback bool) (bool, error) { function parseIntValue (line 222) | func parseIntValue(value string, fallback int) int { function ParsedInt64Value (line 235) | func ParsedInt64Value(value string, fallback int64) int64 { function parseStringListValue (line 248) | func parseStringListValue(value string, fallback []string) []string { function parseDurationValue (line 268) | func parseDurationValue(value string, unit time.Duration, fallback time.... function parseURLValue (line 281) | func parseURLValue(value string, fallback *url.URL) (*url.URL, error) { function readSecretFileValue (line 294) | func readSecretFileValue(filename string) (string, error) { function parseFileContent (line 308) | func parseFileContent(r io.Reader) (lines []string) { FILE: internal/config/parser_test.go function TestParseStringValue (line 14) | func TestParseStringValue(t *testing.T) { function TestParseBoolValue (line 34) | func TestParseBoolValue(t *testing.T) { function TestParseIntValue (line 75) | func TestParseIntValue(t *testing.T) { function TestParsedInt64Value (line 101) | func TestParsedInt64Value(t *testing.T) { function TestParseStringListValue (line 121) | func TestParseStringListValue(t *testing.T) { function TestParseDurationValue (line 158) | func TestParseDurationValue(t *testing.T) { function TestParseURLValue (line 187) | func TestParseURLValue(t *testing.T) { function TestConfigFileParsing (line 217) | func TestConfigFileParsing(t *testing.T) { function TestConfigFileParsingWithIncorrectKeyValuePair (line 267) | func TestConfigFileParsingWithIncorrectKeyValuePair(t *testing.T) { function TestParseAdminPasswordFileOption (line 294) | func TestParseAdminPasswordFileOption(t *testing.T) { function TestParseAdminPasswordFileOptionWithEmptyFile (line 321) | func TestParseAdminPasswordFileOptionWithEmptyFile(t *testing.T) { function TestParseLogFileOptionDefaultValue (line 339) | func TestParseLogFileOptionDefaultValue(t *testing.T) { function TestParseLogFileOptionWithCustomFilename (line 353) | func TestParseLogFileOptionWithCustomFilename(t *testing.T) { function TestParseLogFileOptionWithEmptyValue (line 368) | func TestParseLogFileOptionWithEmptyValue(t *testing.T) { function TestParseLogDateTimeOptionDefaultValue (line 383) | func TestParseLogDateTimeOptionDefaultValue(t *testing.T) { function TestParseLogDateTimeOptionWithCustomValue (line 397) | func TestParseLogDateTimeOptionWithCustomValue(t *testing.T) { function TestParseLogDateTimeOptionWithEmptyValue (line 412) | func TestParseLogDateTimeOptionWithEmptyValue(t *testing.T) { function TestParseLogDateTimeOptionWithIncorrectValue (line 427) | func TestParseLogDateTimeOptionWithIncorrectValue(t *testing.T) { FILE: internal/config/validators.go function validateChoices (line 14) | func validateChoices(rawValue string, choices []string) error { function validateListChoices (line 21) | func validateListChoices(inputValues, choices []string) error { function validateGreaterThan (line 30) | func validateGreaterThan(rawValue string, min int) error { function validateGreaterOrEqualThan (line 41) | func validateGreaterOrEqualThan(rawValue string, min int) error { function validateRange (line 52) | func validateRange(rawValue string, min, max int) error { FILE: internal/config/validators_test.go function TestValidateChoices (line 11) | func TestValidateChoices(t *testing.T) { function TestValidateListChoices (line 90) | func TestValidateListChoices(t *testing.T) { function TestValidateGreaterThan (line 187) | func TestValidateGreaterThan(t *testing.T) { function TestValidateGreaterOrEqualThan (line 205) | func TestValidateGreaterOrEqualThan(t *testing.T) { function TestValidateRange (line 223) | func TestValidateRange(t *testing.T) { FILE: internal/crypto/crypto.go function HashFromBytes (line 19) | func HashFromBytes(value []byte) string { function SHA256 (line 26) | func SHA256(value string) string { function GenerateRandomBytes (line 32) | func GenerateRandomBytes(size int) []byte { function GenerateRandomStringHex (line 39) | func GenerateRandomStringHex(size int) string { function HashPassword (line 43) | func HashPassword(password string) (string, error) { function GenerateSHA256Hmac (line 48) | func GenerateSHA256Hmac(secret string, data []byte) string { function GenerateUUID (line 54) | func GenerateUUID() string { function ConstantTimeCmp (line 59) | func ConstantTimeCmp(a, b string) bool { FILE: internal/database/database.go function Migrate (line 13) | func Migrate(db *sql.DB) error { function IsSchemaUpToDate (line 54) | func IsSchemaUpToDate(db *sql.DB) error { FILE: internal/database/postgresql.go function NewConnectionPool (line 14) | func NewConnectionPool(dsn string, minConnections, maxConnections int, c... FILE: internal/fever/handler.go function NewHandler (line 22) | func NewHandler(store *storage.Storage) http.Handler { type feverHandler (line 27) | type feverHandler struct method serve (line 31) | func (h *feverHandler) serve(w http.ResponseWriter, r *http.Request) { method handleGroups (line 75) | func (h *feverHandler) handleGroups(w http.ResponseWriter, r *http.Req... method handleFeeds (line 127) | func (h *feverHandler) handleFeeds(w http.ResponseWriter, r *http.Requ... method handleFavicons (line 182) | func (h *feverHandler) handleFavicons(w http.ResponseWriter, r *http.R... method handleItems (line 236) | func (h *feverHandler) handleItems(w http.ResponseWriter, r *http.Requ... method handleUnreadItems (line 341) | func (h *feverHandler) handleUnreadItems(w http.ResponseWriter, r *htt... method handleSavedItems (line 374) | func (h *feverHandler) handleSavedItems(w http.ResponseWriter, r *http... method handleWriteItems (line 404) | func (h *feverHandler) handleWriteItems(w http.ResponseWriter, r *http... method handleWriteFeeds (line 486) | func (h *feverHandler) handleWriteFeeds(w http.ResponseWriter, r *http... method handleWriteGroups (line 515) | func (h *feverHandler) handleWriteGroups(w http.ResponseWriter, r *htt... function buildFeedGroups (line 554) | func buildFeedGroups(feeds model.Feeds) []feedsGroups { FILE: internal/fever/middleware.go function Middleware (line 17) | func Middleware(store *storage.Storage) func(http.Handler) http.Handler { FILE: internal/fever/response.go type baseResponse (line 10) | type baseResponse struct method SetCommonValues (line 16) | func (b *baseResponse) SetCommonValues() { function newBaseResponse (line 40) | func newBaseResponse() baseResponse { function newAuthFailureResponse (line 46) | func newAuthFailureResponse() baseResponse { type groupsResponse (line 50) | type groupsResponse struct type feedsResponse (line 56) | type feedsResponse struct type faviconsResponse (line 62) | type faviconsResponse struct type itemsResponse (line 67) | type itemsResponse struct type unreadResponse (line 73) | type unreadResponse struct type savedResponse (line 78) | type savedResponse struct type group (line 83) | type group struct type feedsGroups (line 88) | type feedsGroups struct type feed (line 93) | type feed struct type item (line 103) | type item struct type favicon (line 115) | type favicon struct FILE: internal/googlereader/handler.go function NewHandler (line 38) | func NewHandler(store *storage.Storage) http.Handler { type greaderHandler (line 68) | type greaderHandler struct method clientLoginHandler (line 72) | func (h *greaderHandler) clientLoginHandler(w http.ResponseWriter, r *... method tokenHandler (line 149) | func (h *greaderHandler) tokenHandler(w http.ResponseWriter, r *http.R... method editTagHandler (line 187) | func (h *greaderHandler) editTagHandler(w http.ResponseWriter, r *http... method quickAddHandler (line 324) | func (h *greaderHandler) quickAddHandler(w http.ResponseWriter, r *htt... method feedIconURL (line 519) | func (h *greaderHandler) feedIconURL(f *model.Feed) string { method editSubscriptionHandler (line 526) | func (h *greaderHandler) editSubscriptionHandler(w http.ResponseWriter... method streamItemContentsHandler (line 605) | func (h *greaderHandler) streamItemContentsHandler(w http.ResponseWrit... method disableTagHandler (line 739) | func (h *greaderHandler) disableTagHandler(w http.ResponseWriter, r *h... method renameTagHandler (line 780) | func (h *greaderHandler) renameTagHandler(w http.ResponseWriter, r *ht... method tagListHandler (line 847) | func (h *greaderHandler) tagListHandler(w http.ResponseWriter, r *http... method subscriptionListHandler (line 883) | func (h *greaderHandler) subscriptionListHandler(w http.ResponseWriter... method fallbackHandler (line 920) | func (h *greaderHandler) fallbackHandler(w http.ResponseWriter, r *htt... method userInfoHandler (line 932) | func (h *greaderHandler) userInfoHandler(w http.ResponseWriter, r *htt... method streamItemIDsHandler (line 955) | func (h *greaderHandler) streamItemIDsHandler(w http.ResponseWriter, r... method handleReadingListStreamHandler (line 1008) | func (h *greaderHandler) handleReadingListStreamHandler(w http.Respons... method handleStarredStreamHandler (line 1051) | func (h *greaderHandler) handleStarredStreamHandler(w http.ResponseWri... method handleReadStreamHandler (line 1072) | func (h *greaderHandler) handleReadStreamHandler(w http.ResponseWriter... method handleFeedStreamHandler (line 1116) | func (h *greaderHandler) handleFeedStreamHandler(w http.ResponseWriter... method markAllAsReadHandler (line 1153) | func (h *greaderHandler) markAllAsReadHandler(w http.ResponseWriter, r... function getFeed (line 395) | func getFeed(stream Stream, store *storage.Storage, userID int64) (*mode... function getOrCreateCategory (line 403) | func getOrCreateCategory(streamCategory Stream, store *storage.Storage, ... function subscribe (line 416) | func subscribe(newFeed Stream, category Stream, title string, store *sto... function unsubscribe (line 449) | func unsubscribe(streams []Stream, store *storage.Storage, userID int64)... function rename (line 463) | func rename(feedStream Stream, title string, store *storage.Storage, use... function move (line 489) | func move(feedStream Stream, labelStream Stream, store *storage.Storage,... function getItemRefsAndContinuation (line 1094) | func getItemRefsAndContinuation(builder storage.EntryQueryBuilder, rm re... function checkAndSimplifyTags (line 1232) | func checkAndSimplifyTags(addTags []Stream, removeTags []Stream) (map[St... function checkOutputFormat (line 1281) | func checkOutputFormat(r *http.Request) error { FILE: internal/googlereader/item.go constant ItemIDPrefix (line 15) | ItemIDPrefix = "tag:google.com,2005:reader/item/" constant ItemIDFormat (line 16) | ItemIDFormat = "tag:google.com,2005:reader/item/%016x" function convertEntryIDToLongFormItemID (line 19) | func convertEntryIDToLongFormItemID(entryID int64) string { function parseItemID (line 29) | func parseItemID(itemIDValue string) (int64, error) { function parseItemIDsFromRequest (line 59) | func parseItemIDsFromRequest(r *http.Request) ([]int64, error) { FILE: internal/googlereader/item_test.go function TestConvertEntryIDToLongFormItemID (line 13) | func TestConvertEntryIDToLongFormItemID(t *testing.T) { function TestParseItemIDsFromRequest (line 23) | func TestParseItemIDsFromRequest(t *testing.T) { function TestParseItemID (line 56) | func TestParseItemID(t *testing.T) { FILE: internal/googlereader/middleware.go type authMiddleware (line 20) | type authMiddleware struct method validateApiKey (line 28) | func (m *authMiddleware) validateApiKey(next http.Handler) http.Handler { function newAuthMiddleware (line 24) | func newAuthMiddleware(s *storage.Storage) *authMiddleware { function getAuthToken (line 177) | func getAuthToken(username, password string) string { FILE: internal/googlereader/parameters.go constant paramItemIDs (line 8) | paramItemIDs = "i" constant paramStreamID (line 10) | paramStreamID = "s" constant paramStreamExcludes (line 12) | paramStreamExcludes = "xt" constant paramStreamFilters (line 14) | paramStreamFilters = "it" constant paramStreamMaxItems (line 16) | paramStreamMaxItems = "n" constant paramStreamOrder (line 18) | paramStreamOrder = "r" constant paramStreamStartTime (line 20) | paramStreamStartTime = "ot" constant paramStreamStopTime (line 22) | paramStreamStopTime = "nt" constant paramTagsRemove (line 24) | paramTagsRemove = "r" constant paramTagsAdd (line 26) | paramTagsAdd = "a" constant paramSubscribeAction (line 28) | paramSubscribeAction = "ac" constant paramTitle (line 30) | paramTitle = "t" constant paramQuickAdd (line 32) | paramQuickAdd = "quickadd" constant paramDestination (line 34) | paramDestination = "dest" constant paramContinuation (line 36) | paramContinuation = "c" constant paramTimestamp (line 38) | paramTimestamp = "ts" FILE: internal/googlereader/prefix_suffix.go constant streamPrefix (line 8) | streamPrefix = "user/-/state/com.google/" constant userStreamPrefix (line 10) | userStreamPrefix = "user/%d/state/com.google/" constant labelPrefix (line 12) | labelPrefix = "user/-/label/" constant userLabelPrefix (line 14) | userLabelPrefix = "user/%d/label/" constant feedPrefix (line 16) | feedPrefix = "feed/" constant readStreamSuffix (line 18) | readStreamSuffix = "read" constant starredStreamSuffix (line 20) | starredStreamSuffix = "starred" constant readingListStreamSuffix (line 22) | readingListStreamSuffix = "reading-list" constant keptUnreadStreamSuffix (line 24) | keptUnreadStreamSuffix = "kept-unread" constant broadcastStreamSuffix (line 26) | broadcastStreamSuffix = "broadcast" constant broadcastFriendsStreamSuffix (line 28) | broadcastFriendsStreamSuffix = "broadcast-friends" constant likeStreamSuffix (line 30) | likeStreamSuffix = "like" FILE: internal/googlereader/request_modifier.go type requestModifiers (line 14) | type requestModifiers struct method String (line 27) | func (r requestModifiers) String() string { function parseStreamFilterFromRequest (line 60) | func parseStreamFilterFromRequest(r *http.Request) (requestModifiers, er... FILE: internal/googlereader/response.go type loginResponse (line 13) | type loginResponse struct method String (line 19) | func (l loginResponse) String() string { type userInfoResponse (line 23) | type userInfoResponse struct type subscriptionResponse (line 30) | type subscriptionResponse struct type subscriptionsResponse (line 39) | type subscriptionsResponse struct type quickAddResponse (line 43) | type quickAddResponse struct type subscriptionCategoryResponse (line 50) | type subscriptionCategoryResponse struct type itemRef (line 56) | type itemRef struct type streamIDResponse (line 62) | type streamIDResponse struct type tagsResponse (line 67) | type tagsResponse struct type streamContentItemsResponse (line 71) | type streamContentItemsResponse struct type contentItem (line 81) | type contentItem struct type contentHREFType (line 98) | type contentHREFType struct type contentHREF (line 103) | type contentHREF struct type contentItemEnclosure (line 107) | type contentItemEnclosure struct type contentItemContent (line 111) | type contentItemContent struct type contentItemOrigin (line 116) | type contentItemOrigin struct function sendUnauthorizedResponse (line 122) | func sendUnauthorizedResponse(w http.ResponseWriter, r *http.Request) { FILE: internal/googlereader/stream.go type StreamType (line 11) | type StreamType method String (line 46) | func (st StreamType) String() string { constant NoStream (line 15) | NoStream StreamType = iota constant ReadStream (line 17) | ReadStream constant StarredStream (line 19) | StarredStream constant ReadingListStream (line 21) | ReadingListStream constant KeptUnreadStream (line 23) | KeptUnreadStream constant BroadcastStream (line 25) | BroadcastStream constant BroadcastFriendsStream (line 27) | BroadcastFriendsStream constant LabelStream (line 29) | LabelStream constant FeedStream (line 31) | FeedStream constant LikeStream (line 33) | LikeStream type Stream (line 37) | type Stream struct method String (line 42) | func (s Stream) String() string { function getStream (line 73) | func getStream(streamID string, userID int64) (Stream, error) { function getStreams (line 109) | func getStreams(streamIDs []string, userID int64) ([]Stream, error) { FILE: internal/http/client/client.go type Options (line 21) | type Options struct function NewClientWithOptions (line 27) | func NewClientWithOptions(opts Options) *http.Client { FILE: internal/http/client/client_test.go function TestNewClientWithoutBlockingPrivateNetworks (line 15) | func TestNewClientWithoutBlockingPrivateNetworks(t *testing.T) { function TestBlockPrivateNetworksBlocksLoopback (line 33) | func TestBlockPrivateNetworksBlocksLoopback(t *testing.T) { function TestBlockPrivateNetworksAllowsPublicIPs (line 50) | func TestBlockPrivateNetworksAllowsPublicIPs(t *testing.T) { function TestNoCustomTransportWhenNotBlocking (line 65) | func TestNoCustomTransportWhenNotBlocking(t *testing.T) { function TestBlockPrivateNetworksBlocksPrivateIP (line 72) | func TestBlockPrivateNetworksBlocksPrivateIP(t *testing.T) { function TestBlockPrivateNetworksAllowsLoopbackWhenDisabled (line 97) | func TestBlockPrivateNetworksAllowsLoopbackWhenDisabled(t *testing.T) { FILE: internal/http/cookie/cookie.go constant CookieAppSessionID (line 15) | CookieAppSessionID = "MinifluxAppSessionID" constant CookieUserSessionID (line 16) | CookieUserSessionID = "MinifluxUserSessionID" function New (line 20) | func New(name, value string, isHTTPS bool, path string) *http.Cookie { function Expired (line 33) | func Expired(name string, isHTTPS bool, path string) *http.Cookie { function basePath (line 46) | func basePath(path string) string { FILE: internal/http/request/client_ip.go function IsTrustedIP (line 13) | func IsTrustedIP(remoteIP string, trustedNetworks []string) bool { function FindClientIP (line 38) | func FindClientIP(r *http.Request, isTrustedProxyClient bool) string { function FindRemoteIP (line 62) | func FindRemoteIP(r *http.Request) string { function dropIPv6zone (line 85) | func dropIPv6zone(address string) string { FILE: internal/http/request/client_ip_test.go function TestFindClientIPWithoutHeaders (line 11) | func TestFindClientIPWithoutHeaders(t *testing.T) { function TestFindClientIPWithXFFHeader (line 48) | func TestFindClientIPWithXFFHeader(t *testing.T) { function TestClientIPWithXRealIPHeader (line 95) | func TestClientIPWithXRealIPHeader(t *testing.T) { function TestClientIPWithBothHeaders (line 105) | func TestClientIPWithBothHeaders(t *testing.T) { function TestClientIPWithUnixSocketRemoteAddrAndBothHeaders (line 117) | func TestClientIPWithUnixSocketRemoteAddrAndBothHeaders(t *testing.T) { function TestIsTrustedIP (line 129) | func TestIsTrustedIP(t *testing.T) { function TestFindRemoteIP (line 162) | func TestFindRemoteIP(t *testing.T) { FILE: internal/http/request/context.go type ContextKey (line 15) | type ContextKey constant UserIDContextKey (line 19) | UserIDContextKey ContextKey = iota constant UserNameContextKey (line 20) | UserNameContextKey constant UserTimezoneContextKey (line 21) | UserTimezoneContextKey constant IsAdminUserContextKey (line 22) | IsAdminUserContextKey constant IsAuthenticatedContextKey (line 23) | IsAuthenticatedContextKey constant UserSessionTokenContextKey (line 24) | UserSessionTokenContextKey constant UserLanguageContextKey (line 25) | UserLanguageContextKey constant UserThemeContextKey (line 26) | UserThemeContextKey constant SessionIDContextKey (line 27) | SessionIDContextKey constant CSRFContextKey (line 28) | CSRFContextKey constant OAuth2StateContextKey (line 29) | OAuth2StateContextKey constant OAuth2CodeVerifierContextKey (line 30) | OAuth2CodeVerifierContextKey constant FlashMessageContextKey (line 31) | FlashMessageContextKey constant FlashErrorMessageContextKey (line 32) | FlashErrorMessageContextKey constant LastForceRefreshContextKey (line 33) | LastForceRefreshContextKey constant ClientIPContextKey (line 34) | ClientIPContextKey constant GoogleReaderTokenKey (line 35) | GoogleReaderTokenKey constant WebAuthnDataContextKey (line 36) | WebAuthnDataContextKey function WebAuthnSessionData (line 40) | func WebAuthnSessionData(r *http.Request) *model.WebAuthnSession { function GoogleReaderToken (line 50) | func GoogleReaderToken(r *http.Request) string { function IsAdminUser (line 55) | func IsAdminUser(r *http.Request) bool { function IsAuthenticated (line 60) | func IsAuthenticated(r *http.Request) bool { function UserID (line 65) | func UserID(r *http.Request) int64 { function UserName (line 70) | func UserName(r *http.Request) string { function UserTimezone (line 79) | func UserTimezone(r *http.Request) string { function UserLanguage (line 88) | func UserLanguage(r *http.Request) string { function UserTheme (line 97) | func UserTheme(r *http.Request) string { function CSRF (line 106) | func CSRF(r *http.Request) string { function SessionID (line 111) | func SessionID(r *http.Request) string { function UserSessionToken (line 116) | func UserSessionToken(r *http.Request) string { function OAuth2State (line 121) | func OAuth2State(r *http.Request) string { function OAuth2CodeVerifier (line 126) | func OAuth2CodeVerifier(r *http.Request) string { function FlashMessage (line 131) | func FlashMessage(r *http.Request) string { function FlashErrorMessage (line 136) | func FlashErrorMessage(r *http.Request) string { function LastForceRefresh (line 141) | func LastForceRefresh(r *http.Request) time.Time { function ClientIP (line 151) | func ClientIP(r *http.Request) string { function getContextStringValue (line 155) | func getContextStringValue(r *http.Request, key ContextKey) string { function getContextBoolValue (line 164) | func getContextBoolValue(r *http.Request, key ContextKey) bool { function getContextInt64Value (line 173) | func getContextInt64Value(r *http.Request, key ContextKey) int64 { FILE: internal/http/request/context_test.go function TestContextStringValue (line 15) | func TestContextStringValue(t *testing.T) { function TestContextStringValueWithInvalidType (line 29) | func TestContextStringValueWithInvalidType(t *testing.T) { function TestContextStringValueWhenUnset (line 43) | func TestContextStringValueWhenUnset(t *testing.T) { function TestContextBoolValue (line 54) | func TestContextBoolValue(t *testing.T) { function TestContextBoolValueWithInvalidType (line 68) | func TestContextBoolValueWithInvalidType(t *testing.T) { function TestContextBoolValueWhenUnset (line 82) | func TestContextBoolValueWhenUnset(t *testing.T) { function TestContextInt64Value (line 93) | func TestContextInt64Value(t *testing.T) { function TestContextInt64ValueWithInvalidType (line 107) | func TestContextInt64ValueWithInvalidType(t *testing.T) { function TestContextInt64ValueWhenUnset (line 121) | func TestContextInt64ValueWhenUnset(t *testing.T) { function TestIsAdmin (line 132) | func TestIsAdmin(t *testing.T) { function TestIsAuthenticated (line 154) | func TestIsAuthenticated(t *testing.T) { function TestUserID (line 176) | func TestUserID(t *testing.T) { function TestUserName (line 198) | func TestUserName(t *testing.T) { function TestUserTimezone (line 220) | func TestUserTimezone(t *testing.T) { function TestUserLanguage (line 242) | func TestUserLanguage(t *testing.T) { function TestUserTheme (line 264) | func TestUserTheme(t *testing.T) { function TestCSRF (line 286) | func TestCSRF(t *testing.T) { function TestSessionID (line 308) | func TestSessionID(t *testing.T) { function TestUserSessionToken (line 330) | func TestUserSessionToken(t *testing.T) { function TestOAuth2State (line 352) | func TestOAuth2State(t *testing.T) { function TestOAuth2CodeVerifier (line 374) | func TestOAuth2CodeVerifier(t *testing.T) { function TestFlashMessage (line 396) | func TestFlashMessage(t *testing.T) { function TestFlashErrorMessage (line 418) | func TestFlashErrorMessage(t *testing.T) { function TestLastForceRefresh (line 440) | func TestLastForceRefresh(t *testing.T) { function TestWebAuthnSessionData (line 473) | func TestWebAuthnSessionData(t *testing.T) { function TestClientIP (line 501) | func TestClientIP(t *testing.T) { function TestGoogleReaderToken (line 523) | func TestGoogleReaderToken(t *testing.T) { FILE: internal/http/request/cookie.go function CookieValue (line 9) | func CookieValue(r *http.Request, name string) string { FILE: internal/http/request/cookie_test.go function TestGetCookieValue (line 11) | func TestGetCookieValue(t *testing.T) { function TestGetCookieValueWhenUnset (line 23) | func TestGetCookieValueWhenUnset(t *testing.T) { FILE: internal/http/request/params.go function FormInt64Value (line 13) | func FormInt64Value(r *http.Request, param string) int64 { function RouteInt64Param (line 24) | func RouteInt64Param(r *http.Request, param string) int64 { function RouteStringParam (line 38) | func RouteStringParam(r *http.Request, param string) string { function QueryStringParam (line 43) | func QueryStringParam(r *http.Request, param, defaultValue string) string { function QueryStringParamList (line 52) | func QueryStringParamList(r *http.Request, param string) []string { function QueryIntParam (line 69) | func QueryIntParam(r *http.Request, param string, defaultValue int) int { function QueryInt64Param (line 88) | func QueryInt64Param(r *http.Request, param string, defaultValue int64) ... function QueryBoolParam (line 107) | func QueryBoolParam(r *http.Request, param string, defaultValue bool) bo... function HasQueryParam (line 123) | func HasQueryParam(r *http.Request, param string) bool { function routeParam (line 129) | func routeParam(r *http.Request, param string) string { FILE: internal/http/request/params_test.go function TestFormInt64Value (line 14) | func TestFormInt64Value(t *testing.T) { function TestRouteStringParamWithServerMux (line 43) | func TestRouteStringParamWithServerMux(t *testing.T) { function TestRouteInt64ParamWithServerMux (line 70) | func TestRouteInt64ParamWithServerMux(t *testing.T) { function TestQueryStringParam (line 111) | func TestQueryStringParam(t *testing.T) { function TestQueryIntParam (line 130) | func TestQueryIntParam(t *testing.T) { function TestQueryInt64Param (line 163) | func TestQueryInt64Param(t *testing.T) { function TestQueryBoolParam (line 196) | func TestQueryBoolParam(t *testing.T) { function TestQueryStringParamList (line 229) | func TestQueryStringParamList(t *testing.T) { function TestHasQueryParam (line 248) | func TestHasQueryParam(t *testing.T) { FILE: internal/http/response/builder.go constant compressionThreshold (line 18) | compressionThreshold = 1024 type Builder (line 21) | type Builder struct method WithStatus (line 36) | func (b *Builder) WithStatus(statusCode int) *Builder { method WithHeader (line 42) | func (b *Builder) WithHeader(key, value string) *Builder { method WithBodyAsBytes (line 48) | func (b *Builder) WithBodyAsBytes(body []byte) *Builder { method WithBodyAsString (line 54) | func (b *Builder) WithBodyAsString(body string) *Builder { method WithBodyAsReader (line 60) | func (b *Builder) WithBodyAsReader(body io.Reader) *Builder { method WithAttachment (line 66) | func (b *Builder) WithAttachment(filename string) *Builder { method WithoutCompression (line 72) | func (b *Builder) WithoutCompression() *Builder { method WithCaching (line 78) | func (b *Builder) WithCaching(etag string, duration time.Duration, cal... method Write (line 94) | func (b *Builder) Write() { method writeHeaders (line 115) | func (b *Builder) writeHeaders() { method compress (line 127) | func (b *Builder) compress(data []byte) { function NewBuilder (line 31) | func NewBuilder(w http.ResponseWriter, r *http.Request) *Builder { function normalizeETag (line 163) | func normalizeETag(etag string) string { function ifNoneMatch (line 174) | func ifNoneMatch(headerValue, etag string) bool { FILE: internal/http/response/builder_test.go function TestResponseHasCommonHeaders (line 15) | func TestResponseHasCommonHeaders(t *testing.T) { function TestBuildResponseWithCustomStatusCode (line 43) | func TestBuildResponseWithCustomStatusCode(t *testing.T) { function TestBuildResponseWithCustomHeader (line 64) | func TestBuildResponseWithCustomHeader(t *testing.T) { function TestBuildResponseWithAttachment (line 86) | func TestBuildResponseWithAttachment(t *testing.T) { function TestBuildResponseWithByteBody (line 108) | func TestBuildResponseWithByteBody(t *testing.T) { function TestBuildResponseWithCachingEnabled (line 129) | func TestBuildResponseWithCachingEnabled(t *testing.T) { function TestBuildResponseWithCachingAndIfNoneMatch (line 173) | func TestBuildResponseWithCachingAndIfNoneMatch(t *testing.T) { function TestNormalizeETag (line 226) | func TestNormalizeETag(t *testing.T) { function TestIfNoneMatch (line 247) | func TestIfNoneMatch(t *testing.T) { function TestBuildResponseWithBrotliCompression (line 273) | func TestBuildResponseWithBrotliCompression(t *testing.T) { function TestBuildResponseWithGzipCompression (line 297) | func TestBuildResponseWithGzipCompression(t *testing.T) { function TestBuildResponseWithDeflateCompression (line 321) | func TestBuildResponseWithDeflateCompression(t *testing.T) { function TestBuildResponseWithCompressionDisabled (line 351) | func TestBuildResponseWithCompressionDisabled(t *testing.T) { function TestBuildResponseWithDeflateCompressionAndSmallPayload (line 381) | func TestBuildResponseWithDeflateCompressionAndSmallPayload(t *testing.T) { function TestBuildResponseWithoutCompressionHeader (line 411) | func TestBuildResponseWithoutCompressionHeader(t *testing.T) { function TestBuildResponseWithReaderBody (line 440) | func TestBuildResponseWithReaderBody(t *testing.T) { FILE: internal/http/response/html.go function HTML (line 15) | func HTML[T []byte | string](w http.ResponseWriter, r *http.Request, bod... function HTMLServerError (line 29) | func HTMLServerError(w http.ResponseWriter, r *http.Request, err error) { function HTMLBadRequest (line 53) | func HTMLBadRequest(w http.ResponseWriter, r *http.Request, err error) { function HTMLForbidden (line 77) | func HTMLForbidden(w http.ResponseWriter, r *http.Request) { function HTMLNotFound (line 99) | func HTMLNotFound(w http.ResponseWriter, r *http.Request) { function HTMLRedirect (line 121) | func HTMLRedirect(w http.ResponseWriter, r *http.Request, uri string) { function HTMLRequestedRangeNotSatisfiable (line 126) | func HTMLRequestedRangeNotSatisfiable(w http.ResponseWriter, r *http.Req... FILE: internal/http/response/html_test.go function TestHTMLResponse (line 13) | func TestHTMLResponse(t *testing.T) { function TestHTMLServerErrorResponse (line 48) | func TestHTMLServerErrorResponse(t *testing.T) { function TestHTMLBadRequestResponse (line 76) | func TestHTMLBadRequestResponse(t *testing.T) { function TestHTMLForbiddenResponse (line 104) | func TestHTMLForbiddenResponse(t *testing.T) { function TestHTMLNotFoundResponse (line 132) | func TestHTMLNotFoundResponse(t *testing.T) { function TestHTMLRedirectResponse (line 160) | func TestHTMLRedirectResponse(t *testing.T) { function TestHTMLRequestedRangeNotSatisfiable (line 186) | func TestHTMLRequestedRangeNotSatisfiable(t *testing.T) { FILE: internal/http/response/json.go constant jsonContentTypeHeader (line 15) | jsonContentTypeHeader = `application/json` function JSON (line 18) | func JSON(w http.ResponseWriter, r *http.Request, body any) { function JSONCreated (line 32) | func JSONCreated(w http.ResponseWriter, r *http.Request, body any) { function JSONAccepted (line 47) | func JSONAccepted(w http.ResponseWriter, r *http.Request) { function JSONServerError (line 55) | func JSONServerError(w http.ResponseWriter, r *http.Request, err error) { function JSONBadRequest (line 77) | func JSONBadRequest(w http.ResponseWriter, r *http.Request, err error) { function JSONUnauthorized (line 99) | func JSONUnauthorized(w http.ResponseWriter, r *http.Request) { function JSONForbidden (line 120) | func JSONForbidden(w http.ResponseWriter, r *http.Request) { function JSONNotFound (line 141) | func JSONNotFound(w http.ResponseWriter, r *http.Request) { function generateJSONError (line 161) | func generateJSONError(err error) []byte { FILE: internal/http/response/json_test.go function TestJSONResponse (line 13) | func TestJSONResponse(t *testing.T) { function TestJSONCreatedResponse (line 43) | func TestJSONCreatedResponse(t *testing.T) { function TestJSONAcceptedResponse (line 71) | func TestJSONAcceptedResponse(t *testing.T) { function TestJSONServerErrorResponse (line 99) | func TestJSONServerErrorResponse(t *testing.T) { function TestJSONBadRequestResponse (line 129) | func TestJSONBadRequestResponse(t *testing.T) { function TestJSONUnauthorizedResponse (line 157) | func TestJSONUnauthorizedResponse(t *testing.T) { function TestJSONForbiddenResponse (line 185) | func TestJSONForbiddenResponse(t *testing.T) { function TestJSONNotFoundResponse (line 213) | func TestJSONNotFoundResponse(t *testing.T) { function TestBuildInvalidJSONResponse (line 241) | func TestBuildInvalidJSONResponse(t *testing.T) { function TestBuildInvalidJSONCreatedResponse (line 269) | func TestBuildInvalidJSONCreatedResponse(t *testing.T) { function TestGenerateJSONError (line 297) | func TestGenerateJSONError(t *testing.T) { FILE: internal/http/response/response.go constant ContentSecurityPolicyForUntrustedContent (line 16) | ContentSecurityPolicyForUntrustedContent = `default-src 'none'; form-act... function NoContent (line 19) | func NoContent(w http.ResponseWriter, r *http.Request) { FILE: internal/http/response/response_test.go function TestNoContentResponse (line 12) | func TestNoContentResponse(t *testing.T) { FILE: internal/http/response/text.go function Text (line 9) | func Text(w http.ResponseWriter, r *http.Request, body string) { FILE: internal/http/response/text_test.go function TestTextResponse (line 12) | func TestTextResponse(t *testing.T) { FILE: internal/http/response/xml.go function XML (line 9) | func XML(w http.ResponseWriter, r *http.Request, body string) { function XMLAttachment (line 17) | func XMLAttachment(w http.ResponseWriter, r *http.Request, filename stri... FILE: internal/http/response/xml_test.go function TestXMLResponse (line 12) | func TestXMLResponse(t *testing.T) { function TestXMLAttachmentResponse (line 40) | func TestXMLAttachmentResponse(t *testing.T) { FILE: internal/http/server/healthcheck.go function livenessProbe (line 13) | func livenessProbe(w http.ResponseWriter, r *http.Request) { function newReadinessProbe (line 18) | func newReadinessProbe(store *storage.Storage) http.HandlerFunc { FILE: internal/http/server/httpd.go function StartWebServer (line 24) | func StartWebServer(store *storage.Storage, pool *worker.Pool) []*http.S... function startSystemdSocketServer (line 103) | func startSystemdSocketServer(server *http.Server) { function startUnixSocketServer (line 118) | func startUnixSocketServer(server *http.Server, socketFile string) { function startAutoCertTLSServer (line 155) | func startAutoCertTLSServer(server *http.Server, autoTLSConfig *tls.Conf... function startTLSServer (line 172) | func startTLSServer(server *http.Server, certFile, keyFile string) { function startHTTPServer (line 185) | func startHTTPServer(server *http.Server) { function printErrorAndExit (line 196) | func printErrorAndExit(format string, a ...any) { FILE: internal/http/server/metrics.go function metricsHandler (line 16) | func metricsHandler() http.Handler { function isAllowedToAccessMetricsEndpoint (line 32) | func isAllowedToAccessMetricsEndpoint(r *http.Request) bool { FILE: internal/http/server/middleware.go function middleware (line 16) | func middleware(next http.Handler) http.Handler { FILE: internal/http/server/routes.go function newRouter (line 18) | func newRouter(store *storage.Storage, pool *worker.Pool) http.Handler { FILE: internal/integration/apprise/apprise.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second type Client (line 24) | type Client struct method SendNotification (line 33) | func (c *Client) SendNotification(feed *model.Feed, entries model.Entr... function NewClient (line 29) | func NewClient(serviceURL, baseURL string) *Client { FILE: internal/integration/archiveorg/archiveorg.go constant defaultClientTimeout (line 16) | defaultClientTimeout = 30 * time.Second constant options (line 19) | options = "delay_wb_availability=1&if_not_archived_within=15d" type Client (line 21) | type Client struct method SendURL (line 27) | func (c *Client) SendURL(entryURL string) error { function NewClient (line 23) | func NewClient() *Client { FILE: internal/integration/betula/betula.go constant defaultClientTimeout (line 19) | defaultClientTimeout = 10 * time.Second type Client (line 21) | type Client struct method CreateBookmark (line 30) | func (c *Client) CreateBookmark(entryURL, entryTitle string, tags []st... function NewClient (line 26) | func NewClient(url, token string) *Client { FILE: internal/integration/cubox/cubox.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second type Client (line 24) | type Client struct method SaveLink (line 32) | func (c *Client) SaveLink(entryURL string) error { function NewClient (line 28) | func NewClient(apiLink string) *Client { type card (line 69) | type card struct FILE: internal/integration/discord/discord.go constant defaultClientTimeout (line 23) | defaultClientTimeout = 10 * time.Second constant discordMsgColor (line 24) | discordMsgColor = 5793266 type Client (line 26) | type Client struct method SendDiscordMsg (line 34) | func (c *Client) SendDiscordMsg(feed *model.Feed, entries model.Entrie... function NewClient (line 30) | func NewClient(webhookURL string) *Client { type discordFields (line 97) | type discordFields struct type discordEmbed (line 103) | type discordEmbed struct type discordMessage (line 109) | type discordMessage struct FILE: internal/integration/espial/espial.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second type Client (line 22) | type Client struct method CreateLink (line 31) | func (c *Client) CreateLink(entryURL, entryTitle, espialTags string) e... function NewClient (line 27) | func NewClient(baseURL, apiKey string) *Client { type espialDocument (line 78) | type espialDocument struct FILE: internal/integration/instapaper/instapaper.go constant defaultClientTimeout (line 17) | defaultClientTimeout = 10 * time.Second type Client (line 19) | type Client struct method AddURL (line 28) | func (c *Client) AddURL(entryURL, entryTitle string) error { function NewClient (line 24) | func NewClient(username, password string) *Client { FILE: internal/integration/integration.go function SendEntry (line 41) | func SendEntry(entry *model.Entry, userIntegrations *model.Integration) { function PushEntries (line 511) | func PushEntries(feed *model.Feed, entries model.Entries, userIntegratio... FILE: internal/integration/integration_test.go function TestSendEntryLogsLinkwardenCollectionID (line 15) | func TestSendEntryLogsLinkwardenCollectionID(t *testing.T) { function TestSendEntryLogsLinkwardenWithoutCollectionID (line 41) | func TestSendEntryLogsLinkwardenWithoutCollectionID(t *testing.T) { FILE: internal/integration/karakeep/karakeep.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second type Client (line 23) | type Client struct method attachTags (line 56) | func (c *Client) attachTags(entryID string) error { method SaveURL (line 110) | func (c *Client) SaveURL(entryURL string) error { type tagItem (line 30) | type tagItem struct type saveURLPayload (line 34) | type saveURLPayload struct type saveURLResponse (line 39) | type saveURLResponse struct type attachTagsPayload (line 43) | type attachTagsPayload struct type errorResponse (line 47) | type errorResponse struct function NewClient (line 52) | func NewClient(apiToken string, apiEndpoint string, tags string) *Client { FILE: internal/integration/linkace/linkace.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second type Client (line 23) | type Client struct method AddURL (line 35) | func (c *Client) AddURL(entryURL, entryTitle string) error { function NewClient (line 31) | func NewClient(baseURL, apiKey, tags string, private bool, checkDisabled... type createItemRequest (line 83) | type createItemRequest struct FILE: internal/integration/linkding/linkding.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second type Client (line 23) | type Client struct method CreateBookmark (line 34) | func (c *Client) CreateBookmark(entryURL, entryTitle string) error { function NewClient (line 30) | func NewClient(baseURL, apiKey, tags string, unread bool) *Client { type linkdingBookmark (line 82) | type linkdingBookmark struct FILE: internal/integration/linktaco/linktaco.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second constant defaultGraphQLURL (line 22) | defaultGraphQLURL = "https://api.linktaco.com/query" constant maxTags (line 23) | maxTags = 10 constant maxDescriptionLength (line 24) | maxDescriptionLength = 500 type Client (line 27) | type Client struct method CreateBookmark (line 48) | func (c *Client) CreateBookmark(entryURL, entryTitle, entryContent str... function NewClient (line 35) | func NewClient(apiToken, orgSlug, tags, visibility string) *Client { FILE: internal/integration/linktaco/linktaco_test.go function TestCreateBookmark (line 17) | func TestCreateBookmark(t *testing.T) { function TestNewClient (line 279) | func TestNewClient(t *testing.T) { function TestGraphQLMutation (line 329) | func TestGraphQLMutation(t *testing.T) { function BenchmarkCreateBookmark (line 402) | func BenchmarkCreateBookmark(b *testing.B) { function BenchmarkTagProcessing (line 431) | func BenchmarkTagProcessing(b *testing.B) { function configureIntegrationAllowPrivateNetworksOption (line 448) | func configureIntegrationAllowPrivateNetworksOption(t *testing.T) { FILE: internal/integration/linkwarden/linkwarden.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second type Client (line 23) | type Client struct method CreateBookmark (line 43) | func (c *Client) CreateBookmark(entryURL, entryTitle string) error { type linkwardenCollection (line 29) | type linkwardenCollection struct type linkwardenRequest (line 33) | type linkwardenRequest struct function NewClient (line 39) | func NewClient(baseURL, apiKey string, collectionID *int64) *Client { FILE: internal/integration/linkwarden/linkwarden_test.go function TestCreateBookmark (line 18) | func TestCreateBookmark(t *testing.T) { function TestNewClient (line 282) | func TestNewClient(t *testing.T) { function configureIntegrationAllowPrivateNetworksOption (line 330) | func configureIntegrationAllowPrivateNetworksOption(t *testing.T) { FILE: internal/integration/matrixbot/client.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second type Client (line 22) | type Client struct method DiscoverEndpoints (line 31) | func (c *Client) DiscoverEndpoints() (*DiscoveryEndpointResponse, erro... method Login (line 65) | func (c *Client) Login(homeServerURL, matrixUsername, matrixPassword s... method SendFormattedTextMessage (line 114) | func (c *Client) SendFormattedTextMessage(homeServerURL, accessToken, ... function NewClient (line 26) | func NewClient(matrixBaseURL string) *Client { type HomeServerInformation (line 162) | type HomeServerInformation struct type IdentityServerInformation (line 166) | type IdentityServerInformation struct type DiscoveryEndpointResponse (line 170) | type DiscoveryEndpointResponse struct type UserIdentifier (line 175) | type UserIdentifier struct type LoginRequest (line 180) | type LoginRequest struct type LoginResponse (line 186) | type LoginResponse struct type TextMessageEventRequest (line 193) | type TextMessageEventRequest struct type RoomEventResponse (line 200) | type RoomEventResponse struct FILE: internal/integration/matrixbot/matrixbot.go function PushEntries (line 14) | func PushEntries(feed *model.Feed, entries model.Entries, matrixBaseURL,... FILE: internal/integration/notion/notion.go constant defaultClientTimeout (line 18) | defaultClientTimeout = 10 * time.Second type Client (line 20) | type Client struct method UpdateDocument (line 29) | func (c *Client) UpdateDocument(entryURL string, entryTitle string) er... function NewClient (line 25) | func NewClient(apiToken, pageID string) *Client { type notionDocument (line 75) | type notionDocument struct type block (line 79) | type block struct type bookmarkObject (line 85) | type bookmarkObject struct FILE: internal/integration/ntfy/ntfy.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second constant defaultNtfyURL (line 23) | defaultNtfyURL = "https://ntfy.sh" type Client (line 26) | type Client struct method SendMessages (line 48) | func (c *Client) SendMessages(feed *model.Feed, entries model.Entries)... method makeRequest (line 87) | func (c *Client) makeRequest(payload any) error { function NewClient (line 32) | func NewClient(ntfyURL, ntfyTopic, ntfyApiToken, ntfyUsername, ntfyPassw... type ntfyMessage (line 126) | type ntfyMessage struct type ntfyAction (line 138) | type ntfyAction struct FILE: internal/integration/nunuxkeeper/nunuxkeeper.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second type Client (line 22) | type Client struct method AddEntry (line 31) | func (c *Client) AddEntry(entryURL, entryTitle, entryContent string) e... function NewClient (line 27) | func NewClient(baseURL, apiKey string) *Client { type nunuxKeeperDocument (line 74) | type nunuxKeeperDocument struct FILE: internal/integration/omnivore/omnivore.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second constant defaultApiEndpoint (line 22) | defaultApiEndpoint = "https://api-prod.omnivore.app/api/graphql" type errorResponse (line 39) | type errorResponse struct type successResponse (line 45) | type successResponse struct type Client (line 54) | type Client struct method SaveURL (line 68) | func (c *Client) SaveURL(url string) error { function NewClient (line 60) | func NewClient(apiToken string, apiEndpoint string) *Client { FILE: internal/integration/pinboard/pinboard.go constant defaultClientTimeout (line 21) | defaultClientTimeout = 10 * time.Second type Client (line 23) | type Client struct method CreateBookmark (line 31) | func (c *Client) CreateBookmark(entryURL, entryTitle, pinboardTags str... method getBookmark (line 78) | func (c *Client) getBookmark(entryURL string) (*Post, error) { function NewClient (line 27) | func NewClient(authToken string) *Client { FILE: internal/integration/pinboard/post.go type Post (line 14) | type Post struct method addTag (line 40) | func (p *Post) addTag(tag string) { method SetToread (line 46) | func (p *Post) SetToread() { method AddValues (line 50) | func (p *Post) AddValues(values url.Values) { type posts (line 26) | type posts struct function NewPost (line 31) | func NewPost(url string, description string) *Post { FILE: internal/integration/pushover/pushover.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second constant defaultPushoverURL (line 23) | defaultPushoverURL = "https://api.pushover.net" type Client (line 26) | type Client struct method SendMessages (line 76) | func (c *Client) SendMessages(feed *model.Feed, entries model.Entries)... method makeRequest (line 106) | func (c *Client) makeRequest(payload *message) error { type message (line 36) | type message struct type errorResponse (line 49) | type errorResponse struct function NewClient (line 56) | func NewClient(user, token string, priority int, device, urlPrefix strin... FILE: internal/integration/raindrop/raindrop.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second type Client (line 22) | type Client struct method CreateRaindrop (line 33) | func (c *Client) CreateRaindrop(entryURL, entryTitle string) error { function NewClient (line 28) | func NewClient(token, collectionID, tags string) *Client { type raindrop (line 72) | type raindrop struct type collection (line 79) | type collection struct FILE: internal/integration/readeck/readeck.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second type Client (line 24) | type Client struct method CreateBookmark (line 35) | func (c *Client) CreateBookmark(entryURL, entryTitle string, entryCont... function NewClient (line 31) | func NewClient(baseURL, apiKey, labels string, onlyURL bool) *Client { type readeckBookmark (line 139) | type readeckBookmark struct type contentHeader (line 145) | type contentHeader struct type partContentHeader (line 149) | type partContentHeader struct FILE: internal/integration/readeck/readeck_test.go function TestCreateBookmark (line 18) | func TestCreateBookmark(t *testing.T) { function TestNewClient (line 245) | func TestNewClient(t *testing.T) { function configureIntegrationAllowPrivateNetworksOption (line 266) | func configureIntegrationAllowPrivateNetworksOption(t *testing.T) { FILE: internal/integration/readwise/readwise.go constant readwiseApiEndpoint (line 22) | readwiseApiEndpoint = "https://readwise.io/api/v3/save/" constant defaultClientTimeout (line 23) | defaultClientTimeout = 10 * time.Second type Client (line 26) | type Client struct method CreateDocument (line 34) | func (c *Client) CreateDocument(entryURL string) error { function NewClient (line 30) | func NewClient(apiKey string) *Client { type readwiseDocument (line 70) | type readwiseDocument struct FILE: internal/integration/rssbridge/rssbridge.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 30 * time.Second type Bridge (line 22) | type Bridge struct type BridgeMeta (line 27) | type BridgeMeta struct function DetectBridges (line 31) | func DetectBridges(rssBridgeURL, rssBridgeToken, websiteURL string) ([]*... FILE: internal/integration/shaarli/shaarli.go constant defaultClientTimeout (line 23) | defaultClientTimeout = 10 * time.Second type Client (line 25) | type Client struct method CreateLink (line 34) | func (c *Client) CreateLink(entryURL, entryTitle string) error { method generateBearerToken (line 78) | func (c *Client) generateBearerToken() string { function NewClient (line 30) | func NewClient(baseURL, apiSecret string) *Client { type addLinkRequest (line 90) | type addLinkRequest struct FILE: internal/integration/shiori/shiori.go constant defaultClientTimeout (line 20) | defaultClientTimeout = 10 * time.Second type Client (line 22) | type Client struct method CreateBookmark (line 32) | func (c *Client) CreateBookmark(entryURL, entryTitle string) error { method authenticate (line 85) | func (c *Client) authenticate() (string, error) { function NewClient (line 28) | func NewClient(baseURL, username, password string) *Client { type authRequest (line 124) | type authRequest struct type authResponse (line 130) | type authResponse struct type authResponseMessage (line 135) | type authResponseMessage struct type addBookmarkRequest (line 140) | type addBookmarkRequest struct FILE: internal/integration/slack/slack.go constant defaultClientTimeout (line 23) | defaultClientTimeout = 10 * time.Second constant slackMsgColor (line 24) | slackMsgColor = "#5865F2" type Client (line 26) | type Client struct method SendSlackMsg (line 34) | func (c *Client) SendSlackMsg(feed *model.Feed, entries model.Entries)... function NewClient (line 30) | func NewClient(webhookURL string) *Client { type slackFields (line 101) | type slackFields struct type slackAttachments (line 107) | type slackAttachments struct type slackMessage (line 113) | type slackMessage struct FILE: internal/integration/telegrambot/client.go constant defaultClientTimeout (line 19) | defaultClientTimeout = 10 * time.Second constant telegramAPIEndpoint (line 20) | telegramAPIEndpoint = "https://api.telegram.org" constant MarkdownFormatting (line 22) | MarkdownFormatting = "Markdown" constant MarkdownV2Formatting (line 23) | MarkdownV2Formatting = "MarkdownV2" constant HTMLFormatting (line 24) | HTMLFormatting = "HTML" type Client (line 27) | type Client struct method GetMe (line 40) | func (c *Client) GetMe() (*User, error) { method SendMessage (line 74) | func (c *Client) SendMessage(message *MessageRequest) (*Message, error) { function NewClient (line 32) | func NewClient(botToken, chatID string) *Client { type InlineKeyboard (line 113) | type InlineKeyboard struct type InlineKeyboardRow (line 117) | type InlineKeyboardRow type InlineKeyboardButton (line 119) | type InlineKeyboardButton struct type User (line 124) | type User struct type Chat (line 137) | type Chat struct type Message (line 143) | type Message struct type BaseResponse (line 151) | type BaseResponse struct type UserResponse (line 157) | type UserResponse struct type MessageRequest (line 162) | type MessageRequest struct type MessageResponse (line 172) | type MessageResponse struct FILE: internal/integration/telegrambot/telegrambot.go function PushEntry (line 16) | func PushEntry(feed *model.Feed, entry *model.Entry, botToken, chatID st... FILE: internal/integration/wallabag/wallabag.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second type Client (line 24) | type Client struct method CreateEntry (line 46) | func (c *Client) CreateEntry(entryURL, entryTitle, entryContent string... method createEntry (line 59) | func (c *Client) createEntry(accessToken, entryURL, entryTitle, entryC... method getAccessToken (line 103) | func (c *Client) getAccessToken() (string, error) { function NewClient (line 34) | func NewClient(baseURL, clientID, clientSecret, username, password, tags... type tokenResponse (line 144) | type tokenResponse struct type createEntryRequest (line 152) | type createEntryRequest struct FILE: internal/integration/wallabag/wallabag_test.go function TestCreateEntry (line 17) | func TestCreateEntry(t *testing.T) { function TestNewClient (line 275) | func TestNewClient(t *testing.T) { function configureIntegrationAllowPrivateNetworksOption (line 327) | func configureIntegrationAllowPrivateNetworksOption(t *testing.T) { FILE: internal/integration/webhook/webhook.go constant defaultClientTimeout (line 22) | defaultClientTimeout = 10 * time.Second constant NewEntriesEventType (line 24) | NewEntriesEventType = "new_entries" constant SaveEntryEventType (line 25) | SaveEntryEventType = "save_entry" type Client (line 28) | type Client struct method SendSaveEntryWebhookEvent (line 37) | func (c *Client) SendSaveEntryWebhookEvent(entry *model.Entry) error { method SendNewEntriesWebhookEvent (line 73) | func (c *Client) SendNewEntriesWebhookEvent(feed *model.Feed, entries ... method makeRequest (line 117) | func (c *Client) makeRequest(eventType string, payload any) error { function NewClient (line 33) | func NewClient(webhookURL, webhookSecret string) *Client { type WebhookFeed (line 151) | type WebhookFeed struct type WebhookCategory (line 162) | type WebhookCategory struct type WebhookEntry (line 167) | type WebhookEntry struct type WebhookNewEntriesEvent (line 189) | type WebhookNewEntriesEvent struct type WebhookSaveEntryEvent (line 195) | type WebhookSaveEntryEvent struct FILE: internal/locale/catalog.go type translationDict (line 12) | type translationDict struct method UnmarshalJSON (line 47) | func (t *translationDict) UnmarshalJSON(data []byte) error { type catalog (line 16) | type catalog function getTranslationDict (line 23) | func getTranslationDict(language string) (translationDict, error) { function loadTranslationFile (line 33) | func loadTranslationFile(language string) (translationDict, error) { function parseTranslationMessages (line 81) | func parseTranslationMessages(data []byte) (translationDict, error) { FILE: internal/locale/catalog_test.go function TestParserWithInvalidData (line 10) | func TestParserWithInvalidData(t *testing.T) { function TestParser (line 17) | func TestParser(t *testing.T) { function TestLoadCatalog (line 33) | func TestLoadCatalog(t *testing.T) { function TestAllKeysHaveValue (line 42) | func TestAllKeysHaveValue(t *testing.T) { function TestMissingTranslations (line 70) | func TestMissingTranslations(t *testing.T) { function TestTranslationFilePluralForms (line 100) | func TestTranslationFilePluralForms(t *testing.T) { FILE: internal/locale/error.go type LocalizedErrorWrapper (line 8) | type LocalizedErrorWrapper struct method Error (line 22) | func (l *LocalizedErrorWrapper) Error() error { method Translate (line 26) | func (l *LocalizedErrorWrapper) Translate(language string) string { function NewLocalizedErrorWrapper (line 14) | func NewLocalizedErrorWrapper(originalErr error, translationKey string, ... type LocalizedError (line 36) | type LocalizedError struct method String (line 45) | func (v *LocalizedError) String() string { method Error (line 49) | func (v *LocalizedError) Error() error { method Translate (line 53) | func (v *LocalizedError) Translate(language string) string { function NewLocalizedError (line 41) | func NewLocalizedError(translationKey string, translationArgs ...any) *L... FILE: internal/locale/error_test.go function TestNewLocalizedErrorWrapper (line 11) | func TestNewLocalizedErrorWrapper(t *testing.T) { function TestLocalizedErrorWrapper_Error (line 35) | func TestLocalizedErrorWrapper_Error(t *testing.T) { function TestLocalizedErrorWrapper_Translate (line 45) | func TestLocalizedErrorWrapper_Translate(t *testing.T) { function TestLocalizedErrorWrapper_TranslateWithEmptyKey (line 85) | func TestLocalizedErrorWrapper_TranslateWithEmptyKey(t *testing.T) { function TestLocalizedErrorWrapper_TranslateWithNoArgs (line 96) | func TestLocalizedErrorWrapper_TranslateWithNoArgs(t *testing.T) { function TestNewLocalizedError (line 115) | func TestNewLocalizedError(t *testing.T) { function TestLocalizedError_String (line 134) | func TestLocalizedError_String(t *testing.T) { function TestLocalizedError_StringWithMissingTranslation (line 152) | func TestLocalizedError_StringWithMissingTranslation(t *testing.T) { function TestLocalizedError_Error (line 166) | func TestLocalizedError_Error(t *testing.T) { function TestLocalizedError_Translate (line 188) | func TestLocalizedError_Translate(t *testing.T) { function TestLocalizedError_TranslateWithNoArgs (line 226) | func TestLocalizedError_TranslateWithNoArgs(t *testing.T) { function TestLocalizedError_TranslateWithComplexArgs (line 257) | func TestLocalizedError_TranslateWithComplexArgs(t *testing.T) { function TestLocalizedErrorWrapper_WithNilError (line 275) | func TestLocalizedErrorWrapper_WithNilError(t *testing.T) { function TestLocalizedErrorWrapper_TranslateWithEmptyKeyAndNilError (line 286) | func TestLocalizedErrorWrapper_TranslateWithEmptyKeyAndNilError(t *testi... function TestLocalizedError_EmptyKey (line 296) | func TestLocalizedError_EmptyKey(t *testing.T) { FILE: internal/locale/locale_test.go function TestAvailableLanguages (line 8) | func TestAvailableLanguages(t *testing.T) { FILE: internal/locale/plural.go function getPluralForm (line 8) | func getPluralForm(lang string, n int) int { FILE: internal/locale/plural_test.go function TestPluralRules (line 8) | func TestPluralRules(t *testing.T) { FILE: internal/locale/printer.go type Printer (line 9) | type Printer struct method Print (line 18) | func (p *Printer) Print(key string) string { method Printf (line 28) | func (p *Printer) Printf(key string, args ...any) string { method Plural (line 33) | func (p *Printer) Plural(key string, n int, args ...any) string { function NewPrinter (line 14) | func NewPrinter(language string) *Printer { FILE: internal/locale/printer_test.go function TestPrintfWithMissingLanguage (line 8) | func TestPrintfWithMissingLanguage(t *testing.T) { function TestPrintfWithMissingKey (line 17) | func TestPrintfWithMissingKey(t *testing.T) { function TestPrintfWithExistingKey (line 32) | func TestPrintfWithExistingKey(t *testing.T) { function TestPrintfWithExistingKeyAndPlaceholder (line 47) | func TestPrintfWithExistingKeyAndPlaceholder(t *testing.T) { function TestPrintfWithMissingKeyAndPlaceholder (line 67) | func TestPrintfWithMissingKeyAndPlaceholder(t *testing.T) { function TestPrintWithMissingLanguage (line 87) | func TestPrintWithMissingLanguage(t *testing.T) { function TestPrintWithMissingKey (line 96) | func TestPrintWithMissingKey(t *testing.T) { function TestPrintWithExistingKey (line 111) | func TestPrintWithExistingKey(t *testing.T) { function TestPrintWithDifferentLanguages (line 126) | func TestPrintWithDifferentLanguages(t *testing.T) { function TestPrintWithEmptyKey (line 162) | func TestPrintWithEmptyKey(t *testing.T) { function TestPrintWithEmptyTranslation (line 177) | func TestPrintWithEmptyTranslation(t *testing.T) { function TestPluralWithDefaultRule (line 192) | func TestPluralWithDefaultRule(t *testing.T) { function TestPluralWithRussianRule (line 220) | func TestPluralWithRussianRule(t *testing.T) { function TestPluralWithMissingTranslation (line 255) | func TestPluralWithMissingTranslation(t *testing.T) { function TestPluralWithMissingLanguage (line 271) | func TestPluralWithMissingLanguage(t *testing.T) { function TestPluralWithIndexOutOfBounds (line 280) | func TestPluralWithIndexOutOfBounds(t *testing.T) { function TestPluralWithVariousLanguageRules (line 306) | func TestPluralWithVariousLanguageRules(t *testing.T) { FILE: internal/mediaproxy/media_proxy_test.go function TestRewriteDocumentWithRelativeProxyURL_None_Image (line 13) | func TestRewriteDocumentWithRelativeProxyURL_None_Image(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_None_Audio (line 35) | func TestRewriteDocumentWithRelativeProxyURL_None_Audio(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_None_Video (line 57) | func TestRewriteDocumentWithRelativeProxyURL_None_Video(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_None_VideoPoster (line 79) | func TestRewriteDocumentWithRelativeProxyURL_None_VideoPoster(t *testing... function TestRewriteDocumentWithAbsoluteProxyURL_None_Image (line 101) | func TestRewriteDocumentWithAbsoluteProxyURL_None_Image(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_None_Audio (line 123) | func TestRewriteDocumentWithAbsoluteProxyURL_None_Audio(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_None_Video (line 145) | func TestRewriteDocumentWithAbsoluteProxyURL_None_Video(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_None_VideoPoster (line 167) | func TestRewriteDocumentWithAbsoluteProxyURL_None_VideoPoster(t *testing... function TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image (line 189) | func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Audio (line 211) | func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Audio(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Video (line 233) | func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Video(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_HttpOnly_VideoPoster (line 255) | func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_VideoPoster(t *tes... function TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image_Poster (line 277) | func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image_Poster(t *te... function TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Image (line 299) | func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Image(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Audio (line 321) | func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Audio(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Video (line 343) | func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Video(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_VideoPoster (line 365) | func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_VideoPoster(t *tes... function TestRewriteDocumentWithRelativeProxyURL_All_Image (line 387) | func TestRewriteDocumentWithRelativeProxyURL_All_Image(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_All_Audio (line 409) | func TestRewriteDocumentWithRelativeProxyURL_All_Audio(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_All_Video (line 432) | func TestRewriteDocumentWithRelativeProxyURL_All_Video(t *testing.T) { function TestRewriteDocumentWithRelativeProxyURL_All_VideoPoster (line 454) | func TestRewriteDocumentWithRelativeProxyURL_All_VideoPoster(t *testing.... function TestRewriteDocumentWithAbsoluteProxyURL_All_Image (line 476) | func TestRewriteDocumentWithAbsoluteProxyURL_All_Image(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_All_Audio (line 498) | func TestRewriteDocumentWithAbsoluteProxyURL_All_Audio(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_All_Video (line 520) | func TestRewriteDocumentWithAbsoluteProxyURL_All_Video(t *testing.T) { function TestRewriteDocumentWithAbsoluteProxyURL_All_VideoPoster (line 542) | func TestRewriteDocumentWithAbsoluteProxyURL_All_VideoPoster(t *testing.... function TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Image (line 564) | func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Image(t *testi... function TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Audio (line 587) | func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Audio(t *testi... function TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Video (line 610) | func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Video(t *testi... function TestRewriteDocumentWithRelativeProxyURL_BasePath_All_VideoPoster (line 633) | func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_VideoPoster(t ... function TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Image (line 656) | func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Image(t *testi... function TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Audio (line 679) | func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Audio(t *testi... function TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Video (line 702) | func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Video(t *testi... function TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_VideoPoster (line 725) | func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_VideoPoster(t ... function TestRewriteDocumentWithRelativeProxyURL_CustomMediaProxy_All_Image (line 748) | func TestRewriteDocumentWithRelativeProxyURL_CustomMediaProxy_All_Image(... function TestRewriteDocumentWithAbsoluteProxyURL_CustomMediaProxy_All_Image (line 771) | func TestRewriteDocumentWithAbsoluteProxyURL_CustomMediaProxy_All_Image(... function TestMediaProxyWithIncorrectCustomMediaProxy (line 794) | func TestMediaProxyWithIncorrectCustomMediaProxy(t *testing.T) { function TestMediaProxyFilterWithImageSrcset (line 808) | func TestMediaProxyFilterWithImageSrcset(t *testing.T) { function TestMediaProxyFilterWithEmptySrcset (line 830) | func TestMediaProxyFilterWithEmptySrcset(t *testing.T) { function TestProxyFilterWithPictureSource (line 852) | func TestProxyFilterWithPictureSource(t *testing.T) { function TestProxyFilterOnlyNonHTTPWithPictureSource (line 874) | func TestProxyFilterOnlyNonHTTPWithPictureSource(t *testing.T) { function TestMediaProxyWithImageDataURL (line 896) | func TestMediaProxyWithImageDataURL(t *testing.T) { function TestMediaProxyWithImageSourceDataURL (line 917) | func TestMediaProxyWithImageSourceDataURL(t *testing.T) { function TestShouldProxifyURLWithMimeType (line 938) | func TestShouldProxifyURLWithMimeType(t *testing.T) { FILE: internal/mediaproxy/rewriter.go type urlProxyRewriter (line 17) | type urlProxyRewriter function RewriteDocumentWithRelativeProxyURL (line 19) | func RewriteDocumentWithRelativeProxyURL(htmlDocument string) string { function RewriteDocumentWithAbsoluteProxyURL (line 23) | func RewriteDocumentWithAbsoluteProxyURL(htmlDocument string) string { function genericProxyRewriter (line 27) | func genericProxyRewriter(proxifyFunction urlProxyRewriter, htmlDocument... function proxifySourceSet (line 97) | func proxifySourceSet(element *goquery.Selection, proxifyFunction urlPro... function shouldProxifyURL (line 110) | func shouldProxifyURL(mediaURL, mediaProxyOption string) bool { function ShouldProxifyURLWithMimeType (line 127) | func ShouldProxifyURLWithMimeType(mediaURL, mediaMimeType, mediaProxyOpt... FILE: internal/mediaproxy/url.go function ProxifyRelativeURL (line 16) | func ProxifyRelativeURL(mediaURL string) string { function ProxifyAbsoluteURL (line 35) | func ProxifyAbsoluteURL(mediaURL string) string { function proxifyURLWithCustomProxy (line 54) | func proxifyURLWithCustomProxy(mediaURL string, customProxyURL *url.URL)... FILE: internal/metric/metric.go type collector (line 139) | type collector struct method GatherStorageMetrics (line 165) | func (c *collector) GatherStorageMetrics() { function NewCollector (line 145) | func NewCollector(store *storage.Storage, refreshInterval time.Duration)... FILE: internal/model/api_key.go type APIKey (line 13) | type APIKey struct type APIKeys (line 23) | type APIKeys type APIKeyCreationRequest (line 26) | type APIKeyCreationRequest struct FILE: internal/model/app_session.go type SessionData (line 14) | type SessionData struct method String (line 26) | func (s *SessionData) String() string { method Value (line 41) | func (s *SessionData) Value() (driver.Value, error) { method Scan (line 47) | func (s *SessionData) Scan(src any) error { type Session (line 62) | type Session struct method String (line 67) | func (s *Session) String() string { FILE: internal/model/categories_sort_options.go function CategoriesSortingOptions (line 6) | func CategoriesSortingOptions() map[string]string { FILE: internal/model/category.go type Category (line 9) | type Category struct method String (line 19) | func (c *Category) String() string { type CategoryCreationRequest (line 23) | type CategoryCreationRequest struct type CategoryModificationRequest (line 28) | type CategoryModificationRequest struct method Patch (line 33) | func (c *CategoryModificationRequest) Patch(category *Category) { type Categories (line 44) | type Categories FILE: internal/model/enclosure.go type Enclosure (line 13) | type Enclosure struct method Html5MimeType (line 28) | func (e *Enclosure) Html5MimeType() string { method IsAudio (line 35) | func (e *Enclosure) IsAudio() bool { method IsVideo (line 39) | func (e *Enclosure) IsVideo() bool { method IsImage (line 43) | func (e *Enclosure) IsImage() bool { method ProxifyEnclosureURL (line 53) | func (e *Enclosure) ProxifyEnclosureURL(mediaProxyOption string, media... type EnclosureUpdateRequest (line 23) | type EnclosureUpdateRequest struct type EnclosureList (line 60) | type EnclosureList method FindMediaPlayerEnclosure (line 63) | func (el EnclosureList) FindMediaPlayerEnclosure() *Enclosure { method ContainsAudioOrVideo (line 75) | func (el EnclosureList) ContainsAudioOrVideo() bool { method ProxifyEnclosureURL (line 84) | func (el EnclosureList) ProxifyEnclosureURL(mediaProxyOption string, m... FILE: internal/model/enclosure_test.go function TestEnclosure_Html5MimeTypeGivesOriginalMimeType (line 13) | func TestEnclosure_Html5MimeTypeGivesOriginalMimeType(t *testing.T) { function TestEnclosure_Html5MimeTypeReplaceStandardM4vByAppleSpecificMimeType (line 24) | func TestEnclosure_Html5MimeTypeReplaceStandardM4vByAppleSpecificMimeTyp... function TestEnclosure_IsAudio (line 38) | func TestEnclosure_IsAudio(t *testing.T) { function TestEnclosure_IsVideo (line 65) | func TestEnclosure_IsVideo(t *testing.T) { function TestEnclosure_IsImage (line 93) | func TestEnclosure_IsImage(t *testing.T) { function TestEnclosureList_FindMediaPlayerEnclosure (line 128) | func TestEnclosureList_FindMediaPlayerEnclosure(t *testing.T) { function TestEnclosureList_ContainsAudioOrVideo (line 207) | func TestEnclosureList_ContainsAudioOrVideo(t *testing.T) { function TestEnclosure_ProxifyEnclosureURL (line 284) | func TestEnclosure_ProxifyEnclosureURL(t *testing.T) { function TestEnclosureList_ProxifyEnclosureURL (line 411) | func TestEnclosureList_ProxifyEnclosureURL(t *testing.T) { function TestEnclosure_ProxifyEnclosureURL_EdgeCases (line 523) | func TestEnclosure_ProxifyEnclosureURL_EdgeCases(t *testing.T) { FILE: internal/model/entry.go constant EntryStatusUnread (line 12) | EntryStatusUnread = "unread" constant EntryStatusRead (line 13) | EntryStatusRead = "read" constant EntryStatusRemoved (line 14) | EntryStatusRemoved = "removed" constant DefaultSortingOrder (line 15) | DefaultSortingOrder = "published_at" constant DefaultSortingDirection (line 16) | DefaultSortingDirection = "asc" type Entry (line 20) | type Entry struct method ShouldMarkAsReadOnView (line 54) | func (e *Entry) ShouldMarkAsReadOnView(user *User) bool { function NewEntry (line 42) | func NewEntry() *Entry { type Entries (line 70) | type Entries type EntriesStatusUpdateRequest (line 73) | type EntriesStatusUpdateRequest struct type EntryUpdateRequest (line 79) | type EntryUpdateRequest struct method Patch (line 84) | func (e *EntryUpdateRequest) Patch(entry *Entry) { FILE: internal/model/feed.go constant SchedulerRoundRobin (line 16) | SchedulerRoundRobin = "round_robin" constant SchedulerEntryFrequency (line 17) | SchedulerEntryFrequency = "entry_frequency" constant DefaultFeedSorting (line 19) | DefaultFeedSorting = "parsing_error_count" constant DefaultFeedSortingDirection (line 20) | DefaultFeedSortingDirection = "desc" type Feed (line 24) | type Feed struct method String (line 84) | func (f *Feed) String() string { method WithCategoryID (line 96) | func (f *Feed) WithCategoryID(categoryID int64) { method WithTranslatedErrorMessage (line 101) | func (f *Feed) WithTranslatedErrorMessage(message string) { method ResetErrorCounter (line 107) | func (f *Feed) ResetErrorCounter() { method CheckedNow (line 113) | func (f *Feed) CheckedNow() { method ScheduleNextCheck (line 122) | func (f *Feed) ScheduleNextCheck(weeklyCount int, refreshDelay time.Du... type FeedCounters (line 79) | type FeedCounters struct type FeedCreationRequest (line 152) | type FeedCreationRequest struct type FeedCreationRequestFromSubscriptionDiscovery (line 178) | type FeedCreationRequestFromSubscriptionDiscovery struct type FeedModificationRequest (line 187) | type FeedModificationRequest struct method Patch (line 217) | func (f *FeedModificationRequest) Patch(feed *Feed) { type Feeds (line 324) | type Feeds FILE: internal/model/feed_test.go constant largeWeeklyCount (line 16) | largeWeeklyCount = 10080 constant noRefreshDelay (line 17) | noRefreshDelay = 0 function TestFeedCategorySetter (line 20) | func TestFeedCategorySetter(t *testing.T) { function TestFeedErrorCounter (line 33) | func TestFeedErrorCounter(t *testing.T) { function TestFeedCheckedNow (line 56) | func TestFeedCheckedNow(t *testing.T) { function checkTargetInterval (line 70) | func checkTargetInterval(t *testing.T, feed *Feed, targetInterval time.D... function TestFeedScheduleNextCheckRoundRobinDefault (line 79) | func TestFeedScheduleNextCheckRoundRobinDefault(t *testing.T) { function TestFeedScheduleNextCheckRoundRobinWithRefreshDelayAboveMinInterval (line 101) | func TestFeedScheduleNextCheckRoundRobinWithRefreshDelayAboveMinInterval... function TestFeedScheduleNextCheckRoundRobinWithRefreshDelayBelowMinInterval (line 124) | func TestFeedScheduleNextCheckRoundRobinWithRefreshDelayBelowMinInterval... function TestFeedScheduleNextCheckRoundRobinWithRefreshDelayAboveMaxInterval (line 147) | func TestFeedScheduleNextCheckRoundRobinWithRefreshDelayAboveMaxInterval... function TestFeedScheduleNextCheckRoundRobinMinInterval (line 170) | func TestFeedScheduleNextCheckRoundRobinMinInterval(t *testing.T) { function TestFeedScheduleNextCheckEntryFrequencyMaxInterval (line 195) | func TestFeedScheduleNextCheckEntryFrequencyMaxInterval(t *testing.T) { function TestFeedScheduleNextCheckEntryFrequencyMaxIntervalZeroWeeklyCount (line 224) | func TestFeedScheduleNextCheckEntryFrequencyMaxIntervalZeroWeeklyCount(t... function TestFeedScheduleNextCheckEntryFrequencyMinInterval (line 253) | func TestFeedScheduleNextCheckEntryFrequencyMinInterval(t *testing.T) { function TestFeedScheduleNextCheckEntryFrequencyFactor (line 282) | func TestFeedScheduleNextCheckEntryFrequencyFactor(t *testing.T) { function TestFeedScheduleNextCheckEntryFrequencySmallNewTTL (line 308) | func TestFeedScheduleNextCheckEntryFrequencySmallNewTTL(t *testing.T) { function TestFeedScheduleNextCheckEntryFrequencyLargeNewTTL (line 344) | func TestFeedScheduleNextCheckEntryFrequencyLargeNewTTL(t *testing.T) { FILE: internal/model/home_page.go function HomePages (line 7) | func HomePages() map[string]string { FILE: internal/model/icon.go type Icon (line 11) | type Icon struct method DataURL (line 20) | func (i *Icon) DataURL() string { type Icons (line 25) | type Icons type FeedIcon (line 28) | type FeedIcon struct FILE: internal/model/integration.go type Integration (line 7) | type Integration struct FILE: internal/model/job.go type Job (line 7) | type Job struct type JobList (line 14) | type JobList method FeedURLs (line 18) | func (jl *JobList) FeedURLs() []string { FILE: internal/model/model.go type Number (line 6) | type Number interface function OptionalNumber (line 10) | func OptionalNumber[T Number](value T) *T { function OptionalString (line 17) | func OptionalString(value string) *string { function SetOptionalField (line 25) | func SetOptionalField[T any](value T) *T { FILE: internal/model/subscription.go type SubscriptionDiscoveryRequest (line 7) | type SubscriptionDiscoveryRequest struct FILE: internal/model/theme.go function Themes (line 7) | func Themes() map[string]string { function ThemeColor (line 22) | func ThemeColor(theme, colorScheme string) string { FILE: internal/model/user.go type User (line 13) | type User struct method UseTimezone (line 215) | func (u *User) UseTimezone(tz string) { type UserCreationRequest (line 49) | type UserCreationRequest struct type UserModificationRequest (line 58) | type UserModificationRequest struct method Patch (line 92) | func (u *UserModificationRequest) Patch(user *User) { type Users (line 222) | type Users method UseTimezone (line 225) | func (u Users) UseTimezone(tz string) { FILE: internal/model/user_session.go type UserSession (line 14) | type UserSession struct method String (line 23) | func (u *UserSession) String() string { method UseTimezone (line 28) | func (u *UserSession) UseTimezone(tz string) { FILE: internal/model/webauthn.go type WebAuthnSession (line 18) | type WebAuthnSession struct method Value (line 22) | func (s WebAuthnSession) Value() (driver.Value, error) { method Scan (line 26) | func (s *WebAuthnSession) Scan(value any) error { method String (line 35) | func (s WebAuthnSession) String() string { type WebAuthnCredential (line 42) | type WebAuthnCredential struct method HandleEncoded (line 50) | func (s WebAuthnCredential) HandleEncoded() string { FILE: internal/oauth2/authorization.go type Authorization (line 15) | type Authorization struct method RedirectURL (line 21) | func (u *Authorization) RedirectURL() string { method State (line 25) | func (u *Authorization) State() string { method CodeVerifier (line 29) | func (u *Authorization) CodeVerifier() string { function GenerateAuthorization (line 33) | func GenerateAuthorization(config *oauth2.Config) *Authorization { FILE: internal/oauth2/google.go type googleProfile (line 16) | type googleProfile struct type googleProvider (line 21) | type googleProvider struct method GetConfig (line 31) | func (g *googleProvider) GetConfig() *oauth2.Config { method GetUserExtraKey (line 44) | func (g *googleProvider) GetUserExtraKey() string { method GetProfile (line 48) | func (g *googleProvider) GetProfile(ctx context.Context, code, codeVer... method PopulateUserCreationWithProfileID (line 72) | func (g *googleProvider) PopulateUserCreationWithProfileID(user *model... method PopulateUserWithProfileID (line 76) | func (g *googleProvider) PopulateUserWithProfileID(user *model.User, p... method UnsetUserProfileID (line 80) | func (g *googleProvider) UnsetUserProfileID(user *model.User) { function NewGoogleProvider (line 27) | func NewGoogleProvider(clientID, clientSecret, redirectURL string) *goog... FILE: internal/oauth2/manager.go type Manager (line 12) | type Manager struct method FindProvider (line 16) | func (m *Manager) FindProvider(name string) (Provider, error) { method AddProvider (line 24) | func (m *Manager) AddProvider(name string, provider Provider) { function NewManager (line 28) | func NewManager(ctx context.Context, clientID, clientSecret, redirectURL... FILE: internal/oauth2/oidc.go type oidcProvider (line 21) | type oidcProvider struct method GetUserExtraKey (line 42) | func (o *oidcProvider) GetUserExtraKey() string { method GetConfig (line 46) | func (o *oidcProvider) GetConfig() *oauth2.Config { method GetProfile (line 56) | func (o *oidcProvider) GetProfile(ctx context.Context, code, codeVerif... method PopulateUserCreationWithProfileID (line 94) | func (o *oidcProvider) PopulateUserCreationWithProfileID(user *model.U... method PopulateUserWithProfileID (line 98) | func (o *oidcProvider) PopulateUserWithProfileID(user *model.User, pro... method UnsetUserProfileID (line 102) | func (o *oidcProvider) UnsetUserProfileID(user *model.User) { function NewOidcProvider (line 28) | func NewOidcProvider(ctx context.Context, clientID, clientSecret, redire... type userClaims (line 106) | type userClaims struct FILE: internal/oauth2/profile.go type Profile (line 11) | type Profile struct method String (line 17) | func (p Profile) String() string { FILE: internal/oauth2/provider.go type Provider (line 15) | type Provider interface FILE: internal/proxyrotator/proxyrotator.go type ProxyRotator (line 14) | type ProxyRotator struct method GetNextProxy (line 40) | func (pr *ProxyRotator) GetNextProxy() *url.URL { method HasProxies (line 54) | func (pr *ProxyRotator) HasProxies() bool { function NewProxyRotator (line 21) | func NewProxyRotator(proxyURLs []string) (*ProxyRotator, error) { FILE: internal/proxyrotator/proxyrotator_test.go function TestProxyRotator (line 10) | func TestProxyRotator(t *testing.T) { function TestProxyRotatorEmpty (line 41) | func TestProxyRotatorEmpty(t *testing.T) { function TestProxyRotatorInvalidURL (line 57) | func TestProxyRotatorInvalidURL(t *testing.T) { FILE: internal/reader/atom/atom_03.go type atom03Feed (line 13) | type atom03Feed struct type atom03Entry (line 44) | type atom03Entry struct type atom03Content (line 93) | type atom03Content struct method content (line 116) | func (a *atom03Content) content() string { FILE: internal/reader/atom/atom_03_adapter.go type atom03Adapter (line 17) | type atom03Adapter struct method buildFeed (line 21) | func (a *atom03Adapter) buildFeed(baseURL string) *model.Feed { FILE: internal/reader/atom/atom_03_test.go function TestParseAtom03 (line 12) | func TestParseAtom03(t *testing.T) { function TestParseAtom03WithoutSiteURL (line 77) | func TestParseAtom03WithoutSiteURL(t *testing.T) { function TestParseAtom03WithoutFeedTitle (line 99) | func TestParseAtom03WithoutFeedTitle(t *testing.T) { function TestParseAtom03WithoutEntryTitleButWithLink (line 122) | func TestParseAtom03WithoutEntryTitleButWithLink(t *testing.T) { function TestParseAtom03WithoutEntryTitleButWithSummary (line 149) | func TestParseAtom03WithoutEntryTitleButWithSummary(t *testing.T) { function TestParseAtom03WithoutEntryTitleButWithXMLContent (line 177) | func TestParseAtom03WithoutEntryTitleButWithXMLContent(t *testing.T) { function TestParseAtom03WithSummaryOnly (line 205) | func TestParseAtom03WithSummaryOnly(t *testing.T) { function TestParseAtom03WithXMLContent (line 236) | func TestParseAtom03WithXMLContent(t *testing.T) { function TestParseAtom03WithBase64Content (line 267) | func TestParseAtom03WithBase64Content(t *testing.T) { FILE: internal/reader/atom/atom_10.go type atom10Feed (line 22) | type atom10Feed struct type atom10Entry (line 87) | type atom10Entry struct type atom10Text (line 163) | type atom10Text struct method body (line 170) | func (a *atom10Text) body() string { method title (line 182) | func (a *atom10Text) title() string { method xhtmlContent (line 197) | func (a *atom10Text) xhtmlContent() string { type atomXHTMLRootElement (line 204) | type atomXHTMLRootElement struct FILE: internal/reader/atom/atom_10_adapter.go type atom10Adapter (line 21) | type atom10Adapter struct method BuildFeed (line 29) | func (a *atom10Adapter) BuildFeed(baseURL string) *model.Feed { method populateEntries (line 75) | func (a *atom10Adapter) populateEntries(siteURL string) model.Entries { function NewAtom10Adapter (line 25) | func NewAtom10Adapter(atomFeed *atom10Feed) *atom10Adapter { FILE: internal/reader/atom/atom_10_test.go function TestParseAtomSample (line 12) | func TestParseAtomSample(t *testing.T) { function TestParseFeedWithSubtitle (line 85) | func TestParseFeedWithSubtitle(t *testing.T) { function TestParseFeedWithoutTitle (line 108) | func TestParseFeedWithoutTitle(t *testing.T) { function TestParseEntryWithoutTitleButWithURL (line 126) | func TestParseEntryWithoutTitleButWithURL(t *testing.T) { function TestParseEntryWithoutTitleButWithSummary (line 156) | func TestParseEntryWithoutTitleButWithSummary(t *testing.T) { function TestParseEntryWithoutTitleButWithXHTMLContent (line 187) | func TestParseEntryWithoutTitleButWithXHTMLContent(t *testing.T) { function TestParseFeedURL (line 220) | func TestParseFeedURL(t *testing.T) { function TestParseFeedWithRelativeFeedURL (line 243) | func TestParseFeedWithRelativeFeedURL(t *testing.T) { function TestParseFeedWithRelativeSiteURL (line 262) | func TestParseFeedWithRelativeSiteURL(t *testing.T) { function TestParseFeedSiteURLWithTrailingSpace (line 298) | func TestParseFeedSiteURLWithTrailingSpace(t *testing.T) { function TestParseFeedWithFeedURLWithTrailingSpace (line 314) | func TestParseFeedWithFeedURLWithTrailingSpace(t *testing.T) { function TestParseEntryWithRelativeURL (line 330) | func TestParseEntryWithRelativeURL(t *testing.T) { function TestParseEntryURLWithTextHTMLType (line 356) | func TestParseEntryURLWithTextHTMLType(t *testing.T) { function TestParseEntryURLWithNoRelAndNoType (line 382) | func TestParseEntryURLWithNoRelAndNoType(t *testing.T) { function TestParseEntryURLWithAlternateRel (line 408) | func TestParseEntryURLWithAlternateRel(t *testing.T) { function TestParseEntryTitleWithWhitespaces (line 434) | func TestParseEntryTitleWithWhitespaces(t *testing.T) { function TestParseEntryWithPlainTextTitle (line 462) | func TestParseEntryWithPlainTextTitle(t *testing.T) { function TestParseEntryWithHTMLTitle (line 499) | func TestParseEntryWithHTMLTitle(t *testing.T) { function TestParseEntryWithXHTMLTitle (line 550) | func TestParseEntryWithXHTMLTitle(t *testing.T) { function TestParseEntryWithEmptyXHTMLTitle (line 580) | func TestParseEntryWithEmptyXHTMLTitle(t *testing.T) { function TestParseEntryWithXHTMLTitleWithoutDiv (line 607) | func TestParseEntryWithXHTMLTitleWithoutDiv(t *testing.T) { function TestParseEntryWithNumericCharacterReferenceTitle (line 634) | func TestParseEntryWithNumericCharacterReferenceTitle(t *testing.T) { function TestParseEntryWithDoubleEncodedEntitiesTitle (line 660) | func TestParseEntryWithDoubleEncodedEntitiesTitle(t *testing.T) { function TestParseEntryWithXHTMLSummary (line 686) | func TestParseEntryWithXHTMLSummary(t *testing.T) { function TestParseEntryWithHTMLSummary (line 712) | func TestParseEntryWithHTMLSummary(t *testing.T) { function TestParseEntryWithTextSummary (line 751) | func TestParseEntryWithTextSummary(t *testing.T) { function TestParseEntryWithTextContent (line 803) | func TestParseEntryWithTextContent(t *testing.T) { function TestParseEntryWithHTMLContent (line 856) | func TestParseEntryWithHTMLContent(t *testing.T) { function TestParseEntryWithXHTMLContent (line 901) | func TestParseEntryWithXHTMLContent(t *testing.T) { function TestParseEntryWithAuthorName (line 929) | func TestParseEntryWithAuthorName(t *testing.T) { function TestParseEntryWithoutAuthorName (line 958) | func TestParseEntryWithoutAuthorName(t *testing.T) { function TestParseEntryWithMultipleAuthors (line 987) | func TestParseEntryWithMultipleAuthors(t *testing.T) { function TestParseFeedWithEntryWithoutAuthor (line 1016) | func TestParseFeedWithEntryWithoutAuthor(t *testing.T) { function TestParseFeedWithMultipleAuthors (line 1042) | func TestParseFeedWithMultipleAuthors(t *testing.T) { function TestParseFeedWithoutAuthor (line 1074) | func TestParseFeedWithoutAuthor(t *testing.T) { function TestParseEntryWithEnclosures (line 1097) | func TestParseEntryWithEnclosures(t *testing.T) { function TestParseEntryWithRelativeEnclosureURL (line 1178) | func TestParseEntryWithRelativeEnclosureURL(t *testing.T) { function TestParseEntryWithDuplicateEnclosureURL (line 1217) | func TestParseEntryWithDuplicateEnclosureURL(t *testing.T) { function TestParseEntryWithoutEnclosureURL (line 1261) | func TestParseEntryWithoutEnclosureURL(t *testing.T) { function TestParseEntryWithPublished (line 1298) | func TestParseEntryWithPublished(t *testing.T) { function TestParseEntryWithPublishedAndUpdated (line 1323) | func TestParseEntryWithPublishedAndUpdated(t *testing.T) { function TestParseInvalidXml (line 1349) | func TestParseInvalidXml(t *testing.T) { function TestParseTitleWithSingleQuote (line 1357) | func TestParseTitleWithSingleQuote(t *testing.T) { function TestParseTitleWithEncodedSingleQuote (line 1376) | func TestParseTitleWithEncodedSingleQuote(t *testing.T) { function TestParseTitleWithSingleQuoteAndHTMLType (line 1395) | func TestParseTitleWithSingleQuoteAndHTMLType(t *testing.T) { function TestParseWithHTMLEntity (line 1414) | func TestParseWithHTMLEntity(t *testing.T) { function TestParseWithInvalidCharacterEntity (line 1433) | func TestParseWithInvalidCharacterEntity(t *testing.T) { function TestParseMediaGroup (line 1452) | func TestParseMediaGroup(t *testing.T) { function TestParseMediaElements (line 1519) | func TestParseMediaElements(t *testing.T) { function TestParseRepliesLinkRelationWithHTMLType (line 1587) | func TestParseRepliesLinkRelationWithHTMLType(t *testing.T) { function TestParseRepliesLinkRelationWithXHTMLType (line 1631) | func TestParseRepliesLinkRelationWithXHTMLType(t *testing.T) { function TestParseRepliesLinkRelationWithNoType (line 1675) | func TestParseRepliesLinkRelationWithNoType(t *testing.T) { function TestAbsoluteCommentsURL (line 1714) | func TestAbsoluteCommentsURL(t *testing.T) { function TestParseItemWithCategories (line 1754) | func TestParseItemWithCategories(t *testing.T) { function TestParseFeedWithCategories (line 1789) | func TestParseFeedWithCategories(t *testing.T) { function TestParseFeedWithIconURL (line 1823) | func TestParseFeedWithIconURL(t *testing.T) { FILE: internal/reader/atom/atom_common.go type AtomPerson (line 11) | type AtomPerson struct method PersonName (line 24) | func (a *AtomPerson) PersonName() string { type atomPersons (line 33) | type atomPersons method personNames (line 35) | func (a atomPersons) personNames() []string { type AtomLink (line 51) | type AtomLink struct type atomLinks (line 59) | type atomLinks method originalLink (line 61) | func (a atomLinks) originalLink() string { method firstLinkWithRelation (line 75) | func (a atomLinks) firstLinkWithRelation(relation string) string { method firstLinkWithRelationAndType (line 85) | func (a atomLinks) firstLinkWithRelationAndType(relation string, conte... method findAllLinksWithRelation (line 99) | func (a atomLinks) findAllLinksWithRelation(relation string) []*AtomLi... type atomCategory (line 119) | type atomCategory struct type atomCategories (line 137) | type atomCategories method CategoryNames (line 139) | func (ac atomCategories) CategoryNames() []string { FILE: internal/reader/atom/parser.go function Parse (line 15) | func Parse(baseURL string, r io.ReadSeeker, version string) (*model.Feed... FILE: internal/reader/date/parser.go function Parse (line 318) | func Parse(rawInput string) (t time.Time, err error) { function parseLocalTimeDates (line 350) | func parseLocalTimeDates(layout, ds string) (t time.Time, err error) { function checkTimezoneRange (line 366) | func checkTimezoneRange(t time.Time) time.Time { FILE: internal/reader/date/parser_test.go function FuzzParse (line 10) | func FuzzParse(f *testing.F) { function TestParseEmptyDate (line 18) | func TestParseEmptyDate(t *testing.T) { function TestParseInvalidDate (line 24) | func TestParseInvalidDate(t *testing.T) { function TestParseAtomDate (line 30) | func TestParseAtomDate(t *testing.T) { function TestParseRSSDateTimezone (line 48) | func TestParseRSSDateTimezone(t *testing.T) { function TestParseRSSDateGMT (line 77) | func TestParseRSSDateGMT(t *testing.T) { function TestParseRSSDatePST (line 106) | func TestParseRSSDatePST(t *testing.T) { function TestParseRSSDateEST (line 135) | func TestParseRSSDateEST(t *testing.T) { function TestParseRSSDateOffset (line 163) | func TestParseRSSDateOffset(t *testing.T) { function TestParseWeirdDateFormat (line 181) | func TestParseWeirdDateFormat(t *testing.T) { function TestParseDateWithTimezoneOutOfRange (line 238) | func TestParseDateWithTimezoneOutOfRange(t *testing.T) { FILE: internal/reader/dublincore/dublincore.go type DublinCoreChannelElement (line 6) | type DublinCoreChannelElement struct type DublinCoreItemElement (line 10) | type DublinCoreItemElement struct FILE: internal/reader/encoding/encoding.go function CharsetReader (line 26) | func CharsetReader(charsetLabel string, input io.Reader) (io.Reader, err... function NewCharsetReader (line 45) | func NewCharsetReader(r io.Reader, contentType string) (io.Reader, error) { function NewCharsetReaderFromBytes (line 54) | func NewCharsetReaderFromBytes(buffer []byte, contentType string) (io.Re... FILE: internal/reader/encoding/encoding_test.go function TestCharsetReaderWithUTF8 (line 16) | func TestCharsetReaderWithUTF8(t *testing.T) { function TestCharsetReaderWithISO88591 (line 44) | func TestCharsetReaderWithISO88591(t *testing.T) { function TestCharsetReaderWithWindows1252 (line 72) | func TestCharsetReaderWithWindows1252(t *testing.T) { function TestCharsetReaderWithInvalidProlog (line 100) | func TestCharsetReaderWithInvalidProlog(t *testing.T) { function TestCharsetReaderWithUTF8DocumentWithIncorrectProlog (line 128) | func TestCharsetReaderWithUTF8DocumentWithIncorrectProlog(t *testing.T) { function TestCharsetReaderWithWindows1252DocumentWithIncorrectProlog (line 156) | func TestCharsetReaderWithWindows1252DocumentWithIncorrectProlog(t *test... function TestNewReaderWithUTF8Document (line 184) | func TestNewReaderWithUTF8Document(t *testing.T) { function TestNewReaderWithUTF8DocumentAndNoContentEncoding (line 212) | func TestNewReaderWithUTF8DocumentAndNoContentEncoding(t *testing.T) { function TestNewReaderWithISO88591Document (line 240) | func TestNewReaderWithISO88591Document(t *testing.T) { function TestNewReaderWithISO88591DocumentAndNoContentType (line 268) | func TestNewReaderWithISO88591DocumentAndNoContentType(t *testing.T) { function TestNewReaderWithISO88591DocumentWithMetaAfter1024Bytes (line 296) | func TestNewReaderWithISO88591DocumentWithMetaAfter1024Bytes(t *testing.... function TestNewReaderWithUTF8DocumentWithMetaAfter1024Bytes (line 324) | func TestNewReaderWithUTF8DocumentWithMetaAfter1024Bytes(t *testing.T) { function TestCharsetReaderWithKOI8RLabel (line 352) | func TestCharsetReaderWithKOI8RLabel(t *testing.T) { function TestCharsetReaderWithUppercaseKOI8RLabel (line 379) | func TestCharsetReaderWithUppercaseKOI8RLabel(t *testing.T) { function TestCharsetReaderWithKOI8RFeedFixture (line 406) | func TestCharsetReaderWithKOI8RFeedFixture(t *testing.T) { function TestNewCharsetReaderWithKOI8RContentType (line 437) | func TestNewCharsetReaderWithKOI8RContentType(t *testing.T) { function TestNewCharsetReaderWithKOI8RFeedFixtureAndContentType (line 464) | func TestNewCharsetReaderWithKOI8RFeedFixtureAndContentType(t *testing.T) { FILE: internal/reader/fetcher/encoding_wrappers.go type brotliReadCloser (line 13) | type brotliReadCloser struct method Read (line 25) | func (b *brotliReadCloser) Read(p []byte) (n int, err error) { method Close (line 29) | func (b *brotliReadCloser) Close() error { function NewBrotliReadCloser (line 18) | func NewBrotliReadCloser(body io.ReadCloser) *brotliReadCloser { type gzipReadCloser (line 33) | type gzipReadCloser struct method Read (line 43) | func (gz *gzipReadCloser) Read(p []byte) (n int, err error) { method Close (line 56) | func (gz *gzipReadCloser) Close() error { function NewGzipReadCloser (line 39) | func NewGzipReadCloser(body io.ReadCloser) *gzipReadCloser { FILE: internal/reader/fetcher/request_builder.go constant defaultHTTPClientTimeout (line 25) | defaultHTTPClientTimeout = 20 * time.Second constant defaultAcceptHeader (line 26) | defaultAcceptHeader = "application/xml,application/atom+xml,applica... type RequestBuilder (line 34) | type RequestBuilder struct method WithHeader (line 54) | func (r *RequestBuilder) WithHeader(key, value string) *RequestBuilder { method WithETag (line 59) | func (r *RequestBuilder) WithETag(etag string) *RequestBuilder { method WithLastModified (line 66) | func (r *RequestBuilder) WithLastModified(lastModified string) *Reques... method WithUserAgent (line 73) | func (r *RequestBuilder) WithUserAgent(userAgent string, defaultUserAg... method WithCookie (line 82) | func (r *RequestBuilder) WithCookie(cookie string) *RequestBuilder { method WithUsernameAndPassword (line 89) | func (r *RequestBuilder) WithUsernameAndPassword(username, password st... method WithProxyRotator (line 96) | func (r *RequestBuilder) WithProxyRotator(proxyRotator *proxyrotator.P... method WithCustomApplicationProxyURL (line 101) | func (r *RequestBuilder) WithCustomApplicationProxyURL(proxyURL *url.U... method UseCustomApplicationProxyURL (line 106) | func (r *RequestBuilder) UseCustomApplicationProxyURL(value bool) *Req... method WithCustomFeedProxyURL (line 111) | func (r *RequestBuilder) WithCustomFeedProxyURL(proxyURL string) *Requ... method WithTimeout (line 116) | func (r *RequestBuilder) WithTimeout(timeout time.Duration) *RequestBu... method WithoutRedirects (line 121) | func (r *RequestBuilder) WithoutRedirects() *RequestBuilder { method DisableHTTP2 (line 126) | func (r *RequestBuilder) DisableHTTP2(value bool) *RequestBuilder { method IgnoreTLSErrors (line 131) | func (r *RequestBuilder) IgnoreTLSErrors(value bool) *RequestBuilder { method WithoutCompression (line 136) | func (r *RequestBuilder) WithoutCompression() *RequestBuilder { method ExecuteRequest (line 141) | func (r *RequestBuilder) ExecuteRequest(requestURL string) (*http.Resp... function NewRequestBuilder (line 47) | func NewRequestBuilder() *RequestBuilder { FILE: internal/reader/fetcher/request_builder_test.go function TestNewRequestBuilder (line 17) | func TestNewRequestBuilder(t *testing.T) { function TestRequestBuilder_WithHeader (line 30) | func TestRequestBuilder_WithHeader(t *testing.T) { function TestRequestBuilder_WithETag (line 47) | func TestRequestBuilder_WithETag(t *testing.T) { function TestRequestBuilder_WithLastModified (line 77) | func TestRequestBuilder_WithLastModified(t *testing.T) { function TestRequestBuilder_WithUserAgent (line 107) | func TestRequestBuilder_WithUserAgent(t *testing.T) { function TestRequestBuilder_WithCookie (line 138) | func TestRequestBuilder_WithCookie(t *testing.T) { function TestRequestBuilder_WithUsernameAndPassword (line 168) | func TestRequestBuilder_WithUsernameAndPassword(t *testing.T) { function TestRequestBuilder_DefaultAcceptHeader (line 201) | func TestRequestBuilder_DefaultAcceptHeader(t *testing.T) { function TestRequestBuilder_CustomAcceptHeaderNotOverridden (line 218) | func TestRequestBuilder_CustomAcceptHeaderNotOverridden(t *testing.T) { function TestRequestBuilder_WithTimeout (line 236) | func TestRequestBuilder_WithTimeout(t *testing.T) { function TestRequestBuilder_WithoutRedirects (line 245) | func TestRequestBuilder_WithoutRedirects(t *testing.T) { function TestRequestBuilder_DisableHTTP2 (line 269) | func TestRequestBuilder_DisableHTTP2(t *testing.T) { function TestRequestBuilder_IgnoreTLSErrors (line 278) | func TestRequestBuilder_IgnoreTLSErrors(t *testing.T) { function TestRequestBuilder_WithoutCompression (line 287) | func TestRequestBuilder_WithoutCompression(t *testing.T) { function TestRequestBuilder_WithCompression (line 304) | func TestRequestBuilder_WithCompression(t *testing.T) { function TestRequestBuilder_ConnectionCloseHeader (line 321) | func TestRequestBuilder_ConnectionCloseHeader(t *testing.T) { function TestRequestBuilder_WithCustomApplicationProxyURL (line 338) | func TestRequestBuilder_WithCustomApplicationProxyURL(t *testing.T) { function TestRequestBuilder_UseCustomApplicationProxyURL (line 348) | func TestRequestBuilder_UseCustomApplicationProxyURL(t *testing.T) { function TestRequestBuilder_WithCustomFeedProxyURL (line 357) | func TestRequestBuilder_WithCustomFeedProxyURL(t *testing.T) { function TestRequestBuilder_ChainedMethods (line 367) | func TestRequestBuilder_ChainedMethods(t *testing.T) { function TestRequestBuilder_InvalidURL (line 396) | func TestRequestBuilder_InvalidURL(t *testing.T) { function TestRequestBuilder_RefusePrivateNetworkByDefault (line 404) | func TestRequestBuilder_RefusePrivateNetworkByDefault(t *testing.T) { function TestRequestBuilder_AllowPrivateNetworkWhenEnabled (line 423) | func TestRequestBuilder_AllowPrivateNetworkWhenEnabled(t *testing.T) { function TestRequestBuilder_RefusePrivateNetworkOnRedirect (line 439) | func TestRequestBuilder_RefusePrivateNetworkOnRedirect(t *testing.T) { function TestRequestBuilder_TimeoutConfiguration (line 467) | func TestRequestBuilder_TimeoutConfiguration(t *testing.T) { function configureFetcherAllowPrivateNetworksOption (line 490) | func configureFetcherAllowPrivateNetworksOption(t *testing.T, value stri... FILE: internal/reader/fetcher/response_handler.go type ResponseHandler (line 23) | type ResponseHandler struct method EffectiveURL (line 32) | func (r *ResponseHandler) EffectiveURL() string { method ContentType (line 36) | func (r *ResponseHandler) ContentType() string { method LastModified (line 40) | func (r *ResponseHandler) LastModified() string { method ETag (line 48) | func (r *ResponseHandler) ETag() string { method Expires (line 56) | func (r *ResponseHandler) Expires() time.Duration { method CacheControlMaxAge (line 68) | func (r *ResponseHandler) CacheControlMaxAge() time.Duration { method ParseRetryDelay (line 82) | func (r *ResponseHandler) ParseRetryDelay() time.Duration { method IsRateLimited (line 98) | func (r *ResponseHandler) IsRateLimited() bool { method IsModified (line 102) | func (r *ResponseHandler) IsModified(lastEtagValue, lastModifiedValue ... method IsRedirect (line 118) | func (r *ResponseHandler) IsRedirect() bool { method Close (line 127) | func (r *ResponseHandler) Close() { method getReader (line 133) | func (r *ResponseHandler) getReader(maxBodySize int64) io.ReadCloser { method Body (line 152) | func (r *ResponseHandler) Body(maxBodySize int64) io.ReadCloser { method ReadBody (line 156) | func (r *ResponseHandler) ReadBody(maxBodySize int64) ([]byte, *locale... method LocalizedError (line 175) | func (r *ResponseHandler) LocalizedError() *locale.LocalizedErrorWrapp... function NewResponseHandler (line 28) | func NewResponseHandler(httpResponse *http.Response, clientErr error) *R... function isNetworkError (line 227) | func isNetworkError(err error) bool { function isSSLError (line 241) | func isSSLError(err error) bool { FILE: internal/reader/fetcher/response_handler_test.go type testReadCloser (line 14) | type testReadCloser struct method Read (line 18) | func (rc *testReadCloser) Read(_ []byte) (int, error) { method Close (line 22) | func (rc *testReadCloser) Close() error { function TestIsModified (line 27) | func TestIsModified(t *testing.T) { function TestRetryDelay (line 87) | func TestRetryDelay(t *testing.T) { function TestExpiresInMinutes (line 121) | func TestExpiresInMinutes(t *testing.T) { function TestCacheControlMaxAgeInMinutes (line 155) | func TestCacheControlMaxAgeInMinutes(t *testing.T) { function TestResponseHandlerCloseClosesBodyOnClientError (line 193) | func TestResponseHandlerCloseClosesBodyOnClientError(t *testing.T) { FILE: internal/reader/filter/filter.go type filterRule (line 37) | type filterRule struct type filterRules (line 42) | type filterRules function ParseRules (line 44) | func ParseRules(userRules, feedRules string) filterRules { function parseRule (line 59) | func parseRule(userDefinedRule string) (bool, filterRule) { function IsBlockedEntry (line 71) | func IsBlockedEntry(blockRules filterRules, allowRules filterRules, feed... function matchesEntryRegexRules (line 101) | func matchesEntryRegexRules(regexPattern string, feed *model.Feed, entry... function matchesEntryFilterRules (line 136) | func matchesEntryFilterRules(rules filterRules, feed *model.Feed, entry ... function matchesRule (line 153) | func matchesRule(rule filterRule, entry *model.Entry) bool { function isDateMatchingPattern (line 179) | func isDateMatchingPattern(pattern string, entryDate time.Time) bool { function containsRegexPattern (line 229) | func containsRegexPattern(pattern string, items []string) bool { function parseDuration (line 238) | func parseDuration(duration string) (time.Duration, error) { FILE: internal/reader/filter/filter_test.go function createTestEntry (line 14) | func createTestEntry() *model.Entry { function createTestFeed (line 27) | func createTestFeed() *model.Feed { function TestParseRules (line 39) | func TestParseRules(t *testing.T) { function TestParseRule (line 101) | func TestParseRule(t *testing.T) { function TestIsBlockedEntry (line 170) | func TestIsBlockedEntry(t *testing.T) { function TestAllowRulesExclusiveBehavior (line 236) | func TestAllowRulesExclusiveBehavior(t *testing.T) { function TestAllowRulesWithBlockRulesPrecedence (line 294) | func TestAllowRulesWithBlockRulesPrecedence(t *testing.T) { function TestKeeplistRulesBehavior (line 345) | func TestKeeplistRulesBehavior(t *testing.T) { function TestMatchesEntryRegexRules (line 413) | func TestMatchesEntryRegexRules(t *testing.T) { function TestMatchesEntryFilterRules (line 503) | func TestMatchesEntryFilterRules(t *testing.T) { function TestMatchesRule (line 552) | func TestMatchesRule(t *testing.T) { function TestIsDateMatchingPattern (line 648) | func TestIsDateMatchingPattern(t *testing.T) { function TestContainsRegexPattern (line 779) | func TestContainsRegexPattern(t *testing.T) { function TestParseDuration (line 835) | func TestParseDuration(t *testing.T) { function TestParseRulesEdgeCases (line 939) | func TestParseRulesEdgeCases(t *testing.T) { function TestIsBlockedEntryWithRegexRules (line 982) | func TestIsBlockedEntryWithRegexRules(t *testing.T) { function TestMatchesRuleWithInvalidRegex (line 1016) | func TestMatchesRuleWithInvalidRegex(t *testing.T) { function TestIsDateMatchingPatternEdgeCases (line 1027) | func TestIsDateMatchingPatternEdgeCases(t *testing.T) { function TestComplexFilterScenarios (line 1046) | func TestComplexFilterScenarios(t *testing.T) { function TestFilterRulesWithSpecialCharacters (line 1089) | func TestFilterRulesWithSpecialCharacters(t *testing.T) { function TestEntryWithEmptyFields (line 1150) | func TestEntryWithEmptyFields(t *testing.T) { function TestBoundaryConditionsForDates (line 1203) | func TestBoundaryConditionsForDates(t *testing.T) { function TestRegexErrorHandling (line 1255) | func TestRegexErrorHandling(t *testing.T) { function TestParseDurationWithVariousFormats (line 1297) | func TestParseDurationWithVariousFormats(t *testing.T) { function BenchmarkParseRules (line 1360) | func BenchmarkParseRules(b *testing.B) { function BenchmarkIsBlockedEntry (line 1378) | func BenchmarkIsBlockedEntry(b *testing.B) { function BenchmarkMatchesEntryRegexRules (line 1396) | func BenchmarkMatchesEntryRegexRules(b *testing.B) { function BenchmarkIsDateMatchingPattern (line 1406) | func BenchmarkIsDateMatchingPattern(b *testing.B) { function BenchmarkParseDuration (line 1415) | func BenchmarkParseDuration(b *testing.B) { FILE: internal/reader/googleplay/googleplay.go type GooglePlayChannelElement (line 9) | type GooglePlayChannelElement struct type GooglePlayItemElement (line 17) | type GooglePlayItemElement struct type GooglePlayImageElement (line 25) | type GooglePlayImageElement struct type GooglePlayCategoryElement (line 29) | type GooglePlayCategoryElement struct FILE: internal/reader/handler/handler.go function getTranslatedLocalizedError (line 30) | func getTranslatedLocalizedError(store *storage.Storage, userID int64, o... function CreateFeedFromSubscriptionDiscovery (line 40) | func CreateFeedFromSubscriptionDiscovery(store *storage.Storage, userID ... function CreateFeed (line 116) | func CreateFeed(store *storage.Storage, userID int64, feedCreationReques... function RefreshFeed (line 207) | func RefreshFeed(store *storage.Storage, userID, feedID int64, forceRefr... FILE: internal/reader/icon/checker.go type iconChecker (line 16) | type iconChecker struct method UpdateOrCreateFeedIcon (line 28) | func (c *iconChecker) UpdateOrCreateFeedIcon() { method CreateFeedIconIfMissing (line 74) | func (c *iconChecker) CreateFeedIconIfMissing() { function NewIconChecker (line 21) | func NewIconChecker(store *storage.Storage, feed *model.Feed) *iconCheck... FILE: internal/reader/icon/finder.go type iconFinder (line 35) | type iconFinder struct method findIcon (line 49) | func (f *iconFinder) findIcon() (*model.Icon, error) { method fetchDefaultIcon (line 87) | func (f *iconFinder) fetchDefaultIcon() (*model.Icon, error) { method fetchIconsFromHTMLDocument (line 105) | func (f *iconFinder) fetchIconsFromHTMLDocument(documentURL string) (*... method downloadIcon (line 157) | func (f *iconFinder) downloadIcon(iconURL string) (*model.Icon, error) { function newIconFinder (line 41) | func newIconFinder(requestBuilder *fetcher.RequestBuilder, websiteURL, f... function resizeIcon (line 186) | func resizeIcon(icon *model.Icon) *model.Icon { function findIconURLsFromHTMLDocument (line 273) | func findIconURLsFromHTMLDocument(documentURL string, body io.Reader, co... function parseImageDataURL (line 318) | func parseImageDataURL(value string) (*model.Icon, error) { FILE: internal/reader/icon/finder_test.go function TestParseImageDataURL (line 18) | func TestParseImageDataURL(t *testing.T) { function TestParseImageDataURLWithNoEncoding (line 34) | func TestParseImageDataURLWithNoEncoding(t *testing.T) { function TestParseImageWithRawSVGEncodedInUTF8 (line 54) | func TestParseImageWithRawSVGEncodedInUTF8(t *testing.T) { function TestParseImageDataURLWithNoMediaTypeAndNoEncoding (line 74) | func TestParseImageDataURLWithNoMediaTypeAndNoEncoding(t *testing.T) { function TestParseInvalidImageDataURLWithBadMimeType (line 82) | func TestParseInvalidImageDataURLWithBadMimeType(t *testing.T) { function TestParseInvalidImageDataURLWithUnsupportedEncoding (line 89) | func TestParseInvalidImageDataURLWithUnsupportedEncoding(t *testing.T) { function TestParseInvalidImageDataURLWithNoData (line 96) | func TestParseInvalidImageDataURLWithNoData(t *testing.T) { function TestParseInvalidImageDataURL (line 103) | func TestParseInvalidImageDataURL(t *testing.T) { function TestParseInvalidImageDataURLWithWrongPrefix (line 110) | func TestParseInvalidImageDataURLWithWrongPrefix(t *testing.T) { function TestFindIconURLsFromHTMLDocument_MultipleIcons (line 117) | func TestFindIconURLsFromHTMLDocument_MultipleIcons(t *testing.T) { function TestFindIconURLsFromHTMLDocument_CaseInsensitiveRel (line 151) | func TestFindIconURLsFromHTMLDocument_CaseInsensitiveRel(t *testing.T) { function TestFindIconURLsFromHTMLDocument_NoIcons (line 189) | func TestFindIconURLsFromHTMLDocument_NoIcons(t *testing.T) { function TestFindIconURLsFromHTMLDocument_EmptyHref (line 209) | func TestFindIconURLsFromHTMLDocument_EmptyHref(t *testing.T) { function TestFindIconURLsFromHTMLDocument_DataURLs (line 236) | func TestFindIconURLsFromHTMLDocument_DataURLs(t *testing.T) { function TestFindIconURLsFromHTMLDocument_RelativeAndAbsoluteURLs (line 268) | func TestFindIconURLsFromHTMLDocument_RelativeAndAbsoluteURLs(t *testing... function TestFindIconURLsFromHTMLDocument_InvalidHTML (line 304) | func TestFindIconURLsFromHTMLDocument_InvalidHTML(t *testing.T) { function TestFindIconURLsFromHTMLDocument_EmptyDocument (line 338) | func TestFindIconURLsFromHTMLDocument_EmptyDocument(t *testing.T) { function TestResizeIconSmallGif (line 349) | func TestResizeIconSmallGif(t *testing.T) { function TestResizeIconPng (line 363) | func TestResizeIconPng(t *testing.T) { function TestResizeIconWebp (line 388) | func TestResizeIconWebp(t *testing.T) { function TestResizeInvalidImage (line 403) | func TestResizeInvalidImage(t *testing.T) { function TestResizeIconTooLargeDimensions (line 413) | func TestResizeIconTooLargeDimensions(t *testing.T) { function TestResizeIconTooLargePixelCount (line 424) | func TestResizeIconTooLargePixelCount(t *testing.T) { function TestMinifySvg (line 435) | func TestMinifySvg(t *testing.T) { function TestMinifySvgWithError (line 445) | func TestMinifySvgWithError(t *testing.T) { function mustMinimalPNG (line 469) | func mustMinimalPNG(t *testing.T, width, height uint32) []byte { function writePNGChunk (line 485) | func writePNGChunk(t *testing.T, b *bytes.Buffer, chunkType string, fill... FILE: internal/reader/itunes/itunes.go type ItunesChannelElement (line 9) | type ItunesChannelElement struct method GetItunesCategories (line 25) | func (i *ItunesChannelElement) GetItunesCategories() []string { type ItunesItemElement (line 36) | type ItunesItemElement struct type ItunesImageElement (line 50) | type ItunesImageElement struct type ItunesCategoryElement (line 54) | type ItunesCategoryElement struct type ItunesOwnerElement (line 59) | type ItunesOwnerElement struct method String (line 64) | func (i *ItunesOwnerElement) String() string { FILE: internal/reader/json/adapter.go type JSONAdapter (line 19) | type JSONAdapter struct method BuildFeed (line 27) | func (j *JSONAdapter) BuildFeed(baseURL string) *model.Feed { function NewJSONAdapter (line 23) | func NewJSONAdapter(jsonFeed *JSONFeed) *JSONAdapter { FILE: internal/reader/json/json.go type JSONFeed (line 11) | type JSONFeed struct type JSONAuthor (line 56) | type JSONAuthor struct type JSONAuthors (line 69) | type JSONAuthors method UnmarshalJSON (line 71) | func (a *JSONAuthors) UnmarshalJSON(data []byte) error { type JSONHub (line 88) | type JSONHub struct type JSONItem (line 96) | type JSONItem struct type JSONAttachment (line 151) | type JSONAttachment struct FILE: internal/reader/json/parser.go function Parse (line 15) | func Parse(baseURL string, data io.Reader) (*model.Feed, error) { FILE: internal/reader/json/parser_test.go function TestParseJsonFeedVersion1 (line 14) | func TestParseJsonFeedVersion1(t *testing.T) { function TestParseFeedWithDescription (line 98) | func TestParseFeedWithDescription(t *testing.T) { function TestParsePodcast (line 118) | func TestParsePodcast(t *testing.T) { function TestParseFeedWithFeedURLWithTrailingSpace (line 205) | func TestParseFeedWithFeedURLWithTrailingSpace(t *testing.T) { function TestParseFeedWithRelativeFeedURL (line 224) | func TestParseFeedWithRelativeFeedURL(t *testing.T) { function TestParseFeedSiteURLWithTrailingSpace (line 243) | func TestParseFeedSiteURLWithTrailingSpace(t *testing.T) { function TestParseFeedWithRelativeSiteURL (line 262) | func TestParseFeedWithRelativeSiteURL(t *testing.T) { function TestParseFeedWithoutTitle (line 281) | func TestParseFeedWithoutTitle(t *testing.T) { function TestParseFeedWithoutHomePage (line 306) | func TestParseFeedWithoutHomePage(t *testing.T) { function TestParseFeedWithoutFeedURL (line 331) | func TestParseFeedWithoutFeedURL(t *testing.T) { function TestParseItemWithoutAttachmentURL (line 355) | func TestParseItemWithoutAttachmentURL(t *testing.T) { function TestParseItemWithRelativeURL (line 394) | func TestParseItemWithRelativeURL(t *testing.T) { function TestParseItemWithExternalURLAndNoURL (line 419) | func TestParseItemWithExternalURLAndNoURL(t *testing.T) { function TestParseItemWithExternalURLAndURL (line 447) | func TestParseItemWithExternalURLAndURL(t *testing.T) { function TestParseItemWithLegacyAuthorField (line 476) | func TestParseItemWithLegacyAuthorField(t *testing.T) { function TestParseItemWithMultipleAuthorFields (line 512) | func TestParseItemWithMultipleAuthorFields(t *testing.T) { function TestParseItemWithMultipleDuplicateAuthors (line 555) | func TestParseItemWithMultipleDuplicateAuthors(t *testing.T) { function TestParseItemWithAuthorsObject (line 602) | func TestParseItemWithAuthorsObject(t *testing.T) { function TestParseItemWithInvalidDate (line 635) | func TestParseItemWithInvalidDate(t *testing.T) { function TestParseItemWithMissingTitleUsesSummaryFallback (line 666) | func TestParseItemWithMissingTitleUsesSummaryFallback(t *testing.T) { function TestParseItemWithMissingTitleUsesContentTextFallback (line 695) | func TestParseItemWithMissingTitleUsesContentTextFallback(t *testing.T) { function TestParseItemWithMissingTitleUsesHTMLFallback (line 724) | func TestParseItemWithMissingTitleUsesHTMLFallback(t *testing.T) { function TestParseItemWithMissingTitleUsesURLFallback (line 753) | func TestParseItemWithMissingTitleUsesURLFallback(t *testing.T) { function TestParseItemWithTooLongUnicodeTitle (line 780) | func TestParseItemWithTooLongUnicodeTitle(t *testing.T) { function TestParseItemTitleWithXMLTags (line 811) | func TestParseItemTitleWithXMLTags(t *testing.T) { function TestParseItemHashPrefersIDOverURL (line 838) | func TestParseItemHashPrefersIDOverURL(t *testing.T) { function TestParseItemHashUsesURLWhenNoID (line 863) | func TestParseItemHashUsesURLWhenNoID(t *testing.T) { function TestParseItemHashUsesExternalURLFallback (line 887) | func TestParseItemHashUsesExternalURLFallback(t *testing.T) { function TestParseItemHashFallsBackToContent (line 915) | func TestParseItemHashFallsBackToContent(t *testing.T) { function TestParseItemTags (line 941) | func TestParseItemTags(t *testing.T) { function TestParseFeedFavicon (line 991) | func TestParseFeedFavicon(t *testing.T) { function TestParseFeedIcon (line 1021) | func TestParseFeedIcon(t *testing.T) { function TestParseFeedWithRelativeAttachmentURL (line 1051) | func TestParseFeedWithRelativeAttachmentURL(t *testing.T) { function TestParseInvalidJSON (line 1087) | func TestParseInvalidJSON(t *testing.T) { function TestParseNullJSONFeed (line 1095) | func TestParseNullJSONFeed(t *testing.T) { FILE: internal/reader/media/media.go type MediaItemElement (line 15) | type MediaItemElement struct method AllMediaThumbnails (line 25) | func (e *MediaItemElement) AllMediaThumbnails() []Thumbnail { method AllMediaContents (line 35) | func (e *MediaItemElement) AllMediaContents() []Content { method AllMediaPeerLinks (line 45) | func (e *MediaItemElement) AllMediaPeerLinks() []PeerLink { method FirstMediaDescription (line 55) | func (e *MediaItemElement) FirstMediaDescription() string { type Group (line 72) | type Group struct type Content (line 80) | type Content struct method MimeType (line 88) | func (mc *Content) MimeType() string { method Size (line 106) | func (mc *Content) Size() int64 { type Thumbnail (line 112) | type Thumbnail struct method MimeType (line 117) | func (t *Thumbnail) MimeType() string { method Size (line 122) | func (t *Thumbnail) Size() int64 { type PeerLink (line 127) | type PeerLink struct method MimeType (line 133) | func (p *PeerLink) MimeType() string { method Size (line 141) | func (p *PeerLink) Size() int64 { type Description (line 146) | type Description struct method HTML (line 152) | func (d *Description) HTML() string { type DescriptionList (line 162) | type DescriptionList method First (line 165) | func (dl DescriptionList) First() string { type MediaCategoryList (line 175) | type MediaCategoryList method Labels (line 177) | func (mcl MediaCategoryList) Labels() []string { type MediaCategory (line 188) | type MediaCategory struct FILE: internal/reader/media/media_test.go function TestContentMimeType (line 8) | func TestContentMimeType(t *testing.T) { function TestContentSize (line 33) | func TestContentSize(t *testing.T) { function TestPeerLinkType (line 55) | func TestPeerLinkType(t *testing.T) { function TestDescription (line 77) | func TestDescription(t *testing.T) { function TestFirstDescription (line 103) | func TestFirstDescription(t *testing.T) { FILE: internal/reader/opml/handler.go type Handler (line 15) | type Handler struct method Export (line 20) | func (h *Handler) Export(userID int64) (string, error) { method Import (line 41) | func (h *Handler) Import(userID int64, data io.Reader) error { function NewHandler (line 90) | func NewHandler(store *storage.Storage) *Handler { FILE: internal/reader/opml/opml.go type opmlDocument (line 12) | type opmlDocument struct type opmlHeader (line 19) | type opmlHeader struct type opmlOutline (line 25) | type opmlOutline struct method MarshalXML (line 34) | func (o opmlOutline) MarshalXML(e *xml.Encoder, start xml.StartElement... method IsSubscription (line 51) | func (o opmlOutline) IsSubscription() bool { method GetTitle (line 55) | func (o opmlOutline) GetTitle() string { method GetSiteURL (line 75) | func (o opmlOutline) GetSiteURL() string { type opmlOutlineCollection (line 83) | type opmlOutlineCollection method HasChildren (line 85) | func (o opmlOutlineCollection) HasChildren() bool { FILE: internal/reader/opml/parser.go function parse (line 15) | func parse(data io.Reader) ([]subcription, error) { function getSubscriptionsFromOutlines (line 30) | func getSubscriptionsFromOutlines(outlines opmlOutlineCollection, catego... FILE: internal/reader/opml/parser_test.go method equals (line 12) | func (s subcription) equals(subscription subcription) bool { function TestParseOpmlWithoutCategories (line 18) | func TestParseOpmlWithoutCategories(t *testing.T) { function TestParseOpmlWithCategories (line 59) | func TestParseOpmlWithCategories(t *testing.T) { function TestParseOpmlWithEmptyTitleAndEmptySiteURL (line 98) | func TestParseOpmlWithEmptyTitleAndEmptySiteURL(t *testing.T) { function TestParseOpmlVersion1 (line 131) | func TestParseOpmlVersion1(t *testing.T) { function TestParseOpmlVersion1WithoutOuterOutline (line 169) | func TestParseOpmlVersion1WithoutOuterOutline(t *testing.T) { function TestParseOpmlVersion1WithSeveralNestedOutlines (line 203) | func TestParseOpmlVersion1WithSeveralNestedOutlines(t *testing.T) { function TestParseOpmlWithInvalidCharacterEntity (line 245) | func TestParseOpmlWithInvalidCharacterEntity(t *testing.T) { function TestParseInvalidXML (line 278) | func TestParseInvalidXML(t *testing.T) { FILE: internal/reader/opml/serializer.go function serialize (line 16) | func serialize(subscriptions []subcription) string { function convertSubscriptionsToOPML (line 34) | func convertSubscriptionsToOPML(subscriptions []subcription) *opmlDocume... function groupSubscriptionsByFeed (line 65) | func groupSubscriptionsByFeed(subscriptions []subcription) map[string][]... FILE: internal/reader/opml/serializer_test.go function TestSerialize (line 11) | func TestSerialize(t *testing.T) { function TestNormalizedCategoriesOrder (line 41) | func TestNormalizedCategoriesOrder(t *testing.T) { FILE: internal/reader/opml/subscription.go type subcription (line 7) | type subcription struct FILE: internal/reader/parser/format.go constant FormatRDF (line 16) | FormatRDF = "rdf" constant FormatRSS (line 17) | FormatRSS = "rss" constant FormatAtom (line 18) | FormatAtom = "atom" constant FormatJSON (line 19) | FormatJSON = "json" constant FormatUnknown (line 20) | FormatUnknown = "unknown" constant maxTokensToConsider (line 23) | maxTokensToConsider = uint(50) function DetectFeedFormat (line 26) | func DetectFeedFormat(r io.ReadSeeker) (string, string) { function detectJSONFormat (line 67) | func detectJSONFormat(r io.ReadSeeker) (bool, error) { FILE: internal/reader/parser/format_test.go function TestDetectRDF (line 11) | func TestDetectRDF(t *testing.T) { function TestDetectRSS (line 20) | func TestDetectRSS(t *testing.T) { function TestDetectAtom10 (line 29) | func TestDetectAtom10(t *testing.T) { function TestDetectAtom03 (line 38) | func TestDetectAtom03(t *testing.T) { function TestDetectAtomWithISOCharset (line 47) | func TestDetectAtomWithISOCharset(t *testing.T) { function TestDetectJSON (line 56) | func TestDetectJSON(t *testing.T) { function TestDetectUnknown (line 70) | func TestDetectUnknown(t *testing.T) { function TestDetectJSONWithLargeLeadingWhitespace (line 81) | func TestDetectJSONWithLargeLeadingWhitespace(t *testing.T) { function TestDetectJSONWithMixedWhitespace (line 94) | func TestDetectJSONWithMixedWhitespace(t *testing.T) { function TestDetectOnlyWhitespace (line 107) | func TestDetectOnlyWhitespace(t *testing.T) { function TestDetectJSONSmallerThanBuffer (line 116) | func TestDetectJSONSmallerThanBuffer(t *testing.T) { function TestDetectJSONWithWhitespaceSmallerThanBuffer (line 125) | func TestDetectJSONWithWhitespaceSmallerThanBuffer(t *testing.T) { FILE: internal/reader/parser/parser.go function ParseFeed (line 20) | func ParseFeed(baseURL string, r io.ReadSeeker) (*model.Feed, error) { FILE: internal/reader/parser/parser_test.go function BenchmarkParse (line 12) | func BenchmarkParse(b *testing.B) { function FuzzParse (line 32) | func FuzzParse(f *testing.F) { function TestParseAtom03Feed (line 88) | func TestParseAtom03Feed(t *testing.T) { function TestParseAtom10Feed (line 116) | func TestParseAtom10Feed(t *testing.T) { function TestParseAtomFeedWithRelativeURL (line 148) | func TestParseAtomFeedWithRelativeURL(t *testing.T) { function TestParseRSS (line 184) | func TestParseRSS(t *testing.T) { function TestParseRSSFeedWithRelativeURL (line 210) | func TestParseRSSFeedWithRelativeURL(t *testing.T) { function TestParseRDF (line 248) | func TestParseRDF(t *testing.T) { function TestParseRDFWithRelativeURL (line 277) | func TestParseRDFWithRelativeURL(t *testing.T) { function TestParseJson (line 314) | func TestParseJson(t *testing.T) { function TestParseJsonFeedWithRelativeURL (line 344) | func TestParseJsonFeedWithRelativeURL(t *testing.T) { function TestParseUnknownFeed (line 381) | func TestParseUnknownFeed(t *testing.T) { function TestParseEmptyFeed (line 400) | func TestParseEmptyFeed(t *testing.T) { FILE: internal/reader/processor/bilibili.go function shouldFetchBilibiliWatchTime (line 24) | func shouldFetchBilibiliWatchTime(entry *model.Entry) bool { function extractBilibiliVideoID (line 31) | func extractBilibiliVideoID(websiteURL string) (string, string, error) { function fetchBilibiliWatchTime (line 45) | func fetchBilibiliWatchTime(websiteURL string) (int, error) { FILE: internal/reader/processor/nebula.go function shouldFetchNebulaWatchTime (line 12) | func shouldFetchNebulaWatchTime(entry *model.Entry) bool { function fetchNebulaWatchTime (line 20) | func fetchNebulaWatchTime(websiteURL string) (int, error) { FILE: internal/reader/processor/odysee.go function shouldFetchOdyseeWatchTime (line 12) | func shouldFetchOdyseeWatchTime(entry *model.Entry) bool { function fetchOdyseeWatchTime (line 20) | func fetchOdyseeWatchTime(websiteURL string) (int, error) { FILE: internal/reader/processor/processor.go function ProcessFeedEntries (line 27) | func ProcessFeedEntries(store *storage.Storage, feed *model.Feed, userID... function ProcessEntryWebPage (line 180) | func ProcessEntryWebPage(feed *model.Feed, entry *model.Entry, user *mod... FILE: internal/reader/processor/reading_time.go function fetchWatchTime (line 21) | func fetchWatchTime(websiteURL, query string, isoDate bool) (int, error) { function updateEntryReadingTime (line 61) | func updateEntryReadingTime(store *storage.Storage, feed *model.Feed, en... FILE: internal/reader/processor/utils.go function parseISO8601Duration (line 18) | func parseISO8601Duration(duration string) (time.Duration, error) { function minifyContent (line 62) | func minifyContent(content string) string { FILE: internal/reader/processor/utils_test.go function TestISO8601DurationParsing (line 11) | func TestISO8601DurationParsing(t *testing.T) { function TestISO8601DurationParsingErrors (line 50) | func TestISO8601DurationParsingErrors(t *testing.T) { function TestMinifyEntryContentWithWhitespace (line 93) | func TestMinifyEntryContentWithWhitespace(t *testing.T) { function TestMinifyContentWithDefaultAttributes (line 102) | func TestMinifyContentWithDefaultAttributes(t *testing.T) { function TestMinifyContentWithComments (line 111) | func TestMinifyContentWithComments(t *testing.T) { function TestMinifyContentWithSpecialComments (line 120) | func TestMinifyContentWithSpecialComments(t *testing.T) { FILE: internal/reader/processor/youtube.go function isYouTubeVideoURL (line 20) | func isYouTubeVideoURL(websiteURL string) bool { function getVideoIDFromYouTubeURL (line 24) | func getVideoIDFromYouTubeURL(websiteURL string) string { function shouldFetchYouTubeWatchTimeForSingleEntry (line 33) | func shouldFetchYouTubeWatchTimeForSingleEntry(entry *model.Entry) bool { function shouldFetchYouTubeWatchTimeInBulk (line 37) | func shouldFetchYouTubeWatchTimeInBulk() bool { function fetchYouTubeWatchTimeForSingleEntry (line 41) | func fetchYouTubeWatchTimeForSingleEntry(websiteURL string) (int, error) { function fetchYouTubeWatchTimeInBulk (line 45) | func fetchYouTubeWatchTimeInBulk(entries []*model.Entry) { function fetchYouTubeWatchTimeFromApiInBulk (line 80) | func fetchYouTubeWatchTimeFromApiInBulk(videoIDs []string) (map[string]t... FILE: internal/reader/processor/youtube_test.go function TestGetYouTubeVideoIDFromURL (line 10) | func TestGetYouTubeVideoIDFromURL(t *testing.T) { function TestIsYouTubeVideoURL (line 27) | func TestIsYouTubeVideoURL(t *testing.T) { FILE: internal/reader/rdf/adapter.go type rdfAdapter (line 19) | type rdfAdapter struct method buildFeed (line 23) | func (r *rdfAdapter) buildFeed(baseURL string) *model.Feed { function stripTags (line 109) | func stripTags(value string) string { FILE: internal/reader/rdf/parser.go function Parse (line 15) | func Parse(baseURL string, data io.ReadSeeker) (*model.Feed, error) { FILE: internal/reader/rdf/parser_test.go function TestParseRDFSample (line 13) | func TestParseRDFSample(t *testing.T) { function TestParseRDFSampleWithDublinCore (line 123) | func TestParseRDFSampleWithDublinCore(t *testing.T) { function TestParseRDFFeedWithEmptyTitle (line 234) | func TestParseRDFFeedWithEmptyTitle(t *testing.T) { function TestParseRDFFeedWithEmptyLink (line 259) | func TestParseRDFFeedWithEmptyLink(t *testing.T) { function TestParseRDFFeedWithRelativeLink (line 288) | func TestParseRDFFeedWithRelativeLink(t *testing.T) { function TestParseRDFFeedSiteURLWithTrailingSpace (line 318) | func TestParseRDFFeedSiteURLWithTrailingSpace(t *testing.T) { function TestParseItemWithoutLink (line 348) | func TestParseItemWithoutLink(t *testing.T) { function TestParseItemRelativeURL (line 381) | func TestParseItemRelativeURL(t *testing.T) { function TestParseFeedWithURLWrappedInSpaces (line 406) | func TestParseFeedWithURLWrappedInSpaces(t *testing.T) { function TestParseRDFItemWitEmptyTitleElement (line 470) | func TestParseRDFItemWitEmptyTitleElement(t *testing.T) { function TestParseRDFItemWithDublinCoreTitleElement (line 502) | func TestParseRDFItemWithDublinCoreTitleElement(t *testing.T) { function TestParseRDFItemWithDuplicateTitleElement (line 535) | func TestParseRDFItemWithDuplicateTitleElement(t *testing.T) { function TestParseItemWithEncodedHTMLTitle (line 569) | func TestParseItemWithEncodedHTMLTitle(t *testing.T) { function TestParseRDFWithContentEncoded (line 594) | func TestParseRDFWithContentEncoded(t *testing.T) { function TestParseRDFWithEncodedHTMLDescription (line 627) | func TestParseRDFWithEncodedHTMLDescription(t *testing.T) { function TestParseItemWithoutDate (line 660) | func TestParseItemWithoutDate(t *testing.T) { function TestParseItemWithDublicCoreDate (line 687) | func TestParseItemWithDublicCoreDate(t *testing.T) { function TestParseItemWithInvalidDublicCoreDate (line 715) | func TestParseItemWithInvalidDublicCoreDate(t *testing.T) { function TestParseItemWithEncodedHTMLInDCCreatorField (line 744) | func TestParseItemWithEncodedHTMLInDCCreatorField(t *testing.T) { function TestParseItemWithOnlyFeedAuthor (line 772) | func TestParseItemWithOnlyFeedAuthor(t *testing.T) { function TestParseInvalidXml (line 806) | func TestParseInvalidXml(t *testing.T) { function TestParseFeedWithHTMLEntity (line 814) | func TestParseFeedWithHTMLEntity(t *testing.T) { function TestParseFeedWithInvalidCharacterEntity (line 833) | func TestParseFeedWithInvalidCharacterEntity(t *testing.T) { FILE: internal/reader/rdf/rdf.go type rdf (line 13) | type rdf struct type rdfChannel (line 19) | type rdfChannel struct type rdfItem (line 26) | type rdfItem struct FILE: internal/reader/readability/readability.go constant defaultTagsToScore (line 18) | defaultTagsToScore = "section,h2,h3,h4,h5,h6,p,td,pre,div" type candidate (line 29) | type candidate struct method Node (line 34) | func (c *candidate) Node() *html.Node { method String (line 41) | func (c *candidate) String() string { type candidateList (line 62) | type candidateList method String (line 64) | func (c candidateList) String() string { function ExtractContent (line 73) | func ExtractContent(page io.Reader) (baseURL string, extractedContent st... function getSelectionLength (line 104) | func getSelectionLength(s *goquery.Selection) int { function getSelectionCommaCount (line 108) | func getSelectionCommaCount(s *goquery.Selection) int { function sumMapOnSelection (line 116) | func sumMapOnSelection(s *goquery.Selection, f func(str string) int) int { function getArticle (line 140) | func getArticle(topCandidate *candidate, candidates candidateList) string { function shouldRemoveCandidate (line 190) | func shouldRemoveCandidate(str string) bool { function removeUnlikelyCandidates (line 216) | func removeUnlikelyCandidates(document *goquery.Document) { function getTopCandidate (line 239) | func getTopCandidate(document *goquery.Document, candidates candidateLis... function getCandidates (line 260) | func getCandidates(document *goquery.Document) candidateList { function scoreNode (line 308) | func scoreNode(s *goquery.Selection) *candidate { function getLinkDensity (line 339) | func getLinkDensity(s *goquery.Selection) float32 { function getWeight (line 350) | func getWeight(s string) float32 { function transformMisusedDivsIntoParagraphs (line 365) | func transformMisusedDivsIntoParagraphs(document *goquery.Document) { function containsSentence (line 387) | func containsSentence(content string) bool { FILE: internal/reader/readability/readability_test.go function BenchmarkExtractContent (line 18) | func BenchmarkExtractContent(b *testing.B) { function BenchmarkGetWeight (line 37) | func BenchmarkGetWeight(b *testing.B) { function BenchmarkTransformMisusedDivsIntoParagraphs (line 53) | func BenchmarkTransformMisusedDivsIntoParagraphs(b *testing.B) { function TestBaseURL (line 69) | func TestBaseURL(t *testing.T) { function TestMultipleBaseURL (line 92) | func TestMultipleBaseURL(t *testing.T) { function TestRelativeBaseURL (line 116) | func TestRelativeBaseURL(t *testing.T) { function TestWithoutBaseURL (line 139) | func TestWithoutBaseURL(t *testing.T) { function TestRemoveStyleScript (line 162) | func TestRemoveStyleScript(t *testing.T) { function TestRemoveBlacklist (line 194) | func TestRemoveBlacklist(t *testing.T) { function TestNestedSpanInCodeBlock (line 223) | func TestNestedSpanInCodeBlock(t *testing.T) { function TestGetClassWeight (line 245) | func TestGetClassWeight(t *testing.T) { function TestRemoveUnlikelyCandidates (line 358) | func TestRemoveUnlikelyCandidates(t *testing.T) { function TestRemoveUnlikelyCandidatesShouldRemoveFunction (line 471) | func TestRemoveUnlikelyCandidatesShouldRemoveFunction(t *testing.T) { function TestRemoveUnlikelyCandidatesPreservation (line 554) | func TestRemoveUnlikelyCandidatesPreservation(t *testing.T) { function TestGetArticle (line 638) | func TestGetArticle(t *testing.T) { function TestGetArticleWithSpecificScoring (line 716) | func TestGetArticleWithSpecificScoring(t *testing.T) { function TestGetArticleSiblingScoreThreshold (line 780) | func TestGetArticleSiblingScoreThreshold(t *testing.T) { function TestGetArticleParagraphSpecificLogic (line 868) | func TestGetArticleParagraphSpecificLogic(t *testing.T) { function TestGetArticleLinkDensityThresholds (line 950) | func TestGetArticleLinkDensityThresholds(t *testing.T) { function TestGetArticleTagWrapping (line 1047) | func TestGetArticleTagWrapping(t *testing.T) { function TestGetArticleEmptyAndEdgeCases (line 1121) | func TestGetArticleEmptyAndEdgeCases(t *testing.T) { function TestGetLinkDensity (line 1174) | func TestGetLinkDensity(t *testing.T) { function TestContainsSentence (line 1241) | func TestContainsSentence(t *testing.T) { function TestScoreNode (line 1309) | func TestScoreNode(t *testing.T) { function TestScoreNodeWithClassWeights (line 1481) | func TestScoreNodeWithClassWeights(t *testing.T) { function TestScoreNodeEdgeCases (line 1572) | func TestScoreNodeEdgeCases(t *testing.T) { function TestTransformMisusedDivsIntoParagraphs (line 1682) | func TestTransformMisusedDivsIntoParagraphs(t *testing.T) { function TestTransformMisusedDivsIntoParagraphsEdgeCases (line 1841) | func TestTransformMisusedDivsIntoParagraphsEdgeCases(t *testing.T) { function TestCandidateString (line 1930) | func TestCandidateString(t *testing.T) { function TestCandidateListString (line 2066) | func TestCandidateListString(t *testing.T) { function TestCandidateStringEdgeCases (line 2211) | func TestCandidateStringEdgeCases(t *testing.T) { function TestExtractContentWithBrokenReader (line 2295) | func TestExtractContentWithBrokenReader(t *testing.T) { type brokenReader (line 2302) | type brokenReader struct method Read (line 2304) | func (br *brokenReader) Read(p []byte) (n int, err error) { FILE: internal/reader/readingtime/readingtime.go function EstimateReadingTime (line 17) | func EstimateReadingTime(content string, defaultReadingSpeed, cjkReading... function isCJK (line 27) | func isCJK(text string) bool { FILE: internal/reader/readingtime/readingtime_test.go function TestEstimateReadingTime (line 64) | func TestEstimateReadingTime(t *testing.T) { function BenchmarkEstimateReadingTime (line 82) | func BenchmarkEstimateReadingTime(b *testing.B) { FILE: internal/reader/rewrite/content_rewrite.go type rule (line 16) | type rule struct method applyRule (line 21) | func (rule rule) applyRule(entryURL string, entry *model.Entry) { function ApplyContentRewriteRules (line 102) | func ApplyContentRewriteRules(entry *model.Entry, customRewriteRules str... function parseRules (line 121) | func parseRules(rulesText string) (rules []rule) { function getPredefinedRewriteRules (line 140) | func getPredefinedRewriteRules(entryURL string) string { FILE: internal/reader/rewrite/content_rewrite_functions.go function titlelize (line 31) | func titlelize(s string) string { function addImageTitle (line 47) | func addImageTitle(entryContent string) string { function addMailtoSubject (line 71) | func addMailtoSubject(entryContent string) string { function addDynamicImage (line 103) | func addDynamicImage(entryContent string) string { function addDynamicIframe (line 185) | func addDynamicIframe(entryContent string) string { function fixMediumImages (line 222) | func fixMediumImages(entryContent string) string { function useNoScriptImages (line 239) | func useNoScriptImages(entryContent string) string { function getYoutubVideoIDFromURL (line 261) | func getYoutubVideoIDFromURL(entryURL string) string { function buildVideoPlayerIframe (line 288) | func buildVideoPlayerIframe(absoluteVideoURL string) string { function addVideoPlayerIframe (line 292) | func addVideoPlayerIframe(absoluteVideoURL, entryContent string) string { function addYoutubeVideoRewriteRule (line 296) | func addYoutubeVideoRewriteRule(entryURL, entryContent string) string { function addYoutubeVideoUsingInvidiousPlayer (line 303) | func addYoutubeVideoUsingInvidiousPlayer(entryURL, entryContent string) ... function addYoutubeVideoFromId (line 311) | func addYoutubeVideoFromId(entryContent string) string { function addInvidiousVideo (line 326) | func addInvidiousVideo(entryURL, entryContent string) string { function addPDFLink (line 351) | func addPDFLink(entryURL, entryContent string) string { function replaceTextLinks (line 358) | func replaceTextLinks(input string) string { function replaceCustom (line 362) | func replaceCustom(entryContent string, searchTerm string, replaceTerm s... function removeCustom (line 370) | func removeCustom(entryContent string, selector string) string { function addCastopodEpisode (line 382) | func addCastopodEpisode(entryURL, entryContent string) string { function applyFuncOnTextContent (line 388) | func applyFuncOnTextContent(entryContent string, selector string, repl f... function decodeBase64Content (line 409) | func decodeBase64Content(entryContent string) string { function addHackerNewsLinksUsing (line 417) | func addHackerNewsLinksUsing(entryContent, app string) string { function removeTables (line 469) | func removeTables(entryContent string) string { function fixGhostCards (line 501) | func fixGhostCards(entryContent string) string { function removeImgBlurParams (line 553) | func removeImgBlurParams(entryContent string) string { FILE: internal/reader/rewrite/content_rewrite_test.go function TestParseRules (line 16) | func TestParseRules(t *testing.T) { function TestReplaceTextLinks (line 31) | func TestReplaceTextLinks(t *testing.T) { function TestRewriteWithNoMatchingRule (line 51) | func TestRewriteWithNoMatchingRule(t *testing.T) { function TestRewriteYoutubeVideoLink (line 69) | func TestRewriteYoutubeVideoLink(t *testing.T) { function TestRewriteYoutubeShortLink (line 89) | func TestRewriteYoutubeShortLink(t *testing.T) { function TestRewriteIncorrectYoutubeLink (line 109) | func TestRewriteIncorrectYoutubeLink(t *testing.T) { function TestRewriteYoutubeLinkAndCustomEmbedURL (line 129) | func TestRewriteYoutubeLinkAndCustomEmbedURL(t *testing.T) { function TestRewriteYoutubeVideoLinkUsingInvidious (line 157) | func TestRewriteYoutubeVideoLinkUsingInvidious(t *testing.T) { function TestRewriteYoutubeShortLinkUsingInvidious (line 177) | func TestRewriteYoutubeShortLinkUsingInvidious(t *testing.T) { function TestAddYoutubeVideoFromId (line 197) | func TestAddYoutubeVideoFromId(t *testing.T) { function TestAddYoutubeVideoFromIdWithCustomEmbedURL (line 236) | func TestAddYoutubeVideoFromIdWithCustomEmbedURL(t *testing.T) { function TestAddInvidiousVideo (line 258) | func TestAddInvidiousVideo(t *testing.T) { function TestRewriteWithInexistingCustomRule (line 328) | func TestRewriteWithInexistingCustomRule(t *testing.T) { function TestRewriteWithXkcdLink (line 346) | func TestRewriteWithXkcdLink(t *testing.T) { function TestRewriteWithXkcdLinkHtmlInjection (line 364) | func TestRewriteWithXkcdLinkHtmlInjection(t *testing.T) { function TestRewriteWithXkcdLinkAndImageNoTitle (line 382) | func TestRewriteWithXkcdLinkAndImageNoTitle(t *testing.T) { function TestRewriteWithXkcdLinkAndNoImage (line 400) | func TestRewriteWithXkcdLinkAndNoImage(t *testing.T) { function TestRewriteWithXkcdAndNoImage (line 418) | func TestRewriteWithXkcdAndNoImage(t *testing.T) { function TestRewriteMailtoLink (line 436) | func TestRewriteMailtoLink(t *testing.T) { function TestRewriteWithPDFLink (line 454) | func TestRewriteWithPDFLink(t *testing.T) { function TestRewriteWithNoLazyImage (line 472) | func TestRewriteWithNoLazyImage(t *testing.T) { function TestRewriteWithLazyImage (line 490) | func TestRewriteWithLazyImage(t *testing.T) { function TestRewriteWithLazyDivImage (line 508) | func TestRewriteWithLazyDivImage(t *testing.T) { function TestRewriteWithUnknownLazyNoScriptImage (line 526) | func TestRewriteWithUnknownLazyNoScriptImage(t *testing.T) { function TestRewriteWithLazySrcset (line 544) | func TestRewriteWithLazySrcset(t *testing.T) { function TestRewriteWithImageAndLazySrcset (line 562) | func TestRewriteWithImageAndLazySrcset(t *testing.T) { function TestRewriteWithNoLazyIframe (line 580) | func TestRewriteWithNoLazyIframe(t *testing.T) { function TestRewriteWithLazyIframe (line 598) | func TestRewriteWithLazyIframe(t *testing.T) { function TestRewriteWithLazyIframeAndSrc (line 616) | func TestRewriteWithLazyIframeAndSrc(t *testing.T) { function TestNewLineRewriteRule (line 634) | func TestNewLineRewriteRule(t *testing.T) { function TestConvertTextLinkRewriteRule (line 652) | func TestConvertTextLinkRewriteRule(t *testing.T) { function TestMediumImage (line 670) | func TestMediumImage(t *testing.T) { function TestRewriteNoScriptImageWithoutNoScriptTag (line 707) | func TestRewriteNoScriptImageWithoutNoScriptTag(t *testing.T) { function TestRewriteNoScriptImageWithNoScriptTag (line 726) | func TestRewriteNoScriptImageWithNoScriptTag(t *testing.T) { function TestRewriteReplaceCustom (line 745) | func TestRewriteReplaceCustom(t *testing.T) { function TestRewriteReplaceTitleCustom (line 763) | func TestRewriteReplaceTitleCustom(t *testing.T) { function TestRewriteRemoveCustom (line 781) | func TestRewriteRemoveCustom(t *testing.T) { function TestRewriteRemoveQuotedSelector (line 799) | func TestRewriteRemoveQuotedSelector(t *testing.T) { function TestRewriteAddCastopodEpisode (line 817) | func TestRewriteAddCastopodEpisode(t *testing.T) { function TestRewriteBase64Decode (line 835) | func TestRewriteBase64Decode(t *testing.T) { function TestRewriteBase64DecodeInHTML (line 853) | func TestRewriteBase64DecodeInHTML(t *testing.T) { function TestRewriteBase64DecodeArgs (line 871) | func TestRewriteBase64DecodeArgs(t *testing.T) { function TestRewriteRemoveTables (line 889) | func TestRewriteRemoveTables(t *testing.T) { function TestRemoveClickbait (line 907) | func TestRemoveClickbait(t *testing.T) { function TestAddHackerNewsLinksUsingHack (line 925) | func TestAddHackerNewsLinksUsingHack(t *testing.T) { function TestAddHackerNewsLinksUsingOpener (line 950) | func TestAddHackerNewsLinksUsingOpener(t *testing.T) { function TestAddImageTitle (line 975) | func TestAddImageTitle(t *testing.T) { function TestFixGhostCard (line 1009) | func TestFixGhostCard(t *testing.T) { function TestFixGhostCardNoCard (line 1043) | func TestFixGhostCardNoCard(t *testing.T) { function TestFixGhostCardInvalidCard (line 1062) | func TestFixGhostCardInvalidCard(t *testing.T) { function TestFixGhostCardMissingAuthor (line 1085) | func TestFixGhostCardMissingAuthor(t *testing.T) { function TestFixGhostCardDuplicatedAuthor (line 1114) | func TestFixGhostCardDuplicatedAuthor(t *testing.T) { function TestFixGhostCardMultiple (line 1148) | func TestFixGhostCardMultiple(t *testing.T) { function TestFixGhostCardMultipleSplit (line 1198) | func TestFixGhostCardMultipleSplit(t *testing.T) { function TestStripImageQueryParams (line 1251) | func TestStripImageQueryParams(t *testing.T) { function TestStripImageQueryParamsNoChanges (line 1301) | func TestStripImageQueryParamsNoChanges(t *testing.T) { function TestStripImageQueryParamsEdgeCases (line 1324) | func TestStripImageQueryParamsEdgeCases(t *testing.T) { function TestStripImageQueryParamsSimple (line 1372) | func TestStripImageQueryParamsSimple(t *testing.T) { FILE: internal/reader/rewrite/referer_override.go function GetRefererForURL (line 12) | func GetRefererForURL(u string) string { FILE: internal/reader/rewrite/referer_override_test.go function TestGetRefererForURL (line 10) | func TestGetRefererForURL(t *testing.T) { FILE: internal/reader/rewrite/url_rewrite.go function RewriteEntryURL (line 15) | func RewriteEntryURL(feed *model.Feed, entry *model.Entry) string { FILE: internal/reader/rewrite/url_rewrite_test.go function TestRewriteEntryURL (line 12) | func TestRewriteEntryURL(t *testing.T) { function TestRewriteEntryURLWithNilValues (line 201) | func TestRewriteEntryURLWithNilValues(t *testing.T) { function TestCustomReplaceRuleRegex (line 233) | func TestCustomReplaceRuleRegex(t *testing.T) { FILE: internal/reader/rss/adapter.go type rssAdapter (line 22) | type rssAdapter struct method buildFeed (line 26) | func (r *rssAdapter) buildFeed(baseURL string) *model.Feed { function findFeedAuthor (line 144) | func findFeedAuthor(rssChannel *rssChannel) string { function findFeedTags (line 164) | func findFeedTags(rssChannel *rssChannel) []string { function findEntryTitle (line 188) | func findEntryTitle(rssItem *rssItem) string { function findEntryURL (line 198) | func findEntryURL(rssItem *rssItem) string { function findEntryContent (line 221) | func findEntryContent(rssItem *rssItem) string { function findEntryDate (line 236) | func findEntryDate(rssItem *rssItem) time.Time { function findEntryAuthor (line 259) | func findEntryAuthor(rssItem *rssItem) string { function findEntryTags (line 282) | func findEntryTags(rssItem *rssItem) []string { function findEntryEnclosures (line 302) | func findEntryEnclosures(rssItem *rssItem, siteURL string) model.Enclosu... FILE: internal/reader/rss/atom.go type atomAuthor (line 10) | type atomAuthor struct method PersonName (line 14) | func (a *atomAuthor) PersonName() string { type atomLinks (line 18) | type atomLinks struct FILE: internal/reader/rss/feedburner.go type feedBurnerItemElement (line 7) | type feedBurnerItemElement struct FILE: internal/reader/rss/parser.go function Parse (line 15) | func Parse(baseURL string, data io.ReadSeeker) (*model.Feed, error) { FILE: internal/reader/rss/parser_test.go function TestParseRss2Sample (line 12) | func TestParseRss2Sample(t *testing.T) { function TestParseFeedWithFeedURLWithTrailingSpace (line 116) | func TestParseFeedWithFeedURLWithTrailingSpace(t *testing.T) { function TestParseFeedWithRelativeFeedURL (line 140) | func TestParseFeedWithRelativeFeedURL(t *testing.T) { function TestParseFeedSiteURLWithTrailingSpace (line 164) | func TestParseFeedSiteURLWithTrailingSpace(t *testing.T) { function TestParseFeedWithRelativeSiteURL (line 187) | func TestParseFeedWithRelativeSiteURL(t *testing.T) { function TestParseFeedWithoutTitle (line 210) | func TestParseFeedWithoutTitle(t *testing.T) { function TestParseEntryWithoutTitleAndDescription (line 228) | func TestParseEntryWithoutTitleAndDescription(t *testing.T) { function TestParseEntryWithoutTitleButWithDescription (line 257) | func TestParseEntryWithoutTitleButWithDescription(t *testing.T) { function TestParseEntryWithMediaTitle (line 281) | func TestParseEntryWithMediaTitle(t *testing.T) { function TestParseEntryWithDCTitleOnly (line 304) | func TestParseEntryWithDCTitleOnly(t *testing.T) { function TestParseFeedTitleWithHTMLEntity (line 326) | func TestParseFeedTitleWithHTMLEntity(t *testing.T) { function TestParseFeedTitleWithUnicodeEntityAndCdata (line 345) | func TestParseFeedTitleWithUnicodeEntityAndCdata(t *testing.T) { function TestParseItemTitleWithHTMLEntity (line 364) | func TestParseItemTitleWithHTMLEntity(t *testing.T) { function TestParseItemTitleWithNumericCharacterReference (line 387) | func TestParseItemTitleWithNumericCharacterReference(t *testing.T) { function TestParseItemTitleWithDoubleEncodedEntities (line 410) | func TestParseItemTitleWithDoubleEncodedEntities(t *testing.T) { function TestParseItemTitleWithWhitespaces (line 433) | func TestParseItemTitleWithWhitespaces(t *testing.T) { function TestParseItemTitleWithCDATA (line 458) | func TestParseItemTitleWithCDATA(t *testing.T) { function TestParseItemTitleWithInnerHTML (line 481) | func TestParseItemTitleWithInnerHTML(t *testing.T) { function TestParseEntryWithoutLink (line 504) | func TestParseEntryWithoutLink(t *testing.T) { function TestParseEntryWithoutLinkAndWithoutGUID (line 529) | func TestParseEntryWithoutLinkAndWithoutGUID(t *testing.T) { function TestParseEntryWithOnlyGuidPermalink (line 562) | func TestParseEntryWithOnlyGuidPermalink(t *testing.T) { function TestParseEntryWithAtomLink (line 590) | func TestParseEntryWithAtomLink(t *testing.T) { function TestParseEntryWithMultipleAtomLinks (line 612) | func TestParseEntryWithMultipleAtomLinks(t *testing.T) { function TestParseEntryWithoutLinkAndWithEnclosureURLs (line 635) | func TestParseEntryWithoutLinkAndWithEnclosureURLs(t *testing.T) { function TestParseFeedURLWithAtomLink (line 663) | func TestParseFeedURLWithAtomLink(t *testing.T) { function TestParseFeedWithWebmaster (line 687) | func TestParseFeedWithWebmaster(t *testing.T) { function TestParseFeedWithManagingEditor (line 713) | func TestParseFeedWithManagingEditor(t *testing.T) { function TestParseEntryWithAuthorAndInnerHTML (line 740) | func TestParseEntryWithAuthorAndInnerHTML(t *testing.T) { function TestParseEntryWithAuthorAndCDATA (line 767) | func TestParseEntryWithAuthorAndCDATA(t *testing.T) { function TestParseEntryWithAtomAuthorEmail (line 795) | func TestParseEntryWithAtomAuthorEmail(t *testing.T) { function TestParseEntryWithAtomAuthorName (line 824) | func TestParseEntryWithAtomAuthorName(t *testing.T) { function TestParseEntryWithDublinCoreAuthor (line 853) | func TestParseEntryWithDublinCoreAuthor(t *testing.T) { function TestParseEntryWithItunesAuthor (line 879) | func TestParseEntryWithItunesAuthor(t *testing.T) { function TestParseFeedWithItunesAuthor (line 905) | func TestParseFeedWithItunesAuthor(t *testing.T) { function TestParseFeedWithItunesOwner (line 931) | func TestParseFeedWithItunesOwner(t *testing.T) { function TestParseFeedWithItunesOwnerEmail (line 960) | func TestParseFeedWithItunesOwnerEmail(t *testing.T) { function TestParseEntryWithGooglePlayAuthor (line 988) | func TestParseEntryWithGooglePlayAuthor(t *testing.T) { function TestParseFeedWithGooglePlayAuthor (line 1014) | func TestParseFeedWithGooglePlayAuthor(t *testing.T) { function TestParseEntryWithDublinCoreDate (line 1040) | func TestParseEntryWithDublinCoreDate(t *testing.T) { function TestParseEntryWithContentEncoded (line 1068) | func TestParseEntryWithContentEncoded(t *testing.T) { function TestParseEntryDescriptionWithEncodedHTMLTags (line 1095) | func TestParseEntryDescriptionWithEncodedHTMLTags(t *testing.T) { function TestParseEntryWithDescriptionWithHTMLCDATA (line 1120) | func TestParseEntryWithDescriptionWithHTMLCDATA(t *testing.T) { function TestParseEntryDescriptionWithEncodingAngleBracketsInText (line 1145) | func TestParseEntryDescriptionWithEncodingAngleBracketsInText(t *testing... function TestParseEntryDescriptionWithEncodingAngleBracketsWithinCDATASection (line 1170) | func TestParseEntryDescriptionWithEncodingAngleBracketsWithinCDATASectio... function TestParseEntryWithFeedBurnerLink (line 1194) | func TestParseEntryWithFeedBurnerLink(t *testing.T) { function TestParseEntryWithEnclosures (line 1218) | func TestParseEntryWithEnclosures(t *testing.T) { function TestParseEntryWithIncorrectEnclosureLength (line 1264) | func TestParseEntryWithIncorrectEnclosureLength(t *testing.T) { function TestParseEntryWithDuplicatedEnclosureURL (line 1313) | func TestParseEntryWithDuplicatedEnclosureURL(t *testing.T) { function TestParseEntryWithEmptyEnclosureURL (line 1346) | func TestParseEntryWithEmptyEnclosureURL(t *testing.T) { function TestParseEntryWithRelativeEnclosureURL (line 1378) | func TestParseEntryWithRelativeEnclosureURL(t *testing.T) { function TestParseEntryWithFeedBurnerEnclosures (line 1414) | func TestParseEntryWithFeedBurnerEnclosures(t *testing.T) { function TestParseEntryWithFeedBurnerEnclosuresAndRelativeURL (line 1459) | func TestParseEntryWithFeedBurnerEnclosuresAndRelativeURL(t *testing.T) { function TestParseEntryWithRelativeURL (line 1495) | func TestParseEntryWithRelativeURL(t *testing.T) { function TestParseEntryWithCommentsURL (line 1516) | func TestParseEntryWithCommentsURL(t *testing.T) { function TestParseEntryWithInvalidCommentsURL (line 1542) | func TestParseEntryWithInvalidCommentsURL(t *testing.T) { function TestParseInvalidXml (line 1567) | func TestParseInvalidXml(t *testing.T) { function TestParseFeedLinkWithInvalidCharacterEntity (line 1575) | func TestParseFeedLinkWithInvalidCharacterEntity(t *testing.T) { function TestParseEntryWithMediaGroup (line 1594) | func TestParseEntryWithMediaGroup(t *testing.T) { function TestParseEntryWithMediaContent (line 1660) | func TestParseEntryWithMediaContent(t *testing.T) { function TestParseEntryWithMediaPeerLink (line 1720) | func TestParseEntryWithMediaPeerLink(t *testing.T) { function TestParseItunesDuration (line 1774) | func TestParseItunesDuration(t *testing.T) { function TestParseIncorrectItunesDuration (line 1801) | func TestParseIncorrectItunesDuration(t *testing.T) { function TestEntryDescriptionFromItunesSummary (line 1828) | func TestEntryDescriptionFromItunesSummary(t *testing.T) { function TestEntryDescriptionFromItunesSubtitle (line 1860) | func TestEntryDescriptionFromItunesSubtitle(t *testing.T) { function TestEntryDescriptionFromGooglePlayDescription (line 1891) | func TestEntryDescriptionFromGooglePlayDescription(t *testing.T) { function TestParseEntryWithRSSDescriptionAndMediaDescription (line 1925) | func TestParseEntryWithRSSDescriptionAndMediaDescription(t *testing.T) { function TestParseFeedWithCategories (line 1956) | func TestParseFeedWithCategories(t *testing.T) { function TestParseEntryWithCategories (line 1990) | func TestParseEntryWithCategories(t *testing.T) { function TestParseFeedWithItunesCategories (line 2028) | func TestParseFeedWithItunesCategories(t *testing.T) { function TestParseFeedWithGooglePlayCategory (line 2066) | func TestParseFeedWithGooglePlayCategory(t *testing.T) { function TestParseEntryWithMediaCategories (line 2099) | func TestParseEntryWithMediaCategories(t *testing.T) { function TestParseFeedWithTTLField (line 2135) | func TestParseFeedWithTTLField(t *testing.T) { function TestParseFeedWithIncorrectTTLValue (line 2159) | func TestParseFeedWithIncorrectTTLValue(t *testing.T) { FILE: internal/reader/rss/podcast.go function getDurationInMinutes (line 15) | func getDurationInMinutes(rawDuration string) (int, error) { FILE: internal/reader/rss/rss.go type rss (line 18) | type rss struct type rssChannel (line 26) | type rssChannel struct type rssCloud (line 93) | type rssCloud struct type rssImage (line 101) | type rssImage struct type rssItem (line 112) | type rssItem struct type rssAuthor (line 172) | type rssAuthor struct type rssEnclosure (line 178) | type rssEnclosure struct method Size (line 184) | func (enclosure *rssEnclosure) Size() int64 { type rssGUID (line 192) | type rssGUID struct type rssSource (line 197) | type rssSource struct type innerContent (line 202) | type innerContent struct method UnmarshalXML (line 206) | func (ic *innerContent) UnmarshalXML(d *xml.Decoder, start xml.StartEl... FILE: internal/reader/sanitizer/sanitizer.go constant maxDepth (line 21) | maxDepth = 512 type SanitizerOptions (line 210) | type SanitizerOptions struct function SanitizeHTML (line 215) | func SanitizeHTML(baseURL, rawHTML string, sanitizerOptions *SanitizerOp... function findAllowedIframeSourceDomain (line 250) | func findAllowedIframeSourceDomain(iframeSourceURL string) (string, bool) { function filterAndRenderHTML (line 268) | func filterAndRenderHTML(buf *strings.Builder, n *html.Node, parsedBaseU... function filterAndRenderHTMLChildren (line 322) | func filterAndRenderHTMLChildren(buf *strings.Builder, n *html.Node, par... function hasRequiredAttributes (line 331) | func hasRequiredAttributes(s *mandatoryAttributesStruct, tagName string)... function hasValidURIScheme (line 343) | func hasValidURIScheme(absoluteURL string) bool { function isBlockedResource (line 352) | func isBlockedResource(absoluteURL string) bool { function isBlockedTag (line 361) | func isBlockedTag(tagName string) bool { function isExternalResourceAttribute (line 369) | func isExternalResourceAttribute(attribute string) bool { function isHidden (line 378) | func isHidden(n *html.Node) bool { function isPixelTracker (line 387) | func isPixelTracker(tagName string, attributes []html.Attribute) bool { function isPositiveInteger (line 408) | func isPositiveInteger(value string) bool { function isSelfContainedTag (line 418) | func isSelfContainedTag(tag string) bool { function isValidDataAttribute (line 427) | func isValidDataAttribute(value string) bool { function isValidDecodingValue (line 436) | func isValidDecodingValue(value string) bool { function isValidFetchPriorityValue (line 444) | func isValidFetchPriorityValue(value string) bool { function rewriteIframeURL (line 452) | func rewriteIframeURL(link string) string { type mandatoryAttributesStruct (line 479) | type mandatoryAttributesStruct struct function trackAttributes (line 485) | func trackAttributes(s *mandatoryAttributesStruct, attributeName string) { function sanitizeAttributes (line 496) | func sanitizeAttributes(parsedBaseUrl *url.URL, tagName string, attribut... function sanitizeSrcsetAttr (line 626) | func sanitizeSrcsetAttr(parsedBaseURL *url.URL, value string) string { function shouldIgnoreTag (line 651) | func shouldIgnoreTag(n *html.Node, tag string) bool { FILE: internal/reader/sanitizer/sanitizer_test.go function sanitizeHTMLWithDefaultOptions (line 16) | func sanitizeHTMLWithDefaultOptions(baseURL, rawHTML string) string { function BenchmarkSanitize (line 22) | func BenchmarkSanitize(b *testing.B) { function FuzzSanitizer (line 41) | func FuzzSanitizer(f *testing.F) { function TestValidInput (line 63) | func TestValidInput(t *testing.T) { function TestImgSanitization (line 72) | func TestImgSanitization(t *testing.T) { function TestNonImgWithFetchPriorityAttribute (line 196) | func TestNonImgWithFetchPriorityAttribute(t *testing.T) { function TestNonImgWithDecodingAttribute (line 206) | func TestNonImgWithDecodingAttribute(t *testing.T) { function TestMediumImgWithSrcset (line 216) | func TestMediumImgWithSrcset(t *testing.T) { function TestSelfClosingTags (line 226) | func TestSelfClosingTags(t *testing.T) { function TestTable (line 270) | func TestTable(t *testing.T) { function TestRelativeURL (line 279) | func TestRelativeURL(t *testing.T) { function TestProtocolRelativeURL (line 289) | func TestProtocolRelativeURL(t *testing.T) { function TestInvalidTag (line 299) | func TestInvalidTag(t *testing.T) { function TestSourceSanitization (line 309) | func TestSourceSanitization(t *testing.T) { function TestVideoTag (line 348) | func TestVideoTag(t *testing.T) { function TestAudioAndSourceTag (line 358) | func TestAudioAndSourceTag(t *testing.T) { function TestUnknownTag (line 368) | func TestUnknownTag(t *testing.T) { function TestInvalidNestedTag (line 378) | func TestInvalidNestedTag(t *testing.T) { function TestInvalidIFrame (line 388) | func TestInvalidIFrame(t *testing.T) { function TestSameDomainIFrame (line 400) | func TestSameDomainIFrame(t *testing.T) { function TestInvidiousIFrame (line 412) | func TestInvidiousIFrame(t *testing.T) { function TestCustomYoutubeEmbedURL (line 424) | func TestCustomYoutubeEmbedURL(t *testing.T) { function TestIFrameWithChildElements (line 442) | func TestIFrameWithChildElements(t *testing.T) { function TestIFrameWithReferrerPolicy (line 454) | func TestIFrameWithReferrerPolicy(t *testing.T) { function TestLinkWithTarget (line 466) | func TestLinkWithTarget(t *testing.T) { function TestLinkWithNoTarget (line 476) | func TestLinkWithNoTarget(t *testing.T) { function TestAnchorLink (line 486) | func TestAnchorLink(t *testing.T) { function TestInvalidURLScheme (line 496) | func TestInvalidURLScheme(t *testing.T) { function TestURISchemes (line 506) | func TestURISchemes(t *testing.T) { function TestBlacklistedLink (line 645) | func TestBlacklistedLink(t *testing.T) { function TestLinkWithTrackers (line 655) | func TestLinkWithTrackers(t *testing.T) { function TestImageSrcWithTrackers (line 665) | func TestImageSrcWithTrackers(t *testing.T) { function Test1x1PixelTracker (line 675) | func Test1x1PixelTracker(t *testing.T) { function Test0x0PixelTracker (line 685) | func Test0x0PixelTracker(t *testing.T) { function TestXmlEntities (line 695) | func TestXmlEntities(t *testing.T) { function TestEspaceAttributes (line 705) | func TestEspaceAttributes(t *testing.T) { function TestReplaceYoutubeURL (line 715) | func TestReplaceYoutubeURL(t *testing.T) { function TestReplaceSecureYoutubeURL (line 733) | func TestReplaceSecureYoutubeURL(t *testing.T) { function TestReplaceSecureYoutubeURLWithParameters (line 751) | func TestReplaceSecureYoutubeURLWithParameters(t *testing.T) { function TestReplaceYoutubeURLAlreadyReplaced (line 769) | func TestReplaceYoutubeURLAlreadyReplaced(t *testing.T) { function TestReplaceProtocolRelativeYoutubeURL (line 787) | func TestReplaceProtocolRelativeYoutubeURL(t *testing.T) { function TestReplaceYoutubeURLWithCustomURL (line 805) | func TestReplaceYoutubeURLWithCustomURL(t *testing.T) { function TestVimeoIframeRewriteWithQueryString (line 824) | func TestVimeoIframeRewriteWithQueryString(t *testing.T) { function TestVimeoIframeRewriteWithoutQueryString (line 834) | func TestVimeoIframeRewriteWithoutQueryString(t *testing.T) { function TestReplaceNoScript (line 844) | func TestReplaceNoScript(t *testing.T) { function TestReplaceScript (line 854) | func TestReplaceScript(t *testing.T) { function TestReplaceStyle (line 864) | func TestReplaceStyle(t *testing.T) { function TestHiddenParagraph (line 874) | func TestHiddenParagraph(t *testing.T) { function TestAttributesAreStripped (line 884) | func TestAttributesAreStripped(t *testing.T) { function TestMathML (line 894) | func TestMathML(t *testing.T) { function TestInvalidMathMLXMLNamespace (line 904) | func TestInvalidMathMLXMLNamespace(t *testing.T) { function TestBlockedResourcesSubstrings (line 914) | func TestBlockedResourcesSubstrings(t *testing.T) { function TestAttrLowerCase (line 940) | func TestAttrLowerCase(t *testing.T) { function TestDeeplyNestedpage (line 969) | func TestDeeplyNestedpage(t *testing.T) { FILE: internal/reader/sanitizer/srcset.go type imageCandidate (line 12) | type imageCandidate struct type imageCandidates (line 17) | type imageCandidates method String (line 19) | func (c imageCandidates) String() string { function ParseSrcSetAttribute (line 39) | func ParseSrcSetAttribute(attributeValue string) (candidates imageCandid... type descriptorParsingResult (line 82) | type descriptorParsingResult struct method setDensity (line 91) | func (r *descriptorParsingResult) setDensity(value float64) { method setResourceWidth (line 96) | func (r *descriptorParsingResult) setResourceWidth(value uint) { method setResourceHeight (line 101) | func (r *descriptorParsingResult) setResourceHeight(value uint) { function serializeDescriptor (line 106) | func serializeDescriptor(result descriptorParsingResult) string { function parseDescriptors (line 116) | func parseDescriptors(descriptors []string, result *descriptorParsingRes... type descriptorTokenizerState (line 161) | type descriptorTokenizerState constant descriptorStateInitial (line 164) | descriptorStateInitial descriptorTokenizerState = iota constant descriptorStateInParenthesis (line 165) | descriptorStateInParenthesis constant descriptorStateAfterToken (line 166) | descriptorStateAfterToken function tokenizeDescriptors (line 169) | func tokenizeDescriptors(input string, start uint) (tokens []string, new... function parseValidHTMLNonNegativeInteger (line 236) | func parseValidHTMLNonNegativeInteger(value string) (uint, bool) { function parseValidHTMLFloatingPointNumber (line 255) | func parseValidHTMLFloatingPointNumber(value string) (float64, bool) { function formatFloat (line 271) | func formatFloat(value float64) string { function skipWhileHTMLSpaceOrComma (line 275) | func skipWhileHTMLSpaceOrComma(value string, position uint) uint { function skipWhileASCIIWhitespace (line 282) | func skipWhileASCIIWhitespace(value string, position uint) uint { function skipUntilASCIIWhitespace (line 289) | func skipUntilASCIIWhitespace(value string, position uint) uint { function isASCIIWhitespace (line 296) | func isASCIIWhitespace(character byte) bool { function isComma (line 305) | func isComma(character byte) bool { FILE: internal/reader/sanitizer/srcset_test.go function assertCandidates (line 8) | func assertCandidates(t *testing.T, input string, expectedCount int, exp... function TestParseSrcSetAttributeValidCandidates (line 22) | func TestParseSrcSetAttributeValidCandidates(t *testing.T) { function TestParseSrcSetAttributeInvalidCandidates (line 104) | func TestParseSrcSetAttributeInvalidCandidates(t *testing.T) { FILE: internal/reader/sanitizer/strip_tags.go function StripTags (line 15) | func StripTags(input string) string { FILE: internal/reader/sanitizer/strip_tags_test.go function TestStripTags (line 8) | func TestStripTags(t *testing.T) { FILE: internal/reader/sanitizer/truncate.go function TruncateHTML (line 8) | func TruncateHTML(input string, max int) string { FILE: internal/reader/sanitizer/truncate_test.go function TestTruncateHTMWithTextLowerThanLimitL (line 8) | func TestTruncateHTMWithTextLowerThanLimitL(t *testing.T) { function TestTruncateHTMLWithTextAboveLimit (line 18) | func TestTruncateHTMLWithTextAboveLimit(t *testing.T) { function TestTruncateHTMLWithUnicodeTextAboveLimit (line 28) | func TestTruncateHTMLWithUnicodeTextAboveLimit(t *testing.T) { function TestTruncateHTMLWithMultilineTextAboveLimit (line 38) | func TestTruncateHTMLWithMultilineTextAboveLimit(t *testing.T) { function TestTruncateHTMLWithMultilineTextLowerThanLimit (line 52) | func TestTruncateHTMLWithMultilineTextLowerThanLimit(t *testing.T) { function TestTruncateHTMLWithMultipleSpaces (line 66) | func TestTruncateHTMLWithMultipleSpaces(t *testing.T) { FILE: internal/reader/scraper/scraper.go function ScrapeWebsite (line 21) | func ScrapeWebsite(requestBuilder *fetcher.RequestBuilder, pageURL, rule... function findContentUsingCustomRules (line 73) | func findContentUsingCustomRules(page io.Reader, rules string) (baseURL ... function getPredefinedScraperRules (line 95) | func getPredefinedScraperRules(websiteURL string) string { function isAllowedContentType (line 104) | func isAllowedContentType(contentType string) bool { FILE: internal/reader/scraper/scraper_test.go function TestGetPredefinedRules (line 13) | func TestGetPredefinedRules(t *testing.T) { function TestWhitelistedContentTypes (line 31) | func TestWhitelistedContentTypes(t *testing.T) { function TestSelectorRules (line 52) | func TestSelectorRules(t *testing.T) { function TestParseBaseURLWithCustomRules (line 81) | func TestParseBaseURLWithCustomRules(t *testing.T) { function TestParseMultipleBaseURLWithCustomRules (line 93) | func TestParseMultipleBaseURLWithCustomRules(t *testing.T) { function TestParseRelativeBaseURLWithCustomRules (line 105) | func TestParseRelativeBaseURLWithCustomRules(t *testing.T) { function TestParseEmptyBaseURLWithCustomRules (line 117) | func TestParseEmptyBaseURLWithCustomRules(t *testing.T) { function TestParseMissingBaseURLWithCustomRules (line 129) | func TestParseMissingBaseURLWithCustomRules(t *testing.T) { FILE: internal/reader/subscription/finder.go type subscriptionFinder (line 24) | type subscriptionFinder struct method IsFeedAlreadyDownloaded (line 36) | func (f *subscriptionFinder) IsFeedAlreadyDownloaded() bool { method FeedResponseInfo (line 40) | func (f *subscriptionFinder) FeedResponseInfo() *model.FeedCreationReq... method FindSubscriptions (line 44) | func (f *subscriptionFinder) FindSubscriptions(websiteURL, rssBridgeUR... method findSubscriptionsFromWebPage (line 127) | func (f *subscriptionFinder) findSubscriptionsFromWebPage(websiteURL s... method findSubscriptionsFromWellKnownURLs (line 173) | func (f *subscriptionFinder) findSubscriptionsFromWellKnownURLs(websit... method findSubscriptionsFromRSSBridge (line 240) | func (f *subscriptionFinder) findSubscriptionsFromRSSBridge(websiteURL... method findSubscriptionsFromYouTube (line 275) | func (f *subscriptionFinder) findSubscriptionsFromYouTube(websiteURL s... method findCanonicalURL (line 321) | func (f *subscriptionFinder) findCanonicalURL(effectiveURL, baseURL st... function NewSubscriptionFinder (line 30) | func NewSubscriptionFinder(requestBuilder *fetcher.RequestBuilder) *subs... function getBaseURL (line 336) | func getBaseURL(websiteURL string, doc *goquery.Document) string { function parseHTMLDocument (line 347) | func parseHTMLDocument(contentType string, body []byte) (*goquery.Docume... FILE: internal/reader/subscription/finder_test.go function TestFindYoutubeFeed (line 10) | func TestFindYoutubeFeed(t *testing.T) { function TestParseWebPageWithRssFeed (line 111) | func TestParseWebPageWithRssFeed(t *testing.T) { function TestParseWebPageWithAtomFeed (line 148) | func TestParseWebPageWithAtomFeed(t *testing.T) { function TestParseWebPageWithJSONFeed (line 185) | func TestParseWebPageWithJSONFeed(t *testing.T) { function TestParseWebPageWithOldJSONFeedMimeType (line 222) | func TestParseWebPageWithOldJSONFeedMimeType(t *testing.T) { function TestParseWebPageWithJSONFeedWpJsonIgnored (line 259) | func TestParseWebPageWithJSONFeedWpJsonIgnored(t *testing.T) { function TestParseWebPageWithRelativeFeedURL (line 285) | func TestParseWebPageWithRelativeFeedURL(t *testing.T) { function TestParseWebPageWithEmptyTitle (line 322) | func TestParseWebPageWithEmptyTitle(t *testing.T) { function TestParseWebPageWithMultipleFeeds (line 359) | func TestParseWebPageWithMultipleFeeds(t *testing.T) { function TestParseWebPageWithDuplicatedFeeds (line 385) | func TestParseWebPageWithDuplicatedFeeds(t *testing.T) { function TestParseWebPageWithEmptyFeedURL (line 423) | func TestParseWebPageWithEmptyFeedURL(t *testing.T) { function TestParseWebPageWithNoHref (line 448) | func TestParseWebPageWithNoHref(t *testing.T) { function TestFindCanonicalURL (line 473) | func TestFindCanonicalURL(t *testing.T) { function TestFindCanonicalURLNotFound (line 494) | func TestFindCanonicalURLNotFound(t *testing.T) { FILE: internal/reader/subscription/subscription.go type subscription (line 9) | type subscription struct method String (line 19) | func (s subscription) String() string { function NewSubscription (line 15) | func NewSubscription(title, url, kind string) *subscription { type Subscriptions (line 24) | type Subscriptions FILE: internal/reader/urlcleaner/urlcleaner.go function isTrackingParam (line 120) | func isTrackingParam(param string) bool { function RemoveTrackingParameters (line 129) | func RemoveTrackingParameters(parsedFeedURL, parsedSiteURL, parsedInputU... FILE: internal/reader/urlcleaner/urlcleaner_test.go function TestRemoveTrackingParams (line 12) | func TestRemoveTrackingParams(t *testing.T) { function urlsEqual (line 155) | func urlsEqual(url1, url2 string) bool { FILE: internal/reader/xml/decoder.go function NewXMLDecoder (line 17) | func NewXMLDecoder(data io.ReadSeeker) *xml.Decoder { function charsetReaderFilterInvalidUtf8 (line 47) | func charsetReaderFilterInvalidUtf8(charset string, input io.Reader) (io... function filterValidXMLChars (line 62) | func filterValidXMLChars(s []byte) []byte { function filterValidXMLChar (line 85) | func filterValidXMLChar(r rune) rune { function getEncoding (line 98) | func getEncoding(b []byte) []byte { function hasUTF8XMLDeclaration (line 119) | func hasUTF8XMLDeclaration(data []byte) bool { FILE: internal/reader/xml/decoder_test.go function TestXMLDocumentWithISO88591Encoding (line 15) | func TestXMLDocumentWithISO88591Encoding(t *testing.T) { function TestXMLDocumentWithISO88591FileEncodingButUTF8Prolog (line 47) | func TestXMLDocumentWithISO88591FileEncodingButUTF8Prolog(t *testing.T) { function TestXMLDocumentWithKOI8REncoding (line 81) | func TestXMLDocumentWithKOI8REncoding(t *testing.T) { function TestXMLDocumentWithIllegalUnicodeCharacters (line 137) | func TestXMLDocumentWithIllegalUnicodeCharacters(t *testing.T) { function TestXMLDocumentWindows251EncodedWithIllegalCharacters (line 161) | func TestXMLDocumentWindows251EncodedWithIllegalCharacters(t *testing.T) { function TestXMLDocumentWithIncorrectEncodingField (line 185) | func TestXMLDocumentWithIncorrectEncodingField(t *testing.T) { function TestFilterValidXMLCharsWithInvalidUTF8Sequence (line 209) | func TestFilterValidXMLCharsWithInvalidUTF8Sequence(t *testing.T) { function FuzzFilterValidXMLChars (line 225) | func FuzzFilterValidXMLChars(f *testing.F) { FILE: internal/storage/api_key.go method APIKeyExists (line 17) | func (s *Storage) APIKeyExists(userID int64, description string) bool { method SetAPIKeyUsedTimestamp (line 25) | func (s *Storage) SetAPIKeyUsedTimestamp(userID int64, token string) err... method APIKeys (line 36) | func (s *Storage) APIKeys(userID int64) (model.APIKeys, error) { method CreateAPIKey (line 73) | func (s *Storage) CreateAPIKey(userID int64, description string) (*model... method DeleteAPIKey (line 104) | func (s *Storage) DeleteAPIKey(userID, keyID int64) error { FILE: internal/storage/batch.go type batchBuilder (line 17) | type batchBuilder struct method WithBatchSize (line 31) | func (b *batchBuilder) WithBatchSize(batchSize int) *batchBuilder { method WithUserID (line 36) | func (b *batchBuilder) WithUserID(userID int64) *batchBuilder { method WithCategoryID (line 42) | func (b *batchBuilder) WithCategoryID(categoryID int64) *batchBuilder { method WithErrorLimit (line 48) | func (b *batchBuilder) WithErrorLimit(limit int) *batchBuilder { method WithNextCheckExpired (line 56) | func (b *batchBuilder) WithNextCheckExpired() *batchBuilder { method WithoutDisabledFeeds (line 61) | func (b *batchBuilder) WithoutDisabledFeeds() *batchBuilder { method WithLimitPerHost (line 66) | func (b *batchBuilder) WithLimitPerHost(limit int) *batchBuilder { method FetchJobs (line 75) | func (b *batchBuilder) FetchJobs() (model.JobList, error) { method NewBatchBuilder (line 25) | func (s *Storage) NewBatchBuilder() *batchBuilder { FILE: internal/storage/category.go method AnotherCategoryExists (line 16) | func (s *Storage) AnotherCategoryExists(userID, categoryID int64, title ... method CategoryTitleExists (line 24) | func (s *Storage) CategoryTitleExists(userID int64, title string) bool { method CategoryIDExists (line 32) | func (s *Storage) CategoryIDExists(userID, categoryID int64) bool { method Category (line 40) | func (s *Storage) Category(userID, categoryID int64) (*model.Category, e... method FirstCategory (line 57) | func (s *Storage) FirstCategory(userID int64) (*model.Category, error) { method CategoryByTitle (line 74) | func (s *Storage) CategoryByTitle(userID int64, title string) (*model.Ca... method Categories (line 91) | func (s *Storage) Categories(userID int64) (model.Categories, error) { method CategoriesWithFeedCount (line 113) | func (s *Storage) CategoriesWithFeedCount(userID int64) (model.Categorie... method CreateCategory (line 168) | func (s *Storage) CreateCategory(userID int64, request *model.CategoryCr... method UpdateCategory (line 202) | func (s *Storage) UpdateCategory(category *model.Category) error { method RemoveCategory (line 220) | func (s *Storage) RemoveCategory(userID, categoryID int64) error { method RemoveAndReplaceCategoriesByName (line 241) | func (s *Storage) RemoveAndReplaceCategoriesByName(userid int64, titles ... FILE: internal/storage/certificate_cache.go type certificateCache (line 17) | type certificateCache struct method Get (line 31) | func (c *certificateCache) Get(ctx context.Context, key string) ([]byt... method Put (line 43) | func (c *certificateCache) Put(ctx context.Context, key string, data [... method Delete (line 55) | func (c *certificateCache) Delete(ctx context.Context, key string) err... function NewCertificateCache (line 23) | func NewCertificateCache(storage *Storage) *certificateCache { FILE: internal/storage/enclosure.go method GetEnclosures (line 17) | func (s *Storage) GetEnclosures(entryID int64) (model.EnclosureList, err... method GetEnclosuresForEntries (line 63) | func (s *Storage) GetEnclosuresForEntries(entryIDs []int64) (map[int64]m... method GetEnclosure (line 108) | func (s *Storage) GetEnclosure(enclosureID int64) (*model.Enclosure, err... method createEnclosure (line 147) | func (s *Storage) createEnclosure(tx *sql.Tx, enclosure *model.Enclosure... method updateEnclosures (line 177) | func (s *Storage) updateEnclosures(tx *sql.Tx, entry *model.Entry) error { method UpdateEnclosure (line 218) | func (s *Storage) UpdateEnclosure(enclosure *model.Enclosure) error { method DeleteEnclosuresOfRemovedEntries (line 250) | func (s *Storage) DeleteEnclosuresOfRemovedEntries() (int64, error) { FILE: internal/storage/entry.go method CountAllEntries (line 20) | func (s *Storage) CountAllEntries() map[string]int64 { method CountUnreadEntries (line 48) | func (s *Storage) CountUnreadEntries(userID int64) int { method NewEntryQueryBuilder (line 66) | func (s *Storage) NewEntryQueryBuilder(userID int64) *EntryQueryBuilder { method UpdateEntryTitleAndContent (line 71) | func (s *Storage) UpdateEntryTitleAndContent(entry *model.Entry) error { method createEntry (line 101) | func (s *Storage) createEntry(tx *sql.Tx, entry *model.Entry) error { method updateEntry (line 179) | func (s *Storage) updateEntry(tx *sql.Tx, entry *model.Entry) error { method entryExists (line 226) | func (s *Storage) entryExists(tx *sql.Tx, entry *model.Entry) (bool, err... method getEntryIDByHash (line 239) | func (s *Storage) getEntryIDByHash(tx *sql.Tx, feedID int64, entryHash s... method InsertEntryForFeed (line 257) | func (s *Storage) InsertEntryForFeed(userID, feedID int64, entry *model.... method IsNewEntry (line 291) | func (s *Storage) IsNewEntry(feedID int64, entryHash string) bool { method GetReadTime (line 297) | func (s *Storage) GetReadTime(feedID int64, entryHash string) int { method cleanupRemovedEntriesNotInFeed (line 317) | func (s *Storage) cleanupRemovedEntriesNotInFeed(feedID int64, entryHash... method ClearRemovedEntriesContent (line 343) | func (s *Storage) ClearRemovedEntriesContent(limit int) (int64, error) { method RefreshFeedEntries (line 380) | func (s *Storage) RefreshFeedEntries(userID, feedID int64, entries model... method ArchiveEntries (line 439) | func (s *Storage) ArchiveEntries(status string, interval time.Duration, ... method SetEntriesStatus (line 481) | func (s *Storage) SetEntriesStatus(userID int64, entryIDs []int64, statu... method SetEntriesStatusCount (line 501) | func (s *Storage) SetEntriesStatusCount(userID int64, entryIDs []int64, ... method SetEntriesStarredState (line 526) | func (s *Storage) SetEntriesStarredState(userID int64, entryIDs []int64,... method ToggleStarred (line 546) | func (s *Storage) ToggleStarred(userID int64, entryID int64) error { method FlushHistory (line 566) | func (s *Storage) FlushHistory(userID int64) error { method MarkAllAsRead (line 585) | func (s *Storage) MarkAllAsRead(userID int64) error { method MarkAllAsReadBeforeDate (line 602) | func (s *Storage) MarkAllAsReadBeforeDate(userID int64, before time.Time... method MarkGloballyVisibleFeedsAsRead (line 626) | func (s *Storage) MarkGloballyVisibleFeedsAsRead(userID int64) error { method MarkFeedAsRead (line 656) | func (s *Storage) MarkFeedAsRead(userID, feedID int64, before time.Time)... method MarkCategoryAsRead (line 683) | func (s *Storage) MarkCategoryAsRead(userID, categoryID int64, before ti... method EntryShareCode (line 721) | func (s *Storage) EntryShareCode(userID int64, entryID int64) (shareCode... method UnshareEntry (line 744) | func (s *Storage) UnshareEntry(userID int64, entryID int64) (err error) { function truncateTitleAndContentForTSVectorField (line 753) | func truncateTitleAndContentForTSVectorField(title, content string) (str... function truncateStringForTSVectorField (line 760) | func truncateStringForTSVectorField(s string, maxSize int) string { FILE: internal/storage/entry_pagination_builder.go type entryPaginationBuilder (line 16) | type entryPaginationBuilder struct method WithSearchQuery (line 26) | func (e *entryPaginationBuilder) WithSearchQuery(query string) { method WithStarred (line 34) | func (e *entryPaginationBuilder) WithStarred() { method WithFeedID (line 39) | func (e *entryPaginationBuilder) WithFeedID(feedID int64) { method WithCategoryID (line 47) | func (e *entryPaginationBuilder) WithCategoryID(categoryID int64) { method WithStatus (line 55) | func (e *entryPaginationBuilder) WithStatus(status string) { method WithStatusOrEntryID (line 63) | func (e *entryPaginationBuilder) WithStatusOrEntryID(status string, en... method WithTags (line 79) | func (e *entryPaginationBuilder) WithTags(tags []string) { method WithGloballyVisible (line 89) | func (e *entryPaginationBuilder) WithGloballyVisible() { method Entries (line 95) | func (e *entryPaginationBuilder) Entries() (*model.Entry, *model.Entry... method getPrevNextID (line 128) | func (e *entryPaginationBuilder) getPrevNextID(tx *sql.Tx) (prevID int... method getEntry (line 169) | func (e *entryPaginationBuilder) getEntry(tx *sql.Tx, entryID int64) (... function NewEntryPaginationBuilder (line 188) | func NewEntryPaginationBuilder(store *Storage, userID, entryID int64, or... FILE: internal/storage/entry_query_builder.go type EntryQueryBuilder (line 20) | type EntryQueryBuilder struct method WithEnclosures (line 31) | func (e *EntryQueryBuilder) WithEnclosures() *EntryQueryBuilder { method WithSearchQuery (line 37) | func (e *EntryQueryBuilder) WithSearchQuery(query string) *EntryQueryB... method WithStarred (line 53) | func (e *EntryQueryBuilder) WithStarred(starred bool) *EntryQueryBuild... method BeforeChangedDate (line 63) | func (e *EntryQueryBuilder) BeforeChangedDate(date time.Time) *EntryQu... method AfterChangedDate (line 70) | func (e *EntryQueryBuilder) AfterChangedDate(date time.Time) *EntryQue... method BeforePublishedDate (line 77) | func (e *EntryQueryBuilder) BeforePublishedDate(date time.Time) *Entry... method AfterPublishedDate (line 84) | func (e *EntryQueryBuilder) AfterPublishedDate(date time.Time) *EntryQ... method BeforeEntryID (line 91) | func (e *EntryQueryBuilder) BeforeEntryID(entryID int64) *EntryQueryBu... method AfterEntryID (line 100) | func (e *EntryQueryBuilder) AfterEntryID(entryID int64) *EntryQueryBui... method WithEntryIDs (line 109) | func (e *EntryQueryBuilder) WithEntryIDs(entryIDs []int64) *EntryQuery... method WithEntryID (line 116) | func (e *EntryQueryBuilder) WithEntryID(entryID int64) *EntryQueryBuil... method WithFeedID (line 125) | func (e *EntryQueryBuilder) WithFeedID(feedID int64) *EntryQueryBuilder { method WithCategoryID (line 134) | func (e *EntryQueryBuilder) WithCategoryID(categoryID int64) *EntryQue... method WithStatus (line 143) | func (e *EntryQueryBuilder) WithStatus(status string) *EntryQueryBuild... method WithStatuses (line 152) | func (e *EntryQueryBuilder) WithStatuses(statuses []string) *EntryQuer... method WithTags (line 161) | func (e *EntryQueryBuilder) WithTags(tags []string) *EntryQueryBuilder { method WithoutStatus (line 172) | func (e *EntryQueryBuilder) WithoutStatus(status string) *EntryQueryBu... method WithShareCode (line 181) | func (e *EntryQueryBuilder) WithShareCode(shareCode string) *EntryQuer... method WithShareCodeNotEmpty (line 188) | func (e *EntryQueryBuilder) WithShareCodeNotEmpty() *EntryQueryBuilder { method WithSorting (line 194) | func (e *EntryQueryBuilder) WithSorting(column, direction string) *Ent... method WithLimit (line 200) | func (e *EntryQueryBuilder) WithLimit(limit int) *EntryQueryBuilder { method WithOffset (line 208) | func (e *EntryQueryBuilder) WithOffset(offset int) *EntryQueryBuilder { method WithGloballyVisible (line 215) | func (e *EntryQueryBuilder) WithGloballyVisible() *EntryQueryBuilder { method CountEntries (line 222) | func (e *EntryQueryBuilder) CountEntries() (count int, err error) { method GetEntry (line 239) | func (e *EntryQueryBuilder) GetEntry() (*model.Entry, error) { method GetEntries (line 259) | func (e *EntryQueryBuilder) GetEntries() (model.Entries, error) { method GetEntryIDs (line 413) | func (e *EntryQueryBuilder) GetEntryIDs() ([]int64, error) { method buildCondition (line 446) | func (e *EntryQueryBuilder) buildCondition() string { method buildSorting (line 450) | func (e *EntryQueryBuilder) buildSorting() string { function NewEntryQueryBuilder (line 469) | func NewEntryQueryBuilder(store *Storage, userID int64) *EntryQueryBuild... function NewAnonymousQueryBuilder (line 478) | func NewAnonymousQueryBuilder(store *Storage) *EntryQueryBuilder { FILE: internal/storage/entry_test.go function TestTruncateStringForTSVectorField (line 11) | func TestTruncateStringForTSVectorField(t *testing.T) { FILE: internal/storage/feed.go type byStateAndName (line 18) | type byStateAndName struct method Len (line 20) | func (l byStateAndName) Len() int { return len(l.f) } method Swap (line 21) | func (l byStateAndName) Swap(i, j int) { l.f[i], l.f[j] = l.f[j], l.f[... method Less (line 22) | func (l byStateAndName) Less(i, j int) bool { method FeedExists (line 37) | func (s *Storage) FeedExists(userID, feedID int64) bool { method CheckedAt (line 45) | func (s *Storage) CheckedAt(userID, feedID int64) (time.Time, error) { method CategoryFeedExists (line 56) | func (s *Storage) CategoryFeedExists(userID, categoryID, feedID int64) b... method FeedURLExists (line 64) | func (s *Storage) FeedURLExists(userID int64, feedURL string) bool { method AnotherFeedURLExists (line 72) | func (s *Storage) AnotherFeedURLExists(userID, feedID int64, feedURL str... method CountAllFeeds (line 80) | func (s *Storage) CountAllFeeds() map[string]int64 { method CountUserFeedsWithErrors (line 113) | func (s *Storage) CountUserFeedsWithErrors(userID int64) int { method CountAllFeedsWithErrors (line 129) | func (s *Storage) CountAllFeedsWithErrors() int { method Feeds (line 145) | func (s *Storage) Feeds(userID int64) (model.Feeds, error) { function getFeedsSorted (line 151) | func getFeedsSorted(builder *feedQueryBuilder) (model.Feeds, error) { method FeedsWithCounters (line 161) | func (s *Storage) FeedsWithCounters(userID int64) (model.Feeds, error) { method FetchCounters (line 169) | func (s *Storage) FetchCounters(userID int64) (model.FeedCounters, error) { method FeedsByCategoryWithCounters (line 177) | func (s *Storage) FeedsByCategoryWithCounters(userID, categoryID int64) ... method WeeklyFeedEntryCount (line 186) | func (s *Storage) WeeklyFeedEntryCount(userID, feedID int64) (int, error) { method FeedByID (line 218) | func (s *Storage) FeedByID(userID, feedID int64) (*model.Feed, error) { method CreateFeed (line 234) | func (s *Storage) CreateFeed(feed *model.Feed) error { method UpdateFeed (line 347) | func (s *Storage) UpdateFeed(feed *model.Feed) (err error) { method UpdateFeedError (line 446) | func (s *Storage) UpdateFeedError(feed *model.Feed) (err error) { method RemoveFeed (line 476) | func (s *Storage) RemoveFeed(userID, feedID int64) error { method ResetFeedErrors (line 508) | func (s *Storage) ResetFeedErrors() error { method ResetNextCheckAt (line 513) | func (s *Storage) ResetNextCheckAt() error { FILE: internal/storage/feed_query_builder.go type feedQueryBuilder (line 17) | type feedQueryBuilder struct method WithCategoryID (line 42) | func (f *feedQueryBuilder) WithCategoryID(categoryID int64) *feedQuery... method WithFeedID (line 54) | func (f *feedQueryBuilder) WithFeedID(feedID int64) *feedQueryBuilder { method WithCounters (line 63) | func (f *feedQueryBuilder) WithCounters() *feedQueryBuilder { method WithSorting (line 69) | func (f *feedQueryBuilder) WithSorting(column, direction string) *feed... method WithLimit (line 75) | func (f *feedQueryBuilder) WithLimit(limit int) *feedQueryBuilder { method WithOffset (line 81) | func (f *feedQueryBuilder) WithOffset(offset int) *feedQueryBuilder { method buildCondition (line 86) | func (f *feedQueryBuilder) buildCondition() string { method buildCounterCondition (line 90) | func (f *feedQueryBuilder) buildCounterCondition() string { method buildSorting (line 94) | func (f *feedQueryBuilder) buildSorting() string { method GetFeed (line 117) | func (f *feedQueryBuilder) GetFeed() (*model.Feed, error) { method GetFeeds (line 132) | func (f *feedQueryBuilder) GetFeeds() (model.Feeds, error) { method fetchFeedCounter (line 296) | func (f *feedQueryBuilder) fetchFeedCounter() (unreadCounters map[int6... function NewFeedQueryBuilder (line 31) | func NewFeedQueryBuilder(store *Storage, userID int64) *feedQueryBuilder { FILE: internal/storage/icon.go method HasFeedIcon (line 16) | func (s *Storage) HasFeedIcon(feedID int64) bool { method IconByID (line 24) | func (s *Storage) IconByID(iconID int64) (*model.Icon, error) { method IconByExternalID (line 47) | func (s *Storage) IconByExternalID(externalIconID string) (*model.Icon, ... method IconByFeedID (line 71) | func (s *Storage) IconByFeedID(userID, feedID int64) (*model.Icon, error) { method StoreFeedIcon (line 99) | func (s *Storage) StoreFeedIcon(feedID int64, icon *model.Icon) error { method Icons (line 149) | func (s *Storage) Icons(userID int64) (model.Icons, error) { function normalizeMimeType (line 182) | func normalizeMimeType(mimeType string) string { FILE: internal/storage/integration.go method HasDuplicateFeverUsername (line 15) | func (s *Storage) HasDuplicateFeverUsername(userID int64, feverUsername ... method HasDuplicateGoogleReaderUsername (line 23) | func (s *Storage) HasDuplicateGoogleReaderUsername(userID int64, googleR... method UserByFeverToken (line 31) | func (s *Storage) UserByFeverToken(token string) (*model.User, error) { method GoogleReaderUserCheckPassword (line 56) | func (s *Storage) GoogleReaderUserCheckPassword(username, password strin... method GoogleReaderUserGetIntegration (line 83) | func (s *Storage) GoogleReaderUserGetIntegration(username string) (*mode... method Integration (line 109) | func (s *Storage) Integration(userID int64) (*model.Integration, error) { method UpdateIntegration (line 375) | func (s *Storage) UpdateIntegration(integration *model.Integration) error { method HasSaveEntry (line 638) | func (s *Storage) HasSaveEntry(userID int64) (result bool) { FILE: internal/storage/session.go method CreateAppSessionWithUserPrefs (line 16) | func (s *Storage) CreateAppSessionWithUserPrefs(userID int64) (*model.Se... method CreateAppSession (line 35) | func (s *Storage) CreateAppSession() (*model.Session, error) { method createAppSession (line 46) | func (s *Storage) createAppSession(session *model.Session) (*model.Sessi... method SetAppSessionTextField (line 57) | func (s *Storage) SetAppSessionTextField(sessionID, field string, value ... method SetAppSessionJSONField (line 75) | func (s *Storage) SetAppSessionJSONField(sessionID, field string, value ... method AppSession (line 93) | func (s *Storage) AppSession(id string) (*model.Session, error) { method FlushAllSessions (line 113) | func (s *Storage) FlushAllSessions() (err error) { method CleanOldSessions (line 128) | func (s *Storage) CleanOldSessions(interval time.Duration) int64 { FILE: internal/storage/storage.go type Storage (line 13) | type Storage struct method DatabaseVersion (line 23) | func (s *Storage) DatabaseVersion() string { method Ping (line 34) | func (s *Storage) Ping() error { method DBStats (line 42) | func (s *Storage) DBStats() sql.DBStats { method DBSize (line 47) | func (s *Storage) DBSize() (string, error) { function NewStorage (line 18) | func NewStorage(db *sql.DB) *Storage { FILE: internal/storage/user.go method CountUsers (line 21) | func (s *Storage) CountUsers() int { method SetLastLogin (line 32) | func (s *Storage) SetLastLogin(userID int64) error { method UserExists (line 43) | func (s *Storage) UserExists(username string) bool { method AnotherUserExists (line 50) | func (s *Storage) AnotherUserExists(userID int64, username string) bool { method CreateUser (line 57) | func (s *Storage) CreateUser(userCreationRequest *model.UserCreationRequ... method UpdateUser (line 173) | func (s *Storage) UpdateUser(user *model.User) error { method UserLanguage (line 334) | func (s *Storage) UserLanguage(userID int64) (language string) { method UserByID (line 344) | func (s *Storage) UserByID(userID int64) (*model.User, error) { method UserByUsername (line 387) | func (s *Storage) UserByUsername(username string) (*model.User, error) { method UserByField (line 430) | func (s *Storage) UserByField(field, value string) (*model.User, error) { method AnotherUserWithFieldExists (line 473) | func (s *Storage) AnotherUserWithFieldExists(userID int64, field, value ... method UserByAPIKey (line 481) | func (s *Storage) UserByAPIKey(token string) (*model.User, error) { method fetchUser (line 525) | func (s *Storage) fetchUser(query string, args ...any) (*model.User, err... method RemoveUser (line 571) | func (s *Storage) RemoveUser(userID int64) error { method RemoveUserAsync (line 595) | func (s *Storage) RemoveUserAsync(userID int64) { method deleteUserFeeds (line 615) | func (s *Storage) deleteUserFeeds(userID int64) error { method Users (line 641) | func (s *Storage) Users() (model.Users, error) { method CheckPassword (line 733) | func (s *Storage) CheckPassword(username, password string) error { method HasPassword (line 752) | func (s *Storage) HasPassword(userID int64) (bool, error) { FILE: internal/storage/user_session.go method UserSessions (line 17) | func (s *Storage) UserSessions(userID int64) ([]model.UserSession, error) { method CreateUserSessionFromUsername (line 59) | func (s *Storage) CreateUserSessionFromUsername(username, userAgent, ip ... method UserSessionByToken (line 96) | func (s *Storage) UserSessionByToken(token string) (*model.UserSession, ... method RemoveUserSessionByToken (line 132) | func (s *Storage) RemoveUserSessionByToken(userID int64, token string) e... method RemoveUserSessionByID (line 152) | func (s *Storage) RemoveUserSessionByID(userID, sessionID int64) error { method CleanOldUserSessions (line 172) | func (s *Storage) CleanOldUserSessions(interval time.Duration) int64 { FILE: internal/storage/webauthn.go method AddWebAuthnCredential (line 16) | func (s *Storage) AddWebAuthnCredential(userID int64, handle []byte, cre... method WebAuthnCredentialByHandle (line 37) | func (s *Storage) WebAuthnCredentialByHandle(handle []byte) (int64, *mod... method WebAuthnCredentialsByUserID (line 86) | func (s *Storage) WebAuthnCredentialsByUserID(userID int64) ([]model.Web... method WebAuthnSaveLogin (line 141) | func (s *Storage) WebAuthnSaveLogin(handle []byte) error { method WebAuthnUpdateName (line 150) | func (s *Storage) WebAuthnUpdateName(handle []byte, name string) error { method CountWebAuthnCredentialsByUserID (line 159) | func (s *Storage) CountWebAuthnCredentialsByUserID(userID int64) int { method DeleteCredentialByHandle (line 173) | func (s *Storage) DeleteCredentialByHandle(userID int64, handle []byte) ... method DeleteAllWebAuthnCredentialsByUserID (line 179) | func (s *Storage) DeleteAllWebAuthnCredentialsByUserID(userID int64) err... FILE: internal/systemd/systemd.go constant SdNotifyReady (line 19) | SdNotifyReady = "READY=1" constant SdNotifyWatchdog (line 23) | SdNotifyWatchdog = "WATCHDOG=1" function HasNotifySocket (line 27) | func HasNotifySocket() bool { function HasSystemdWatchdog (line 32) | func HasSystemdWatchdog() bool { function WatchdogInterval (line 37) | func WatchdogInterval() (time.Duration, error) { function SdNotify (line 52) | func SdNotify(state string) error { FILE: internal/template/engine.go type Engine (line 22) | type Engine struct method ParseTemplates (line 35) | func (e *Engine) ParseTemplates() { method Render (line 91) | func (e *Engine) Render(name string, data map[string]any) []byte { function NewEngine (line 28) | func NewEngine(basePath string) *Engine { FILE: internal/template/functions.go type funcMap (line 27) | type funcMap struct method Map (line 32) | func (f *funcMap) Map() template.FuncMap { function csp (line 162) | func csp(user *model.User, nonce string) string { function dict (line 196) | func dict(values ...any) (map[string]any, error) { function truncate (line 211) | func truncate(str string, max int) string { function isEmail (line 230) | func isEmail(str string) bool { function duration (line 236) | func duration(t time.Time) string { function durationImpl (line 241) | func durationImpl(t time.Time, now time.Time) string { function elapsedTime (line 253) | func elapsedTime(printer *locale.Printer, tz string, t time.Time) string { function formatFileSize (line 294) | func formatFileSize(b int64) string { FILE: internal/template/functions_test.go function TestDict (line 15) | func TestDict(t *testing.T) { function TestDictWithInvalidNumberOfArguments (line 34) | func TestDictWithInvalidNumberOfArguments(t *testing.T) { function TestDictWithInvalidMap (line 41) | func TestDictWithInvalidMap(t *testing.T) { function TestTruncate (line 48) | func TestTruncate(t *testing.T) { function TestTruncateInvalidMax (line 97) | func TestTruncateInvalidMax(t *testing.T) { function TestIsEmail (line 119) | func TestIsEmail(t *testing.T) { function TestDuration (line 129) | func TestDuration(t *testing.T) { function TestElapsedTime (line 155) | func TestElapsedTime(t *testing.T) { function TestFormatFileSize (line 185) | func TestFormatFileSize(t *testing.T) { function TestQueryString (line 206) | func TestQueryString(t *testing.T) { function TestCSPExternalFont (line 244) | func TestCSPExternalFont(t *testing.T) { function TestCSPNoUser (line 267) | func TestCSPNoUser(t *testing.T) { function TestCSPCustomJSExternalFont (line 289) | func TestCSPCustomJSExternalFont(t *testing.T) { function TestCSPExternalFontStylesheet (line 311) | func TestCSPExternalFontStylesheet(t *testing.T) { FILE: internal/timezone/timezone.go function Convert (line 469) | func Convert(tz string, t time.Time) time.Time { function Now (line 498) | func Now(tz string) time.Time { function getLocation (line 502) | func getLocation(tz string) *time.Location { function IsValid (line 517) | func IsValid(timezone string) bool { function AvailableTimezones (line 523) | func AvailableTimezones() iter.Seq[string] { FILE: internal/timezone/timezone_test.go function TestNow (line 15) | func TestNow(t *testing.T) { function TestNowWithInvalidTimezone (line 24) | func TestNowWithInvalidTimezone(t *testing.T) { function TestConvertTimeWithNoTimezoneInformation (line 34) | func TestConvertTimeWithNoTimezoneInformation(t *testing.T) { function TestConvertTimeWithDifferentTimezone (line 49) | func TestConvertTimeWithDifferentTimezone(t *testing.T) { function TestConvertTimeWithIdenticalTimezone (line 64) | func TestConvertTimeWithIdenticalTimezone(t *testing.T) { function TestConvertPostgresDateTimeWithNegativeTimezoneOffset (line 80) | func TestConvertPostgresDateTimeWithNegativeTimezoneOffset(t *testing.T) { function TestIsValid (line 94) | func TestIsValid(t *testing.T) { function TestAvailableTimezones (line 119) | func TestAvailableTimezones(t *testing.T) { FILE: internal/ui/about.go method showAboutPage (line 18) | func (h *handler) showAboutPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/api_key_create.go method showCreateAPIKeyPage (line 16) | func (h *handler) showCreateAPIKeyPage(w http.ResponseWriter, r *http.Re... FILE: internal/ui/api_key_list.go method showAPIKeysPage (line 15) | func (h *handler) showAPIKeysPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/api_key_remove.go method deleteAPIKey (line 13) | func (h *handler) deleteAPIKey(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/api_key_save.go method saveAPIKey (line 18) | func (h *handler) saveAPIKey(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/category_create.go method showCreateCategoryPage (line 15) | func (h *handler) showCreateCategoryPage(w http.ResponseWriter, r *http.... FILE: internal/ui/category_edit.go method showEditCategoryPage (line 16) | func (h *handler) showEditCategoryPage(w http.ResponseWriter, r *http.Re... FILE: internal/ui/category_entries.go method showCategoryEntriesPage (line 16) | func (h *handler) showCategoryEntriesPage(w http.ResponseWriter, r *http... FILE: internal/ui/category_entries_all.go method showCategoryEntriesAllPage (line 16) | func (h *handler) showCategoryEntriesAllPage(w http.ResponseWriter, r *h... FILE: internal/ui/category_entries_starred.go method showCategoryEntriesStarredPage (line 16) | func (h *handler) showCategoryEntriesStarredPage(w http.ResponseWriter, ... FILE: internal/ui/category_feeds.go method showCategoryFeedsPage (line 15) | func (h *handler) showCategoryFeedsPage(w http.ResponseWriter, r *http.R... FILE: internal/ui/category_list.go method showCategoryListPage (line 15) | func (h *handler) showCategoryListPage(w http.ResponseWriter, r *http.Re... FILE: internal/ui/category_mark_as_read.go method markCategoryAsRead (line 14) | func (h *handler) markCategoryAsRead(w http.ResponseWriter, r *http.Requ... FILE: internal/ui/category_refresh.go method refreshCategoryEntriesPage (line 18) | func (h *handler) refreshCategoryEntriesPage(w http.ResponseWriter, r *h... method refreshCategoryFeedsPage (line 23) | func (h *handler) refreshCategoryFeedsPage(w http.ResponseWriter, r *htt... method refreshCategory (line 28) | func (h *handler) refreshCategory(w http.ResponseWriter, r *http.Request... FILE: internal/ui/category_remove.go method removeCategory (line 13) | func (h *handler) removeCategory(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/category_remove_feed.go method removeCategoryFeed (line 13) | func (h *handler) removeCategoryFeed(w http.ResponseWriter, r *http.Requ... FILE: internal/ui/category_save.go method saveCategory (line 18) | func (h *handler) saveCategory(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/category_update.go method updateCategory (line 18) | func (h *handler) updateCategory(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/entry_category.go method showCategoryEntryPage (line 17) | func (h *handler) showCategoryEntryPage(w http.ResponseWriter, r *http.R... FILE: internal/ui/entry_enclosure_save_position.go method saveEnclosureProgression (line 14) | func (h *handler) saveEnclosureProgression(w http.ResponseWriter, r *htt... FILE: internal/ui/entry_feed.go method showFeedEntryPage (line 17) | func (h *handler) showFeedEntryPage(w http.ResponseWriter, r *http.Reque... FILE: internal/ui/entry_read.go method showReadEntryPage (line 17) | func (h *handler) showReadEntryPage(w http.ResponseWriter, r *http.Reque... FILE: internal/ui/entry_save.go method saveEntry (line 15) | func (h *handler) saveEntry(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/entry_scraper.go method fetchContent (line 18) | func (h *handler) fetchContent(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/entry_search.go method showSearchEntryPage (line 17) | func (h *handler) showSearchEntryPage(w http.ResponseWriter, r *http.Req... FILE: internal/ui/entry_starred.go method showStarredEntryPage (line 17) | func (h *handler) showStarredEntryPage(w http.ResponseWriter, r *http.Re... FILE: internal/ui/entry_tag.go method showTagEntryPage (line 18) | func (h *handler) showTagEntryPage(w http.ResponseWriter, r *http.Reques... FILE: internal/ui/entry_toggle_starred.go method toggleStarred (line 13) | func (h *handler) toggleStarred(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/entry_unread.go method showUnreadEntryPage (line 17) | func (h *handler) showUnreadEntryPage(w http.ResponseWriter, r *http.Req... FILE: internal/ui/entry_update_status.go method updateEntriesStatus (line 16) | func (h *handler) updateEntriesStatus(w http.ResponseWriter, r *http.Req... FILE: internal/ui/feed_edit.go method showEditFeedPage (line 17) | func (h *handler) showEditFeedPage(w http.ResponseWriter, r *http.Reques... FILE: internal/ui/feed_entries.go method showFeedEntriesPage (line 16) | func (h *handler) showFeedEntriesPage(w http.ResponseWriter, r *http.Req... FILE: internal/ui/feed_entries_all.go method showFeedEntriesAllPage (line 16) | func (h *handler) showFeedEntriesAllPage(w http.ResponseWriter, r *http.... FILE: internal/ui/feed_icon.go method showFeedIcon (line 14) | func (h *handler) showFeedIcon(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/feed_list.go method showFeedsPage (line 15) | func (h *handler) showFeedsPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/feed_mark_as_read.go method markFeedAsRead (line 13) | func (h *handler) markFeedAsRead(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/feed_refresh.go method refreshFeed (line 19) | func (h *handler) refreshFeed(w http.ResponseWriter, r *http.Request) { method refreshAllFeeds (line 34) | func (h *handler) refreshAllFeeds(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/feed_remove.go method removeFeed (line 13) | func (h *handler) removeFeed(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/feed_update.go method updateFeed (line 19) | func (h *handler) updateFeed(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/form/api_key.go type APIKeyForm (line 12) | type APIKeyForm struct function NewAPIKeyForm (line 17) | func NewAPIKeyForm(r *http.Request) *APIKeyForm { FILE: internal/ui/form/auth.go type authForm (line 14) | type authForm struct method Validate (line 20) | func (a authForm) Validate() *locale.LocalizedError { function NewAuthForm (line 29) | func NewAuthForm(r *http.Request) *authForm { FILE: internal/ui/form/category.go type CategoryForm (line 11) | type CategoryForm struct function NewCategoryForm (line 17) | func NewCategoryForm(r *http.Request) *CategoryForm { FILE: internal/ui/form/feed.go type FeedForm (line 14) | type FeedForm struct method Merge (line 52) | func (f FeedForm) Merge(feed *model.Feed) *model.Feed { function NewFeedForm (line 92) | func NewFeedForm(r *http.Request) *FeedForm { FILE: internal/ui/form/integration.go type IntegrationForm (line 14) | type IntegrationForm struct method Merge (line 139) | func (i IntegrationForm) Merge(integration *model.Integration) { function NewIntegrationForm (line 261) | func NewIntegrationForm(r *http.Request) *IntegrationForm { function optionalInt64Field (line 386) | func optionalInt64Field(formValue string) *int64 { FILE: internal/ui/form/settings.go type markReadBehavior (line 17) | type markReadBehavior constant NoAutoMarkAsRead (line 20) | NoAutoMarkAsRead markReadBehavior = "no-auto" constant MarkAsReadOnView (line 21) | MarkAsReadOnView markReadBehavior = "on-view" constant MarkAsReadOnViewButWaitForPlayerCompletion (line 22) | MarkAsReadOnViewButWaitForPlayerCompletion markReadBehavior = "on-view-b... constant MarkAsReadOnlyOnPlayerCompletion (line 23) | MarkAsReadOnlyOnPlayerCompletion markReadBehavior = "on-player... type SettingsForm (line 27) | type SettingsForm struct method Merge (line 94) | func (s *SettingsForm) Merge(user *model.User) *model.User { method Validate (line 134) | func (s *SettingsForm) Validate() *locale.LocalizedError { function MarkAsReadBehavior (line 61) | func MarkAsReadBehavior(markReadOnView, markReadOnMediaPlayerCompletion ... function extractMarkAsReadBehavior (line 78) | func extractMarkAsReadBehavior(behavior markReadBehavior) (markReadOnVie... function NewSettingsForm (line 168) | func NewSettingsForm(r *http.Request) *SettingsForm { FILE: internal/ui/form/settings_test.go function TestValid (line 10) | func TestValid(t *testing.T) { function TestConfirmationEmpty (line 35) | func TestConfirmationEmpty(t *testing.T) { function TestConfirmationIncorrect (line 64) | func TestConfirmationIncorrect(t *testing.T) { FILE: internal/ui/form/subscription.go type SubscriptionForm (line 16) | type SubscriptionForm struct method Validate (line 39) | func (s *SubscriptionForm) Validate() *locale.LocalizedError { function NewSubscriptionForm (line 68) | func NewSubscriptionForm(r *http.Request) *SubscriptionForm { FILE: internal/ui/form/user.go type UserForm (line 14) | type UserForm struct method ValidateCreation (line 22) | func (u UserForm) ValidateCreation() *locale.LocalizedError { method ValidateModification (line 35) | func (u UserForm) ValidateModification() *locale.LocalizedError { method Merge (line 54) | func (u UserForm) Merge(user *model.User) *model.User { function NewUserForm (line 66) | func NewUserForm(r *http.Request) *UserForm { FILE: internal/ui/form/webauthn.go type WebauthnForm (line 11) | type WebauthnForm struct function NewWebauthnForm (line 16) | func NewWebauthnForm(r *http.Request) *WebauthnForm { FILE: internal/ui/handler.go type handler (line 14) | type handler struct method routePath (line 21) | func (h *handler) routePath(format string, args ...any) string { FILE: internal/ui/history_entries.go method showHistoryPage (line 16) | func (h *handler) showHistoryPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/history_flush.go method flushHistory (line 13) | func (h *handler) flushHistory(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/integration_show.go method showIntegrationPage (line 16) | func (h *handler) showIntegrationPage(w http.ResponseWriter, r *http.Req... FILE: internal/ui/integration_update.go method updateIntegration (line 19) | func (h *handler) updateIntegration(w http.ResponseWriter, r *http.Reque... FILE: internal/ui/login_check.go method checkLogin (line 21) | func (h *handler) checkLogin(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/login_show.go method showLoginPage (line 15) | func (h *handler) showLoginPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/logout.go method logout (line 16) | func (h *handler) logout(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/middleware.go type middleware (line 24) | type middleware struct method handleUserSession (line 33) | func (m *middleware) handleUserSession(next http.Handler) http.Handler { method handleAppSession (line 67) | func (m *middleware) handleAppSession(next http.Handler) http.Handler { method getAppSessionValueFromCookie (line 138) | func (m *middleware) getAppSessionValueFromCookie(r *http.Request) *mo... method getUserSessionFromCookie (line 183) | func (m *middleware) getUserSessionFromCookie(r *http.Request) *model.... method handleAuthProxy (line 201) | func (m *middleware) handleAuthProxy(next http.Handler) http.Handler { function newMiddleware (line 29) | func newMiddleware(basePath string, store *storage.Storage) *middleware { function isPublicRoute (line 159) | func isPublicRoute(r *http.Request) bool { FILE: internal/ui/oauth2.go function getOAuth2Manager (line 13) | func getOAuth2Manager(ctx context.Context) *oauth2.Manager { FILE: internal/ui/oauth2_callback.go method oauth2Callback (line 21) | func (h *handler) oauth2Callback(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/oauth2_redirect.go method oauth2Redirect (line 16) | func (h *handler) oauth2Redirect(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/oauth2_unlink.go method oauth2Unlink (line 17) | func (h *handler) oauth2Unlink(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/offline.go method showOfflinePage (line 15) | func (h *handler) showOfflinePage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/opml_export.go method exportFeeds (line 15) | func (h *handler) exportFeeds(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/opml_import.go method showImportPage (line 15) | func (h *handler) showImportPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/opml_upload.go method uploadOPML (line 22) | func (h *handler) uploadOPML(w http.ResponseWriter, r *http.Request) { method fetchOPML (line 69) | func (h *handler) fetchOPML(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/pagination.go type pagination (line 6) | type pagination struct function getPagination (line 23) | func getPagination(route string, total, offset, nbItemsPerPage int) pagi... FILE: internal/ui/proxy.go method mediaProxy (line 27) | func (h *handler) mediaProxy(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/search.go method showSearchPage (line 16) | func (h *handler) showSearchPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/session/session.go type Session (line 14) | type Session struct method SetLastForceRefresh (line 24) | func (s *Session) SetLastForceRefresh() { method SetOAuth2State (line 28) | func (s *Session) SetOAuth2State(state string) { method SetOAuth2CodeVerifier (line 32) | func (s *Session) SetOAuth2CodeVerifier(codeVerfier string) { method NewFlashMessage (line 37) | func (s *Session) NewFlashMessage(message string) { method FlashMessage (line 42) | func (s *Session) FlashMessage(message string) string { method NewFlashErrorMessage (line 50) | func (s *Session) NewFlashErrorMessage(message string) { method FlashErrorMessage (line 55) | func (s *Session) FlashErrorMessage(message string) string { method SetLanguage (line 63) | func (s *Session) SetLanguage(language string) { method SetTheme (line 68) | func (s *Session) SetTheme(theme string) { method SetWebAuthnSessionData (line 73) | func (s *Session) SetWebAuthnSessionData(sessionData *model.WebAuthnSe... function New (line 20) | func New(store *storage.Storage, sessionID string) *Session { FILE: internal/ui/session_list.go method showSessionsPage (line 15) | func (h *handler) showSessionsPage(w http.ResponseWriter, r *http.Reques... FILE: internal/ui/session_remove.go method removeSession (line 13) | func (h *handler) removeSession(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/settings_show.go method showSettingsPage (line 19) | func (h *handler) showSettingsPage(w http.ResponseWriter, r *http.Reques... FILE: internal/ui/settings_update.go method updateSettings (line 20) | func (h *handler) updateSettings(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/share.go method createSharedEntry (line 18) | func (h *handler) createSharedEntry(w http.ResponseWriter, r *http.Reque... method unshareEntry (line 29) | func (h *handler) unshareEntry(w http.ResponseWriter, r *http.Request) { method sharedEntry (line 39) | func (h *handler) sharedEntry(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/shared_entries.go method sharedEntries (line 15) | func (h *handler) sharedEntries(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/starred_entries.go method showStarredPage (line 16) | func (h *handler) showStarredPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/starred_entry_category.go method showStarredCategoryEntryPage (line 17) | func (h *handler) showStarredCategoryEntryPage(w http.ResponseWriter, r ... FILE: internal/ui/static/js/app.js constant TOP (line 2) | const TOP = 9999; constant BOTTOM (line 3) | const BOTTOM = -9999; function sendPOSTRequest (line 23) | function sendPOSTRequest(url, body = null) { function openNewTab (line 44) | function openNewTab(url) { function scrollPageTo (line 55) | function scrollPageTo(element, evenIfOnScreen) { function onClick (line 73) | function onClick(selector, callback, noPreventDefault) { function onAuxClick (line 91) | function onAuxClick(selector, callback, noPreventDefault) { function getVisibleElements (line 108) | function getVisibleElements(selector) { function getVisibleEntries (line 118) | function getVisibleEntries() { function isListView (line 127) | function isListView() { function isEntryView (line 136) | function isEntryView() { function findEntry (line 145) | function findEntry(element) { function createIconLabelElement (line 161) | function createIconLabelElement(labelText) { function setIconAndLabelElement (line 175) | function setIconAndLabelElement(parentElement, iconName, labelText) { function setButtonToLoadingState (line 195) | function setButtonToLoadingState(buttonElement) { function restoreButtonState (line 211) | function restoreButtonState(buttonElement, originalButtonElement) { function setButtonToSavedState (line 221) | function setButtonToSavedState(buttonElement) { function setStarredButtonState (line 232) | function setStarredButtonState(buttonElement, newState) { function setReadStatusButtonState (line 244) | function setReadStatusButtonState(buttonElement, newState) { function showToastNotification (line 257) | function showToastNotification(iconType, notificationMessage) { function goToPage (line 284) | function goToPage(page, reloadOnFail = false) { function goToPreviousPage (line 305) | function goToPreviousPage(offset) { function goToNextPage (line 325) | function goToNextPage(offset) { function goToFeedOrFeedsPage (line 340) | function goToFeedOrFeedsPage() { function goToFeedPage (line 355) | function goToFeedPage() { function goToAddSubscriptionPage (line 374) | function goToAddSubscriptionPage() { function goToListItem (line 389) | function goToListItem(offset) { function handleEntryShareAction (line 444) | async function handleEntryShareAction() { function toggleAriaAttributesOnMainMenu (line 469) | function toggleAriaAttributesOnMainMenu() { function toggleMainMenuDropdown (line 504) | function toggleMainMenuDropdown(event) { function initializeMainMenuHandlers (line 529) | function initializeMainMenuHandlers() { function initializeFormHandlers (line 553) | function initializeFormHandlers() { function showKeyboardShortcutsAction (line 570) | function showKeyboardShortcutsAction() { function markPageAsReadAction (line 577) | function markPageAsReadAction() { function handleEntryStatus (line 607) | function handleEntryStatus(navigationDirection, element, setToRead) { function toggleEntryStatus (line 633) | function toggleEntryStatus(element, toasting) { function handleRefreshAllFeedsAction (line 663) | function handleRefreshAllFeedsAction() { function updateEntriesStatus (line 676) | function updateEntriesStatus(entryIDs, status, callback) { function handleSaveEntryAction (line 693) | function handleSaveEntryAction(element = null) { function handleStarAction (line 715) | function handleStarAction(element) { function handleFetchOriginalContentAction (line 742) | function handleFetchOriginalContentAction() { function openOriginalLinkAction (line 772) | function openOriginalLinkAction(openLinkInCurrentTab) { function openOriginalLinkFromEntryView (line 786) | function openOriginalLinkFromEntryView(openLinkInCurrentTab) { function openOriginalLinkFromListView (line 803) | function openOriginalLinkFromListView() { function openCommentLinkAction (line 832) | function openCommentLinkAction(openLinkInCurrentTab) { function openSelectedItemAction (line 850) | function openSelectedItemAction() { function handleRemoveFeedAction (line 860) | function handleRemoveFeedAction() { function scrollToCurrentItemAction (line 872) | function scrollToCurrentItemAction() { function updateUnreadCounterValue (line 884) | function updateUnreadCounterValue(delta) { function handleConfirmationMessage (line 908) | function handleConfirmationMessage(linkElement, callback) { function isPlayerPlaying (line 968) | function isPlayerPlaying(mediaElement) { function handlePlayerProgressionSaveAndMarkAsReadOnCompletion (line 984) | function handlePlayerProgressionSaveAndMarkAsReadOnCompletion(playerElem... function handleMediaControlButtonClick (line 1020) | function handleMediaControlButtonClick(mediaPlayerButtonElement) { function initializeMediaPlayerHandlers (line 1054) | function initializeMediaPlayerHandlers() { function initializeServiceWorker (line 1083) | function initializeServiceWorker() { function initializeWebAuthn (line 1121) | function initializeWebAuthn() { function initializeKeyboardShortcuts (line 1159) | function initializeKeyboardShortcuts() { function initializeTouchHandler (line 1223) | function initializeTouchHandler() { function initializeClickHandlers (line 1233) | function initializeClickHandlers() { FILE: internal/ui/static/js/keyboard_handler.js class KeyboardHandler (line 1) | class KeyboardHandler { method constructor (line 2) | constructor() { method on (line 8) | on(combination, callback) { method listen (line 13) | listen() { method isEventIgnored (line 48) | isEventIgnored(event, key) { method isModifierKeyDown (line 54) | static isModifierKeyDown(event) { method getKey (line 58) | static getKey(event) { FILE: internal/ui/static/js/service_worker.js constant OFFLINE_VERSION (line 4) | const OFFLINE_VERSION = 1; constant CACHE_NAME (line 5) | const CACHE_NAME = "offline"; FILE: internal/ui/static/js/touch_handler.js class TouchHandler (line 1) | class TouchHandler { method constructor (line 2) | constructor() { method reset (line 6) | reset() { method calculateDistance (line 16) | calculateDistance() { method findElement (line 29) | static findElement(element) { method onItemTouchStart (line 37) | onItemTouchStart(event) { method onItemTouchMove (line 49) | onItemTouchMove(event) { method onItemTouchEnd (line 71) | onItemTouchEnd(event) { method onContentTouchStart (line 90) | onContentTouchStart(event) { method onContentTouchMove (line 101) | onContentTouchMove(event) { method onContentTouchEnd (line 110) | onContentTouchEnd(event) { method onTapEnd (line 130) | onTapEnd(event) { method listen (line 154) | listen() { FILE: internal/ui/static/js/webauthn_handler.js class WebAuthnHandler (line 1) | class WebAuthnHandler { method isWebAuthnSupported (line 2) | static isWebAuthnSupported() { method showErrorMessage (line 6) | static showErrorMessage(errorMessage) { method isConditionalLoginSupported (line 25) | static async isConditionalLoginSupported() { method conditionalLogin (line 31) | async conditionalLogin(abortController) { method decodeBuffer (line 37) | decodeBuffer(value) { method encodeBuffer (line 41) | encodeBuffer(value) { method post (line 48) | async post(urlKey, username, data) { method get (line 57) | async get(urlKey, username) { method removeAllCredentials (line 65) | async removeAllCredentials() { method register (line 76) | async register() { method login (line 133) | async login(username, abortController) { FILE: internal/ui/static/static.go type asset (line 21) | type asset struct function GenerateBinaryBundles (line 42) | func GenerateBinaryBundles() error { function GenerateStylesheetsBundles (line 79) | func GenerateStylesheetsBundles() error { function GenerateJavascriptBundles (line 121) | func GenerateJavascriptBundles(webauthnEnabled bool) error { FILE: internal/ui/static_app_icon.go method showAppIcon (line 17) | func (h *handler) showAppIcon(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/static_favicon.go method showFavicon (line 15) | func (h *handler) showFavicon(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/static_javascript.go constant licensePrefix (line 17) | licensePrefix = "//@license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76... constant licenseSuffix (line 18) | licenseSuffix = "\n//@license-end" method showJavascript (line 20) | func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/static_manifest.go method showWebManifest (line 15) | func (h *handler) showWebManifest(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/static_stylesheet.go method showStylesheet (line 16) | func (h *handler) showStylesheet(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/subscription_add.go method showAddSubscriptionPage (line 17) | func (h *handler) showAddSubscriptionPage(w http.ResponseWriter, r *http... FILE: internal/ui/subscription_bookmarklet.go method bookmarklet (line 21) | func (h *handler) bookmarklet(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/subscription_choose.go method showChooseSubscriptionPage (line 19) | func (h *handler) showChooseSubscriptionPage(w http.ResponseWriter, r *h... FILE: internal/ui/subscription_submit.go method submitSubscription (line 23) | func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Requ... FILE: internal/ui/tag_entries_all.go method showTagEntriesAllPage (line 17) | func (h *handler) showTagEntriesAllPage(w http.ResponseWriter, r *http.R... FILE: internal/ui/ui.go function Serve (line 17) | func Serve(store *storage.Storage, pool *worker.Pool) http.Handler { FILE: internal/ui/unread_entries.go method showUnreadPage (line 16) | func (h *handler) showUnreadPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/unread_entry_category.go method showUnreadCategoryEntryPage (line 17) | func (h *handler) showUnreadCategoryEntryPage(w http.ResponseWriter, r *... FILE: internal/ui/unread_entry_feed.go method showUnreadFeedEntryPage (line 17) | func (h *handler) showUnreadFeedEntryPage(w http.ResponseWriter, r *http... FILE: internal/ui/unread_mark_all_read.go method markAllAsRead (line 13) | func (h *handler) markAllAsRead(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/user_create.go method showCreateUserPage (line 16) | func (h *handler) showCreateUserPage(w http.ResponseWriter, r *http.Requ... FILE: internal/ui/user_edit.go method showEditUserPage (line 17) | func (h *handler) showEditUserPage(w http.ResponseWriter, r *http.Reques... FILE: internal/ui/user_list.go method showUsersPage (line 15) | func (h *handler) showUsersPage(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/user_remove.go method removeUser (line 14) | func (h *handler) removeUser(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/user_save.go method saveUser (line 19) | func (h *handler) saveUser(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/user_update.go method updateUser (line 17) | func (h *handler) updateUser(w http.ResponseWriter, r *http.Request) { FILE: internal/ui/view/view.go type view (line 17) | type view struct method Set (line 24) | func (v *view) Set(param string, value any) *view { method Render (line 30) | func (v *view) Render(template string) []byte { function New (line 35) | func New(tpl *template.Engine, r *http.Request, sess *session.Session) *... FILE: internal/ui/webauthn.go type WebAuthnUser (line 29) | type WebAuthnUser struct method WebAuthnID (line 35) | func (u WebAuthnUser) WebAuthnID() []byte { method WebAuthnName (line 39) | func (u WebAuthnUser) WebAuthnName() string { method WebAuthnDisplayName (line 43) | func (u WebAuthnUser) WebAuthnDisplayName() string { method WebAuthnIcon (line 47) | func (u WebAuthnUser) WebAuthnIcon() string { method WebAuthnCredentials (line 51) | func (u WebAuthnUser) WebAuthnCredentials() []webauthn.Credential { function newWebAuthn (line 59) | func newWebAuthn() (*webauthn.WebAuthn, error) { method beginRegistration (line 71) | func (h *handler) beginRegistration(w http.ResponseWriter, r *http.Reque... method finishRegistration (line 120) | func (h *handler) finishRegistration(w http.ResponseWriter, r *http.Requ... method beginLogin (line 155) | func (h *handler) beginLogin(w http.ResponseWriter, r *http.Request) { method finishLogin (line 198) | func (h *handler) finishLogin(w http.ResponseWriter, r *http.Request) { method renameCredential (line 340) | func (h *handler) renameCredential(w http.ResponseWriter, r *http.Reques... method saveCredential (line 379) | func (h *handler) saveCredential(w http.ResponseWriter, r *http.Request) { method deleteCredential (line 403) | func (h *handler) deleteCredential(w http.ResponseWriter, r *http.Reques... method deleteAllCredentials (line 426) | func (h *handler) deleteAllCredentials(w http.ResponseWriter, r *http.Re... FILE: internal/urllib/url.go function IsRelativePath (line 18) | func IsRelativePath(link string) bool { function hasHTTPPrefix (line 33) | func hasHTTPPrefix(inputURL string) bool { function IsAbsoluteURL (line 38) | func IsAbsoluteURL(inputURL string) bool { function resolveToAbsoluteURL (line 50) | func resolveToAbsoluteURL(parsedBaseURL *url.URL, baseURL, relativeURL s... function ResolveToAbsoluteURL (line 80) | func ResolveToAbsoluteURL(baseURL, relativeURL string) (string, error) { function ResolveToAbsoluteURLWithParsedBaseURL (line 85) | func ResolveToAbsoluteURLWithParsedBaseURL(parsedBaseURL *url.URL, relat... function RootURL (line 90) | func RootURL(websiteURL string) string { function IsHTTPS (line 113) | func IsHTTPS(websiteURL string) bool { function Domain (line 123) | func Domain(websiteURL string) string { function DomainWithoutWWW (line 133) | func DomainWithoutWWW(websiteURL string) string { function JoinBaseURLAndPath (line 138) | func JoinBaseURLAndPath(baseURL, path string) (string, error) { function IsNonPublicIP (line 162) | func IsNonPublicIP(ip net.IP) bool { FILE: internal/urllib/url_test.go function TestIsRelativePath (line 12) | func TestIsRelativePath(t *testing.T) { function TestIsAbsoluteURL (line 46) | func TestIsAbsoluteURL(t *testing.T) { function TestAbsoluteURL (line 68) | func TestAbsoluteURL(t *testing.T) { function TestRootURL (line 132) | func TestRootURL(t *testing.T) { function TestIsHTTPS (line 151) | func TestIsHTTPS(t *testing.T) { function TestDomain (line 166) | func TestDomain(t *testing.T) { function TestDomainWithoutWWW (line 180) | func TestDomainWithoutWWW(t *testing.T) { function TestJoinBaseURLAndPath (line 196) | func TestJoinBaseURLAndPath(t *testing.T) { function TestIsNonPublicIP (line 227) | func TestIsNonPublicIP(t *testing.T) { FILE: internal/validator/api_key.go function ValidateAPIKeyCreation (line 13) | func ValidateAPIKeyCreation(store *storage.Storage, userID int64, reques... FILE: internal/validator/category.go function ValidateCategoryCreation (line 13) | func ValidateCategoryCreation(store *storage.Storage, userID int64, requ... function ValidateCategoryModification (line 26) | func ValidateCategoryModification(store *storage.Storage, userID, catego... FILE: internal/validator/enclosure.go function ValidateEnclosureUpdateRequest (line 13) | func ValidateEnclosureUpdateRequest(request *model.EnclosureUpdateReques... FILE: internal/validator/enclosure_test.go function TestValidateEnclosureUpdateRequest (line 12) | func TestValidateEnclosureUpdateRequest(t *testing.T) { FILE: internal/validator/entry.go function ValidateEntriesStatusUpdateRequest (line 14) | func ValidateEntriesStatusUpdateRequest(request *model.EntriesStatusUpda... function ValidateEntryStatus (line 23) | func ValidateEntryStatus(status string) error { function ValidateEntryOrder (line 33) | func ValidateEntryOrder(order string) error { function ValidateEntryModification (line 43) | func ValidateEntryModification(request *model.EntryUpdateRequest) error { FILE: internal/validator/entry_test.go function TestValidateEntriesStatusUpdateRequest (line 12) | func TestValidateEntriesStatusUpdateRequest(t *testing.T) { function TestValidateEntryStatus (line 37) | func TestValidateEntryStatus(t *testing.T) { function TestValidateEntryOrder (line 49) | func TestValidateEntryOrder(t *testing.T) { function TestValidateEntryModification (line 61) | func TestValidateEntryModification(t *testing.T) { FILE: internal/validator/feed.go function ValidateFeedCreation (line 14) | func ValidateFeedCreation(store *storage.Storage, userID int64, request ... function ValidateFeedModification (line 47) | func ValidateFeedModification(store *storage.Storage, userID, feedID int... FILE: internal/validator/filter.go function isValidFilterRules (line 13) | func isValidFilterRules(filterEntryRules string, filterType string) *loc... FILE: internal/validator/filter_test.go function TestIsValidFilterRules (line 8) | func TestIsValidFilterRules(t *testing.T) { FILE: internal/validator/subscription.go function ValidateSubscriptionDiscovery (line 13) | func ValidateSubscriptionDiscovery(request *model.SubscriptionDiscoveryR... FILE: internal/validator/subscription_test.go function TestValidateSubscriptionDiscovery (line 12) | func TestValidateSubscriptionDiscovery(t *testing.T) { FILE: internal/validator/user.go function ValidateUserCreationWithPassword (line 17) | func ValidateUserCreationWithPassword(store *storage.Storage, request *m... function ValidateUserModification (line 38) | func ValidateUserModification(store *storage.Storage, userID int64, chan... function validateReadingSpeed (line 156) | func validateReadingSpeed(readingSpeed int) *locale.LocalizedError { function validatePassword (line 163) | func validatePassword(password string) *locale.LocalizedError { function validateUsername (line 176) | func validateUsername(username string) *locale.LocalizedError { function validateTheme (line 191) | func validateTheme(theme string) *locale.LocalizedError { function validateLanguage (line 199) | func validateLanguage(language string) *locale.LocalizedError { function validateTimezone (line 207) | func validateTimezone(timezoneValue string) *locale.LocalizedError { function validateEntryDirection (line 214) | func validateEntryDirection(direction string) *locale.LocalizedError { function validateEntriesPerPage (line 221) | func validateEntriesPerPage(entriesPerPage int) *locale.LocalizedError { function validateCategoriesSortingOrder (line 228) | func validateCategoriesSortingOrder(order string) *locale.LocalizedError { function validateDisplayMode (line 235) | func validateDisplayMode(displayMode string) *locale.LocalizedError { function validateGestureNav (line 242) | func validateGestureNav(gestureNav string) *locale.LocalizedError { function validateDefaultHomePage (line 249) | func validateDefaultHomePage(defaultHomePage string) *locale.LocalizedEr... function validateMediaPlaybackRate (line 257) | func validateMediaPlaybackRate(mediaPlaybackRate float64) *locale.Locali... FILE: internal/validator/user_test.go function TestValidateUsername (line 13) | func TestValidateUsername(t *testing.T) { function TestValidateReadingSpeed (line 40) | func TestValidateReadingSpeed(t *testing.T) { function TestValidatePassword (line 55) | func TestValidatePassword(t *testing.T) { function TestValidateTheme (line 70) | func TestValidateTheme(t *testing.T) { function TestValidateLanguage (line 80) | func TestValidateLanguage(t *testing.T) { function TestValidateTimezone (line 90) | func TestValidateTimezone(t *testing.T) { function TestValidateEntryDirection (line 100) | func TestValidateEntryDirection(t *testing.T) { function TestValidateEntriesPerPage (line 112) | func TestValidateEntriesPerPage(t *testing.T) { function TestValidateCategoriesSortingOrder (line 124) | func TestValidateCategoriesSortingOrder(t *testing.T) { function TestValidateDisplayMode (line 136) | func TestValidateDisplayMode(t *testing.T) { function TestValidateGestureNav (line 148) | func TestValidateGestureNav(t *testing.T) { function TestValidateDefaultHomePage (line 160) | func TestValidateDefaultHomePage(t *testing.T) { function TestValidateMediaPlaybackRate (line 170) | func TestValidateMediaPlaybackRate(t *testing.T) { function TestValidateUserModificationAllowsClearingFilterRules (line 184) | func TestValidateUserModificationAllowsClearingFilterRules(t *testing.T) { function TestValidateUserModificationRejectsInvalidNonEmptyFilterRule (line 195) | func TestValidateUserModificationRejectsInvalidNonEmptyFilterRule(t *tes... FILE: internal/validator/validator.go function ValidateRange (line 15) | func ValidateRange(offset, limit int) error { function ValidateDirection (line 28) | func ValidateDirection(direction string) error { function IsValidRegex (line 38) | func IsValidRegex(expr string) bool { function IsValidDomain (line 44) | func IsValidDomain(domain string) bool { function IsValidDomainList (line 55) | func IsValidDomainList(value string) bool { FILE: internal/validator/validator_test.go function TestValidateRange (line 8) | func TestValidateRange(t *testing.T) { function TestValidateDirection (line 22) | func TestValidateDirection(t *testing.T) { function TestIsValidRegex (line 34) | func TestIsValidRegex(t *testing.T) { function TestIsValidDomain (line 48) | func TestIsValidDomain(t *testing.T) { function TestIsValidDomainList (line 66) | func TestIsValidDomainList(t *testing.T) { FILE: internal/version/version.go function getCommit (line 17) | func getCommit() string { function getBuildDate (line 31) | func getBuildDate() string { function init (line 44) | func init() { FILE: internal/version/version_test.go function TestVersionConvertedToInteger (line 14) | func TestVersionConvertedToInteger(t *testing.T) { FILE: internal/worker/pool.go type Pool (line 12) | type Pool struct method Push (line 17) | func (p *Pool) Push(jobs model.JobList) { function NewPool (line 24) | func NewPool(store *storage.Storage, nbWorkers int) *Pool { FILE: internal/worker/worker.go type worker (line 18) | type worker struct method Run (line 24) | func (w *worker) Run(c <-chan model.Job) { FILE: main.go function main (line 10) | func main() {