gitextract_5801oewz/ ├── .dockerignore ├── .git-blame-ignore-revs ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── 1_bug_report.md │ │ ├── 2_enhancement_request.md │ │ ├── 3_tech_support.md │ │ └── 4_question.md │ └── workflows/ │ ├── build.yaml │ ├── docs.yaml │ ├── release.yaml │ └── test.yaml ├── .gitignore ├── .gitpod.yml ├── .goreleaser.yml ├── CODE_OF_CONDUCT.md ├── Dockerfile ├── Dockerfile-arm ├── Dockerfile-build ├── LICENSE ├── LICENSE.GPLv2 ├── Makefile ├── README.md ├── SECURITY.md ├── assets/ │ └── favicon.xcf ├── client/ │ ├── client.go │ ├── client.yml │ ├── client_test.go │ ├── config.go │ ├── config_darwin.go │ ├── config_test.go │ ├── config_unix.go │ ├── config_windows.go │ ├── ntfy-client.service │ ├── options.go │ └── user/ │ └── ntfy-client.service ├── cmd/ │ ├── access.go │ ├── access_test.go │ ├── app.go │ ├── app_test.go │ ├── config_loader.go │ ├── config_loader_test.go │ ├── publish.go │ ├── publish_test.go │ ├── publish_unix.go │ ├── publish_windows.go │ ├── serve.go │ ├── serve_test.go │ ├── serve_unix.go │ ├── serve_windows.go │ ├── subscribe.go │ ├── subscribe_darwin.go │ ├── subscribe_test.go │ ├── subscribe_unix.go │ ├── subscribe_windows.go │ ├── tier.go │ ├── tier_test.go │ ├── token.go │ ├── token_test.go │ ├── user.go │ ├── user_test.go │ ├── webpush.go │ └── webpush_test.go ├── db/ │ ├── db.go │ ├── pg/ │ │ ├── pg.go │ │ └── pg_test.go │ ├── test/ │ │ └── test.go │ ├── types.go │ └── util.go ├── docker-compose.yml ├── docs/ │ ├── _overrides/ │ │ └── main.html │ ├── config.md │ ├── contact.md │ ├── contributing.md │ ├── deprecations.md │ ├── develop.md │ ├── emojis.md │ ├── examples.md │ ├── faq.md │ ├── hooks.py │ ├── index.md │ ├── install.md │ ├── integrations.md │ ├── known-issues.md │ ├── privacy.md │ ├── publish/ │ │ └── template-functions.md │ ├── publish.md │ ├── releases.md │ ├── static/ │ │ ├── audio/ │ │ │ └── ntfy-phone-call.ogg │ │ ├── css/ │ │ │ ├── config-generator.css │ │ │ └── extra.css │ │ ├── img/ │ │ │ ├── cli-subscribe-video-2.webm │ │ │ └── cli-subscribe-video-3.webm │ │ └── js/ │ │ ├── bcrypt.js │ │ ├── config-generator.js │ │ └── extra.js │ ├── subscribe/ │ │ ├── api.md │ │ ├── cli.md │ │ ├── phone.md │ │ ├── pwa.md │ │ └── web.md │ ├── terms.md │ └── troubleshooting.md ├── examples/ │ ├── grafana-dashboard/ │ │ └── ntfy-grafana.json │ ├── linux-desktop-notifications/ │ │ └── notify-desktop.sh │ ├── publish-go/ │ │ └── main.go │ ├── publish-php/ │ │ └── publish.php │ ├── publish-python/ │ │ └── publish.py │ ├── ssh-login-alert/ │ │ ├── ntfy-ssh-login.sh │ │ └── pam_sshd │ ├── subscribe-go/ │ │ └── main.go │ ├── subscribe-php/ │ │ └── subscribe.php │ ├── subscribe-python/ │ │ └── subscribe.py │ ├── web-example-eventsource/ │ │ └── example-sse.html │ └── web-example-websocket/ │ └── example-ws.html ├── go.mod ├── go.sum ├── log/ │ ├── event.go │ ├── log.go │ ├── log_test.go │ └── types.go ├── main.go ├── message/ │ ├── cache.go │ ├── cache_postgres.go │ ├── cache_postgres_schema.go │ ├── cache_sqlite.go │ ├── cache_sqlite_schema.go │ ├── cache_sqlite_test.go │ └── cache_test.go ├── mkdocs.yml ├── model/ │ └── model.go ├── payments/ │ ├── payments.go │ └── payments_dummy.go ├── requirements.txt ├── scripts/ │ ├── emoji-convert.sh │ ├── emoji.json │ ├── postinst.sh │ ├── postrm.sh │ ├── preinst.sh │ └── prerm.sh ├── server/ │ ├── actions.go │ ├── actions_test.go │ ├── config.go │ ├── config_test.go │ ├── config_unix.go │ ├── config_windows.go │ ├── errors.go │ ├── file_cache.go │ ├── file_cache_test.go │ ├── log.go │ ├── mailer_emoji_map.json │ ├── ntfy.service │ ├── server.go │ ├── server.yml │ ├── server_account.go │ ├── server_account_test.go │ ├── server_admin.go │ ├── server_admin_test.go │ ├── server_firebase.go │ ├── server_firebase_dummy.go │ ├── server_firebase_test.go │ ├── server_manager.go │ ├── server_manager_test.go │ ├── server_matrix.go │ ├── server_matrix_test.go │ ├── server_metrics.go │ ├── server_middleware.go │ ├── server_payments.go │ ├── server_payments_dummy.go │ ├── server_payments_test.go │ ├── server_race_off_test.go │ ├── server_race_on_test.go │ ├── server_test.go │ ├── server_twilio.go │ ├── server_twilio_test.go │ ├── server_webpush.go │ ├── server_webpush_dummy.go │ ├── server_webpush_test.go │ ├── smtp_sender.go │ ├── smtp_sender_test.go │ ├── smtp_server.go │ ├── smtp_server_test.go │ ├── templates/ │ │ ├── alertmanager.yml │ │ ├── github.yml │ │ └── grafana.yml │ ├── testdata/ │ │ ├── webhook_alertmanager_firing.json │ │ ├── webhook_github_comment_created.json │ │ ├── webhook_github_issue_opened.json │ │ ├── webhook_github_pr_opened.json │ │ ├── webhook_github_star_created.json │ │ ├── webhook_github_watch_created.json │ │ └── webhook_grafana_resolved.json │ ├── topic.go │ ├── topic_test.go │ ├── types.go │ ├── util.go │ ├── util_test.go │ └── visitor.go ├── test/ │ ├── server.go │ ├── test.go │ └── util.go ├── tools/ │ ├── fbsend/ │ │ ├── README.md │ │ └── main.go │ ├── loadgen/ │ │ └── main.go │ ├── loadtest/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── pgimport/ │ │ ├── README.md │ │ └── main.go │ └── shrink-png.sh ├── user/ │ ├── manager.go │ ├── manager_postgres.go │ ├── manager_postgres_schema.go │ ├── manager_sqlite.go │ ├── manager_sqlite_schema.go │ ├── manager_test.go │ ├── types.go │ ├── types_test.go │ ├── util.go │ └── util_test.go ├── util/ │ ├── batching_queue.go │ ├── batching_queue_test.go │ ├── content_type_writer.go │ ├── content_type_writer_test.go │ ├── embedfs/ │ │ └── test.txt │ ├── embedfs.go │ ├── embedfs_test.go │ ├── gzip_handler.go │ ├── gzip_handler_test.go │ ├── limit.go │ ├── limit_test.go │ ├── lookup_cache.go │ ├── lookup_cache_test.go │ ├── peek.go │ ├── peek_test.go │ ├── sprig/ │ │ ├── LICENSE.txt │ │ ├── crypto.go │ │ ├── crypto_test.go │ │ ├── date.go │ │ ├── date_test.go │ │ ├── defaults.go │ │ ├── defaults_test.go │ │ ├── dict.go │ │ ├── dict_test.go │ │ ├── doc.go │ │ ├── example_test.go │ │ ├── flow_control.go │ │ ├── flow_control_test.go │ │ ├── functions.go │ │ ├── functions_linux_test.go │ │ ├── functions_test.go │ │ ├── list.go │ │ ├── list_test.go │ │ ├── numeric.go │ │ ├── numeric_test.go │ │ ├── reflect.go │ │ ├── reflect_test.go │ │ ├── regex.go │ │ ├── regex_test.go │ │ ├── strings.go │ │ ├── strings_test.go │ │ ├── url.go │ │ └── url_test.go │ ├── time.go │ ├── time_test.go │ ├── timeout_writer.go │ ├── util.go │ └── util_test.go ├── web/ │ ├── .eslintignore │ ├── .eslintrc │ ├── .prettierignore │ ├── index.html │ ├── package.json │ ├── public/ │ │ ├── config.js │ │ ├── static/ │ │ │ ├── css/ │ │ │ │ ├── app.css │ │ │ │ └── fonts.css │ │ │ └── langs/ │ │ │ ├── ar.json │ │ │ ├── bg.json │ │ │ ├── bn.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── cu.json │ │ │ ├── cy.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── eo.json │ │ │ ├── es.json │ │ │ ├── et.json │ │ │ ├── fa.json │ │ │ ├── fi.json │ │ │ ├── fr.json │ │ │ ├── gl.json │ │ │ ├── he.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── ko.json │ │ │ ├── mk.json │ │ │ ├── ms.json │ │ │ ├── nb_NO.json │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── pt.json │ │ │ ├── pt_BR.json │ │ │ ├── ro.json │ │ │ ├── ru.json │ │ │ ├── sk.json │ │ │ ├── sq.json │ │ │ ├── sv.json │ │ │ ├── ta.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── uz.json │ │ │ ├── vi.json │ │ │ ├── zh_Hans.json │ │ │ └── zh_Hant.json │ │ └── sw.js │ ├── src/ │ │ ├── app/ │ │ │ ├── AccountApi.js │ │ │ ├── Api.js │ │ │ ├── Connection.js │ │ │ ├── ConnectionManager.js │ │ │ ├── Notifier.js │ │ │ ├── Poller.js │ │ │ ├── Prefs.js │ │ │ ├── Pruner.js │ │ │ ├── Session.js │ │ │ ├── SubscriptionManager.js │ │ │ ├── UserManager.js │ │ │ ├── VersionChecker.js │ │ │ ├── actions.js │ │ │ ├── config.js │ │ │ ├── db.js │ │ │ ├── emojis.js │ │ │ ├── emojisMapped.js │ │ │ ├── errors.js │ │ │ ├── events.js │ │ │ ├── i18n.js │ │ │ ├── notificationUtils.js │ │ │ └── utils.js │ │ ├── components/ │ │ │ ├── Account.jsx │ │ │ ├── ActionBar.jsx │ │ │ ├── App.jsx │ │ │ ├── AttachmentIcon.jsx │ │ │ ├── AvatarBox.jsx │ │ │ ├── DialogFooter.jsx │ │ │ ├── EmojiPicker.jsx │ │ │ ├── ErrorBoundary.jsx │ │ │ ├── Login.jsx │ │ │ ├── Messaging.jsx │ │ │ ├── Navigation.jsx │ │ │ ├── Notifications.jsx │ │ │ ├── PopupMenu.jsx │ │ │ ├── Pref.jsx │ │ │ ├── Preferences.jsx │ │ │ ├── PublishDialog.jsx │ │ │ ├── RTLCacheProvider.jsx │ │ │ ├── ReserveDialogs.jsx │ │ │ ├── ReserveIcons.jsx │ │ │ ├── ReserveTopicSelect.jsx │ │ │ ├── Signup.jsx │ │ │ ├── SubscribeDialog.jsx │ │ │ ├── SubscriptionPopup.jsx │ │ │ ├── UpgradeDialog.jsx │ │ │ ├── hooks.js │ │ │ ├── routes.js │ │ │ ├── styles.js │ │ │ └── theme.js │ │ ├── index.jsx │ │ └── registerSW.js │ └── vite.config.js └── webpush/ ├── store.go ├── store_postgres.go ├── store_sqlite.go ├── store_test.go └── types.go