gitextract_58fdb7bz/ ├── .devcontainer/ │ ├── devcontainer.json │ └── docker-compose.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── documentation.yml │ │ ├── feature_request.yml │ │ ├── feed_issue.yml │ │ └── proposal.yml │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── build_binaries.yml │ ├── codeberg_mirror.yml │ ├── codeql-analysis.yml │ ├── debian_packages.yml │ ├── docker.yml │ ├── linters.yml │ ├── rpm_packages.yml │ ├── scripts/ │ │ └── commit-checker.py │ └── tests.yml ├── .gitignore ├── .golangci.yml ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── Procfile ├── README.md ├── SECURITY.md ├── client/ │ ├── README.md │ ├── client.go │ ├── client_test.go │ ├── doc.go │ ├── model.go │ ├── options.go │ └── request.go ├── contrib/ │ ├── README.md │ ├── ansible/ │ │ ├── inventories/ │ │ │ └── group_vars/ │ │ │ └── miniflux_vars.yml │ │ ├── playbooks/ │ │ │ └── playbook.yml │ │ └── roles/ │ │ └── mgrote.miniflux/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── templates/ │ │ └── miniflux.conf │ ├── bruno/ │ │ ├── README.md │ │ └── miniflux/ │ │ ├── Bookmark an entry.bru │ │ ├── Create a feed.bru │ │ ├── Create a new category.bru │ │ ├── Create a new user.bru │ │ ├── Delete a category.bru │ │ ├── Delete a feed.bru │ │ ├── Delete a user.bru │ │ ├── Discover feeds.bru │ │ ├── Fetch entry website content.bru │ │ ├── Flush history.bru │ │ ├── Get a single entry.bru │ │ ├── Get a single feed entry.bru │ │ ├── Get a single feed.bru │ │ ├── Get a single user by ID.bru │ │ ├── Get a single user by username.bru │ │ ├── Get all categories.bru │ │ ├── Get all entries.bru │ │ ├── Get all feeds.bru │ │ ├── Get all users.bru │ │ ├── Get category entries.bru │ │ ├── Get category entry.bru │ │ ├── Get category feeds.bru │ │ ├── Get current user.bru │ │ ├── Get feed counters.bru │ │ ├── Get feed entries.bru │ │ ├── Get feed icon by feed ID.bru │ │ ├── Get feed icon by icon ID.bru │ │ ├── Get version and build information.bru │ │ ├── Mark all category entries as read.bru │ │ ├── Mark all user entries as read.bru │ │ ├── Mark feed as read.bru │ │ ├── OPML Export.bru │ │ ├── OPML Import.bru │ │ ├── Refresh a single feed.bru │ │ ├── Refresh all feeds.bru │ │ ├── Refresh category feeds.bru │ │ ├── Save an entry.bru │ │ ├── Update a category.bru │ │ ├── Update a feed.bru │ │ ├── Update a user.bru │ │ ├── Update entries status.bru │ │ ├── Update entry.bru │ │ ├── bruno.json │ │ └── environments/ │ │ └── Local.bru │ ├── docker-compose/ │ │ ├── Caddyfile │ │ ├── README.md │ │ ├── basic.yml │ │ ├── caddy.yml │ │ └── traefik.yml │ ├── grafana/ │ │ ├── README.md │ │ └── dashboard.json │ ├── sysvinit/ │ │ ├── README.md │ │ └── etc/ │ │ ├── default/ │ │ │ └── miniflux │ │ └── init.d/ │ │ └── miniflux │ └── thunder_client/ │ ├── README.md │ └── collection.json ├── go.mod ├── go.sum ├── internal/ │ ├── api/ │ │ ├── api.go │ │ ├── api_integration_test.go │ │ ├── api_key_handlers.go │ │ ├── api_test.go │ │ ├── category_handlers.go │ │ ├── enclosure_handlers.go │ │ ├── entry_handlers.go │ │ ├── feed_handlers.go │ │ ├── icon_handlers.go │ │ ├── messages.go │ │ ├── middleware.go │ │ ├── opml_handlers.go │ │ ├── subscription_handlers.go │ │ ├── user_handlers.go │ │ └── version_handler.go │ ├── cli/ │ │ ├── ask_credentials.go │ │ ├── cleanup_tasks.go │ │ ├── cli.go │ │ ├── create_admin.go │ │ ├── daemon.go │ │ ├── export_feeds.go │ │ ├── flush_sessions.go │ │ ├── health_check.go │ │ ├── info.go │ │ ├── logger.go │ │ ├── refresh_feeds.go │ │ ├── reset_password.go │ │ └── scheduler.go │ ├── config/ │ │ ├── config.go │ │ ├── options.go │ │ ├── options_parsing_test.go │ │ ├── parser.go │ │ ├── parser_test.go │ │ ├── validators.go │ │ └── validators_test.go │ ├── crypto/ │ │ └── crypto.go │ ├── database/ │ │ ├── database.go │ │ ├── migrations.go │ │ └── postgresql.go │ ├── fever/ │ │ ├── README.md │ │ ├── handler.go │ │ ├── middleware.go │ │ └── response.go │ ├── googlereader/ │ │ ├── README.md │ │ ├── handler.go │ │ ├── item.go │ │ ├── item_test.go │ │ ├── middleware.go │ │ ├── parameters.go │ │ ├── prefix_suffix.go │ │ ├── request_modifier.go │ │ ├── response.go │ │ └── stream.go │ ├── http/ │ │ ├── client/ │ │ │ ├── client.go │ │ │ └── client_test.go │ │ ├── cookie/ │ │ │ └── cookie.go │ │ ├── request/ │ │ │ ├── client_ip.go │ │ │ ├── client_ip_test.go │ │ │ ├── context.go │ │ │ ├── context_test.go │ │ │ ├── cookie.go │ │ │ ├── cookie_test.go │ │ │ ├── params.go │ │ │ └── params_test.go │ │ ├── response/ │ │ │ ├── builder.go │ │ │ ├── builder_test.go │ │ │ ├── html.go │ │ │ ├── html_test.go │ │ │ ├── json.go │ │ │ ├── json_test.go │ │ │ ├── response.go │ │ │ ├── response_test.go │ │ │ ├── text.go │ │ │ ├── text_test.go │ │ │ ├── xml.go │ │ │ └── xml_test.go │ │ └── server/ │ │ ├── healthcheck.go │ │ ├── httpd.go │ │ ├── metrics.go │ │ ├── middleware.go │ │ └── routes.go │ ├── integration/ │ │ ├── apprise/ │ │ │ └── apprise.go │ │ ├── archiveorg/ │ │ │ └── archiveorg.go │ │ ├── betula/ │ │ │ └── betula.go │ │ ├── cubox/ │ │ │ └── cubox.go │ │ ├── discord/ │ │ │ └── discord.go │ │ ├── espial/ │ │ │ └── espial.go │ │ ├── instapaper/ │ │ │ └── instapaper.go │ │ ├── integration.go │ │ ├── integration_test.go │ │ ├── karakeep/ │ │ │ └── karakeep.go │ │ ├── linkace/ │ │ │ └── linkace.go │ │ ├── linkding/ │ │ │ └── linkding.go │ │ ├── linktaco/ │ │ │ ├── linktaco.go │ │ │ └── linktaco_test.go │ │ ├── linkwarden/ │ │ │ ├── linkwarden.go │ │ │ └── linkwarden_test.go │ │ ├── matrixbot/ │ │ │ ├── client.go │ │ │ └── matrixbot.go │ │ ├── notion/ │ │ │ └── notion.go │ │ ├── ntfy/ │ │ │ └── ntfy.go │ │ ├── nunuxkeeper/ │ │ │ └── nunuxkeeper.go │ │ ├── omnivore/ │ │ │ └── omnivore.go │ │ ├── pinboard/ │ │ │ ├── pinboard.go │ │ │ └── post.go │ │ ├── pushover/ │ │ │ └── pushover.go │ │ ├── raindrop/ │ │ │ └── raindrop.go │ │ ├── readeck/ │ │ │ ├── readeck.go │ │ │ └── readeck_test.go │ │ ├── readwise/ │ │ │ └── readwise.go │ │ ├── rssbridge/ │ │ │ └── rssbridge.go │ │ ├── shaarli/ │ │ │ └── shaarli.go │ │ ├── shiori/ │ │ │ └── shiori.go │ │ ├── slack/ │ │ │ └── slack.go │ │ ├── telegrambot/ │ │ │ ├── client.go │ │ │ └── telegrambot.go │ │ ├── wallabag/ │ │ │ ├── wallabag.go │ │ │ └── wallabag_test.go │ │ └── webhook/ │ │ └── webhook.go │ ├── locale/ │ │ ├── catalog.go │ │ ├── catalog_test.go │ │ ├── error.go │ │ ├── error_test.go │ │ ├── locale.go │ │ ├── locale_test.go │ │ ├── plural.go │ │ ├── plural_test.go │ │ ├── printer.go │ │ ├── printer_test.go │ │ └── translations/ │ │ ├── ar_SA.json │ │ ├── de_DE.json │ │ ├── el_EL.json │ │ ├── en_US.json │ │ ├── es_ES.json │ │ ├── fi_FI.json │ │ ├── fr_FR.json │ │ ├── gl_ES.json │ │ ├── hi_IN.json │ │ ├── id_ID.json │ │ ├── it_IT.json │ │ ├── ja_JP.json │ │ ├── nan_Latn_pehoeji.json │ │ ├── nl_NL.json │ │ ├── pl_PL.json │ │ ├── pt_BR.json │ │ ├── ro_RO.json │ │ ├── ru_RU.json │ │ ├── tr_TR.json │ │ ├── uk_UA.json │ │ ├── zh_CN.json │ │ └── zh_TW.json │ ├── mediaproxy/ │ │ ├── media_proxy_test.go │ │ ├── rewriter.go │ │ └── url.go │ ├── metric/ │ │ └── metric.go │ ├── model/ │ │ ├── api_key.go │ │ ├── app_session.go │ │ ├── categories_sort_options.go │ │ ├── category.go │ │ ├── enclosure.go │ │ ├── enclosure_test.go │ │ ├── entry.go │ │ ├── feed.go │ │ ├── feed_test.go │ │ ├── home_page.go │ │ ├── icon.go │ │ ├── integration.go │ │ ├── job.go │ │ ├── model.go │ │ ├── subscription.go │ │ ├── theme.go │ │ ├── user.go │ │ ├── user_session.go │ │ └── webauthn.go │ ├── oauth2/ │ │ ├── authorization.go │ │ ├── google.go │ │ ├── manager.go │ │ ├── oidc.go │ │ ├── profile.go │ │ └── provider.go │ ├── proxyrotator/ │ │ ├── proxyrotator.go │ │ └── proxyrotator_test.go │ ├── reader/ │ │ ├── atom/ │ │ │ ├── atom_03.go │ │ │ ├── atom_03_adapter.go │ │ │ ├── atom_03_test.go │ │ │ ├── atom_10.go │ │ │ ├── atom_10_adapter.go │ │ │ ├── atom_10_test.go │ │ │ ├── atom_common.go │ │ │ └── parser.go │ │ ├── date/ │ │ │ ├── parser.go │ │ │ └── parser_test.go │ │ ├── dublincore/ │ │ │ └── dublincore.go │ │ ├── encoding/ │ │ │ ├── encoding.go │ │ │ ├── encoding_test.go │ │ │ └── testdata/ │ │ │ ├── invalid-prolog.xml │ │ │ ├── iso-8859-1-meta-after-1024.html │ │ │ ├── iso-8859-1.html │ │ │ ├── iso-8859-1.xml │ │ │ ├── koi8r.xml │ │ │ ├── utf8-incorrect-prolog.xml │ │ │ ├── utf8-meta-after-1024.html │ │ │ ├── utf8.html │ │ │ ├── utf8.xml │ │ │ ├── windows-1252-incorrect-prolog.xml │ │ │ └── windows-1252.xml │ │ ├── fetcher/ │ │ │ ├── encoding_wrappers.go │ │ │ ├── request_builder.go │ │ │ ├── request_builder_test.go │ │ │ ├── response_handler.go │ │ │ └── response_handler_test.go │ │ ├── filter/ │ │ │ ├── filter.go │ │ │ └── filter_test.go │ │ ├── googleplay/ │ │ │ └── googleplay.go │ │ ├── handler/ │ │ │ └── handler.go │ │ ├── icon/ │ │ │ ├── checker.go │ │ │ ├── finder.go │ │ │ └── finder_test.go │ │ ├── itunes/ │ │ │ └── itunes.go │ │ ├── json/ │ │ │ ├── adapter.go │ │ │ ├── json.go │ │ │ ├── parser.go │ │ │ └── parser_test.go │ │ ├── media/ │ │ │ ├── media.go │ │ │ └── media_test.go │ │ ├── opml/ │ │ │ ├── handler.go │ │ │ ├── opml.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ ├── serializer.go │ │ │ ├── serializer_test.go │ │ │ └── subscription.go │ │ ├── parser/ │ │ │ ├── format.go │ │ │ ├── format_test.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ └── testdata/ │ │ │ ├── encoding_ISO-8859-1.xml │ │ │ ├── encoding_WINDOWS-1251.xml │ │ │ ├── large_atom.xml │ │ │ ├── large_rss.xml │ │ │ ├── no_encoding_ISO-8859-1.xml │ │ │ ├── rdf_UTF8.xml │ │ │ ├── small_atom.xml │ │ │ └── urdu_UTF8.xml │ │ ├── processor/ │ │ │ ├── bilibili.go │ │ │ ├── nebula.go │ │ │ ├── odysee.go │ │ │ ├── processor.go │ │ │ ├── reading_time.go │ │ │ ├── utils.go │ │ │ ├── utils_test.go │ │ │ ├── youtube.go │ │ │ └── youtube_test.go │ │ ├── rdf/ │ │ │ ├── adapter.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ └── rdf.go │ │ ├── readability/ │ │ │ ├── readability.go │ │ │ └── readability_test.go │ │ ├── readingtime/ │ │ │ ├── readingtime.go │ │ │ └── readingtime_test.go │ │ ├── rewrite/ │ │ │ ├── content_rewrite.go │ │ │ ├── content_rewrite_functions.go │ │ │ ├── content_rewrite_rules.go │ │ │ ├── content_rewrite_test.go │ │ │ ├── referer_override.go │ │ │ ├── referer_override_test.go │ │ │ ├── url_rewrite.go │ │ │ └── url_rewrite_test.go │ │ ├── rss/ │ │ │ ├── adapter.go │ │ │ ├── atom.go │ │ │ ├── feedburner.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ ├── podcast.go │ │ │ └── rss.go │ │ ├── sanitizer/ │ │ │ ├── sanitizer.go │ │ │ ├── sanitizer_test.go │ │ │ ├── srcset.go │ │ │ ├── srcset_test.go │ │ │ ├── strip_tags.go │ │ │ ├── strip_tags_test.go │ │ │ ├── testdata/ │ │ │ │ ├── miniflux_github.html │ │ │ │ └── miniflux_wikipedia.html │ │ │ ├── truncate.go │ │ │ └── truncate_test.go │ │ ├── scraper/ │ │ │ ├── rules.go │ │ │ ├── scraper.go │ │ │ ├── scraper_test.go │ │ │ └── testdata/ │ │ │ ├── iframe.html │ │ │ ├── iframe.html-result │ │ │ ├── img.html │ │ │ ├── img.html-result │ │ │ ├── p.html │ │ │ └── p.html-result │ │ ├── subscription/ │ │ │ ├── finder.go │ │ │ ├── finder_test.go │ │ │ └── subscription.go │ │ ├── urlcleaner/ │ │ │ ├── urlcleaner.go │ │ │ └── urlcleaner_test.go │ │ └── xml/ │ │ ├── decoder.go │ │ ├── decoder_test.go │ │ └── testdata/ │ │ ├── iso88591.xml │ │ ├── iso88591_utf8_mismatch.xml │ │ └── koi8r.xml │ ├── storage/ │ │ ├── api_key.go │ │ ├── batch.go │ │ ├── category.go │ │ ├── certificate_cache.go │ │ ├── enclosure.go │ │ ├── entry.go │ │ ├── entry_pagination_builder.go │ │ ├── entry_query_builder.go │ │ ├── entry_test.go │ │ ├── feed.go │ │ ├── feed_query_builder.go │ │ ├── icon.go │ │ ├── integration.go │ │ ├── session.go │ │ ├── storage.go │ │ ├── user.go │ │ ├── user_session.go │ │ └── webauthn.go │ ├── systemd/ │ │ └── systemd.go │ ├── template/ │ │ ├── engine.go │ │ ├── functions.go │ │ ├── functions_test.go │ │ └── templates/ │ │ ├── common/ │ │ │ ├── feed_list.html │ │ │ ├── feed_menu.html │ │ │ ├── item_meta.html │ │ │ ├── layout.html │ │ │ ├── pagination.html │ │ │ └── settings_menu.html │ │ └── views/ │ │ ├── about.html │ │ ├── add_subscription.html │ │ ├── api_keys.html │ │ ├── categories.html │ │ ├── category_entries.html │ │ ├── category_feeds.html │ │ ├── choose_subscription.html │ │ ├── create_api_key.html │ │ ├── create_category.html │ │ ├── create_user.html │ │ ├── edit_category.html │ │ ├── edit_feed.html │ │ ├── edit_user.html │ │ ├── entry.html │ │ ├── feed_entries.html │ │ ├── feeds.html │ │ ├── history_entries.html │ │ ├── import.html │ │ ├── integrations.html │ │ ├── login.html │ │ ├── offline.html │ │ ├── search.html │ │ ├── sessions.html │ │ ├── settings.html │ │ ├── shared_entries.html │ │ ├── starred_entries.html │ │ ├── tag_entries.html │ │ ├── unread_entries.html │ │ ├── users.html │ │ └── webauthn_rename.html │ ├── timezone/ │ │ ├── timezone.go │ │ └── timezone_test.go │ ├── ui/ │ │ ├── about.go │ │ ├── api_key_create.go │ │ ├── api_key_list.go │ │ ├── api_key_remove.go │ │ ├── api_key_save.go │ │ ├── category_create.go │ │ ├── category_edit.go │ │ ├── category_entries.go │ │ ├── category_entries_all.go │ │ ├── category_entries_starred.go │ │ ├── category_feeds.go │ │ ├── category_list.go │ │ ├── category_mark_as_read.go │ │ ├── category_refresh.go │ │ ├── category_remove.go │ │ ├── category_remove_feed.go │ │ ├── category_save.go │ │ ├── category_update.go │ │ ├── entry_category.go │ │ ├── entry_enclosure_save_position.go │ │ ├── entry_feed.go │ │ ├── entry_read.go │ │ ├── entry_save.go │ │ ├── entry_scraper.go │ │ ├── entry_search.go │ │ ├── entry_starred.go │ │ ├── entry_tag.go │ │ ├── entry_toggle_starred.go │ │ ├── entry_unread.go │ │ ├── entry_update_status.go │ │ ├── feed_edit.go │ │ ├── feed_entries.go │ │ ├── feed_entries_all.go │ │ ├── feed_icon.go │ │ ├── feed_list.go │ │ ├── feed_mark_as_read.go │ │ ├── feed_refresh.go │ │ ├── feed_remove.go │ │ ├── feed_update.go │ │ ├── form/ │ │ │ ├── api_key.go │ │ │ ├── auth.go │ │ │ ├── category.go │ │ │ ├── feed.go │ │ │ ├── integration.go │ │ │ ├── settings.go │ │ │ ├── settings_test.go │ │ │ ├── subscription.go │ │ │ ├── user.go │ │ │ └── webauthn.go │ │ ├── handler.go │ │ ├── history_entries.go │ │ ├── history_flush.go │ │ ├── integration_show.go │ │ ├── integration_update.go │ │ ├── login_check.go │ │ ├── login_show.go │ │ ├── logout.go │ │ ├── middleware.go │ │ ├── oauth2.go │ │ ├── oauth2_callback.go │ │ ├── oauth2_redirect.go │ │ ├── oauth2_unlink.go │ │ ├── offline.go │ │ ├── opml_export.go │ │ ├── opml_import.go │ │ ├── opml_upload.go │ │ ├── pagination.go │ │ ├── proxy.go │ │ ├── search.go │ │ ├── session/ │ │ │ └── session.go │ │ ├── session_list.go │ │ ├── session_remove.go │ │ ├── settings_show.go │ │ ├── settings_update.go │ │ ├── share.go │ │ ├── shared_entries.go │ │ ├── starred_entries.go │ │ ├── starred_entry_category.go │ │ ├── static/ │ │ │ ├── css/ │ │ │ │ ├── common.css │ │ │ │ ├── dark.css │ │ │ │ ├── light.css │ │ │ │ ├── sans_serif.css │ │ │ │ ├── serif.css │ │ │ │ └── system.css │ │ │ ├── js/ │ │ │ │ ├── .eslintrc.json │ │ │ │ ├── .jshintrc │ │ │ │ ├── app.js │ │ │ │ ├── keyboard_handler.js │ │ │ │ ├── service_worker.js │ │ │ │ ├── touch_handler.js │ │ │ │ └── webauthn_handler.js │ │ │ └── static.go │ │ ├── static_app_icon.go │ │ ├── static_favicon.go │ │ ├── static_javascript.go │ │ ├── static_manifest.go │ │ ├── static_stylesheet.go │ │ ├── subscription_add.go │ │ ├── subscription_bookmarklet.go │ │ ├── subscription_choose.go │ │ ├── subscription_submit.go │ │ ├── tag_entries_all.go │ │ ├── ui.go │ │ ├── unread_entries.go │ │ ├── unread_entry_category.go │ │ ├── unread_entry_feed.go │ │ ├── unread_mark_all_read.go │ │ ├── user_create.go │ │ ├── user_edit.go │ │ ├── user_list.go │ │ ├── user_remove.go │ │ ├── user_save.go │ │ ├── user_update.go │ │ ├── view/ │ │ │ └── view.go │ │ └── webauthn.go │ ├── urllib/ │ │ ├── url.go │ │ └── url_test.go │ ├── validator/ │ │ ├── api_key.go │ │ ├── category.go │ │ ├── enclosure.go │ │ ├── enclosure_test.go │ │ ├── entry.go │ │ ├── entry_test.go │ │ ├── feed.go │ │ ├── filter.go │ │ ├── filter_test.go │ │ ├── subscription.go │ │ ├── subscription_test.go │ │ ├── user.go │ │ ├── user_test.go │ │ ├── validator.go │ │ └── validator_test.go │ ├── version/ │ │ ├── version.go │ │ └── version_test.go │ └── worker/ │ ├── pool.go │ └── worker.go ├── main.go ├── miniflux.1 └── packaging/ ├── debian/ │ ├── Dockerfile │ ├── build.sh │ ├── compat │ ├── control │ ├── copyright │ ├── miniflux.dirs │ ├── miniflux.manpages │ ├── miniflux.postinst │ └── rules ├── docker/ │ ├── alpine/ │ │ └── Dockerfile │ └── distroless/ │ └── Dockerfile ├── miniflux.conf ├── rpm/ │ ├── Dockerfile │ └── miniflux.spec └── systemd/ └── miniflux.service