From bd3907259685071d2c02b531d8d8e10628ad32a9 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 27 May 2023 11:34:03 +0000 Subject: [PATCH 001/158] Translated using Weblate (Spanish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/es/ --- web/public/static/langs/es.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/es.json b/web/public/static/langs/es.json index 065a50e8..62ecdaf6 100644 --- a/web/public/static/langs/es.json +++ b/web/public/static/langs/es.json @@ -379,5 +379,7 @@ "account_basics_phone_numbers_copied_to_clipboard": "Número de teléfono copiado al portapapeles", "account_basics_phone_numbers_dialog_check_verification_button": "Confirmar código", "account_basics_phone_numbers_dialog_title": "Agregar número de teléfono", - "account_basics_phone_numbers_dialog_code_placeholder": "p.ej. 123456" + "account_basics_phone_numbers_dialog_code_placeholder": "p.ej. 123456", + "publish_dialog_call_item": "Llamar al número de teléfono {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "No hay números de teléfono verificados" } From 2e7f4747755e0b45aae3ad121e3409d3eddb768f Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 27 May 2023 09:03:34 +0000 Subject: [PATCH 002/158] Translated using Weblate (Ukrainian) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/uk/ --- web/public/static/langs/uk.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/uk.json b/web/public/static/langs/uk.json index 7d995dd2..32a30795 100644 --- a/web/public/static/langs/uk.json +++ b/web/public/static/langs/uk.json @@ -352,5 +352,34 @@ "account_upgrade_dialog_reservations_warning_other": "Обраний рівень дозволяє менше зарезервованих тем, ніж ваш поточний рівень. Перш ніж змінити свій рівень, будь ласка, видаліть принаймні {{count}} резервувань. Ви можете видалити резервування в Налаштуваннях.", "account_upgrade_dialog_button_cancel": "Скасувати", "account_upgrade_dialog_button_redirect_signup": "Зареєструватися зараз", - "account_upgrade_dialog_button_pay_now": "Оплатити зараз і підписатися" + "account_upgrade_dialog_button_pay_now": "Оплатити зараз і підписатися", + "prefs_reservations_add_button": "Додати зарезервовану тему", + "prefs_reservations_edit_button": "Редагувати доступ до теми", + "prefs_reservations_limit_reached": "Ви досягли ліміту зарезервованих тем.", + "prefs_reservations_table_click_to_subscribe": "Натисніть, щоб підписатися", + "prefs_reservations_table_topic_header": "Тема", + "prefs_reservations_description": "Тут ви можете зарезервувати назви тем для особистого користування. Резервування теми дає вам право власності на тему і дозволяє визначати права доступу до неї інших користувачів.", + "prefs_reservations_table": "Таблиця зарезервованих тем", + "prefs_reservations_table_access_header": "Доступ", + "prefs_reservations_table_everyone_deny_all": "Тільки я можу публікувати та підписуватись", + "prefs_reservations_table_everyone_read_only": "Я можу публікувати та підписуватись, кожен може підписатися", + "prefs_reservations_table_everyone_write_only": "Я можу публікувати і підписуватися, кожен може публікувати", + "prefs_reservations_table_everyone_read_write": "Кожен може публікувати та підписуватися", + "prefs_reservations_table_not_subscribed": "Не підписаний", + "prefs_reservations_dialog_title_add": "Зарезервувати тему", + "prefs_reservations_dialog_title_edit": "Редагувати зарезервовану тему", + "prefs_reservations_title": "Зарезервовані теми", + "prefs_reservations_delete_button": "Скинути доступ до теми", + "prefs_reservations_dialog_description": "Резервування теми дає вам право власності на цю тему і дозволяє визначати права доступу до неї інших користувачів.", + "prefs_reservations_dialog_topic_label": "Тема", + "prefs_reservations_dialog_access_label": "Доступ", + "reservation_delete_dialog_description": "Видалення резервування позбавляє вас права власності на тему і дозволяє іншим зарезервувати її. Ви можете зберегти або видалити існуючі повідомлення і вкладення.", + "reservation_delete_dialog_submit_button": "Видалити резервування", + "publish_dialog_call_item": "Телефонувати за номером {{номер}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Немає підтверджених номерів телефонів", + "prefs_reservations_dialog_title_delete": "Видалити резервування теми", + "reservation_delete_dialog_action_delete_title": "Видалення кешованих повідомлень і вкладень", + "reservation_delete_dialog_action_keep_title": "Збереження кешованих повідомлень і вкладень", + "reservation_delete_dialog_action_keep_description": "Повідомлення і вкладення, які кешуються на сервері, стають загальнодоступними для людей, які знають назву теми.", + "reservation_delete_dialog_action_delete_description": "Кешовані повідомлення та вкладення будуть видалені назавжди. Ця дія не може бути скасована." } From afb585e6fd47e45161bbd073d221f799882ec40a Mon Sep 17 00:00:00 2001 From: Shjosan Date: Sat, 27 May 2023 22:24:06 +0000 Subject: [PATCH 003/158] Translated using Weblate (Swedish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sv/ --- web/public/static/langs/sv.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/sv.json b/web/public/static/langs/sv.json index 31e809c5..bc4a5405 100644 --- a/web/public/static/langs/sv.json +++ b/web/public/static/langs/sv.json @@ -355,5 +355,30 @@ "reservation_delete_dialog_action_keep_title": "Behåll cachade meddelanden och bilagor", "reservation_delete_dialog_action_keep_description": "Meddelanden och bilagor som lagras på servern blir offentligt synliga för personer som känner till ämnesnamnet.", "reservation_delete_dialog_action_delete_title": "Ta bort meddelanden och bilagor som sparats i cacheminnet", - "reservation_delete_dialog_description": "Om du tar bort en reservation ger du upp äganderätten till ämnet och låter andra reservera det. Du kan behålla eller radera befintliga meddelanden och bilagor." + "reservation_delete_dialog_description": "Om du tar bort en reservation ger du upp äganderätten till ämnet och låter andra reservera det. Du kan behålla eller radera befintliga meddelanden och bilagor.", + "publish_dialog_call_label": "Telefonsamtal", + "publish_dialog_call_reset": "Ta bort telefonsamtal", + "publish_dialog_chip_call_label": "Telefonsamtal", + "account_basics_phone_numbers_title": "Telefonnummer", + "account_basics_phone_numbers_description": "För notifieringar via telefonsamtal", + "account_basics_phone_numbers_no_phone_numbers_yet": "Inga telefonnummer ännu", + "account_basics_phone_numbers_copied_to_clipboard": "Telefonnummer kopierat till urklipp", + "account_basics_phone_numbers_dialog_title": "Lägga till telefonnummer", + "account_basics_phone_numbers_dialog_number_label": "Telefonnummer", + "account_basics_phone_numbers_dialog_number_placeholder": "t.ex. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Skicka SMS", + "account_basics_phone_numbers_dialog_verify_button_call": "Ring mig", + "account_basics_phone_numbers_dialog_code_label": "Verifieringskod", + "account_basics_phone_numbers_dialog_channel_call": "Ring", + "account_usage_calls_title": "Telefonsamtal som gjorts", + "account_usage_calls_none": "Inga telefonsamtal kan göras med detta konto", + "publish_dialog_call_item": "Ring telefonnummer {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Inga verifierade telefonnummer", + "account_basics_phone_numbers_dialog_description": "För att använda funktionen för samtalsavisering måste du lägga till och verifiera minst ett telefonnummer. Verifieringen kan göras via SMS eller ett telefonsamtal.", + "account_basics_phone_numbers_dialog_code_placeholder": "t.ex. 123456", + "account_basics_phone_numbers_dialog_check_verification_button": "Bekräfta kod", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} dagliga telefonsamtal", + "account_upgrade_dialog_tier_features_no_calls": "Inga telefonsamtal", + "account_upgrade_dialog_tier_features_calls_one": "{{calls}} dagliga telefonsamtal" } From ca25b80bfbba4a012df992d1f3f350beae18a6a4 Mon Sep 17 00:00:00 2001 From: arjan-s Date: Tue, 30 May 2023 07:40:29 +0000 Subject: [PATCH 004/158] Translated using Weblate (Dutch) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/nl/ --- web/public/static/langs/nl.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/nl.json b/web/public/static/langs/nl.json index ca7a2a13..8ccb629d 100644 --- a/web/public/static/langs/nl.json +++ b/web/public/static/langs/nl.json @@ -355,5 +355,30 @@ "prefs_reservations_table_topic_header": "Onderwerp", "prefs_reservations_table_access_header": "Toegang", "prefs_reservations_table_everyone_read_write": "Iedereen kan publiceren en abonneren", - "prefs_reservations_table_not_subscribed": "Niet geabonneerd" + "prefs_reservations_table_not_subscribed": "Niet geabonneerd", + "publish_dialog_call_label": "Telefoongesprek", + "publish_dialog_call_reset": "Telefoongesprek verwijderen", + "publish_dialog_chip_call_label": "Telefoongesprek", + "account_basics_phone_numbers_title": "Telefoonnummers", + "account_basics_phone_numbers_description": "Voor meldingen via telefoongesprekken", + "account_basics_phone_numbers_no_phone_numbers_yet": "Nog geen telefoonnummers", + "account_basics_phone_numbers_dialog_verify_button_call": "Bel me", + "account_upgrade_dialog_tier_features_calls_one": "{{calls}} dagelijkse telefoontjes", + "account_basics_phone_numbers_copied_to_clipboard": "Telefoonnummer gekopieerd naar klembord", + "publish_dialog_call_item": "Bel telefoonnummer {{nummer}}", + "account_basics_phone_numbers_dialog_check_verification_button": "Bevestig code", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Geen geverifieerde telefoonnummers", + "account_basics_phone_numbers_dialog_channel_call": "Telefoongesprek", + "account_basics_phone_numbers_dialog_number_label": "Telefoonnummer", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_code_placeholder": "bijv. 123456", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} dagelijkse telefoontjes", + "account_upgrade_dialog_tier_features_no_calls": "Geen telefoontjes", + "account_basics_phone_numbers_dialog_description": "Als u de functie voor oproepmeldingen wilt gebruiken, moet u ten minste één telefoonnummer toevoegen en verifiëren. Verificatie kan worden gedaan via sms of een telefoontje.", + "account_basics_phone_numbers_dialog_title": "Telefoonnummer toevoegen", + "account_basics_phone_numbers_dialog_number_placeholder": "bijv. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Stuur SMS", + "account_basics_phone_numbers_dialog_code_label": "Verificatiecode", + "account_usage_calls_title": "Aantal telefoontjes", + "account_usage_calls_none": "Met dit account kan niet worden gebeld" } From 453bf435b0be9f8ed459e4fb43abbb87eb6d1f64 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:55:17 +0200 Subject: [PATCH 005/158] Fix account sync race condition --- web/src/components/hooks.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index b9c5536d..6b681881 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -47,6 +47,13 @@ export const useConnectionListeners = (account, subscriptions, users) => { const handleMessage = async (subscriptionId, message) => { const subscription = await subscriptionManager.get(subscriptionId); + + // Race condition: sometimes the subscription is already unsubscribed from account + // sync before the message is handled + if (!subscription) { + return; + } + if (subscription.internal) { await handleInternalMessage(message); } else { From d084a415f354c7895324b098450f27e0de857f23 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 31 May 2023 15:36:02 -0400 Subject: [PATCH 006/158] Do not forward UP messages to upstream --- docs/releases.md | 1 + server/server.go | 2 +- server/server_test.go | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 71fceb1e..6c88dd1d 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1225,6 +1225,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes:** * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) +* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) **Maintenance:** diff --git a/server/server.go b/server/server.go index ac54aa50..d2fac01f 100644 --- a/server/server.go +++ b/server/server.go @@ -760,7 +760,7 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.TwilioAccount != "" && call != "" { go s.callPhone(v, r, m, call) } - if s.config.UpstreamBaseURL != "" { + if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } } else { diff --git a/server/server_test.go b/server/server_test.go index 73df2762..d7c4a7c6 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2559,6 +2559,29 @@ func TestServer_UpstreamBaseURL_With_Access_Token_Success(t *testing.T) { }) } +func TestServer_UpstreamBaseURL_DoNotForwardUnifiedPush(t *testing.T) { + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + t.Fatal("UnifiedPush messages should not be forwarded") + })) + defer upstreamServer.Close() + + c := newTestConfigWithAuthFile(t) + c.BaseURL = "http://myserver.internal" + c.UpstreamBaseURL = upstreamServer.URL + s := newTestServer(t, c) + + // Send UP message, this should not forward to upstream server + response := request(t, s, "PUT", "/mytopic?up=1", `hi there`, nil) + require.Equal(t, 200, response.Code) + m := toMessage(t, response.Body.String()) + require.NotEmpty(t, m.ID) + require.Equal(t, "hi there", m.Message) + + // Forwarding is done asynchronously, so wait a bit. + // This ensures that the t.Fatal above is actually not triggered. + time.Sleep(500 * time.Millisecond) +} + func newTestConfig(t *testing.T) *Config { conf := NewConfig() conf.BaseURL = "http://127.0.0.1:12345" From 04cc71af90c92a42589c603c24920bea95b4db54 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 13:56:32 -0400 Subject: [PATCH 007/158] .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b0c2d330..f695607e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ dist/ +dev-dist/ build/ .idea/ .vscode/ From dc8932cd953025708111c222d1c898202fbb1276 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 14:08:51 -0400 Subject: [PATCH 008/158] Fix segault in ntfy pub --- client/client.go | 5 ++++- cmd/app.go | 1 + cmd/publish.go | 4 ++++ cmd/subscribe.go | 4 +++- docs/releases.md | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/client/client.go b/client/client.go index b744fa11..e719e9ef 100644 --- a/client/client.go +++ b/client/client.go @@ -97,7 +97,10 @@ func (c *Client) Publish(topic, message string, options ...PublishOption) (*Mess // WithNoFirebase, and the generic WithHeader. func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishOption) (*Message, error) { topicURL := c.expandTopicURL(topic) - req, _ := http.NewRequest("POST", topicURL, body) + req, err := http.NewRequest("POST", topicURL, body) + if err != nil { + return nil, err + } for _, option := range options { if err := option(req); err != nil { return nil, err diff --git a/cmd/app.go b/cmd/app.go index edef5b47..fd992633 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -29,6 +29,7 @@ var flagsDefault = []cli.Flag{ var ( logLevelOverrideRegex = regexp.MustCompile(`(?i)^([^=\s]+)(?:\s*=\s*(\S+))?\s*->\s*(TRACE|DEBUG|INFO|WARN|ERROR)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go ) // New creates a new CLI application diff --git a/cmd/publish.go b/cmd/publish.go index 0179f9fa..bce27e0f 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -249,6 +249,10 @@ func parseTopicMessageCommand(c *cli.Context) (topic string, message string, com if c.String("message") != "" { message = c.String("message") } + if !topicRegex.MatchString(topic) { + err = fmt.Errorf("topic %s contains invalid characters", topic) + return + } return } diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 2691e6a1..81f5988c 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -72,7 +72,7 @@ ntfy subscribe TOPIC COMMAND $NTFY_TITLE $title, $t Message title $NTFY_PRIORITY $priority, $prio, $p Message priority (1=min, 5=max) $NTFY_TAGS $tags, $tag, $ta Message tags (comma separated list) - $NTFY_RAW $raw Raw JSON message + $NTFY_RAW $raw Raw JSON message Examples: ntfy sub mytopic 'notify-send "$m"' # Execute command for incoming messages @@ -108,6 +108,8 @@ func execSubscribe(c *cli.Context) error { // Checks if user != "" && token != "" { return errors.New("cannot set both --user and --token") + } else if !topicRegex.MatchString(topic) { + return fmt.Errorf("topic %s contains invalid characters", topic) } if !fromConfig { diff --git a/docs/releases.md b/docs/releases.md index 6c88dd1d..0e93b677 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1226,6 +1226,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) * Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) +* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) **Maintenance:** From f58c1e4c84e80f7fa1a2bea2e1b2bfae4240c7d0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 16:01:39 -0400 Subject: [PATCH 009/158] Fix previous fix --- client/client.go | 62 ++++++++++++++++++++----------------------- client/client_test.go | 2 +- cmd/app.go | 1 - cmd/publish.go | 4 --- cmd/subscribe.go | 12 ++++++--- 5 files changed, 38 insertions(+), 43 deletions(-) diff --git a/client/client.go b/client/client.go index e719e9ef..93cf7da5 100644 --- a/client/client.go +++ b/client/client.go @@ -11,23 +11,25 @@ import ( "heckel.io/ntfy/util" "io" "net/http" + "regexp" "strings" "sync" "time" ) -// Event type constants const ( - MessageEvent = "message" - KeepaliveEvent = "keepalive" - OpenEvent = "open" - PollRequestEvent = "poll_request" + // MessageEvent identifies a message event + MessageEvent = "message" ) const ( maxResponseBytes = 4096 ) +var ( + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go +) + // Client is the ntfy client that can be used to publish and subscribe to ntfy topics type Client struct { Messages chan *Message @@ -96,7 +98,10 @@ func (c *Client) Publish(topic, message string, options ...PublishOption) (*Mess // To pass title, priority and tags, check out WithTitle, WithPriority, WithTagsList, WithDelay, WithNoCache, // WithNoFirebase, and the generic WithHeader. func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishOption) (*Message, error) { - topicURL := c.expandTopicURL(topic) + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return nil, err + } req, err := http.NewRequest("POST", topicURL, body) if err != nil { return nil, err @@ -136,11 +141,14 @@ func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishO // By default, all messages will be returned, but you can change this behavior using a SubscribeOption. // See WithSince, WithSinceAll, WithSinceUnixTime, WithScheduled, and the generic WithQueryParam. func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, error) { + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return nil, err + } ctx := context.Background() messages := make([]*Message, 0) msgChan := make(chan *Message) errChan := make(chan error) - topicURL := c.expandTopicURL(topic) log.Debug("%s Polling from topic", util.ShortTopicURL(topicURL)) options = append(options, WithPoll()) go func() { @@ -169,15 +177,18 @@ func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, err // Example: // // c := client.New(client.NewConfig()) -// subscriptionID := c.Subscribe("mytopic") +// subscriptionID, _ := c.Subscribe("mytopic") // for m := range c.Messages { // fmt.Printf("New message: %s", m.Message) // } -func (c *Client) Subscribe(topic string, options ...SubscribeOption) string { +func (c *Client) Subscribe(topic string, options ...SubscribeOption) (string, error) { + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return "", err + } c.mu.Lock() defer c.mu.Unlock() subscriptionID := util.RandomString(10) - topicURL := c.expandTopicURL(topic) log.Debug("%s Subscribing to topic", util.ShortTopicURL(topicURL)) ctx, cancel := context.WithCancel(context.Background()) c.subscriptions[subscriptionID] = &subscription{ @@ -186,7 +197,7 @@ func (c *Client) Subscribe(topic string, options ...SubscribeOption) string { cancel: cancel, } go handleSubscribeConnLoop(ctx, c.Messages, topicURL, subscriptionID, options...) - return subscriptionID + return subscriptionID, nil } // Unsubscribe unsubscribes from a topic that has been previously subscribed to using the unique @@ -202,31 +213,16 @@ func (c *Client) Unsubscribe(subscriptionID string) { sub.cancel() } -// UnsubscribeAll unsubscribes from a topic that has been previously subscribed with Subscribe. -// If there are multiple subscriptions matching the topic, all of them are unsubscribed from. -// -// A topic can be either a full URL (e.g. https://myhost.lan/mytopic), a short URL which is then prepended https:// -// (e.g. myhost.lan -> https://myhost.lan), or a short name which is expanded using the default host in the -// config (e.g. mytopic -> https://ntfy.sh/mytopic). -func (c *Client) UnsubscribeAll(topic string) { - c.mu.Lock() - defer c.mu.Unlock() - topicURL := c.expandTopicURL(topic) - for _, sub := range c.subscriptions { - if sub.topicURL == topicURL { - delete(c.subscriptions, sub.ID) - sub.cancel() - } - } -} - -func (c *Client) expandTopicURL(topic string) string { +func (c *Client) expandTopicURL(topic string) (string, error) { if strings.HasPrefix(topic, "http://") || strings.HasPrefix(topic, "https://") { - return topic + return topic, nil } else if strings.Contains(topic, "/") { - return fmt.Sprintf("https://%s", topic) + return fmt.Sprintf("https://%s", topic), nil } - return fmt.Sprintf("%s/%s", c.config.DefaultHost, topic) + if !topicRegex.MatchString(topic) { + return "", fmt.Errorf("invalid topic name: %s", topic) + } + return fmt.Sprintf("%s/%s", c.config.DefaultHost, topic), nil } func handleSubscribeConnLoop(ctx context.Context, msgChan chan *Message, topicURL, subcriptionID string, options ...SubscribeOption) { diff --git a/client/client_test.go b/client/client_test.go index a71ea5cb..f0b15a3f 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -21,7 +21,7 @@ func TestClient_Publish_Subscribe(t *testing.T) { defer test.StopServer(t, s, port) c := client.New(newTestConfig(port)) - subscriptionID := c.Subscribe("mytopic") + subscriptionID, _ := c.Subscribe("mytopic") time.Sleep(time.Second) msg, err := c.Publish("mytopic", "some message") diff --git a/cmd/app.go b/cmd/app.go index fd992633..edef5b47 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -29,7 +29,6 @@ var flagsDefault = []cli.Flag{ var ( logLevelOverrideRegex = regexp.MustCompile(`(?i)^([^=\s]+)(?:\s*=\s*(\S+))?\s*->\s*(TRACE|DEBUG|INFO|WARN|ERROR)$`) - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go ) // New creates a new CLI application diff --git a/cmd/publish.go b/cmd/publish.go index bce27e0f..0179f9fa 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -249,10 +249,6 @@ func parseTopicMessageCommand(c *cli.Context) (topic string, message string, com if c.String("message") != "" { message = c.String("message") } - if !topicRegex.MatchString(topic) { - err = fmt.Errorf("topic %s contains invalid characters", topic) - return - } return } diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 81f5988c..c85c4686 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -108,8 +108,6 @@ func execSubscribe(c *cli.Context) error { // Checks if user != "" && token != "" { return errors.New("cannot set both --user and --token") - } else if !topicRegex.MatchString(topic) { - return fmt.Errorf("topic %s contains invalid characters", topic) } if !fromConfig { @@ -196,7 +194,10 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, topicOptions = append(topicOptions, auth) } - subscriptionID := cl.Subscribe(s.Topic, topicOptions...) + subscriptionID, err := cl.Subscribe(s.Topic, topicOptions...) + if err != nil { + return err + } if s.Command != "" { cmds[subscriptionID] = s.Command } else if conf.DefaultCommand != "" { @@ -206,7 +207,10 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, } } if topic != "" { - subscriptionID := cl.Subscribe(topic, options...) + subscriptionID, err := cl.Subscribe(topic, options...) + if err != nil { + return err + } cmds[subscriptionID] = command } for m := range cl.Messages { From 2e9eff69d7a6b796d3d6c27a62da7824a1ca94b6 Mon Sep 17 00:00:00 2001 From: JULIANE LEITE Date: Sat, 3 Jun 2023 01:11:23 +0000 Subject: [PATCH 010/158] Translated using Weblate (Portuguese (Brazil)) Currently translated at 50.2% (192 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/pt_BR/ --- web/public/static/langs/pt_BR.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/pt_BR.json b/web/public/static/langs/pt_BR.json index acf5bca0..16ba3a14 100644 --- a/web/public/static/langs/pt_BR.json +++ b/web/public/static/langs/pt_BR.json @@ -188,5 +188,13 @@ "prefs_users_edit_button": "Editar usuário", "prefs_users_delete_button": "Excluir usuário", "error_boundary_unsupported_indexeddb_title": "Navegação anônima não suportada", - "error_boundary_unsupported_indexeddb_description": "O ntfy web app precisa do IndexedDB para funcionar, e seu navegador não suporta IndexedDB no modo de navegação privada.

Embora isso seja lamentável, também não faz muito sentido usar o ntfy web app no modo de navegação privada de qualquer maneira, porque tudo é armazenado no armazenamento do navegador. Você pode ler mais sobre isso nesta edição do GitHub, ou falar conosco em Discord ou Matrix." + "error_boundary_unsupported_indexeddb_description": "O ntfy web app precisa do IndexedDB para funcionar, e seu navegador não suporta IndexedDB no modo de navegação privada.

Embora isso seja lamentável, também não faz muito sentido usar o ntfy web app no modo de navegação privada de qualquer maneira, porque tudo é armazenado no armazenamento do navegador. Você pode ler mais sobre isso nesta edição do GitHub, ou falar conosco em Discord ou Matrix.", + "action_bar_reservation_add": "Reserve topic", + "action_bar_reservation_edit": "Change reservation", + "signup_disabled": "Signup is disabled", + "signup_error_username_taken": "Username {{username}} is already taken", + "signup_error_creation_limit_reached": "Account creation limit reached", + "action_bar_reservation_delete": "N", + "action_bar_account": "Account", + "action_bar_change_display_name": "Change display name" } From fe3db1375ad22e6deaec8ad057d82aea15215856 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jun 2023 02:43:04 +0000 Subject: [PATCH 011/158] Bump vite from 4.3.8 to 4.3.9 in /web Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.3.8 to 4.3.9. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v4.3.9/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- web/package-lock.json | 14 +++++++------- web/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index b5754d90..7ed3df2b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -11,7 +11,7 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", - "@mui/material": "latest", + "@mui/material": "*", "dexie": "^3.2.1", "dexie-react-hooks": "^1.1.1", "humanize-duration": "^3.27.3", @@ -19,8 +19,8 @@ "i18next-browser-languagedetector": "^6.1.4", "i18next-http-backend": "^1.4.0", "js-base64": "^3.7.2", - "react": "latest", - "react-dom": "latest", + "react": "*", + "react-dom": "*", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", @@ -37,7 +37,7 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.8" + "vite": "^4.3.9" } }, "node_modules/@ampproject/remapping": { @@ -4518,9 +4518,9 @@ } }, "node_modules/vite": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", - "integrity": "sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "dependencies": { "esbuild": "^0.17.5", diff --git a/web/package.json b/web/package.json index c00e8c6a..274e4c8e 100644 --- a/web/package.json +++ b/web/package.json @@ -40,7 +40,7 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.8" + "vite": "^4.3.9" }, "browserslist": { "production": [ From 2b2753be21ae704df4731bf0f71b6b5149cbc784 Mon Sep 17 00:00:00 2001 From: Shoshin Akamine Date: Mon, 5 Jun 2023 07:13:31 +0000 Subject: [PATCH 012/158] Translated using Weblate (Japanese) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ja/ --- web/public/static/langs/ja.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ja.json b/web/public/static/langs/ja.json index 9c686793..554cd9d3 100644 --- a/web/public/static/langs/ja.json +++ b/web/public/static/langs/ja.json @@ -356,5 +356,29 @@ "account_upgrade_dialog_tier_features_messages_one": "毎日 {{messages}} メッセージ", "account_upgrade_dialog_tier_features_reservations_one": "予約済みトピック {{reservations}} 件", "account_upgrade_dialog_tier_features_emails_one": "毎日メール {{emails}} 件", - "publish_dialog_call_label": "電話" + "publish_dialog_call_label": "電話", + "publish_dialog_call_item": "電話番号 {{number}}", + "account_basics_phone_numbers_title": "電話番号", + "account_usage_calls_none": "このアカウントからは電話を発信できません", + "account_usage_calls_title": "電話を発信しました", + "account_upgrade_dialog_tier_features_calls_one": "電話 1日 {{calls}} 回", + "account_upgrade_dialog_tier_features_no_calls": "電話なし", + "publish_dialog_call_reset": "電話番号を削除", + "publish_dialog_chip_call_label": "電話番号", + "account_basics_phone_numbers_dialog_description": "電話通知機能を使うには、最低ひとつの電話番号を追加して認証する必要があります。認証はSMSまたは電話で実施できます。", + "account_basics_phone_numbers_description": "電話通知", + "account_basics_phone_numbers_dialog_title": "電話番号を追加", + "account_basics_phone_numbers_no_phone_numbers_yet": "電話番号はまだありません", + "account_basics_phone_numbers_copied_to_clipboard": "電話番号がクリップボードにコピーされました", + "account_basics_phone_numbers_dialog_number_label": "電話番号", + "account_basics_phone_numbers_dialog_number_placeholder": "例 +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "SMSを送信", + "account_basics_phone_numbers_dialog_verify_button_call": "自分に電話する", + "account_basics_phone_numbers_dialog_code_label": "確認コード", + "account_basics_phone_numbers_dialog_code_placeholder": "例 123456", + "account_basics_phone_numbers_dialog_check_verification_button": "確認コード", + "account_upgrade_dialog_tier_features_calls_other": "電話 1日 {{calls}} 回", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "認証済み電話番号がありません", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_channel_call": "電話する" } From c045f4d21f81bf16addab57ff57024117065089c Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:22:12 -0400 Subject: [PATCH 013/158] Integrations --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index d1a4d42c..e6113ed7 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -124,6 +124,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [#OpenSourceDiscovery 78: ntfy.sh](https://opensourcedisc.substack.com/p/opensourcediscovery-78-ntfysh) - opensourcedisc.substack.com - 6/2023 - [ntfy: des notifications instantanées](https://blogmotion.fr/diy/ntfy-notification-push-domotique-20708) - blogmotion.fr - 5/2023 - [桌面通知:ntfy](https://www.cnblogs.com/xueweihan/archive/2023/05/04/17370060.html) - cnblogs.com - 5/2023 - [ntfy.sh - Open source push notifications via PUT/POST](https://lobste.rs/s/5drapz/ntfy_sh_open_source_push_notifications) - lobste.rs - 5/2023 From 78e437057c7cd33ae09669a4d3a46a161c76450b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:24:15 -0400 Subject: [PATCH 014/158] Update deps --- go.mod | 32 ++--- go.sum | 64 +++++----- web/package-lock.json | 264 +++++++++++++++++++++--------------------- 3 files changed, 185 insertions(+), 175 deletions(-) diff --git a/go.mod b/go.mod index 162fd943..19af7ba5 100644 --- a/go.mod +++ b/go.mod @@ -3,23 +3,23 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.9.0 // indirect + cloud.google.com/go/firestore v1.10.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.16.0 github.com/gabriel-vasile/mimetype v1.4.2 github.com/gorilla/websocket v1.5.0 - github.com/mattn/go-sqlite3 v1.14.16 - github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8 + github.com/mattn/go-sqlite3 v1.14.17 + github.com/olebedev/when v1.0.0 github.com/stretchr/testify v1.8.1 - github.com/urfave/cli/v2 v2.25.3 + github.com/urfave/cli/v2 v2.25.5 golang.org/x/crypto v0.9.0 golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.2.0 golang.org/x/term v0.8.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.122.0 + google.golang.org/api v0.125.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -28,15 +28,15 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.11.0 github.com/prometheus/client_golang v1.15.1 - github.com/stripe/stripe-go/v74 v74.18.0 + github.com/stripe/stripe-go/v74 v74.21.0 ) require ( cloud.google.com/go v0.110.2 // indirect - cloud.google.com/go/compute v1.19.3 // indirect + cloud.google.com/go/compute v1.20.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.0.1 // indirect - cloud.google.com/go/longrunning v0.4.2 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/longrunning v0.5.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -47,16 +47,16 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.10.0 // indirect github.com/kr/text v0.2.0 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.43.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect @@ -67,7 +67,9 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.3 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/grpc v1.55.0 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index bfaf339d..999fc8ac 100644 --- a/go.sum +++ b/go.sum @@ -2,16 +2,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go/compute v1.19.3 h1:DcTwsFgGev/wV5+q8o2fzgcHOaac+DKGC91ZlvpsQds= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.0 h1:cUOcywWuowO9It2i1KX1lIb0HH7gLv6nENKuZGnlcSo= +cloud.google.com/go/compute v1.20.0/go.mod h1:kn5BhC++qUWR/AM3Dn21myV7QbgqejW04cAOrtppaQI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= -cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= -cloud.google.com/go/longrunning v0.4.2 h1:WDKiiNXFTaQ6qz/G8FCOkuY9kJmOJGY67wPUC1M2RbE= -cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/firestore v1.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= +cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/longrunning v0.5.0 h1:DK8BH0+hS+DIvc9a2TPnteUievsTCH4ORMAASSb7JcQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= @@ -19,8 +19,8 @@ firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI4 github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.1 h1:rHnDkSK+/g6DlREUK73PkmIs60pqrnuduK+JmP++JmU= +github.com/BurntSushi/toml v1.3.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -91,27 +91,27 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0 h1:ebSgKfMxynOdxw8QQuFOKMgomqeLGPqNLQox2bo42zg= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8 h1:0uFGkScHef2Xd8g74BMHU1jFcnKEm0PzrPn4CluQ9FI= -github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E= +github.com/olebedev/when v1.0.0 h1:T2DZCj8HxUhOVxcqaLOmzuTr+iZLtMHsZEim7mjIA2w= +github.com/olebedev/when v1.0.0/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -121,10 +121,10 @@ github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.43.0 h1:iq+BVjvYLei5f27wiuNiB1DN6DYQkp1c8Bx0Vykh5us= -github.com/prometheus/common v0.43.0/go.mod h1:NCvr5cQIh3Y/gy73/RdVtC9r8xxrxwJnB+2lB3BxrFc= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -139,10 +139,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.18.0 h1:ImSIoaVkTUozHxa21AhwHYBjwc8fVSJJJB1Q7oaXzIw= -github.com/stripe/stripe-go/v74 v74.18.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= -github.com/urfave/cli/v2 v2.25.3 h1:VJkt6wvEBOoSjPFQvOkv6iWIrsJyCrKGtCtxXWwmGeY= -github.com/urfave/cli/v2 v2.25.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/stripe/stripe-go/v74 v74.21.0 h1:du6P28r6t7TceuNINYgOoSJW60scbhR5ol2WmBD2a6Q= +github.com/stripe/stripe-go/v74 v74.21.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/urfave/cli/v2 v2.25.5 h1:d0NIAyhh5shGscroL7ek/Ya9QYQE0KNabJgiUinIQkc= +github.com/urfave/cli/v2 v2.25.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -225,8 +225,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.125.0 h1:7xGvEY4fyWbhWMHf3R2/4w7L4fXyfpRGE9g6lp8+DCk= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -237,8 +237,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/web/package-lock.json b/web/package-lock.json index b5754d90..6bcfffe6 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -65,30 +65,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", - "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", + "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", + "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/generator": "^7.22.0", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -104,12 +104,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", - "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", + "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -119,12 +119,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", + "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", + "@babel/compat-data": "^7.22.0", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", @@ -138,9 +138,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", + "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -183,19 +183,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", + "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-environment-visitor": "^7.22.1", "@babel/helper-module-imports": "^7.21.4", "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" }, "engines": { "node": ">=6.9.0" @@ -260,14 +260,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", + "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.3" }, "engines": { "node": ">=6.9.0" @@ -287,9 +287,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", - "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", + "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -329,9 +329,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", + "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -354,19 +354,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", + "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", + "@babel/generator": "^7.22.3", + "@babel/helper-environment-visitor": "^7.22.1", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/parser": "^7.22.4", + "@babel/types": "^7.22.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -375,9 +375,9 @@ } }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", + "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", "dependencies": { "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", @@ -436,9 +436,9 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz", - "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==", + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -935,18 +935,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1031,15 +1031,15 @@ "dev": true }, "node_modules/@mui/base": { - "version": "5.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.2.tgz", - "integrity": "sha512-R9R+aqrl1QhZJaO05rhvooqxOaf7SKpQ+EjW80sbP3ticTVmLmrn4YBLQS7/ML+WXdrkrPtqSmKFdSE5Ik3gBQ==", + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", "dependencies": { "@babel/runtime": "^7.21.0", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.7", + "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" @@ -1063,9 +1063,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.2.tgz", - "integrity": "sha512-aOLCXMCySMFL2WmUhnz+DjF84AoFVu8rn35OsL759HXOZMz8zhEwVf5w/xxkWx7DycM2KXDTgAvYW48nTfqTLA==", + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" @@ -1097,13 +1097,13 @@ } }, "node_modules/@mui/material": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.2.tgz", - "integrity": "sha512-Pfke1l0GG2OJb/Nr10aVr8huoBFcBTdWKV5iFSTEHqf9c2C1ZlyYMISn7ui6X3Gix8vr+hP5kVqH1LAWwQSb6w==", + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.4.tgz", + "integrity": "sha512-Yq+4f1KLPa/Szd3xqra2hbOAf2Usl8GbubncArM6LIp40mBLtXIdPE29MNtHsbtuzz4g+eidrETgoi3wdbEYfQ==", "dependencies": { "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.2", - "@mui/core-downloads-tracker": "^5.13.2", + "@mui/base": "5.0.0-beta.4", + "@mui/core-downloads-tracker": "^5.13.4", "@mui/system": "^5.13.2", "@mui/types": "^7.2.4", "@mui/utils": "^5.13.1", @@ -1307,18 +1307,18 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", "engines": { "node": ">=14" } @@ -1340,9 +1340,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.8.tgz", + "integrity": "sha512-lTyWUNrd8ntVkqycEEplasWy2OxNlShj3zqS0LuB1ENUGis5HodmhM7DtCoUGbxj3VW/WsGA0DUhpG6XrM7gPA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1560,9 +1560,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.1.tgz", - "integrity": "sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true, "engines": { "node": ">=4" @@ -1608,9 +1608,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", "dev": true, "funding": [ { @@ -1620,13 +1620,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -1657,9 +1661,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001489", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", - "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", + "version": "1.0.30001495", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz", + "integrity": "sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg==", "dev": true, "funding": [ { @@ -1852,20 +1856,20 @@ } }, "node_modules/dexie": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.3.tgz", - "integrity": "sha512-iHayBd4UYryDCVUNa3PMsJMEnd8yjyh5p7a+RFeC8i8n476BC9wMhVvqiImq5zJZJf5Tuer+s4SSj+AA3x+ZbQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.4.tgz", + "integrity": "sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==", "engines": { "node": ">=6.0" } }, "node_modules/dexie-react-hooks": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.3.tgz", - "integrity": "sha512-bXXE1gfYtfuVYTNiOlyam+YVaO8KaqacgRuxFuP37YtpS6o/jxT6KOl5h+hhqY36s0UavlHWbL+HWJFMcQumIg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.6.tgz", + "integrity": "sha512-xSblWtmPwhafWNWMECsW7zMMmBu8goH3QqTxEfwBNoNG1mgsM0oFclippev7ss9HhKICqBwTjgqpscci5Ed4mA==", "peerDependencies": { "@types/react": ">=16", - "dexie": ">=3.1.0-alpha.1 <5.0.0", + "dexie": "^3.2 || ^4.0.1-alpha", "react": ">=16" } }, @@ -1891,9 +1895,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.407", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz", - "integrity": "sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==", + "version": "1.4.423", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.423.tgz", + "integrity": "sha512-y4A7YfQcDGPAeSWM1IuoWzXpg9RY1nwHzHSwRtCSQFp9FgAVDgdWlFf0RbdWfLWQ2WUI+bddUgk5RgTjqRE6FQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2084,16 +2088,16 @@ } }, "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -3796,9 +3800,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "funding": [ { @@ -3961,11 +3965,11 @@ } }, "node_modules/react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.12.0.tgz", + "integrity": "sha512-/tCGtLq9umxRvbYeIx3j94CmpQfue0E3qnetVm9luKhu58cR4t+3O4ZrQXBdXfJrBATOAj+wF/1ihJJQI8AoTw==", "dependencies": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.6.3" }, "engines": { "node": ">=14" @@ -3975,12 +3979,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.12.0.tgz", + "integrity": "sha512-UzLwZ3ZVaDr6YV0HdjwxuwtDKgwpJx9o1ea9fU0HV4tTvzdB8WPHzlLFMo5orchpIS84e8G4Erlhu7Rl84XDFQ==", "dependencies": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.6.3", + "react-router": "6.12.0" }, "engines": { "node": ">=14" @@ -4077,9 +4081,9 @@ } }, "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.24.0.tgz", + "integrity": "sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -4518,9 +4522,9 @@ } }, "node_modules/vite": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", - "integrity": "sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "dependencies": { "esbuild": "^0.17.5", From 733ef4664b18f2b8b9085d19df86e1c647fa4565 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:24:41 -0400 Subject: [PATCH 015/158] Deps --- web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 8ee27156..a8637edb 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -11,7 +11,7 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", - "@mui/material": "*", + "@mui/material": "latest", "dexie": "^3.2.1", "dexie-react-hooks": "^1.1.1", "humanize-duration": "^3.27.3", @@ -19,8 +19,8 @@ "i18next-browser-languagedetector": "^6.1.4", "i18next-http-backend": "^1.4.0", "js-base64": "^3.7.2", - "react": "*", - "react-dom": "*", + "react": "latest", + "react-dom": "latest", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", From ff5c854192dafd99d57204ce690d6fbe3828ceb6 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 21:36:01 +0200 Subject: [PATCH 016/158] Add PWA, service worker and Web Push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use new notification request/opt-in flow for push - Implement unsubscribing - Implement muting - Implement emojis in title - Add iOS specific PWA warning - Don’t use websockets when web push is enabled - Fix duplicate notifications - Implement default web push setting - Implement changing subscription type - Implement web push subscription refresh - Implement web push notification click --- .gitignore | 1 + cmd/serve.go | 17 + cmd/web_push.go | 39 + docs/config.md | 31 +- docs/develop.md | 63 +- go.mod | 2 + go.sum | 5 + server/config.go | 11 +- server/errors.go | 1 + server/server.go | 290 +- server/server.yml | 10 + server/server_account.go | 7 + server/server_middleware.go | 9 + server/server_test.go | 13 + server/smtp_sender.go | 24 - server/types.go | 24 + server/util.go | 24 + server/web_push.go | 132 + web/.eslintrc | 3 +- web/index.html | 7 + web/package-lock.json | 2652 ++++++++++++++++- web/package.json | 3 +- web/public/config.js | 2 +- web/public/static/images/apple-touch-icon.png | Bin 0 -> 15584 bytes web/public/static/images/mask-icon.svg | 20 + web/public/static/images/pwa-192x192.png | Bin 0 -> 6614 bytes web/public/static/images/pwa-512x512.png | Bin 0 -> 19716 bytes web/public/static/langs/en.json | 18 +- web/public/sw.js | 111 + web/src/app/AccountApi.js | 4 + web/src/app/Api.js | 59 + web/src/app/ConnectionManager.js | 17 +- web/src/app/Notifier.js | 104 +- web/src/app/Poller.js | 9 +- web/src/app/Prefs.js | 30 +- web/src/app/Pruner.js | 4 + web/src/app/Session.js | 12 +- web/src/app/SessionReplica.js | 44 + web/src/app/SubscriptionManager.js | 198 +- web/src/app/UserManager.js | 17 +- web/src/app/WebPushWorker.js | 46 + web/src/app/db.js | 21 - web/src/app/getDb.js | 34 + web/src/app/utils.js | 18 +- web/src/components/Account.jsx | 7 +- web/src/components/ActionBar.jsx | 6 +- web/src/components/App.jsx | 4 + web/src/components/Navigation.jsx | 44 +- web/src/components/Preferences.jsx | 32 + web/src/components/SubscribeDialog.jsx | 121 +- web/src/components/SubscriptionPopup.jsx | 168 +- web/src/components/hooks.js | 33 +- web/vite.config.js | 61 +- 53 files changed, 4363 insertions(+), 249 deletions(-) create mode 100644 cmd/web_push.go create mode 100644 server/web_push.go create mode 100644 web/public/static/images/apple-touch-icon.png create mode 100644 web/public/static/images/mask-icon.svg create mode 100644 web/public/static/images/pwa-192x192.png create mode 100644 web/public/static/images/pwa-512x512.png create mode 100644 web/public/sw.js create mode 100644 web/src/app/SessionReplica.js create mode 100644 web/src/app/WebPushWorker.js delete mode 100644 web/src/app/db.js create mode 100644 web/src/app/getDb.js diff --git a/.gitignore b/.gitignore index f695607e..b60c9b23 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ secrets/ node_modules/ .DS_Store __pycache__ +web/dev-dist/ \ No newline at end of file diff --git a/cmd/serve.go b/cmd/serve.go index 5d5381bf..a5105bcd 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -94,6 +94,11 @@ var flagsServe = append( altsrc.NewBoolFlag(&cli.BoolFlag{Name: "enable-metrics", Aliases: []string{"enable_metrics"}, EnvVars: []string{"NTFY_ENABLE_METRICS"}, Value: false, Usage: "if set, Prometheus metrics are exposed via the /metrics endpoint"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "metrics-listen-http", Aliases: []string{"metrics_listen_http"}, EnvVars: []string{"NTFY_METRICS_LISTEN_HTTP"}, Usage: "ip:port used to expose the metrics endpoint (implicitly enables metrics)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "profile-listen-http", Aliases: []string{"profile_listen_http"}, EnvVars: []string{"NTFY_PROFILE_LISTEN_HTTP"}, Usage: "ip:port used to expose the profiling endpoints (implicitly enables profiling)"}), + altsrc.NewBoolFlag(&cli.BoolFlag{Name: "web-push-enabled", Aliases: []string{"web_push_enabled"}, EnvVars: []string{"NTFY_WEB_PUSH_ENABLED"}, Usage: "enable web push (requires public and private key)"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-public-key", Aliases: []string{"web_push_public_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PUBLIC_KEY"}, Usage: "public key used for web push notifications"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), ) var cmdServe = &cli.Command{ @@ -129,6 +134,11 @@ func execServe(c *cli.Context) error { keyFile := c.String("key-file") certFile := c.String("cert-file") firebaseKeyFile := c.String("firebase-key-file") + webPushEnabled := c.Bool("web-push-enabled") + webPushPrivateKey := c.String("web-push-private-key") + webPushPublicKey := c.String("web-push-public-key") + webPushSubscriptionsFile := c.String("web-push-subscriptions-file") + webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") cacheStartupQueries := c.String("cache-startup-queries") @@ -183,6 +193,8 @@ func execServe(c *cli.Context) error { // Check values if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") + } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { + return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") } else if managerInterval < 5*time.Second { @@ -347,6 +359,11 @@ func execServe(c *cli.Context) error { conf.MetricsListenHTTP = metricsListenHTTP conf.ProfileListenHTTP = profileListenHTTP conf.Version = c.App.Version + conf.WebPushEnabled = webPushEnabled + conf.WebPushPrivateKey = webPushPrivateKey + conf.WebPushPublicKey = webPushPublicKey + conf.WebPushSubscriptionsFile = webPushSubscriptionsFile + conf.WebPushEmailAddress = webPushEmailAddress // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/cmd/web_push.go b/cmd/web_push.go new file mode 100644 index 00000000..becaffd7 --- /dev/null +++ b/cmd/web_push.go @@ -0,0 +1,39 @@ +//go:build !noserver + +package cmd + +import ( + "fmt" + + "github.com/SherClockHolmes/webpush-go" + "github.com/urfave/cli/v2" +) + +func init() { + commands = append(commands, cmdWebPush) +} + +var cmdWebPush = &cli.Command{ + Name: "web-push-keys", + Usage: "Generate web push VAPID keys", + UsageText: "ntfy web-push-keys", + Category: categoryServer, + Action: generateWebPushKeys, +} + +func generateWebPushKeys(c *cli.Context) error { + privateKey, publicKey, err := webpush.GenerateVAPIDKeys() + if err != nil { + return err + } + + fmt.Fprintf(c.App.ErrWriter, `Add the following lines to your config file: +web-push-enabled: true +web-push-public-key: %s +web-push-private-key: %s +web-push-subscriptions-file: +web-push-email-address: +`, publicKey, privateKey) + + return nil +} diff --git a/docs/config.md b/docs/config.md index df1f2cd6..774f9b2f 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1285,13 +1285,17 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-secret-key` | `NTFY_STRIPE_SECRET_KEY` | *string* | - | Payments: Key used for the Stripe API communication, this enables payments | | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | +| `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push-keys` to generate | +| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | +| `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. ## Command line options ``` -$ ntfy serve --help NAME: ntfy serve - Run the ntfy server @@ -1321,8 +1325,8 @@ OPTIONS: --log-file value, --log_file value set log file, default is STDOUT [$NTFY_LOG_FILE] --config value, -c value config file (default: /etc/ntfy/server.yml) [$NTFY_CONFIG_FILE] --base-url value, --base_url value, -B value externally visible base URL for this host (e.g. https://ntfy.sh) [$NTFY_BASE_URL] - --listen-http value, --listen_http value, -l value ip:port used to as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] - --listen-https value, --listen_https value, -L value ip:port used to as HTTPS listen address [$NTFY_LISTEN_HTTPS] + --listen-http value, --listen_http value, -l value ip:port used as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] + --listen-https value, --listen_https value, -L value ip:port used as HTTPS listen address [$NTFY_LISTEN_HTTPS] --listen-unix value, --listen_unix value, -U value listen on unix socket path [$NTFY_LISTEN_UNIX] --listen-unix-mode value, --listen_unix_mode value file permissions of unix socket, e.g. 0700 (default: system default) [$NTFY_LISTEN_UNIX_MODE] --key-file value, --key_file value, -K value private key file, if listen-https is set [$NTFY_KEY_FILE] @@ -1343,11 +1347,12 @@ OPTIONS: --keepalive-interval value, --keepalive_interval value, -k value interval of keepalive messages (default: 45s) [$NTFY_KEEPALIVE_INTERVAL] --manager-interval value, --manager_interval value, -m value interval of for message pruning and stats printing (default: 1m0s) [$NTFY_MANAGER_INTERVAL] --disallowed-topics value, --disallowed_topics value [ --disallowed-topics value, --disallowed_topics value ] topics that are not allowed to be used [$NTFY_DISALLOWED_TOPICS] - --web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT] + --web-root value, --web_root value sets root of the web app (e.g. /, or /app), or disables it (disable) (default: "/") [$NTFY_WEB_ROOT] --enable-signup, --enable_signup allows users to sign up via the web app, or API (default: false) [$NTFY_ENABLE_SIGNUP] --enable-login, --enable_login allows users to log in via the web app, or API (default: false) [$NTFY_ENABLE_LOGIN] --enable-reservations, --enable_reservations allows users to reserve topics (if their tier allows it) (default: false) [$NTFY_ENABLE_RESERVATIONS] --upstream-base-url value, --upstream_base_url value forward poll request to an upstream server, this is needed for iOS push notifications for self-hosted servers [$NTFY_UPSTREAM_BASE_URL] + --upstream-access-token value, --upstream_access_token value access token to use for the upstream server; needed only if upstream rate limits are exceeded or upstream server requires auth [$NTFY_UPSTREAM_ACCESS_TOKEN] --smtp-sender-addr value, --smtp_sender_addr value SMTP server address (host:port) for outgoing emails [$NTFY_SMTP_SENDER_ADDR] --smtp-sender-user value, --smtp_sender_user value SMTP user (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_USER] --smtp-sender-pass value, --smtp_sender_pass value SMTP password (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_PASS] @@ -1355,6 +1360,10 @@ OPTIONS: --smtp-server-listen value, --smtp_server_listen value SMTP server address (ip:port) for incoming emails, e.g. :25 [$NTFY_SMTP_SERVER_LISTEN] --smtp-server-domain value, --smtp_server_domain value SMTP domain for incoming e-mail, e.g. ntfy.sh [$NTFY_SMTP_SERVER_DOMAIN] --smtp-server-addr-prefix value, --smtp_server_addr_prefix value SMTP email address prefix for topics to prevent spam (e.g. 'ntfy-') [$NTFY_SMTP_SERVER_ADDR_PREFIX] + --twilio-account value, --twilio_account value Twilio account SID, used for phone calls, e.g. AC123... [$NTFY_TWILIO_ACCOUNT] + --twilio-auth-token value, --twilio_auth_token value Twilio auth token [$NTFY_TWILIO_AUTH_TOKEN] + --twilio-phone-number value, --twilio_phone_number value Twilio number to use for outgoing calls [$NTFY_TWILIO_PHONE_NUMBER] + --twilio-verify-service value, --twilio_verify_service value Twilio Verify service ID, used for phone number verification [$NTFY_TWILIO_VERIFY_SERVICE] --global-topic-limit value, --global_topic_limit value, -T value total number of topics allowed (default: 15000) [$NTFY_GLOBAL_TOPIC_LIMIT] --visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT] --visitor-attachment-total-size-limit value, --visitor_attachment_total_size_limit value total storage limit used for attachments per visitor (default: "100M") [$NTFY_VISITOR_ATTACHMENT_TOTAL_SIZE_LIMIT] @@ -1365,10 +1374,18 @@ OPTIONS: --visitor-message-daily-limit value, --visitor_message_daily_limit value max messages per visitor per day, derived from request limit if unset (default: 0) [$NTFY_VISITOR_MESSAGE_DAILY_LIMIT] --visitor-email-limit-burst value, --visitor_email_limit_burst value initial limit of e-mails per visitor (default: 16) [$NTFY_VISITOR_EMAIL_LIMIT_BURST] --visitor-email-limit-replenish value, --visitor_email_limit_replenish value interval at which burst limit is replenished (one per x) (default: 1h0m0s) [$NTFY_VISITOR_EMAIL_LIMIT_REPLENISH] + --visitor-subscriber-rate-limiting, --visitor_subscriber_rate_limiting enables subscriber-based rate limiting (default: false) [$NTFY_VISITOR_SUBSCRIBER_RATE_LIMITING] --behind-proxy, --behind_proxy, -P if set, use X-Forwarded-For header to determine visitor IP address (for rate limiting) (default: false) [$NTFY_BEHIND_PROXY] --stripe-secret-key value, --stripe_secret_key value key used for the Stripe API communication, this enables payments [$NTFY_STRIPE_SECRET_KEY] --stripe-webhook-key value, --stripe_webhook_key value key required to validate the authenticity of incoming webhooks from Stripe [$NTFY_STRIPE_WEBHOOK_KEY] - --billing-contact value, --billing_contact value e-mail or website to display in upgrade dialog (only if payments are enabled) [$NTFY_BILLING_CONTACT] - --help, -h show help (default: false) + --billing-contact value, --billing_contact value e-mail or website to display in upgrade dialog (only if payments are enabled) [$NTFY_BILLING_CONTACT] + --enable-metrics, --enable_metrics if set, Prometheus metrics are exposed via the /metrics endpoint (default: false) [$NTFY_ENABLE_METRICS] + --metrics-listen-http value, --metrics_listen_http value ip:port used to expose the metrics endpoint (implicitly enables metrics) [$NTFY_METRICS_LISTEN_HTTP] + --profile-listen-http value, --profile_listen_http value ip:port used to expose the profiling endpoints (implicitly enables profiling) [$NTFY_PROFILE_LISTEN_HTTP] + --web-push-enabled, --web_push_enabled enable web push (requires public and private key) (default: false) [$NTFY_WEB_PUSH_ENABLED] + --web-push-public-key value, --web_push_public_key value public key used for web push notifications [$NTFY_WEB_PUSH_PUBLIC_KEY] + --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] + --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] + --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] + --help, -h show help ``` - diff --git a/docs/develop.md b/docs/develop.md index baab3f3a..6be65abd 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -16,7 +16,7 @@ server consists of three components: * **The documentation** is generated by [MkDocs](https://www.mkdocs.org/) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/), which is written in [Python](https://www.python.org/). You'll need Python and MkDocs (via `pip`) only if you want to build the docs. -* **The web app** is written in [React](https://reactjs.org/), using [MUI](https://mui.com/). It uses [Create React App](https://create-react-app.dev/) +* **The web app** is written in [React](https://reactjs.org/), using [MUI](https://mui.com/). It uses [Vite](https://vitejs.dev/) to build the production build. If you want to modify the web app, you need [nodejs](https://nodejs.org/en/) (for `npm`) and install all the 100,000 dependencies (*sigh*). @@ -241,6 +241,67 @@ $ cd web $ npm start ``` +### Testing Web Push locally + +Reference: + +#### With the dev servers + +1. Get web push keys `go run main.go web-push-keys` + +2. Run the server with web push enabled + + ```sh + go run main.go \ + --log-level debug \ + serve \ + --web-push-enabled \ + --web-push-public-key KEY \ + --web-push-private-key KEY \ + --web-push-subscriptions-file=/tmp/subscriptions.db + ``` + +3. In `web/public/config.js` set `base_url` to `http://localhost`. This is required as web push can only be used + with the server matching the `base_url` + +4. Run `ENABLE_DEV_PWA=1 npm run start` - this enables the dev service worker + +5. Set your browser to allow testing service workers insecurely: + + - Chrome: + + Open Chrome with special flags allowing insecure localhost service worker testing (regularly dismissing SSL warnings is not enough) + + ```sh + # for example, macOS + /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ + --user-data-dir=/tmp/foo \ + --unsafely-treat-insecure-origin-as-secure=http://localhost:3000,http://localhost + ``` + + - Firefox: + + See here: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API + + > Note: On Firefox, for testing you can run service workers over HTTP (insecurely); simply check the Enable Service Workers over HTTP (when toolbox is open) option in the Firefox Devtools options/gear menu + + - Safari, iOS: + + There doesn't seem to be a good way to do this currently. The only way is to serve a valid HTTPS certificate. + + This is beyond the scope of this guide, but you can try `mkcert`, a number of reverse proxies such as Traefik and Caddy, + or tunneling software such as [Cloudflare Tunnels][cloudflare_tunnels] or ngrok. + +[cloudflare_tunnels]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/do-more-with-tunnels/trycloudflare/ + +6. Open +#### With a built package + +1. Run `make web-build` + +2. Follow steps 1, 2, 4 and 5 from "With the dev servers" + +3. Open ### Build the docs The sources for the docs live in `docs/`. Similarly to the web app, you can simply run `make docs` to build the documentation. As long as you have `mkdocs` installed (see above), this should work fine: diff --git a/go.mod b/go.mod index 19af7ba5..dda58c9b 100644 --- a/go.mod +++ b/go.mod @@ -39,10 +39,12 @@ require ( cloud.google.com/go/longrunning v0.5.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect + github.com/SherClockHolmes/webpush-go v1.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect diff --git a/go.sum b/go.sum index 999fc8ac..d8e78b86 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ github.com/BurntSushi/toml v1.3.1 h1:rHnDkSK+/g6DlREUK73PkmIs60pqrnuduK+JmP++JmU github.com/BurntSushi/toml v1.3.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= +github.com/SherClockHolmes/webpush-go v1.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA= +github.com/SherClockHolmes/webpush-go v1.2.0/go.mod h1:w6X47YApe/B9wUz2Wh8xukxlyupaxSSEbu6yKJcHN2w= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -57,6 +59,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -149,6 +153,7 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= diff --git a/server/config.go b/server/config.go index a876926e..f7c1813d 100644 --- a/server/config.go +++ b/server/config.go @@ -1,10 +1,11 @@ package server import ( - "heckel.io/ntfy/user" "io/fs" "net/netip" "time" + + "heckel.io/ntfy/user" ) // Defines default config settings (excluding limits, see below) @@ -146,6 +147,11 @@ type Config struct { EnableMetrics bool AccessControlAllowOrigin string // CORS header field to restrict access from web clients Version string // injected by App + WebPushEnabled bool + WebPushPrivateKey string + WebPushPublicKey string + WebPushSubscriptionsFile string + WebPushEmailAddress string } // NewConfig instantiates a default new server config @@ -227,5 +233,8 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", + WebPushPrivateKey: "", + WebPushPublicKey: "", + WebPushSubscriptionsFile: "", } } diff --git a/server/errors.go b/server/errors.go index eee916b5..d13e2969 100644 --- a/server/errors.go +++ b/server/errors.go @@ -114,6 +114,7 @@ var ( errHTTPBadRequestAnonymousCallsNotAllowed = &errHTTP{40035, http.StatusBadRequest, "invalid request: anonymous phone calls are not allowed", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestPhoneNumberVerifyChannelInvalid = &errHTTP{40036, http.StatusBadRequest, "invalid request: verification channel must be 'sms' or 'call'", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestDelayNoCall = &errHTTP{40037, http.StatusBadRequest, "delayed call notifications are not supported", "", nil} + errHTTPBadRequestWebPushSubscriptionInvalid = &errHTTP{40038, http.StatusBadRequest, "invalid request: web push payload malformed", "", nil} errHTTPNotFound = &errHTTP{40401, http.StatusNotFound, "page not found", "", nil} errHTTPUnauthorized = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication", nil} errHTTPForbidden = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication", nil} diff --git a/server/server.go b/server/server.go index d2fac01f..cba74280 100644 --- a/server/server.go +++ b/server/server.go @@ -9,13 +9,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/emersion/go-smtp" - "github.com/gorilla/websocket" - "github.com/prometheus/client_golang/prometheus/promhttp" - "golang.org/x/sync/errgroup" - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" - "heckel.io/ntfy/util" "io" "net" "net/http" @@ -32,32 +25,43 @@ import ( "sync" "time" "unicode/utf8" + + "github.com/emersion/go-smtp" + "github.com/gorilla/websocket" + "github.com/prometheus/client_golang/prometheus/promhttp" + "golang.org/x/sync/errgroup" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" + + "github.com/SherClockHolmes/webpush-go" ) // Server is the main server, providing the UI and API for ntfy type Server struct { - config *Config - httpServer *http.Server - httpsServer *http.Server - httpMetricsServer *http.Server - httpProfileServer *http.Server - unixListener net.Listener - smtpServer *smtp.Server - smtpServerBackend *smtpBackend - smtpSender mailer - topics map[string]*topic - visitors map[string]*visitor // ip: or user: - firebaseClient *firebaseClient - messages int64 // Total number of messages (persisted if messageCache enabled) - messagesHistory []int64 // Last n values of the messages counter, used to determine rate - userManager *user.Manager // Might be nil! - messageCache *messageCache // Database that stores the messages - fileCache *fileCache // File system based cache that stores attachments - stripe stripeAPI // Stripe API, can be replaced with a mock - priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) - metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set - closeChan chan bool - mu sync.RWMutex + config *Config + httpServer *http.Server + httpsServer *http.Server + httpMetricsServer *http.Server + httpProfileServer *http.Server + unixListener net.Listener + smtpServer *smtp.Server + smtpServerBackend *smtpBackend + smtpSender mailer + topics map[string]*topic + visitors map[string]*visitor // ip: or user: + firebaseClient *firebaseClient + messages int64 // Total number of messages (persisted if messageCache enabled) + messagesHistory []int64 // Last n values of the messages counter, used to determine rate + userManager *user.Manager // Might be nil! + messageCache *messageCache // Database that stores the messages + webPushSubscriptionStore *webPushSubscriptionStore // Database that stores web push subscriptions + fileCache *fileCache // File system based cache that stores attachments + stripe stripeAPI // Stripe API, can be replaced with a mock + priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) + metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set + closeChan chan bool + mu sync.RWMutex } // handleFunc extends the normal http.HandlerFunc to be able to easily return errors @@ -65,17 +69,21 @@ type handleFunc func(http.ResponseWriter, *http.Request, *visitor) error var ( // If changed, don't forget to update Android App and auth_sqlite.go - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! - topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! - externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic - jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) - ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) - rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) - wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) - authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! + topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! + externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic + jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) + ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) + rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) + wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) + authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) + webPushPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push$`) + webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) + publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) webConfigPath = "/config.js" + webManifestPath = "/manifest.webmanifest" + webServiceWorkerPath = "/sw.js" accountPath = "/account" matrixPushPath = "/_matrix/push/v1/notify" metricsPath = "/metrics" @@ -98,6 +106,7 @@ var ( apiAccountBillingSubscriptionCheckoutSuccessTemplate = "/v1/account/billing/subscription/success/{CHECKOUT_SESSION_ID}" apiAccountBillingSubscriptionCheckoutSuccessRegex = regexp.MustCompile(`/v1/account/billing/subscription/success/(.+)$`) apiAccountReservationSingleRegex = regexp.MustCompile(`/v1/account/reservation/([-_A-Za-z0-9]{1,64})$`) + apiWebPushConfig = "/v1/web-push-config" staticRegex = regexp.MustCompile(`^/static/.+`) docsRegex = regexp.MustCompile(`^/docs(|/.*)$`) fileRegex = regexp.MustCompile(`^/file/([-_A-Za-z0-9]{1,64})(?:\.[A-Za-z0-9]{1,16})?$`) @@ -151,6 +160,10 @@ func New(conf *Config) (*Server, error) { if err != nil { return nil, err } + webPushSubscriptionStore, err := createWebPushSubscriptionStore(conf) + if err != nil { + return nil, err + } topics, err := messageCache.Topics() if err != nil { return nil, err @@ -188,17 +201,18 @@ func New(conf *Config) (*Server, error) { firebaseClient = newFirebaseClient(sender, auther) } s := &Server{ - config: conf, - messageCache: messageCache, - fileCache: fileCache, - firebaseClient: firebaseClient, - smtpSender: mailer, - topics: topics, - userManager: userManager, - messages: messages, - messagesHistory: []int64{messages}, - visitors: make(map[string]*visitor), - stripe: stripe, + config: conf, + messageCache: messageCache, + webPushSubscriptionStore: webPushSubscriptionStore, + fileCache: fileCache, + firebaseClient: firebaseClient, + smtpSender: mailer, + topics: topics, + userManager: userManager, + messages: messages, + messagesHistory: []int64{messages}, + visitors: make(map[string]*visitor), + stripe: stripe, } s.priceCache = util.NewLookupCache(s.fetchStripePrices, conf.StripePriceCacheDuration) return s, nil @@ -213,6 +227,14 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } +func createWebPushSubscriptionStore(conf *Config) (*webPushSubscriptionStore, error) { + if !conf.WebPushEnabled { + return nil, nil + } + + return newWebPushSubscriptionStore(conf.WebPushSubscriptionsFile) +} + // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts // a manager go routine to print stats and prune messages. func (s *Server) Run() error { @@ -342,6 +364,9 @@ func (s *Server) closeDatabases() { s.userManager.Close() } s.messageCache.Close() + if s.webPushSubscriptionStore != nil { + s.webPushSubscriptionStore.Close() + } } // handle is the main entry point for all HTTP requests @@ -416,6 +441,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleHealth(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == webConfigPath { return s.ensureWebEnabled(s.handleWebConfig)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == webManifestPath { + return s.ensureWebEnabled(s.handleWebManifest)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == webServiceWorkerPath { + return s.ensureWebEnabled(s.handleStatic)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiUsersPath { return s.ensureAdmin(s.handleUsersGet)(w, r, v) } else if r.Method == http.MethodPut && r.URL.Path == apiUsersPath { @@ -474,6 +503,8 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { return s.ensurePaymentsEnabled(s.handleBillingTiersGet)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == apiWebPushConfig { + return s.ensureWebPushEnabled(s.handleAPIWebPushConfig)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == matrixPushPath { return s.handleMatrixDiscovery(w) } else if r.Method == http.MethodGet && r.URL.Path == metricsPath && s.metricsHandler != nil { @@ -504,6 +535,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) + } else if r.Method == http.MethodPost && webPushPathRegex.MatchString(r.URL.Path) { + return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) + } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { + return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } @@ -535,6 +570,63 @@ func (s *Server) handleTopicAuth(w http.ResponseWriter, _ *http.Request, _ *visi return s.writeJSON(w, newSuccessResponse()) } +func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, _ *visitor) error { + response := &apiWebPushConfigResponse{ + PublicKey: s.config.WebPushPublicKey, + } + + return s.writeJSON(w, response) +} + +func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { + var username string + u := v.User() + if u != nil { + username = u.Name + } + + var sub webPushSubscribePayload + err := json.NewDecoder(r.Body).Decode(&sub) + + if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPushSubscriptionStore.AddSubscription(topic.ID, username, sub) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { + var payload webPushUnsubscribePayload + + err := json.NewDecoder(r.Body).Decode(&payload) + + if err != nil { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPushSubscriptionStore.RemoveSubscription(topic.ID, payload.Endpoint) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -564,6 +656,11 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi return err } +func (s *Server) handleWebManifest(w http.ResponseWriter, r *http.Request, v *visitor) error { + w.Header().Set("Content-Type", "application/manifest+json") + return s.handleStatic(w, r, v) +} + // handleMetrics returns Prometheus metrics. This endpoint is only called if enable-metrics is set, // and listen-metrics-http is not set. func (s *Server) handleMetrics(w http.ResponseWriter, r *http.Request, _ *visitor) error { @@ -763,6 +860,9 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } + if s.config.WebPushEnabled { + go s.publishToWebPushEndpoints(v, m) + } } else { logvrm(v, r, m).Tag(tagPublish).Debug("Message delayed, will process later") } @@ -877,6 +977,95 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { } } +func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { + subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) + + if err != nil { + logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return + } + + failedCount := 0 + totalCount := len(subscriptions) + + wg := &sync.WaitGroup{} + wg.Add(totalCount) + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": totalCount} + + // Importing the emojis in the service worker would add unnecessary complexity, + // simply do it here for web push notifications instead + var titleWithDefault string + var formattedTitle string + + emojis, _, err := toEmojis(m.Tags) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + if m.Title == "" { + titleWithDefault = m.Topic + } else { + titleWithDefault = m.Title + } + + if len(emojis) > 0 { + formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) + } else { + formattedTitle = titleWithDefault + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + defer wg.Done() + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + + payload := &webPushPayload{ + SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), + Message: *m, + FormattedTitle: formattedTitle, + } + jsonPayload, err := json.Marshal(payload) + + if err != nil { + failedCount++ + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + _, err = webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + failedCount++ + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + + // probably need to handle different codes differently, + // but for now just expire the subscription on any error + err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + } + }(i, xi) + } + + ctx = log.Context{"topic": m.Topic, "message_id": m.ID, "failed_count": failedCount, "total_count": totalCount} + + if failedCount > 0 { + logvm(v, m).Fields(ctx).Warn("Unable to publish web push messages to %d of %d endpoints", failedCount, totalCount) + } else { + logvm(v, m).Fields(ctx).Debug("Published %d web push messages successfully", totalCount) + } +} + func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { cache = readBoolParam(r, true, "x-cache", "cache") firebase = readBoolParam(r, true, "x-firebase", "firebase") @@ -1692,6 +1881,9 @@ func (s *Server) sendDelayedMessage(v *visitor, m *message) error { if s.config.UpstreamBaseURL != "" { go s.forwardPollRequest(v, m) } + if s.config.WebPushEnabled { + go s.publishToWebPushEndpoints(v, m) + } if err := s.messageCache.MarkPublished(m); err != nil { return err } diff --git a/server/server.yml b/server/server.yml index 9c7972e9..ecb89994 100644 --- a/server/server.yml +++ b/server/server.yml @@ -38,6 +38,16 @@ # # firebase-key-file: +# Enable web push +# +# Run ntfy web-push-keys to generate the keys +# +# web-push-enabled: true +# web-push-public-key: "" +# web-push-private-key: "" +# web-push-subscriptions-file: "" +# web-push-email-address: "" + # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. # diff --git a/server/server_account.go b/server/server_account.go index 6e6a6864..dbadb81a 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -170,6 +170,13 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * if _, err := s.userManager.Authenticate(u.Name, req.Password); err != nil { return errHTTPBadRequestIncorrectPasswordConfirmation } + if s.webPushSubscriptionStore != nil { + err := s.webPushSubscriptionStore.ExpireWebPushForUser(u.Name) + + if err != nil { + logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) + } + } if u.Billing.StripeSubscriptionID != "" { logvr(v, r).Tag(tagStripe).Info("Canceling billing subscription for user %s", u.Name) if _, err := s.stripe.CancelSubscription(u.Billing.StripeSubscriptionID); err != nil { diff --git a/server/server_middleware.go b/server/server_middleware.go index 7aea45a3..41c2706c 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -58,6 +58,15 @@ func (s *Server) ensureWebEnabled(next handleFunc) handleFunc { } } +func (s *Server) ensureWebPushEnabled(next handleFunc) handleFunc { + return func(w http.ResponseWriter, r *http.Request, v *visitor) error { + if !s.config.WebPushEnabled { + return errHTTPNotFound + } + return next(w, r, v) + } +} + func (s *Server) ensureUserManager(next handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, v *visitor) error { if s.userManager == nil { diff --git a/server/server_test.go b/server/server_test.go index d7c4a7c6..b9f2912d 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -238,6 +238,12 @@ func TestServer_WebEnabled(t *testing.T) { rr = request(t, s, "GET", "/config.js", "", nil) require.Equal(t, 404, rr.Code) + rr = request(t, s, "GET", "/manifest.webmanifest", "", nil) + require.Equal(t, 404, rr.Code) + + rr = request(t, s, "GET", "/sw.js", "", nil) + require.Equal(t, 404, rr.Code) + rr = request(t, s, "GET", "/static/css/home.css", "", nil) require.Equal(t, 404, rr.Code) @@ -250,6 +256,13 @@ func TestServer_WebEnabled(t *testing.T) { rr = request(t, s2, "GET", "/config.js", "", nil) require.Equal(t, 200, rr.Code) + + rr = request(t, s2, "GET", "/manifest.webmanifest", "", nil) + require.Equal(t, 200, rr.Code) + require.Equal(t, "application/manifest+json", rr.Header().Get("Content-Type")) + + rr = request(t, s2, "GET", "/sw.js", "", nil) + require.Equal(t, 200, rr.Code) } func TestServer_PublishLargeMessage(t *testing.T) { diff --git a/server/smtp_sender.go b/server/smtp_sender.go index 9093687e..759ef396 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -1,8 +1,6 @@ package server import ( - _ "embed" // required by go:embed - "encoding/json" "fmt" "mime" "net" @@ -130,25 +128,3 @@ This message was sent by {ip} at {time} via {topicURL}` body = strings.ReplaceAll(body, "{ip}", senderIP) return body, nil } - -var ( - //go:embed "mailer_emoji_map.json" - emojisJSON string -) - -func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { - var emojiMap map[string]string - if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { - return nil, nil, err - } - tagsOut = make([]string, 0) - emojisOut = make([]string, 0) - for _, t := range tags { - if emoji, ok := emojiMap[t]; ok { - emojisOut = append(emojisOut, emoji) - } else { - tagsOut = append(tagsOut, t) - } - } - return -} diff --git a/server/types.go b/server/types.go index 9e4ff558..6eed5eef 100644 --- a/server/types.go +++ b/server/types.go @@ -7,6 +7,7 @@ import ( "net/netip" "time" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -401,6 +402,10 @@ type apiConfigResponse struct { DisallowedTopics []string `json:"disallowed_topics"` } +type apiWebPushConfigResponse struct { + PublicKey string `json:"public_key"` +} + type apiAccountBillingPrices struct { Month int64 `json:"month"` Year int64 `json:"year"` @@ -462,3 +467,22 @@ type apiStripeSubscriptionDeletedEvent struct { ID string `json:"id"` Customer string `json:"customer"` } + +type webPushPayload struct { + SubscriptionID string `json:"subscription_id"` + Message message `json:"message"` + FormattedTitle string `json:"formatted_title"` +} + +type webPushSubscription struct { + BrowserSubscription webpush.Subscription + Username string +} + +type webPushSubscribePayload struct { + BrowserSubscription webpush.Subscription `json:"browser_subscription"` +} + +type webPushUnsubscribePayload struct { + Endpoint string `json:"endpoint"` +} diff --git a/server/util.go b/server/util.go index 03eb8661..be724c76 100644 --- a/server/util.go +++ b/server/util.go @@ -2,6 +2,8 @@ package server import ( "context" + _ "embed" // required by go:embed + "encoding/json" "fmt" "heckel.io/ntfy/util" "io" @@ -133,3 +135,25 @@ func maybeDecodeHeader(header string) string { } return decoded } + +var ( + //go:embed "mailer_emoji_map.json" + emojisJSON string +) + +func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { + var emojiMap map[string]string + if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { + return nil, nil, err + } + tagsOut = make([]string, 0) + emojisOut = make([]string, 0) + for _, t := range tags { + if emoji, ok := emojiMap[t]; ok { + emojisOut = append(emojisOut, emoji) + } else { + tagsOut = append(tagsOut, t) + } + } + return +} diff --git a/server/web_push.go b/server/web_push.go new file mode 100644 index 00000000..fe9f5149 --- /dev/null +++ b/server/web_push.go @@ -0,0 +1,132 @@ +package server + +import ( + "database/sql" + + _ "github.com/mattn/go-sqlite3" // SQLite driver +) + +// Messages cache +const ( + createWebPushSubscriptionsTableQuery = ` + BEGIN; + CREATE TABLE IF NOT EXISTS web_push_subscriptions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + topic TEXT NOT NULL, + username TEXT, + endpoint TEXT NOT NULL, + key_auth TEXT NOT NULL, + key_p256dh TEXT NOT NULL, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP + ); + CREATE INDEX IF NOT EXISTS idx_topic ON web_push_subscriptions (topic); + CREATE INDEX IF NOT EXISTS idx_endpoint ON web_push_subscriptions (endpoint); + CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON web_push_subscriptions (topic, endpoint); + COMMIT; + ` + insertWebPushSubscriptionQuery = ` + INSERT OR REPLACE INTO web_push_subscriptions (topic, username, endpoint, key_auth, key_p256dh) + VALUES (?, ?, ?, ?, ?); + ` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM web_push_subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM web_push_subscriptions WHERE username = ?` + deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM web_push_subscriptions WHERE topic = ? AND endpoint = ?` + + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM web_push_subscriptions WHERE topic = ?` + + selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM web_push_subscriptions` +) + +type webPushSubscriptionStore struct { + db *sql.DB +} + +func newWebPushSubscriptionStore(filename string) (*webPushSubscriptionStore, error) { + db, err := sql.Open("sqlite3", filename) + if err != nil { + return nil, err + } + if err := setupSubscriptionDb(db); err != nil { + return nil, err + } + webPushSubscriptionStore := &webPushSubscriptionStore{ + db: db, + } + return webPushSubscriptionStore, nil +} + +func setupSubscriptionDb(db *sql.DB) error { + // If 'messages' table does not exist, this must be a new database + rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) + if err != nil { + return setupNewSubscriptionDb(db) + } + rowsMC.Close() + return nil +} + +func setupNewSubscriptionDb(db *sql.DB) error { + if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { + return err + } + return nil +} + +func (c *webPushSubscriptionStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { + _, err := c.db.Exec( + insertWebPushSubscriptionQuery, + topic, + username, + subscription.BrowserSubscription.Endpoint, + subscription.BrowserSubscription.Keys.Auth, + subscription.BrowserSubscription.Keys.P256dh, + ) + return err +} + +func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByTopicAndEndpointQuery, + topic, + endpoint, + ) + return err +} + +func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { + rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) + if err != nil { + return nil, err + } + defer rows.Close() + + data := []webPushSubscription{} + for rows.Next() { + i := webPushSubscription{} + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) + if err != nil { + return nil, err + } + data = append(data, i) + } + return data, nil +} + +func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByEndpointQuery, + endpoint, + ) + return err +} + +func (c *webPushSubscriptionStore) ExpireWebPushForUser(username string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByUsernameQuery, + username, + ) + return err +} +func (c *webPushSubscriptionStore) Close() error { + return c.db.Close() +} diff --git a/web/.eslintrc b/web/.eslintrc index adf66130..a21221fc 100644 --- a/web/.eslintrc +++ b/web/.eslintrc @@ -33,5 +33,6 @@ "unnamedComponents": "arrow-function" } ] - } + }, + "overrides": [{ "files": ["./public/sw.js"], "rules": { "no-restricted-globals": "off" } }] } diff --git a/web/index.html b/web/index.html index c146e64d..82bae45e 100644 --- a/web/index.html +++ b/web/index.html @@ -13,11 +13,18 @@ + + + + diff --git a/web/package-lock.json b/web/package-lock.json index a8637edb..c0ef7ef4 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -37,7 +37,8 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-plugin-pwa": "^0.15.0" } }, "node_modules/@ampproject/remapping": { @@ -118,6 +119,30 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz", + "integrity": "sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.1", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", @@ -137,6 +162,63 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz", + "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.22.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz", + "integrity": "sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.1", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", @@ -171,6 +253,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz", + "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", @@ -201,6 +295,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", @@ -210,6 +316,41 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz", + "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-simple-access": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", @@ -222,6 +363,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", @@ -259,6 +412,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.22.3", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", @@ -298,6 +466,909 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz", + "integrity": "sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-transform-optional-chaining": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz", + "integrity": "sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", + "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz", + "integrity": "sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz", + "integrity": "sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz", + "integrity": "sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", + "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz", + "integrity": "sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz", + "integrity": "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", + "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz", + "integrity": "sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz", + "integrity": "sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", + "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz", + "integrity": "sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz", + "integrity": "sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz", + "integrity": "sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz", + "integrity": "sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz", + "integrity": "sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz", + "integrity": "sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.3", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz", + "integrity": "sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz", + "integrity": "sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz", + "integrity": "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz", + "integrity": "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz", + "integrity": "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", @@ -328,6 +1399,292 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", + "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", + "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz", + "integrity": "sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz", + "integrity": "sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.4.tgz", + "integrity": "sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.3", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.3", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-attributes": "^7.22.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.21.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.3", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-class-properties": "^7.22.3", + "@babel/plugin-transform-class-static-block": "^7.22.3", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.21.5", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-dynamic-import": "^7.22.1", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-export-namespace-from": "^7.22.3", + "@babel/plugin-transform-for-of": "^7.21.5", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-json-strings": "^7.22.3", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.3", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.3", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.3", + "@babel/plugin-transform-new-target": "^7.22.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.3", + "@babel/plugin-transform-numeric-separator": "^7.22.3", + "@babel/plugin-transform-object-rest-spread": "^7.22.3", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-optional-catch-binding": "^7.22.3", + "@babel/plugin-transform-optional-chaining": "^7.22.3", + "@babel/plugin-transform-parameters": "^7.22.3", + "@babel/plugin-transform-private-methods": "^7.22.3", + "@babel/plugin-transform-private-property-in-object": "^7.22.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.21.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.21.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.3", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.3", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.4", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "node_modules/@babel/runtime": { "version": "7.22.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", @@ -1008,6 +2365,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -1323,12 +2690,36 @@ "node": ">=14" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", + "dev": true + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -1365,11 +2756,26 @@ "@types/react": "*" } }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, "node_modules/@vitejs/plugin-react": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz", @@ -1547,6 +2953,21 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -1591,6 +3012,45 @@ "npm": ">=6" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1607,6 +3067,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.21.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", @@ -1639,6 +3111,24 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1722,6 +3212,21 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1739,6 +3244,19 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/core-js-compat": { + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz", + "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -1776,6 +3294,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -1839,6 +3366,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -1894,6 +3430,21 @@ "csstype": "^3.0.2" } }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.423", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.423.tgz", @@ -2554,6 +4105,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2569,6 +4126,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2602,6 +4187,48 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -2651,6 +4278,21 @@ "is-callable": "^1.1.3" } }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2727,6 +4369,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -2811,6 +4459,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2960,6 +4614,12 @@ "cross-fetch": "3.1.5" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3154,6 +4814,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -3166,6 +4832,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -3181,6 +4856,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -3206,6 +4890,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -3227,6 +4920,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -3322,6 +5027,129 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-base64": { "version": "3.7.5", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", @@ -3361,6 +5189,12 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3385,6 +5219,27 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -3413,6 +5268,15 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3446,12 +5310,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3472,6 +5354,43 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3799,6 +5718,18 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { "version": "8.4.24", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", @@ -3851,6 +5782,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-bytes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3895,6 +5838,15 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -4009,11 +5961,38 @@ "react-dom": ">=16.6.0" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", @@ -4031,6 +6010,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -4119,6 +6145,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -4150,6 +6196,15 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4202,6 +6257,32 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, "node_modules/stack-generator": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", @@ -4318,6 +6399,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4339,6 +6434,15 @@ "node": ">=4" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4378,6 +6482,63 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4400,6 +6561,18 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -4482,6 +6655,77 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -4569,6 +6813,27 @@ } } }, + "node_modules/vite-plugin-pwa": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.15.2.tgz", + "integrity": "sha512-l1srtaad5NMNrAtAuub6ArTYG5Ci9AwofXXQ6IsbpCMYQ/0HUndwI7RB2x95+1UBFm7VGttQtT7woBlVnNhBRw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "pretty-bytes": "^6.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -4666,6 +6931,391 @@ "node": ">=0.10.0" } }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-build/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/web/package.json b/web/package.json index 274e4c8e..2e52635a 100644 --- a/web/package.json +++ b/web/package.json @@ -40,7 +40,8 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-plugin-pwa": "^0.15.0" }, "browserslist": { "production": [ diff --git a/web/public/config.js b/web/public/config.js index 2f46d65c..7bcad73f 100644 --- a/web/public/config.js +++ b/web/public/config.js @@ -7,7 +7,7 @@ var config = { base_url: window.location.origin, // Change to test against a different server - app_root: "/app", + app_root: "/", enable_login: true, enable_signup: true, enable_payments: false, diff --git a/web/public/static/images/apple-touch-icon.png b/web/public/static/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8f89050995c49f6073a9167c8afd7d2831cac384 GIT binary patch literal 15584 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 MMdd`Qh4cgd7jCG$_W%F@ literal 0 HcmV?d00001 diff --git a/web/public/static/images/mask-icon.svg b/web/public/static/images/mask-icon.svg new file mode 100644 index 00000000..32fced6d --- /dev/null +++ b/web/public/static/images/mask-icon.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/web/public/static/images/pwa-192x192.png b/web/public/static/images/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaebcc4da731b451ddfd2403c222ee45b571a46 GIT binary patch literal 6614 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 Yi|2gk?hWM}iV46-&s?|RhD+T402#pN%m4rY literal 0 HcmV?d00001 diff --git a/web/public/static/images/pwa-512x512.png b/web/public/static/images/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f GIT binary patch literal 19716 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 literal 0 HcmV?d00001 diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 5d8a3a3d..53b8c3f5 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -52,9 +52,10 @@ "nav_button_connecting": "connecting", "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", - "alert_grant_title": "Notifications are disabled", - "alert_grant_description": "Grant your browser permission to display desktop notifications.", - "alert_grant_button": "Grant now", + "alert_notification_permission_denied_title": "Notifications are blocked", + "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", + "alert_notification_ios_install_required_title": "iOS Install Required", + "alert_notification_ios_install_required_description": "Click on the Share icon and Add to Home Screen to enable notifications on iOS", "alert_not_supported_title": "Notifications not supported", "alert_not_supported_description": "Notifications are not supported in your browser.", "alert_not_supported_context_description": "Notifications are only supported over HTTPS. This is a limitation of the Notifications API.", @@ -92,6 +93,10 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", + "notification_toggle_unmute": "Unmute", + "notification_toggle_sound": "Sound only", + "notification_toggle_browser": "Browser notifications", + "notification_toggle_background": "Browser and background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -164,6 +169,8 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", + "subscribe_dialog_subscribe_enable_browser_notifications_label": "Notify me via browser notifications", + "subscribe_dialog_subscribe_enable_background_notifications_label": "Also notify me when ntfy is not open (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -363,6 +370,11 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", + "prefs_notifications_web_push_default_title": "Enable web push notifications by default", + "prefs_notifications_web_push_default_description": "This affects the initial state in the subscribe dialog, as well as the default state for synced topics", + "prefs_notifications_web_push_default_initial": "Unset", + "prefs_notifications_web_push_default_enabled": "Enabled", + "prefs_notifications_web_push_default_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/public/sw.js b/web/public/sw.js new file mode 100644 index 00000000..43a2e3b3 --- /dev/null +++ b/web/public/sw.js @@ -0,0 +1,111 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching"; +import { NavigationRoute, registerRoute } from "workbox-routing"; +import { NetworkFirst } from "workbox-strategies"; + +import { getDbAsync } from "../src/app/getDb"; + +// See WebPushWorker, this is to play a sound on supported browsers, +// if the app is in the foreground +const broadcastChannel = new BroadcastChannel("web-push-broadcast"); + +self.addEventListener("install", () => { + console.log("[ServiceWorker] Installed"); + self.skipWaiting(); +}); + +self.addEventListener("activate", () => { + console.log("[ServiceWorker] Activated"); + self.skipWaiting(); +}); + +// There's no good way to test this, and Chrome doesn't seem to implement this, +// so leaving it for now +self.addEventListener("pushsubscriptionchange", (event) => { + console.log("[ServiceWorker] PushSubscriptionChange"); + console.log(event); +}); + +self.addEventListener("push", (event) => { + console.log("[ServiceWorker] Received Web Push Event", { event }); + // server/types.go webPushPayload + const data = event.data.json(); + + const { formatted_title: formattedTitle, subscription_id: subscriptionId, message } = data; + broadcastChannel.postMessage(message); + + event.waitUntil( + (async () => { + const db = await getDbAsync(); + + await Promise.all([ + (async () => { + await db.notifications.add({ + ...message, + subscriptionId, + // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation + new: 1, + }); + const badgeCount = await db.notifications.where({ new: 1 }).count(); + console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); + self.navigator.setAppBadge?.(badgeCount); + })(), + db.subscriptions.update(subscriptionId, { + last: message.id, + }), + self.registration.showNotification(formattedTitle, { + tag: subscriptionId, + body: message.message, + icon: "/static/images/ntfy.png", + data, + }), + ]); + })() + ); +}); + +self.addEventListener("notificationclick", (event) => { + event.notification.close(); + + const { message } = event.notification.data; + + if (message.click) { + self.clients.openWindow(message.click); + return; + } + + const rootUrl = new URL(self.location.origin); + const topicUrl = new URL(message.topic, self.location.origin); + + event.waitUntil( + (async () => { + const clients = await self.clients.matchAll({ type: "window" }); + + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + if (topicClient) { + topicClient.focus(); + return; + } + + const rootClient = clients.find((client) => client.url === rootUrl.toString()); + if (rootClient) { + rootClient.focus(); + return; + } + + self.clients.openWindow(topicUrl); + })() + ); +}); + +// self.__WB_MANIFEST is default injection point +// eslint-disable-next-line no-underscore-dangle +precacheAndRoute(self.__WB_MANIFEST); + +// clean old assets +cleanupOutdatedCaches(); + +// to allow work offline +registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); + +registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); diff --git a/web/src/app/AccountApi.js b/web/src/app/AccountApi.js index 9576c4ec..572764fe 100644 --- a/web/src/app/AccountApi.js +++ b/web/src/app/AccountApi.js @@ -382,6 +382,10 @@ class AccountApi { setTimeout(() => this.runWorker(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async runWorker() { if (!session.token()) { return; diff --git a/web/src/app/Api.js b/web/src/app/Api.js index ba1cbe61..f731e61f 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,6 +6,9 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, + topicUrlWebPushSubscribe, + topicUrlWebPushUnsubscribe, + webPushConfigUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -113,6 +116,62 @@ class Api { } throw new Error(`Unexpected server response ${response.status}`); } + + /** + * @returns {Promise<{ public_key: string } | undefined>} + */ + async getWebPushConfig(baseUrl) { + const response = await fetch(webPushConfigUrl(baseUrl)); + + if (response.ok) { + return response.json(); + } + + if (response.status === 404) { + // web push is not enabled + return undefined; + } + + throw new Error(`Unexpected server response ${response.status}`); + } + + async subscribeWebPush(baseUrl, topic, browserSubscription) { + const user = await userManager.get(baseUrl); + + const url = topicUrlWebPushSubscribe(baseUrl, topic); + console.log(`[Api] Sending Web Push Subscription ${url}`); + + const response = await fetch(url, { + method: "POST", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ browser_subscription: browserSubscription }), + }); + + if (response.ok) { + return true; + } + + throw new Error(`Unexpected server response ${response.status}`); + } + + async unsubscribeWebPush(subscription) { + const user = await userManager.get(subscription.baseUrl); + + const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); + console.log(`[Api] Unsubscribing Web Push Subscription ${url}`); + + const response = await fetch(url, { + method: "POST", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ endpoint: subscription.webPushEndpoint }), + }); + + if (response.ok) { + return true; + } + + throw new Error(`Unexpected server response ${response.status}`); + } } const api = new Api(); diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 2033cbea..952c74af 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -1,7 +1,8 @@ import Connection from "./Connection"; +import { NotificationType } from "./SubscriptionManager"; import { hashCode } from "./utils"; -const makeConnectionId = async (subscription, user) => +const makeConnectionId = (subscription, user) => user ? hashCode(`${subscription.id}|${user.username}|${user.password ?? ""}|${user.token ?? ""}`) : hashCode(`${subscription.id}`); /** @@ -45,13 +46,19 @@ class ConnectionManager { return; } console.log(`[ConnectionManager] Refreshing connections`); - const subscriptionsWithUsersAndConnectionId = await Promise.all( - subscriptions.map(async (s) => { + const subscriptionsWithUsersAndConnectionId = subscriptions + .map((s) => { const [user] = users.filter((u) => u.baseUrl === s.baseUrl); - const connectionId = await makeConnectionId(s, user); + const connectionId = makeConnectionId(s, user); return { ...s, user, connectionId }; }) - ); + // we want to create a ws for both sound-only and active browser notifications, + // only background notifications don't need this as they come over web push. + // however, if background notifications are muted, we again need the ws while + // the page is active + .filter((s) => s.notificationType !== NotificationType.BACKGROUND && s.mutedUntil !== 1); + + console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); const deletedIds = Array.from(this.connections.keys()).filter((id) => !targetIds.includes(id)); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 45792dc8..a005f460 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -1,22 +1,18 @@ -import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl } from "./utils"; +import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; import prefs from "./Prefs"; -import subscriptionManager from "./SubscriptionManager"; import logo from "../img/ntfy.png"; +import api from "./Api"; /** * The notifier is responsible for displaying desktop notifications. Note that not all modern browsers * support this; most importantly, all iOS browsers do not support window.Notification. */ class Notifier { - async notify(subscriptionId, notification, onClickFallback) { + async notify(subscription, notification, onClickFallback) { if (!this.supported()) { return; } - const subscription = await subscriptionManager.get(subscriptionId); - const shouldNotify = await this.shouldNotify(subscription, notification); - if (!shouldNotify) { - return; - } + const shortUrl = topicShortUrl(subscription.baseUrl, subscription.topic); const displayName = topicDisplayName(subscription); const message = formatMessage(notification); @@ -26,6 +22,7 @@ class Notifier { console.log(`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`); const n = new Notification(title, { body: message, + tag: subscription.id, icon: logo, }); if (notification.click) { @@ -33,45 +30,88 @@ class Notifier { } else { n.onclick = () => onClickFallback(subscription); } + } + async playSound() { // Play sound const sound = await prefs.sound(); if (sound && sound !== "none") { try { await playSound(sound); } catch (e) { - console.log(`[Notifier, ${shortUrl}] Error playing audio`, e); + console.log(`[Notifier] Error playing audio`, e); } } } + async unsubscribeWebPush(subscription) { + try { + await api.unsubscribeWebPush(subscription); + } catch (e) { + console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + } + } + + async subscribeWebPush(baseUrl, topic) { + if (!this.supported() || !this.pushSupported()) { + return {}; + } + + // only subscribe to web push for the current server. this is a limitation of the web push API, + // which only allows a single server per service worker origin. + if (baseUrl !== config.base_url) { + return {}; + } + + const registration = await navigator.serviceWorker.getRegistration(); + + if (!registration) { + console.log("[Notifier.subscribeWebPush] Web push supported but no service worker registration found, skipping"); + return {}; + } + + try { + const webPushConfig = await api.getWebPushConfig(baseUrl); + + if (!webPushConfig) { + console.log("[Notifier.subscribeWebPush] Web push not configured on server"); + } + + const browserSubscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlB64ToUint8Array(webPushConfig.public_key), + }); + + await api.subscribeWebPush(baseUrl, topic, browserSubscription); + + console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); + + return browserSubscription; + } catch (e) { + console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + } + + return {}; + } + granted() { return this.supported() && Notification.permission === "granted"; } - maybeRequestPermission(cb) { - if (!this.supported()) { - cb(false); - return; - } - if (!this.granted()) { - Notification.requestPermission().then((permission) => { - const granted = permission === "granted"; - cb(granted); - }); - } + denied() { + return this.supported() && Notification.permission === "denied"; } - async shouldNotify(subscription, notification) { - if (subscription.mutedUntil === 1) { + async maybeRequestPermission() { + if (!this.supported()) { return false; } - const priority = notification.priority ? notification.priority : 3; - const minPriority = await prefs.minPriority(); - if (priority < minPriority) { - return false; - } - return true; + + return new Promise((resolve) => { + Notification.requestPermission((permission) => { + resolve(permission === "granted"); + }); + }); } supported() { @@ -82,6 +122,10 @@ class Notifier { return "Notification" in window; } + pushSupported() { + return "serviceWorker" in navigator && "PushManager" in window; + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification @@ -89,6 +133,10 @@ class Notifier { contextSupported() { return window.location.protocol === "https:" || window.location.hostname.match("^127.") || window.location.hostname === "localhost"; } + + iosSupportedButInstallRequired() { + return "standalone" in window.navigator && window.navigator.standalone === false; + } } const notifier = new Notifier(); diff --git a/web/src/app/Poller.js b/web/src/app/Poller.js index 372e46e5..2261dddc 100644 --- a/web/src/app/Poller.js +++ b/web/src/app/Poller.js @@ -18,6 +18,10 @@ class Poller { setTimeout(() => this.pollAll(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async pollAll() { console.log(`[Poller] Polling all subscriptions`); const subscriptions = await subscriptionManager.all(); @@ -47,14 +51,13 @@ class Poller { } pollInBackground(subscription) { - const fn = async () => { + (async () => { try { await this.poll(subscription); } catch (e) { console.error(`[App] Error polling subscription ${subscription.id}`, e); } - }; - setTimeout(() => fn(), 0); + })(); } } diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 8adc5088..45078352 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,33 +1,45 @@ -import db from "./db"; +import getDb from "./getDb"; class Prefs { + constructor(db) { + this.db = db; + } + async setSound(sound) { - db.prefs.put({ key: "sound", value: sound.toString() }); + this.db.prefs.put({ key: "sound", value: sound.toString() }); } async sound() { - const sound = await db.prefs.get("sound"); + const sound = await this.db.prefs.get("sound"); return sound ? sound.value : "ding"; } async setMinPriority(minPriority) { - db.prefs.put({ key: "minPriority", value: minPriority.toString() }); + this.db.prefs.put({ key: "minPriority", value: minPriority.toString() }); } async minPriority() { - const minPriority = await db.prefs.get("minPriority"); + const minPriority = await this.db.prefs.get("minPriority"); return minPriority ? Number(minPriority.value) : 1; } async setDeleteAfter(deleteAfter) { - db.prefs.put({ key: "deleteAfter", value: deleteAfter.toString() }); + this.db.prefs.put({ key: "deleteAfter", value: deleteAfter.toString() }); } async deleteAfter() { - const deleteAfter = await db.prefs.get("deleteAfter"); + const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } + + async webPushDefaultEnabled() { + const obj = await this.db.prefs.get("webPushDefaultEnabled"); + return obj?.value ?? "initial"; + } + + async setWebPushDefaultEnabled(enabled) { + await this.db.prefs.put({ key: "webPushDefaultEnabled", value: enabled ? "enabled" : "disabled" }); + } } -const prefs = new Prefs(); -export default prefs; +export default new Prefs(getDb()); diff --git a/web/src/app/Pruner.js b/web/src/app/Pruner.js index 498c1566..f9568a33 100644 --- a/web/src/app/Pruner.js +++ b/web/src/app/Pruner.js @@ -18,6 +18,10 @@ class Pruner { setTimeout(() => this.prune(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async prune() { const deleteAfterSeconds = await prefs.deleteAfter(); const pruneThresholdTimestamp = Math.round(Date.now() / 1000) - deleteAfterSeconds; diff --git a/web/src/app/Session.js b/web/src/app/Session.js index 0b47f93a..8affa53c 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,12 +1,22 @@ +import sessionReplica from "./SessionReplica"; + class Session { + constructor(replica) { + this.replica = replica; + } + store(username, token) { localStorage.setItem("user", username); localStorage.setItem("token", token); + + this.replica.store(username, token); } reset() { localStorage.removeItem("user"); localStorage.removeItem("token"); + + this.replica.reset(); } resetAndRedirect(url) { @@ -27,5 +37,5 @@ class Session { } } -const session = new Session(); +const session = new Session(sessionReplica); export default session; diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js new file mode 100644 index 00000000..808833f6 --- /dev/null +++ b/web/src/app/SessionReplica.js @@ -0,0 +1,44 @@ +import Dexie from "dexie"; + +// Store to IndexedDB as well so that the +// service worker can access it +// TODO: Probably make everything depend on this and not use localStorage, +// but that's a larger refactoring effort for another PR + +class SessionReplica { + constructor() { + const db = new Dexie("session-replica"); + + db.version(1).stores({ + keyValueStore: "&key", + }); + + this.db = db; + } + + async store(username, token) { + try { + await this.db.keyValueStore.bulkPut([ + { key: "user", value: username }, + { key: "token", value: token }, + ]); + } catch (e) { + console.error("[Session] Error replicating session to IndexedDB", e); + } + } + + async reset() { + try { + await this.db.delete(); + } catch (e) { + console.error("[Session] Error resetting session on IndexedDB", e); + } + } + + async username() { + return (await this.db.keyValueStore.get({ key: "user" }))?.value; + } +} + +const sessionReplica = new SessionReplica(); +export default sessionReplica; diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index ecbe4dac..ae4bf49e 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,47 +1,112 @@ -import db from "./db"; +import notifier from "./Notifier"; +import prefs from "./Prefs"; +import getDb from "./getDb"; import { topicUrl } from "./utils"; +/** @typedef {string} NotificationTypeEnum */ + +/** @enum {NotificationTypeEnum} */ +export const NotificationType = { + /** sound-only */ + SOUND: "sound", + /** browser notifications when there is an active tab, via websockets */ + BROWSER: "browser", + /** web push notifications, regardless of whether the window is open */ + BACKGROUND: "background", +}; + class SubscriptionManager { + constructor(db) { + this.db = db; + } + /** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */ async all() { - const subscriptions = await db.subscriptions.toArray(); + const subscriptions = await this.db.subscriptions.toArray(); return Promise.all( subscriptions.map(async (s) => ({ ...s, - new: await db.notifications.where({ subscriptionId: s.id, new: 1 }).count(), + new: await this.db.notifications.where({ subscriptionId: s.id, new: 1 }).count(), })) ); } async get(subscriptionId) { - return db.subscriptions.get(subscriptionId); + return this.db.subscriptions.get(subscriptionId); } - async add(baseUrl, topic, internal) { + async notify(subscriptionId, notification, defaultClickAction) { + const subscription = await this.get(subscriptionId); + + if (subscription.mutedUntil === 1) { + return; + } + + const priority = notification.priority ?? 3; + if (priority < (await prefs.minPriority())) { + return; + } + + await notifier.playSound(); + + // sound only + if (subscription.notificationType === "sound") { + return; + } + + await notifier.notify(subscription, notification, defaultClickAction); + } + + /** + * @param {string} baseUrl + * @param {string} topic + * @param {object} opts + * @param {boolean} opts.internal + * @param {NotificationTypeEnum} opts.notificationType + * @returns + */ + async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); + + const webPushFields = opts.notificationType === "background" ? await notifier.subscribeWebPush(baseUrl, topic) : {}; + const existingSubscription = await this.get(id); if (existingSubscription) { + if (webPushFields.endpoint) { + await this.db.subscriptions.update(existingSubscription.id, { + webPushEndpoint: webPushFields.endpoint, + }); + } + return existingSubscription; } + const subscription = { id: topicUrl(baseUrl, topic), baseUrl, topic, mutedUntil: 0, last: null, - internal: internal || false, + ...opts, + webPushEndpoint: webPushFields.endpoint, }; - await db.subscriptions.put(subscription); + + await this.db.subscriptions.put(subscription); + return subscription; } async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); + const notificationType = (await prefs.webPushDefaultEnabled()) === "enabled" ? "background" : "browser"; + // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { - const local = await this.add(remote.base_url, remote.topic, false); + const local = await this.add(remote.base_url, remote.topic, { + notificationType, + }); const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; await this.update(local.id, { @@ -54,29 +119,33 @@ class SubscriptionManager { ); // Remove local subscriptions that do not exist remotely - const localSubscriptions = await db.subscriptions.toArray(); + const localSubscriptions = await this.db.subscriptions.toArray(); await Promise.all( localSubscriptions.map(async (local) => { const remoteExists = remoteIds.includes(local.id); if (!local.internal && !remoteExists) { - await this.remove(local.id); + await this.remove(local); } }) ); } async updateState(subscriptionId, state) { - db.subscriptions.update(subscriptionId, { state }); + this.db.subscriptions.update(subscriptionId, { state }); } - async remove(subscriptionId) { - await db.subscriptions.delete(subscriptionId); - await db.notifications.where({ subscriptionId }).delete(); + async remove(subscription) { + await this.db.subscriptions.delete(subscription.id); + await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); + + if (subscription.webPushEndpoint) { + await notifier.unsubscribeWebPush(subscription); + } } async first() { - return db.subscriptions.toCollection().first(); // May be undefined + return this.db.subscriptions.toCollection().first(); // May be undefined } async getNotifications(subscriptionId) { @@ -84,7 +153,7 @@ class SubscriptionManager { // It's actually fine, because the reading and filtering is quite fast. The rendering is what's // killing performance. See https://dexie.org/docs/Collection/Collection.offset()#a-better-paging-approach - return db.notifications + return this.db.notifications .orderBy("time") // Sort by time first .filter((n) => n.subscriptionId === subscriptionId) .reverse() @@ -92,7 +161,7 @@ class SubscriptionManager { } async getAllNotifications() { - return db.notifications + return this.db.notifications .orderBy("time") // Efficient, see docs .reverse() .toArray(); @@ -100,18 +169,19 @@ class SubscriptionManager { /** Adds notification, or returns false if it already exists */ async addNotification(subscriptionId, notification) { - const exists = await db.notifications.get(notification.id); + const exists = await this.db.notifications.get(notification.id); if (exists) { return false; } try { - await db.notifications.add({ + // sw.js duplicates this logic, so if you change it here, change it there too + await this.db.notifications.add({ ...notification, subscriptionId, // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation new: 1, }); // FIXME consider put() for double tab - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { last: notification.id, }); } catch (e) { @@ -124,19 +194,19 @@ class SubscriptionManager { async addNotifications(subscriptionId, notifications) { const notificationsWithSubscriptionId = notifications.map((notification) => ({ ...notification, subscriptionId })); const lastNotificationId = notifications.at(-1).id; - await db.notifications.bulkPut(notificationsWithSubscriptionId); - await db.subscriptions.update(subscriptionId, { + await this.db.notifications.bulkPut(notificationsWithSubscriptionId); + await this.db.subscriptions.update(subscriptionId, { last: lastNotificationId, }); } async updateNotification(notification) { - const exists = await db.notifications.get(notification.id); + const exists = await this.db.notifications.get(notification.id); if (!exists) { return false; } try { - await db.notifications.put({ ...notification }); + await this.db.notifications.put({ ...notification }); } catch (e) { console.error(`[SubscriptionManager] Error updating notification`, e); } @@ -144,47 +214,105 @@ class SubscriptionManager { } async deleteNotification(notificationId) { - await db.notifications.delete(notificationId); + await this.db.notifications.delete(notificationId); } async deleteNotifications(subscriptionId) { - await db.notifications.where({ subscriptionId }).delete(); + await this.db.notifications.where({ subscriptionId }).delete(); } async markNotificationRead(notificationId) { - await db.notifications.where({ id: notificationId }).modify({ new: 0 }); + await this.db.notifications.where({ id: notificationId }).modify({ new: 0 }); } async markNotificationsRead(subscriptionId) { - await db.notifications.where({ subscriptionId, new: 1 }).modify({ new: 0 }); + await this.db.notifications.where({ subscriptionId, new: 1 }).modify({ new: 0 }); } async setMutedUntil(subscriptionId, mutedUntil) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { mutedUntil, }); + + const subscription = await this.get(subscriptionId); + + if (subscription.notificationType === "background") { + if (mutedUntil === 1) { + await notifier.unsubscribeWebPush(subscription); + } else { + const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); + await this.db.subscriptions.update(subscriptionId, { + webPushEndpoint: webPushFields.endpoint, + }); + } + } + } + + /** + * + * @param {object} subscription + * @param {NotificationTypeEnum} newNotificationType + * @returns + */ + async setNotificationType(subscription, newNotificationType) { + const oldNotificationType = subscription.notificationType ?? "browser"; + + if (oldNotificationType === newNotificationType) { + return; + } + + let { webPushEndpoint } = subscription; + + if (oldNotificationType === "background") { + await notifier.unsubscribeWebPush(subscription); + webPushEndpoint = undefined; + } else if (newNotificationType === "background") { + const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); + webPushEndpoint = webPushFields.webPushEndpoint; + } + + await this.db.subscriptions.update(subscription.id, { + notificationType: newNotificationType, + webPushEndpoint, + }); + } + + // for logout/delete, unsubscribe first to prevent receiving dangling notifications + async unsubscribeAllWebPush() { + const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); + await Promise.all(subscriptions.map((subscription) => notifier.unsubscribeWebPush(subscription))); + } + + async refreshWebPushSubscriptions() { + const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); + const browserSubscription = await (await navigator.serviceWorker.getRegistration())?.pushManager?.getSubscription(); + + if (browserSubscription) { + await Promise.all(subscriptions.map((subscription) => notifier.subscribeWebPush(subscription.baseUrl, subscription.topic))); + } else { + await Promise.all(subscriptions.map((subscription) => this.setNotificationType(subscription, "sound"))); + } } async setDisplayName(subscriptionId, displayName) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { displayName, }); } async setReservation(subscriptionId, reservation) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { reservation, }); } async update(subscriptionId, params) { - await db.subscriptions.update(subscriptionId, params); + await this.db.subscriptions.update(subscriptionId, params); } async pruneNotifications(thresholdTimestamp) { - await db.notifications.where("time").below(thresholdTimestamp).delete(); + await this.db.notifications.where("time").below(thresholdTimestamp).delete(); } } -const subscriptionManager = new SubscriptionManager(); -export default subscriptionManager; +export default new SubscriptionManager(getDb()); diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index 2cdd5449..a3dee0a3 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -1,9 +1,13 @@ -import db from "./db"; +import getDb from "./getDb"; import session from "./Session"; class UserManager { + constructor(db) { + this.db = db; + } + async all() { - const users = await db.users.toArray(); + const users = await this.db.users.toArray(); if (session.exists()) { users.unshift(this.localUser()); } @@ -14,21 +18,21 @@ class UserManager { if (session.exists() && baseUrl === config.base_url) { return this.localUser(); } - return db.users.get(baseUrl); + return this.db.users.get(baseUrl); } async save(user) { if (session.exists() && user.baseUrl === config.base_url) { return; } - await db.users.put(user); + await this.db.users.put(user); } async delete(baseUrl) { if (session.exists() && baseUrl === config.base_url) { return; } - await db.users.delete(baseUrl); + await this.db.users.delete(baseUrl); } localUser() { @@ -43,5 +47,4 @@ class UserManager { } } -const userManager = new UserManager(); -export default userManager; +export default new UserManager(getDb()); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js new file mode 100644 index 00000000..508df725 --- /dev/null +++ b/web/src/app/WebPushWorker.js @@ -0,0 +1,46 @@ +import notifier from "./Notifier"; +import subscriptionManager from "./SubscriptionManager"; + +const onMessage = () => { + notifier.playSound(); +}; + +const delayMillis = 2000; // 2 seconds +const intervalMillis = 300000; // 5 minutes + +class WebPushWorker { + constructor() { + this.timer = null; + } + + startWorker() { + if (this.timer !== null) { + return; + } + + this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); + setTimeout(() => this.updateSubscriptions(), delayMillis); + + this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); + this.broadcastChannel.addEventListener("message", onMessage); + } + + stopWorker() { + clearTimeout(this.timer); + + this.broadcastChannel.removeEventListener("message", onMessage); + this.broadcastChannel.close(); + } + + async updateSubscriptions() { + try { + console.log("[WebPushBroadcastListener] Refreshing web push subscriptions"); + + await subscriptionManager.refreshWebPushSubscriptions(); + } catch (e) { + console.error("[WebPushBroadcastListener] Error refreshing web push subscriptions", e); + } + } +} + +export default new WebPushWorker(); diff --git a/web/src/app/db.js b/web/src/app/db.js deleted file mode 100644 index 0e1a5e71..00000000 --- a/web/src/app/db.js +++ /dev/null @@ -1,21 +0,0 @@ -import Dexie from "dexie"; -import session from "./Session"; - -// Uses Dexie.js -// https://dexie.org/docs/API-Reference#quick-reference -// -// Notes: -// - As per docs, we only declare the indexable columns, not all columns - -// The IndexedDB database name is based on the logged-in user -const dbName = session.username() ? `ntfy-${session.username()}` : "ntfy"; -const db = new Dexie(dbName); - -db.version(1).stores({ - subscriptions: "&id,baseUrl", - notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance - users: "&baseUrl,username", - prefs: "&key", -}); - -export default db; diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js new file mode 100644 index 00000000..9cf8c66e --- /dev/null +++ b/web/src/app/getDb.js @@ -0,0 +1,34 @@ +import Dexie from "dexie"; +import session from "./Session"; +import sessionReplica from "./SessionReplica"; + +// Uses Dexie.js +// https://dexie.org/docs/API-Reference#quick-reference +// +// Notes: +// - As per docs, we only declare the indexable columns, not all columns + +const getDbBase = (username) => { + // The IndexedDB database name is based on the logged-in user + const dbName = username ? `ntfy-${username}` : "ntfy"; + const db = new Dexie(dbName); + + db.version(2).stores({ + subscriptions: "&id,baseUrl,notificationType", + notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance + users: "&baseUrl,username", + prefs: "&key", + }); + + return db; +}; + +export const getDbAsync = async () => { + const username = await sessionReplica.username(); + + return getDbBase(username); +}; + +const getDb = () => getDbBase(session.username()); + +export default getDb; diff --git a/web/src/app/utils.js b/web/src/app/utils.js index ab7551bb..0f879373 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,7 +20,10 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; +export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push`; +export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); +export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; @@ -156,7 +159,7 @@ export const splitNoEmpty = (s, delimiter) => .filter((x) => x !== ""); /** Non-cryptographic hash function, see https://stackoverflow.com/a/8831937/1440785 */ -export const hashCode = async (s) => { +export const hashCode = (s) => { let hash = 0; for (let i = 0; i < s.length; i += 1) { const char = s.charCodeAt(i); @@ -288,3 +291,16 @@ export const randomAlphanumericString = (len) => { } return id; }; + +export const urlB64ToUint8Array = (base64String) => { + const padding = "=".repeat((4 - (base64String.length % 4)) % 4); + const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/"); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; i += 1) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; +}; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 541d4f86..bbc380c9 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -48,7 +48,7 @@ import routes from "./routes"; import { formatBytes, formatShortDate, formatShortDateTime, openUrl } from "../app/utils"; import accountApi, { LimitBasis, Role, SubscriptionInterval, SubscriptionStatus } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; -import db from "../app/db"; +import getDb from "../app/getDb"; import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import DialogFooter from "./DialogFooter"; @@ -57,6 +57,7 @@ import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; import theme from "./theme"; import session from "../app/Session"; +import subscriptionManager from "../app/SubscriptionManager"; const Account = () => { if (!session.exists()) { @@ -1077,8 +1078,10 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { + await subscriptionManager.unsubscribeAllWebPush(); + await accountApi.delete(password); - await db.delete(); + await getDb().delete(); console.debug(`[Account] Account deleted`); session.resetAndRedirect(routes.app); } catch (e) { diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 798efb49..154f17cb 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -13,7 +13,7 @@ import session from "../app/Session"; import logo from "../img/ntfy.svg"; import subscriptionManager from "../app/SubscriptionManager"; import routes from "./routes"; -import db from "../app/db"; +import getDb from "../app/getDb"; import { topicDisplayName } from "../app/utils"; import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; @@ -120,8 +120,10 @@ const ProfileIcon = () => { const handleLogout = async () => { try { + await subscriptionManager.unsubscribeAllWebPush(); + await accountApi.logout(); - await db.delete(); + await getDb().delete(); } finally { session.resetAndRedirect(routes.app); } diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 189235bb..148c3ac2 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -57,6 +57,10 @@ const App = () => { const updateTitle = (newNotificationsCount) => { document.title = newNotificationsCount > 0 ? `(${newNotificationsCount}) ntfy` : "ntfy"; + + if ("setAppBadge" in window.navigator) { + window.navigator.setAppBadge(newNotificationsCount); + } }; const Layout = () => { diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index 8cbefec4..b2755aa9 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -14,7 +14,6 @@ import { ListSubheader, Portal, Tooltip, - Button, Typography, Box, IconButton, @@ -94,15 +93,10 @@ const NavList = (props) => { setSubscribeDialogKey((prev) => prev + 1); }; - const handleRequestNotificationPermission = () => { - notifier.maybeRequestPermission((granted) => props.onNotificationGranted(granted)); - }; - const handleSubscribeSubmit = (subscription) => { console.log(`[Navigation] New subscription: ${subscription.id}`, subscription); handleSubscribeReset(); navigate(routes.forSubscription(subscription)); - handleRequestNotificationPermission(); }; const handleAccountClick = () => { @@ -114,19 +108,27 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const showNotificationBrowserNotSupportedBox = !notifier.browserSupported(); + const showNotificationPermissionDenied = notifier.denied(); + const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); + const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const showNotificationGrantBox = notifier.supported() && props.subscriptions?.length > 0 && !props.notificationsGranted; + const navListPadding = - showNotificationGrantBox || showNotificationBrowserNotSupportedBox || showNotificationContextNotSupportedBox ? "0" : ""; + showNotificationPermissionDenied || + showNotificationIOSInstallRequired || + showNotificationBrowserNotSupportedBox || + showNotificationContextNotSupportedBox + ? "0" + : ""; return ( <> + {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } - {showNotificationGrantBox && } + {showNotificationIOSInstallRequired && } {!showSubscriptionsList && ( navigate(routes.app)} selected={location.pathname === config.app_root}> @@ -344,16 +346,26 @@ const SubscriptionItem = (props) => { ); }; -const NotificationGrantAlert = (props) => { +const NotificationPermissionDeniedAlert = () => { const { t } = useTranslation(); return ( <> - {t("alert_grant_title")} - {t("alert_grant_description")} - + {t("alert_notification_permission_denied_title")} + {t("alert_notification_permission_denied_description")} + + + + ); +}; + +const NotificationIOSInstallRequiredAlert = () => { + const { t } = useTranslation(); + return ( + <> + + {t("alert_notification_ios_install_required_title")} + {t("alert_notification_ios_install_required_description")} diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 4afc0f80..091e1f51 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,6 +48,7 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; +import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -85,6 +86,7 @@ const Notifications = () => { + {notifier.pushSupported() && } ); @@ -232,6 +234,36 @@ const DeleteAfter = () => { ); }; +const WebPushDefaultEnabled = () => { + const { t } = useTranslation(); + const labelId = "prefWebPushDefaultEnabled"; + const defaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); + const handleChange = async (ev) => { + await prefs.setWebPushDefaultEnabled(ev.target.value); + }; + + // while loading + if (defaultEnabled == null) { + return null; + } + + return ( + + + + + + ); +}; + const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 0f1cec13..57281661 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -8,17 +8,20 @@ import { DialogContentText, DialogTitle, Autocomplete, - Checkbox, FormControlLabel, FormGroup, useMediaQuery, + Switch, + Stack, } from "@mui/material"; import { useTranslation } from "react-i18next"; +import { Warning } from "@mui/icons-material"; +import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; -import subscriptionManager from "../app/SubscriptionManager"; +import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; import poller from "../app/Poller"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -28,11 +31,13 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; +import notifier from "../app/Notifier"; +import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; -export const subscribeTopic = async (baseUrl, topic) => { - const subscription = await subscriptionManager.add(baseUrl, topic); +export const subscribeTopic = async (baseUrl, topic, opts) => { + const subscription = await subscriptionManager.add(baseUrl, topic, opts); if (session.exists()) { try { await accountApi.addSubscription(baseUrl, topic); @@ -52,14 +57,29 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const handleSuccess = async () => { + const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); + + const handleSuccess = async (notificationType) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; - const subscription = await subscribeTopic(actualBaseUrl, topic); + const subscription = await subscribeTopic(actualBaseUrl, topic, { + notificationType, + }); poller.pollInBackground(subscription); // Dangle! + + // if the user hasn't changed the default web push setting yet, set it to enabled + if (notificationType === "background" && webPushDefaultEnabled === "initial") { + await prefs.setWebPushDefaultEnabled(true); + } + props.onSuccess(subscription); }; + // wait for liveQuery load + if (webPushDefaultEnabled === undefined) { + return <>; + } + return ( {!showLoginPage && ( @@ -72,6 +92,7 @@ const SubscribeDialog = (props) => { onCancel={props.onCancel} onNeedsLogin={() => setShowLoginPage(true)} onSuccess={handleSuccess} + webPushDefaultEnabled={webPushDefaultEnabled} /> )} {showLoginPage && setShowLoginPage(false)} onSuccess={handleSuccess} />} @@ -79,6 +100,22 @@ const SubscribeDialog = (props) => { ); }; +const browserNotificationsSupported = notifier.supported(); +const pushNotificationsSupported = notifier.pushSupported(); +const iosInstallRequired = notifier.iosSupportedButInstallRequired(); + +const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { + if (backgroundNotificationsEnabled) { + return NotificationType.BACKGROUND; + } + + if (browserNotificationsEnabled) { + return NotificationType.BROWSER; + } + + return NotificationType.SOUND; +}; + const SubscribePage = (props) => { const { t } = useTranslation(); const { account } = useContext(AccountContext); @@ -96,6 +133,30 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); + // load initial value, but update it in `handleBrowserNotificationsChanged` + // if we interact with the API and therefore possibly change it (from default -> denied) + const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); + // default to on if notifications are already granted + const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + + const handleBrowserNotificationsChanged = async (e) => { + if (e.target.checked && (await notifier.maybeRequestPermission())) { + setBrowserNotificationsEnabled(true); + if (props.webPushDefaultEnabled === "enabled") { + setBackgroundNotificationsEnabled(true); + } + } else { + setNotificationsExplicitlyDenied(notifier.denied()); + setBrowserNotificationsEnabled(false); + setBackgroundNotificationsEnabled(false); + } + }; + + const handleBackgroundNotificationsChanged = (e) => { + setBackgroundNotificationsEnabled(e.target.checked); + }; + const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -133,12 +194,15 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(); + props.onSuccess(getNotificationTypeFromToggles(browserNotificationsEnabled, backgroundNotificationsEnabled)); }; const handleUseAnotherChanged = (e) => { props.setBaseUrl(""); setAnotherServerVisible(e.target.checked); + if (e.target.checked) { + setBackgroundNotificationsEnabled(false); + } }; const subscribeButtonEnabled = (() => { @@ -193,8 +257,7 @@ const SubscribePage = (props) => { setReserveTopicVisible(ev.target.checked)} @@ -217,8 +280,9 @@ const SubscribePage = (props) => { { )} )} + {browserNotificationsSupported && ( + + + } + label={ + + {t("subscribe_dialog_subscribe_enable_browser_notifications_label")} + {notificationsExplicitlyDenied && } + + } + /> + {pushNotificationsSupported && !anotherServerVisible && browserNotificationsEnabled && ( + + } + label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} + /> + )} + + )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index ee83a119..90c63b3f 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -14,12 +14,26 @@ import { useMediaQuery, MenuItem, IconButton, + ListItemIcon, + ListItemText, + Divider, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; -import { Clear } from "@mui/icons-material"; +import { + Check, + Clear, + ClearAll, + Edit, + EnhancedEncryption, + Lock, + LockOpen, + NotificationsOff, + RemoveCircle, + Send, +} from "@mui/icons-material"; import theme from "./theme"; -import subscriptionManager from "../app/SubscriptionManager"; +import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; import session from "../app/Session"; @@ -30,6 +44,7 @@ import api from "../app/Api"; import { AccountContext } from "./App"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; +import notifier from "../app/Notifier"; export const SubscriptionPopup = (props) => { const { t } = useTranslation(); @@ -70,8 +85,7 @@ export const SubscriptionPopup = (props) => { }; const handleSendTestMessage = async () => { - const { baseUrl } = props.subscription; - const { topic } = props.subscription; + const { baseUrl, topic } = props.subscription; const tags = shuffle([ "grinning", "octopus", @@ -133,7 +147,7 @@ export const SubscriptionPopup = (props) => { const handleUnsubscribe = async () => { console.log(`[SubscriptionPopup] Unsubscribing from ${props.subscription.id}`, props.subscription); - await subscriptionManager.remove(props.subscription.id); + await subscriptionManager.remove(props.subscription); if (session.exists() && !subscription.internal) { try { await accountApi.deleteSubscription(props.subscription.baseUrl, props.subscription.topic); @@ -155,19 +169,72 @@ export const SubscriptionPopup = (props) => { return ( <> - {t("action_bar_change_display_name")} - {showReservationAdd && {t("action_bar_reservation_add")}} + + + + + + + + {t("action_bar_change_display_name")} + + {showReservationAdd && ( + + + + + {t("action_bar_reservation_add")} + + )} {showReservationAddDisabled && ( + + + + {t("action_bar_reservation_add")} )} - {showReservationEdit && {t("action_bar_reservation_edit")}} - {showReservationDelete && {t("action_bar_reservation_delete")}} - {t("action_bar_send_test_notification")} - {t("action_bar_clear_notifications")} - {t("action_bar_unsubscribe")} + {showReservationEdit && ( + + + + + + {t("action_bar_reservation_edit")} + + )} + {showReservationDelete && ( + + + + + + {t("action_bar_reservation_delete")} + + )} + + + + + + {t("action_bar_send_test_notification")} + + + + + + + {t("action_bar_clear_notifications")} + + + + + + + {t("action_bar_unsubscribe")} + { ); }; +const getNotificationType = (subscription) => { + if (subscription.mutedUntil === 1) { + return "muted"; + } + + return subscription.notificationType ?? NotificationType.BROWSER; +}; + +const checkedItem = ( + + + +); + +const NotificationToggle = ({ subscription }) => { + const { t } = useTranslation(); + const type = getNotificationType(subscription); + + const handleChange = async (newType) => { + try { + if (newType !== NotificationType.SOUND && !(await notifier.maybeRequestPermission())) { + return; + } + + await subscriptionManager.setNotificationType(subscription, newType); + } catch (e) { + console.error("[NotificationToggle] Error setting notification type", e); + } + }; + + const unmute = async () => { + await subscriptionManager.setMutedUntil(subscription.id, 0); + }; + + if (type === "muted") { + return ( + + + + + {t("notification_toggle_unmute")} + + ); + } + + return ( + <> + + {type === NotificationType.SOUND && checkedItem} + handleChange(NotificationType.SOUND)}> + {t("notification_toggle_sound")} + + + {!notifier.denied() && !notifier.iosSupportedButInstallRequired() && ( + <> + {notifier.supported() && ( + + {type === NotificationType.BROWSER && checkedItem} + handleChange(NotificationType.BROWSER)}> + {t("notification_toggle_browser")} + + + )} + {notifier.pushSupported() && ( + + {type === NotificationType.BACKGROUND && checkedItem} + handleChange(NotificationType.BACKGROUND)}> + {t("notification_toggle_background")} + + + )} + + )} + + ); +}; + export const ReserveLimitChip = () => { const { account } = useContext(AccountContext); if (account?.role === Role.ADMIN || account?.stats.reservations_remaining > 0) { diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 6b681881..3a710e3a 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -2,7 +2,6 @@ import { useNavigate, useParams } from "react-router-dom"; import { useEffect, useState } from "react"; import subscriptionManager from "../app/SubscriptionManager"; import { disallowedTopic, expandSecureUrl, topicUrl } from "../app/utils"; -import notifier from "../app/Notifier"; import routes from "./routes"; import connectionManager from "../app/ConnectionManager"; import poller from "../app/Poller"; @@ -10,6 +9,7 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; +import webPushWorker from "../app/WebPushWorker"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -41,7 +41,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { const added = await subscriptionManager.addNotification(subscriptionId, notification); if (added) { const defaultClickAction = (subscription) => navigate(routes.forSubscription(subscription)); - await notifier.notify(subscriptionId, notification, defaultClickAction); + await subscriptionManager.notify(subscriptionId, notification, defaultClickAction); } }; @@ -61,7 +61,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { } }; - connectionManager.registerStateListener(subscriptionManager.updateState); + connectionManager.registerStateListener((id, state) => subscriptionManager.updateState(id, state)); connectionManager.registerMessageListener(handleMessage); return () => { @@ -79,7 +79,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { if (!account || !account.sync_topic) { return; } - subscriptionManager.add(config.base_url, account.sync_topic, true); // Dangle! + subscriptionManager.add(config.base_url, account.sync_topic, { internal: true }); // Dangle! }, [account]); // When subscriptions or users change, refresh the connections @@ -129,11 +129,30 @@ export const useAutoSubscribe = (subscriptions, selected) => { * and Poller.js, because side effect imports are not a thing in JS, and "Optimize imports" cleans * up "unused" imports. See https://github.com/binwiederhier/ntfy/issues/186. */ + +const stopWorkers = () => { + poller.stopWorker(); + pruner.stopWorker(); + accountApi.stopWorker(); +}; + +const startWorkers = () => { + poller.startWorker(); + pruner.startWorker(); + accountApi.startWorker(); +}; + export const useBackgroundProcesses = () => { useEffect(() => { - poller.startWorker(); - pruner.startWorker(); - accountApi.startWorker(); + console.log("[useBackgroundProcesses] mounting"); + startWorkers(); + webPushWorker.startWorker(); + + return () => { + console.log("[useBackgroundProcesses] unloading"); + stopWorkers(); + webPushWorker.stopWorker(); + }; }, []); }; diff --git a/web/vite.config.js b/web/vite.config.js index ffc80ab7..840ee006 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -1,14 +1,73 @@ /* eslint-disable import/no-extraneous-dependencies */ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; +import { VitePWA } from "vite-plugin-pwa"; + +// please look at develop.md for how to run your browser +// in a mode allowing insecure service worker testing +// this turns on: +// - the service worker in dev mode +// - turns off automatically opening the browser +const enableLocalPWATesting = process.env.ENABLE_DEV_PWA; export default defineConfig(() => ({ build: { outDir: "build", assetsDir: "static/media", + sourcemap: true, }, server: { port: 3000, + open: !enableLocalPWATesting, }, - plugins: [react()], + plugins: [ + react(), + VitePWA({ + registerType: "autoUpdate", + injectRegister: "inline", + strategies: "injectManifest", + devOptions: { + enabled: enableLocalPWATesting, + /* when using generateSW the PWA plugin will switch to classic */ + type: "module", + navigateFallback: "index.html", + }, + injectManifest: { + globPatterns: ["**/*.{js,css,html,mp3,png,svg,json}"], + globIgnores: ["config.js"], + manifestTransforms: [ + (entries) => ({ + manifest: entries.map((entry) => + entry.url === "index.html" + ? { + ...entry, + url: "/", + } + : entry + ), + }), + ], + }, + manifest: { + name: "ntfy web", + short_name: "ntfy", + description: + "ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy.", + theme_color: "#317f6f", + start_url: "/", + icons: [ + { + src: "/static/images/pwa-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "/static/images/pwa-512x512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }, + }), + ], })); From a9fef387faf5754060dd3e12f6a8921fe99a6df0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 29 May 2023 17:57:21 +0200 Subject: [PATCH 017/158] Add web push tests --- cmd/serve.go | 2 +- cmd/web_push.go | 36 ++++- cmd/web_push_test.go | 24 +++ docs/config.md | 4 +- docs/develop.md | 2 +- docs/static/img/pwa-badge.png | Bin 0 -> 804922 bytes docs/static/img/pwa-install.png | Bin 0 -> 291616 bytes docs/static/img/pwa.png | Bin 0 -> 285281 bytes docs/static/img/web-pin.png | Bin 18235 -> 0 bytes docs/static/img/web-push-settings.png | Bin 0 -> 329556 bytes docs/static/img/web-subscribe.png | Bin 77785 -> 300865 bytes docs/subscribe/desktop.md | 12 ++ docs/subscribe/web.md | 55 +++++-- mkdocs.yml | 1 + server/config.go | 2 + server/server.go | 33 ++-- server/server.yml | 2 +- server/server_test.go | 26 +++- server/server_web_push_test.go | 212 ++++++++++++++++++++++++++ web/src/app/utils.js | 2 +- 20 files changed, 372 insertions(+), 41 deletions(-) create mode 100644 cmd/web_push_test.go create mode 100644 docs/static/img/pwa-badge.png create mode 100644 docs/static/img/pwa-install.png create mode 100644 docs/static/img/pwa.png delete mode 100644 docs/static/img/web-pin.png create mode 100644 docs/static/img/web-push-settings.png create mode 100644 docs/subscribe/desktop.md create mode 100644 server/server_web_push_test.go diff --git a/cmd/serve.go b/cmd/serve.go index a5105bcd..4ec94945 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -194,7 +194,7 @@ func execServe(c *cli.Context) error { if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { - return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push-keys' to generate keys") + return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") } else if managerInterval < 5*time.Second { diff --git a/cmd/web_push.go b/cmd/web_push.go index becaffd7..8b09762c 100644 --- a/cmd/web_push.go +++ b/cmd/web_push.go @@ -14,11 +14,20 @@ func init() { } var cmdWebPush = &cli.Command{ - Name: "web-push-keys", - Usage: "Generate web push VAPID keys", - UsageText: "ntfy web-push-keys", + Name: "web-push", + Usage: "Generate keys, in the future manage web push subscriptions", + UsageText: "ntfy web-push [generate-keys]", Category: categoryServer, - Action: generateWebPushKeys, + + Subcommands: []*cli.Command{ + { + Action: generateWebPushKeys, + Name: "generate-keys", + Usage: "Generate VAPID keys to enable browser background push notifications", + UsageText: "ntfy web-push generate-keys", + Category: categoryServer, + }, + }, } func generateWebPushKeys(c *cli.Context) error { @@ -27,13 +36,28 @@ func generateWebPushKeys(c *cli.Context) error { return err } - fmt.Fprintf(c.App.ErrWriter, `Add the following lines to your config file: + fmt.Fprintf(c.App.ErrWriter, `Keys generated. + +VAPID Public Key: +%s + +VAPID Private Key: +%s + +--- + +Add the following lines to your config file: + web-push-enabled: true web-push-public-key: %s web-push-private-key: %s web-push-subscriptions-file: web-push-email-address: -`, publicKey, privateKey) + +Look at the docs for other methods (e.g. command line flags & environment variables). + +You will also need to set a base-url. +`, publicKey, privateKey, publicKey, privateKey) return nil } diff --git a/cmd/web_push_test.go b/cmd/web_push_test.go new file mode 100644 index 00000000..3241ea43 --- /dev/null +++ b/cmd/web_push_test.go @@ -0,0 +1,24 @@ +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" +) + +func TestCLI_WebPush_GenerateKeys(t *testing.T) { + app, _, _, stderr := newTestApp() + require.Nil(t, runWebPushCommand(app, server.NewConfig(), "generate-keys")) + require.Contains(t, stderr.String(), "Keys generated.") +} + +func runWebPushCommand(app *cli.App, conf *server.Config, args ...string) error { + webPushArgs := []string{ + "ntfy", + "--log-level=ERROR", + "web-push", + } + return app.Run(append(webPushArgs, args...)) +} diff --git a/docs/config.md b/docs/config.md index 774f9b2f..3aeab614 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1286,8 +1286,8 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | | `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | -| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push-keys` to generate | -| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push-keys` to generate | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push generate-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | | `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | diff --git a/docs/develop.md b/docs/develop.md index 6be65abd..09215d9a 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -247,7 +247,7 @@ Reference: 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 z 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∈VDwY+>kNcEiivKvtdKrLoui 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

8Ek<^i4 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

x?A)hy{o3zi*v9&q9Amgj6ua9a>8 zDun+ML4hxr?7GE$ypM#EkX<{AV?xcjpON1-;R1kk6mhor40t0FTcSJ=DG5+JR25E; zN2P)bpB-t&b#lK?;0)PG#|SAOjG>q}@L!WK*P0b!BJm3$%yd3!EQI5BCtk)x-EKW8-GGCg)(-nhEhlvoM0eOv@TiZ3ZZK|Pzlp>2_(wnAvwU7QFUMlwuv?b9&R!@d zM*QiLT;B8}q8*q)HP3iFcJ;wpjUT+&_K0!D%lFasdEZ>ldwig(0Flh}dOmG0G|?t#)hl z1eWt!hX3%KXh8GXU`X|RHaFRc#&GSJva0(KRgURO#ui{aTQ7I%hHNMF5V-2|6xW@* zZWz5TqwLpH7EQm}m#|jgCNM{P-d)1gY8*;FKaO}_0S6Lbi85_z$F#ZRt=Gq7%rS_V z-bhSO*;d#;KFm7a**^IF3Abg7OXw^L`H`jLZha$nFrr%>NC7m~ov2~e-`IG^wRkgaIGSB{;brUVDV1$7-l z%FNaqc6!Z35c_ks)95rzCrPBo_g`D?>|()hdLnO|>@1<2`US%fX|bOkO^-{}`4ArT z?fs0~s(Pk-X{zbDL>EBhgWj&n4@8J$tm+y1Wg?%H?@4>*sa0>3`-) zZWjqEG69=bkVPeZ2sVV0Le>yn^Jo?1uPRW$iJ074<~P`V(z9HtJ$>!h(4y5*5XINQ zgc9;$zW#^5H?i$ohej5_1<2OC+s7#-bg)F$32~MEOknlpv5u2?#XHJN&#gs+wJ1|B z#F!hm;?b5_2S9ZF^sk`(n(-Z_-`5@WsQ_+%cjIV-MKHu(|0K$$nmqgUtDA)TZ6~1L z_{$gTkwoo)DPOdC*9prmx^V|gQ$>pa2)kI49LLDyFNz>PuzS&N+nv8)-g`TCmi)Qo2ag{NWA?vksFIa48+LA{^4UL|q34(@rO`l@(8*UXBV72;#Kr7bfmDQ`~As! z-!$L9P-K4{byZRLjRODDID20HqTc3@QS*;uc?ccqV3Mu=Jk67Mz$lf9pr8 z|1`T&xZAr@WC+Q_1lX8FTD=~?^w`y6We%Qom3TcAWH5T8%ms*ljpiM6uyE~|!!jO% z#Nmv$q~m4q9p5_Mg<70jb*=vu8ns|+asqF4dl=E#2QwKjr1K)j3)w~L_a+t|NXl<4 z$BR^BLV|LwTF;IlSj>I&+FrHIb?#Aiz@I%F>a0>8iyRd<%MjXsdx61$bExyRW~ut* z?QAyd<0%SvTQ51(vkSwVinjY`>D_r}EWi`V>95Ax5g+te8>__q#u{)|>^Hq5mxTg5 ztmm@yl#l-6-xQw_ir@2vwjJ<(6nNAwMj8K8*W7|MkSvl>9NMRS$adk;O}*s8eUs9K z>ATg_fvYWKJ(0%4ZF`5m+&KTJpa85qh7GK=Q#&?Gq||yXE=jg@JA)1&_0q+iw1ojJ z(VjF}u`nUv29)XI%xM9MJkVaGnGrm^Hxco!ooeGQq#L*(M=+S zYggYuxxlO7Bgy4XI|*EvV6aT5RT2w)Nu7u&=Z^?PbWO6XlIj}|>K9bGNiUwiPuZ(4 zVIb63%ER3LIsd%fhbq;~(P7yMv2DVRC&vl^B0@+Lp-thCRQf+6AEoxbER<^ zvNP1)<(Sz3qhs8>S61L6=_vWtvjie{jl1A}tOmZsrIPok?7vw6IqUwGmvD*(_*cr( zZ2gLlLH4~Urv>OoC6+n>R)u)wE376qK3*1-S_G<2?zc-R7vCzAHGsBdv2E=9QS2>e z{)!Gi>b$=5zJ1k)Wuvnf7HQkh9T)!Mm_o)Bz%phICcB+GD@XX-KtR`sQ#Dii0vd>UEc8iN@H@J(tGa$R~f3XA*&0Pjdd zoTNCif%d zPR*8a1b&`(20Uh;tlo#Mz}`L!SyUe3Pl!4&PjlJ1|NoZ{{?`x{|C!yW-)N`7B}}5% zPw|<853HEf?F@cY_B{6eE=QcDD*jCwA`^S?yIA*u&(;RC!(7Q(H!kyQEJJq6H$SFy zgb7ZF{E1ZHp*A@#=VJT7pX%d?GH(*w*e>n5`Qr6T=&NH_ak(?MZhJev)<^oqG6iWk z#uf&3-%D*g@0c+rZQHga5unur2*ltGLmO1nd`7tXp|X=b}<-l}$ZQwaTue1{;iF=5v|z(H-t%gQCRy&e>*ivyr`qi$6SuMcklOc4<;_Jb^A z@T-(xG2^=mPd(UtKUT&o6n&Ckl$lLz)|`P^D|ZF%w5-Xe8c8L0YhK>Wd>w-aa2-LW zx09+}kHBS}b_BSNSuq2)z7k^lZw7t}p;WvQ`98}mw})_oiVtl-^n8!2wc@f3G`>xT zbg}9Tt@%I$1*eAJ{)prDN)_xFHH`FI#L8XxiFOFn8_df1hd!W8R;b=sZ&ZVUemTcKTplG*WE)kG*;`G5*xCDXJTEb zOs;wMeejod7{CHeC}W<~m5>K>EkpLfGfiP}AL}5;PQ#412-g}Ieb^2ti0zMsbG2MB z^XKn~eC8+V#RU#^1dQox`kMVkWK&7|&aWxepMY-JZ-TscvxJ5A0yW4d5|Zn-)s=@^ zP{ZFfFzQWr_QjTDY`OC5W|-|%XRNa6qu*H=vqc;679oZ3&|{wKQg$B|Lnas_S2&Tw%yk2xyq^@d)E$kA|Nd-91fKe) zd}%dpjW|#tK6x=Ye%OCp>A3 z6rbaEw+2v!le<5K)NDZ(8!hB_iY~Pr2q}D+F^)VI-%NeHD;lyDV|(!s`2p_)@sc15 zt@d23@BoqLDH2K~dMk+nw^ByIv$AIG01ZbB!;me~ zhF1EQs1({!+5cS&-~qfzmj8h7%f28`cQ@y0wyGvU1XN!#44qMYc7WQe;pg|Y;G~Dw zyG%S?egD>N?z8Z!O|Nw=cN9=WIicE3_-4AbL>4CoOJXWG|1?Du3oCWET6=C)rt*b5 z9`peR?<<4&-G6I*+hR@pxJp^js#wXr(RRR}|MRa~C{Vu=8>(74U~|Tsa^m&5Zj50# zu)SLtyA5yp!=EpW%@AO`;sWhKg85Y!pr4${Velg5C31YoEp)X~)&@pOeVMz|MdmuZ+2#XNVuepr$YmAz$lWGukTfr=|Nd7p649YI`NKpbpzE#}N`$&X2`qT(8d zF9=Q^C@6-tQ&CAZ)L zO}yK9&>?#S(eAm@F z)!?ZBc*FNE@iN!&ZC|%;)~3blZ*_d-tv^Un?wMQhDbw#8Y=f8PM+bGq5yQ{tdNOb0#e323U63Gf{2*rKr(CoSe48+sNJPz@SPRV)oQV^VJXa{)@y{3(>{$l zZ*r=0lHRP2SMKZ+>TGmpAG;anLHV#|m!P}c*>3EgX6t<;WV_0wFIZ{a>V=nVEzP_# zVc9e2NOJ%kUmqOQ^I+wTwTV6s1p{(DndI365ykit|utrWHVE1f?wmJeRXdxMYG) z9Q4ZWZ7}+mA(#vpP2b3qP)!?m^?IM>Pv!ceIwE|vy@-)|HmK$DL?UPBU)4~}jI10< z94t!d-MA~HPku$VUCFSaXL?Am6+wgd>IPj}ReVZ4(&Gw6D$U80f*{DemV#$%6SsMT z2oJ|N9Qm4@4A8TrN3l2{t$wEOh27aQgU9GuRbPb=HmcSEn&-o|IPPVXBiGqp1!Vfd zfhT&G;`nICG#3Dyf{Q6ZF6KS-w39hE8%W4LQ)3wsbR;74Fl+lQ_o0>S)VYJnCvb{I zhO+4u4w(n(K^8bl1+H_vv9{gQbkES*7O9{S_SBC2V(k#b%(a{eABa+rPEo6oS81&`V zbI7QD6nbw@*i2Sjxt=EADA>Lod%pa8KHnmfy*AfuFen%l_Zj5QkzU0SWA6+oJWtyi zXQl6A^(fIejx}Qzbto%BHL>ehuR5{EnR65nBu|MREvpncru`&_ASc#wzdZ%y51bZQ zD5+KZUsF5_>Qx2mjRURvb z|JI-6)463z=u72$kvy&aRGB2P9xpV_r#Ce5j_@0!`1mX^&1e-Z7Q@KgkZYW^wesZr zQ3|*M7%IEkuFcNbuyW5n=CLJZ?Z)UkxVYP5Sngt@?Nyoyk&2Fm7eYn^&ZEopLV*vFZvxr}8)-jwQk10~Q% z7t>~FGU=mjj!r6yIMlN7Y+|@zaSg8))+fxRxYhyHbAxuoa=(Q|s#*pl#hG2M_Z()?Z0s9KNSD)IoiqzcGvR>MPj4*~(y?Cg8@Eh+jzl9_w0y|_=M&V7NH z{*%;qfueTy2Gj2OQxtKB4c~>6zb!^k9XSw>|JCXl${e;dr2X#hREuw=YMTBJlln=qBsdldidpifh??pTgI6Oska&9ndw4&vzC> z4>qkywePNUiS5(k@EvNlpgTp#lH`FMF~}cO8P(EpM4>|jfiEiGVBUlZeQnNU2%)fA zJ7@EnYjnrYt{2Hj`o5@q<hV`bh^SbnN&YC(})amH6nmQREsQt5m&h*TqhU~!#GL2l@3BC3NvC$vZNZ35NK zvfuk%etbflj>HM(@!#sMu%4@$aPM*{o~Im!)u+exsb%ngnPUip)B1dqy-C4u(5zUG ze2~88Q@MJ(49DSk%QhhP;$C9(niw~Q(ZQx>i;LL*3D#UHCiY|WjW2y>tGM}-H#V6I zp&V0m@f$gMJo(xm*(=;UnT0`XUg{D!+a}ML;xn^)IWu$SJlDHc3=aOLi*TRK@W3@Tg^E9v3^AFK zYG;^8<7p>*DB-p~cuAG}kKW2^_FU=*ZTmLg@{kihT&dJ;hN_4il(O7UiW#4Y%(Y`m)9y*qHpvNqz$IG*I&U~<-XlLL!uEf-G@(o$RHpco zn~c@#s?S8wNj<&wgnQKkR(4{6Gq&p~(M;;E%bVKq45x09#|TUDdj>WMO>(C$XIu^2 zL>K`neZkDwz_u+sJiZxv_2`81`B+(VaVL|fHB+B%U*0%5p(h#@Ni3<~sB?X2f?-L2 zaYBUqs}^=*HMna3|1kgjzhel{i)Shm?{??#eNDJcRG?d?UH{QHK^_!&y7prrmQn`U z>J`bK=T)?2gM{jM2O?dh1R-hkEB5?3EojwmbGFb6#nK?GP00eMbkO(Wt|y zE94NOj=e$SqNFJ5zV7Ghf)WIYN4TAmRb8u!V|vV!x@$L)@Uy|}$0RFE<=kuvUze_7 z15=7z?xEr&B^WSTbmn5)xi?cS_JulcVR4x{Yz@!9H^t$o^F*3rFQ3V~SxuapGY*0z zE62AipPA%lSJ-z~N(>76&RUil8Z!fKZnGXT9~vR3~z1;)ileT>ON zRIY*NYCoR?8zQ-Rl>(nWTv&bfUSo>+rzQbnG1VeJE|XhiKmXwSmfdghcfCE!yP!L- z95-#FclZOM_*q?MeS%u7^-IWR_#}u}Yj-g;$nZsos*G8-kNqUVApHT2N1pQnjwW5~iqXk-rI^kqFHXi~`CTPxF*B z@-f`#JO6m8o8Dg?9ck=;(pQxILLXYwvrM?7t<;X*!VHBJ3#RO)?m_fg+eU(^wA;-ySD7}ube8+ zp&_pVrJpH!X#^KOl)4_gh}($~d_v^Ok_oWi*9Q$Jd)`r4}mTUbJ~+VY_z^lW-p8;#+}PsHia9&eWnT3)cRfJZ zD^KP>e7GmhUG_}N@qsLEK@XayxrKpJVJ_*8(##A6?;cwSAy`rTem7ic38}R&@j)#i z8w$2%_m$@W`m5Q51fb=4W9xdD@*o63XRFD|j2LVB!1|}ZV`Lc1`Bg^}eynY7=)DSpsF!G{dI#n=&bE2F}ylGFH7|Gc3L~cBZd|$YJGuKFZv@K92L!vwBFiqXH-vjhfW? zXqbBK?AIet^Pi}vSe-jB*Ey_&#_;cr4`|=%a;(Iy9WVUGIqoFFx&Cuz?$s-?oNDu9 zM*B`^@037Sa)-k1GQvn=Sx+$CH+5VZ~f#!@08xVC^ zSQPa;>+a3$z8~ekd=1rt()P>aXEsO44=OgXm)mEr19wIb^#8u~Wc%kD?mshSrXeC% zRB^dFzn*Cgx?Nqb&376oQmqEH;mg&Nq4ph=L6xxkv~0Wmja|_R>rsC>6YR#(5pA(4 zmiT~co{6JI>BY2rz>veQ97!1d(If-WFZFf9%}c4&ho#>H8r7y~iNnK#y@+xyuR%)> zj?_kA2q-sg2NE#9LG>Bmwm1X~qWC9ztq65|{@*ih|BufekZ~>g2?W6*RyS-vgncfp z8Q~!;C%e}Fwd=tL`Im(28<#A;zd6iTbHe<5Rn5hft%h|XXWWFYrzlI&^>KG-sOnar z+k)#8s{A=gvxh};S@ zr}-wpAbfL6_9aka(Xc^G6O*eRhwaf_m!nn=lzOY5tT6$xKd}EO)&~0S{>~*qrTBKe ztrnlV(}W^2BjGZY$qoKie$Bar1&dFC?YvA}nid8{=QhQIJk#c6k7#1dFWZq=J(-3r zMMJIP_g2Qg;C#CA zu+bf9v;pRH>va@R9c{N}arF~()#$z@)Y8bS?KjCIzw3JsG@uZZOC)hPC?OG2Z1L5J za0w1_n!9m!i;FC;@j6vXl=l~dOSF3X_#A7{MX~K*AncyyW$n$@(k{=AV!4NoaO?EQ zLA|qf?c%@Zmd0Dd7D` z!)JGMR27QhtSSKFr&zIOG%f+53tNoa)ybEg-7JXRw_Eh@rk#t3Ri7A$0ySQagQqbb z4o-PJnB_Pu`i>nmy7MiNQ_C`QA?rbEc2t2PFQ8M5G(WbxRrJ30X|Ty^Jas(DGhLp3 zn?7hUKWo=I!w+vQe^^dORiHg`eo*=f;$PZB{}aK_hh z?im&Wk={#a#{7c3^!|ZrXuk&|d!$0%P&Obt8Bj;|vHGy0ddzQk>6o!ioT0VQv4F*N z(48YF9>B9pFqPTk;%S@=7&)Z3Sl8BWxc@#GKP_dgn78J zWXo-GH^HabdJ6toqy3+!%<4cQz*x-#Qlr>eIil#hv};&(I8*@;ww44&?yCsS#WH=FpUL80>yKk>i24jMh+Nkrk^{Kzw^gC8Z}`^JB0rrVh;D+4!S5OH~gnk`QbU2 z^VcdtPu^wSlzF5oBe{-;RFPWqfwG@tA& z&_B9V4@8Kve~21g9UnhIM!xFhA*WBjX-kp(%%F*@aK43{@n?xTA^_F|@Ad*U$h4soo;tcQ2R<74sPL3< zPTH*^V|e-AH)y+m410mbjflg2J<%;?FY&q4E;@ao`yz}pcycq#M&fax;*esC&r0Wa zkDN5V6>*J^UyVFC3It6h!~HH{jDKCR5aaFB{44VICRQLvM6qhUiq72j*C&%V)OHnV(OJ3i3e;r{AwtQ>ijCBDi{bJBVORfpS8ZG^BJqb#umLeDGu zQ-=UiYR2|#aJ2%Ae&0HpcPh=-SFMTLhQy&cUmVyqI*}#?()=BaC3xa>!w}<3<9dCo zf09D4uZ$W!a>0nmY?@7+El;VjdM$s&_^LSC*8y$B$7AAi|NZD}?gL$yi4c=3oGVk8 zZ12HCg^I~?%rTh{?%Osl=5bpqjUC(w-;c9(m_S8yB2Rk;R4Nw+((_m`$jRy>cz+IG zf^>n?$j@(&py-d;loxk8JjfBFTR&1Z;Rr#~FRfi4d9k%9cAyW&5#L>Q!0QKHtmAu2 zGxM2B@hPU;^Fzus9+=V8K<7u}^Da2);{)=Dn|o*t-^-C{d|*jX^r-S;-gBOL?na%- zH~@0@-^L*RJMp4A6S1{~xg)LX#jzku0^DAT7vie#q}QqY4%l_Qz56E`+QhXk_i~S) znG2w=0_|p<|HF|QyxN>`>aZq~glYdsExHWUjldk=KWPx%jj!xgh;A$V1 zH}75V29?j=y%|D-q8D2-x>7sZpxz?@z!5@4??P=j%X-wdn}2Gtd@jyG9*kZCx`zYEfLG+J16$qUb3>O_Pb~HeR^~)2z6>Y~Po{3ryZqXv0Ns09^Oh&&%0XyDPoIx3MPK4MD?oC^`iFL|VE*pX(F{ zIi3C>FspglI*zedtSt+2t*>lW;ITZjy;kV=ZKLDhTt$(!$4;6QgISud-K#(NHO~EX zca4rZH+Iy9s-Vf|15|Wb(Gu0l|N9XB6aL{OkdDxNdxDLdmRnGK>ojpYFZotnhfXSq z5Z;HVXk5?bai74C6l$hx#q}&-Ly&m82iY5CO?9NMJ%DUvt}s4alW&EO!#^?>$7zUm z&}eltuSm0PrG96A)W3pIyw8R4>4`7mS!pC+GdNyjsCuP)nn0Oka z6Iz7RgsLVo%^{})`Yg_|Fnxk;&j%v37yWlZ{ek;^K&)KX`qKgV5pzW1>p%5#x3v&* zH=i*OWMVkRw#7r%1SuVE-8ER&!mGs)<_Um3x|Md}w1AoibgpgQZIp|@)IBdbVOOjF zEY(9e-EXzu$1&0MuzxgGt(t$W4>j>^+6eGUP>k-{!A(K3{JF-T+30}9pZ<1-V#;t1 zb<|&g*M!yt^RiYO_eSllQmEu@r*O2HTwV<-uufD;X5e{tMlIKJ&l%x9@yV+iP7rFV zoPQg-`0u08be2}TtRctV$H@oBgQ&jCnf08<<7Y7E_l4Dw62e!<>Mv9LHzeeM#jy{j zZ%UtcIpBmTJV(ftqDVHA-g2uyIQA~Stf%#+Q8DaQi-5fZ>c#?M7S-6By`jcNY{@lc z`=p+-J+^#}vAwuzHxDW+9=m>Siz?%%!>OOk6_p3^!FH2o|I()WpE&ne>Ra@q2mzJvSn-cC2R7IE#%aS!v87^<8Yax=aW^_6~M85~e zq2u?5e>`K>$>c8yRDFU?d-=|;QP-M#D}ySL&30Nyb3(sVz@5K`W6h!|>ZpMb5T`T2 z<#=SuRDU@oJA`i>HBU$De%gGWp1KIgrw&j_jmS} z@oAR?R2k}kwVx?_kl6YhR%a`T9WC|i89(^2<@w5jHr96 znCFV&a(?=Wj?-_DkT<{P(PecXbQcn6X;T%9 zP+`zD0qVmCs^2lNvK7F#_E3uwfGMw?gb2IW4OsWORb(4S*Kpcr>VwL|alS9r2*q=| zBh6;FpiQvZK-CL*T%7DhH>c|KKE0Y|+ZOiT;UWi-+Twe?JrbOzITLOz;kNQ!+^(dA z0oI?g7TqQ&ArLEkFJrJ0V(c2eMdvv0TQ`PRy|Cm<%@auHseMl@Byz+lzb#FXx)~C| zTc5?2k_R?k;ty(EiM2^4o|Rrabs^<F>UP zJH{F^`}`<2&*Pj06^ckFM#jCTQ)Y%}sgY^8GqX!PzFl4T5zbgI@Ux>hT?^`Q+5?bD z(+ArzCJdyTNqgutVE7EhujM5bo7KZW^x6z|n{7*w=pCokiF0p%uWwo3ZN(>%QUvzW zSr- zvQ4Ie2`Zu?6CcL+4qFj$(7&3v{-;S2q2e-KWS(8R!xSmEA}i;++(X-E*MOFs0;)z8 z_kT^*haTy?TC0r}l#*?Sz2JL}bd{ebtP9SUyRb}0?MU#jN=fP}w!%6@cp6CM`*mDD zzgid%m-TpvKHy1lYMXJ84xzKOjo!ttL?*mfjsPYZgeYVqGMu(X@NETw=4>m(2`;A7 zrY2T8ROD2?&1_LV*~c{k*zqTK zk$WSc`Z?@b8lT0mSiUjvo#LG0HX+JB9#Ryx)a9V2z2S{-+~q1&ti#dvF(|#0&Xp$QMtEYv3s~>4o|iEUnDNuAxtgjTr-MJ zd+V#{)L1nEB5rkESHB>iZZa-vfuA??5BF4ph8J+UX4W*->jJ`CZBIh{-yKg=UK#kx0`NCX-cSgoG+A4b`g=BLg*15YFnK; zLlG}lu+hvt1gP|vlp+!l~r#AGVo9X}7Uuov);a2Cf_*D;(nGfjT z1y_ThFEn=`<(#uwMQGxocajm8$o_U4})RZp;%`c2Qrtgr@s&MR}tlHzAs~> zM$k5$-ePwVSY(d5DXk<0r{aM0~=LSLs>zTc;@)N1_3?MlKEI*t&!H(wh)WH45~7i*mnZWid={N<7M_#sbMkZC?ZGp zC9y1XhQ!JOSj`PVfWsNKz0+FLl}d;GGK~9Tp7U$De~F?<ILWWPm_FH#_eByo>dU>=_#j6?;ZHX2!Hwvd6|zS_V{exQ%kt+&!A$c z*kKiKcwVG==Q3sUf&(3a3uS{LhmEo?`VsFPvxUwm<^G?iWKv&Y;;b%_WCiA7M3x~`7=3eia|T~xk% z6S|LZV^x$Vx8>8a!`UZDIz!$tIsa?p$cqmpkyu;yW3JH%(YIvbSf=z)ipy)RWM9Ik zVWkb8RtdT5QVmxRZDYV2)dJr|QQ25ya$zESQwY_40L^~g_ZhCP*{F{w<2hH?T>R4J zX}{FF)VC9|pXI5U!bsagjo77zZ+fVgBx&O6Fe9kGSYIoPf{}OpG|O6~K$6?zJA-J^ z#P*7BXmOWp$?8uK)P|}D^jgz1slAtpI-n1ASFw~AK-ym8MYZ*gwrAk?K(>k?=ej5oLoYDIpHO(oKqnr)I&5v^e zp}jgSK=?ORameb!!~^Fzc3%IX!#CXze8dF_(C*Hrk$>N=<>Y@}iyaCE^?J&n40l%bfJG zLJnn=tS%DON>3XDZuOaZuTH4`%&iVFJLot+C2NZ}G{~@N4O;zckoqB*zCLa*^X_o< za_>h}JWYdqrX1HE%X2=byIbD@|9SA^fySW`>)aPH245 z6>gzaMC;;lW*^<(*X`o&l8T}<8@Z198}q)HC$z~w4n{qx|F!->S~agCjZVqXu+?l$ z^vmBgx&lT1jh|ilXvy%s=};g?2u$B{Pxue|hS_89Nh&AZUJQ)hj=4-&e~A~f-iR>Js|suYQ|Wi?LqrDec=CXBHi!iGGuI_)}*p{YlNC zeGLV-#W)n@|M)U^lMY9M?G8B#w25v-_3NFcs0Z%pe_qs!{ZxWkLVczMy0anr0o-B( z8apDwnXF00{M!Q)hj*!4`uHe)#SIedn2M^0}(}~ z3j!7dkzPU+m52(cD7}a%MY?oI5k!hYq9RR7R1}n6r4s}sA|><=p$7;MLI~-}8~*3r z`;6zD=h=EblEH_2tb5&S&Nb(}epmU@{cpr{MdT^+va&>2t@IP`N{#rCUOj8-akzOy zZ-oozR+M+yzSc(Dz8E{uj0JH2SAooPQU%DL<`!@9xU=hs)7bDR*n|bJHq+>-s`?Jx zn$!(vW;()-cb1<={!!AcHj|w*fg%81$&2Vi3t@H{c7pw#UONr``f;CMaw!~YBgS;! zfBGIA>DIrxJgc&L|J7$iVTK3Y|JHrI`0oa2FZ^;x+j`G;(AP6{rW18Lh0DM`uNpF< zTl>C77OI0bi9UDE*9{4Sx0O24KEF43=3wH|*eU5#VZ7{PPUsxo2Z=BTyjUS zxRbg_(k664Y!@T9G*V>Nrk{}ZU~(f3#CuEX57XuUJ}9^yRqOV`u9$@aO;C~Ksz{FP zYjoMb^66=zKHYKgqMpTxO}M4!=;7c^@&P%IdxRy?W1{o7lh4fHTEaHHTS09nH*FrF zaC`2$Z-BG$taK8yhf_3OAy4^#WyIf5B=F3VY8?W3#mmD%H>MvtmfhN8z3+ zHeZ+ZqL6=2qt^`QpY`{O+;UWT>`d?ZaU~vB~Er+{phn&CMZ{Zdm-e)nsR($C2Snh2Q`7$l?i)Pl~$-P{RS*JX%6bz{;1Q z{P+^%j0a5f(olemWE(_ScT`hJ+}mLvwYw?RyJjo>sI(KcEA!6fMwcq+7O9TL*M4fi zNK_BrR!E55+g-bpzrR%XERzz*D_p;D;f+Y>QyoA{U3qtE!{!μho>nS>a|&RS=w2b1&@lBg!Shg?gaby7`IWsw`R<) zEP?t8?+V75LJW;-ky3~|iVL>aam3upUqsubZ&((eM@V|{Ktk-f=*)P&+3R5XQ$O`v z5-z#@TDOpKj4QLLTbm1(%#|C9v&69^q2C@t{3@BRQ_BhGCk7m3fO4{OQ@CMv^+{>j zzpet9^T~Wg@DXEr?&IELKgNS1z2bFZ7n}DS1y^1$ox6H&6ncp4PPj+o!a`gM zLz|^MGu(NE%8p|*5=`lr#2l^ohV^&ftQ_CM5-|4R#H8`UtGgk?yxv9 zp{tIZF0_c#iTMfe@oS@ECOm2_|F(y6BwVD~CfV>wVRUunS-XHux5>(z_$fC*NGGEv=eJ)SeM#_jyn}WqgM%qT>A+Kz(joXh)Ejeah3G@EKdt>)?paKKkUFz z=D-7R{x`lbQASd;+^C6@X^;!2dE)DSplqN-{)B-qqQiA#b1f(IO}Q7hn_T zC1@v#O7w~cVvy+Fo*C4h(kw?QNmh%fpF&oqbG|$H-Mws9H_FHZQR*-gEH52wd*Q(g zyY8{F$Xs!m3DgZKJ0QBGXzIB6h+bc26HQVi22=_CztdhX9*!})A|YyN4W>Ar!{z^lx`ueztUhAS}rm08bo#O~KSb?xuT zHZiI1r-XXqSLUj6YCB`@K9@Cy?OvK)Yp)QAgtWRxU&@||-!!~P_KlKh z(#bp{HS=pr-0Fo<+qX57jyRdJu?L2a;JLDOepe)Nbj(7(RNonWeC#Bukblk6QROFW zG*)#_?!-B~_V@2ypPV`>0egsHY|k*;zczX?dhlfO{JqM|&f&mTh>eN1UTA=NV4NU8 zS10&I%u_%l%NX#nr-h;5cWQGhy{BPJmteMoP;DKCmctYig2`Q1g~n7C_wx5^YK+x? zrPC>DD#&VEk{d z)vmlfUxhxM2}oUj`f9EKNSRXm+Cp~i&Fb8x9oG86*eI-3?m~dQ>qz=tETka54|Vp6 zYEI5jIQjdqL)$u6FY~53u@cB@+9RPbD14`3{CKuK>efW+=73S!Tgx~{GhlV~fr}@F zhcHJdP7W$(%Ooky(OQ}xZZ70iF)yT4RTtG6tNwL%dgzi1JlL-E;@-uw&p>PH;u+m{ zxNk7o8%5DhN8Lo_YJZm_EQ01GjCDyL;FSJT#X%mEv9B^4047p$tN`OE$SsRkAZx5> z>bmEx^^@JQRYTtJdUVMRCI7MyXMQ1$`lhqCc)y2!B)Z|K_rl!sGz8+rrQmGn$8enW0y!b{9zj&TdI5{fCZr{tFnI8Q+HJ3?<$s4 zi+tT5vbcrSPhh(x&@P0ueZ}eCETD|e!qQLJk(K}`QNjq{vZ!6`Ha1w+(+`RWU7GZh z=-b^lEO)8eS*67~iKXIP!VK(ClsCJlyFcd2n7=b5c18W9jPB*vqYPJ8P5gN9tF@L7 zou!K#7{10+!wtOYYLXh*j6CYk7*K& z|Fgi#XHjJ+|*mC~z>-1B?u-RAS3qm^D4zX!hU>(mzw?kL4I%CD6HlM^x_ zN@M)35=5>4R?zDSnrOir8WN3d=xL9A}X`G=Wkyr9$6)B;3LXOf*1UrTXKBF4#3J`3eU1Rd4zG z-WN36o3(W4OW~=qdag__sR+ixw-aC-hD6?Dv)1ju=C{>z_@@2Jwv+V1N+nasvRTmZ zh?X|rKd4Qv+{-1x_jhBWg?;r3)&a&A*?WN3BbSEYP!aQ7=8vOBU{!2uQPh8qFF6W3 z?z!KH#JdjP3tH@yGx4^$gGk5fS2_Dwp1L)pDaM=aC1EVS=kS2viLQ>pHoVZ5P_xyK z&33-c#0Qw3E&javn6*bAUid$mIQFV^%%0Dw-kcsRp%4C=U%8t4TI<~i(vdDhC)~^q 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�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

*h+xPgcDJQlicxK92<&WJZ-B^aAZ5+3Akm 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

*<&?s`_kj6hpcHbI!3^?D3x`LeQ0dN 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νj)i&1uDtwu-+B_ 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 FV1iUJ8C?JX literal 0 HcmV?d00001 diff --git a/docs/static/img/pwa-install.png b/docs/static/img/pwa-install.png new file mode 100644 index 0000000000000000000000000000000000000000..e7397add644039938c0aad554896112072c63384 GIT binary patch literal 291616 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%0AI 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
^_F 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

F=21(*!qxJ-o~qimEzHmP^|c`fpPG{9gNLPN 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

b~d-$Pj~>i0N+ZVBA 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¬jm;SdKzJ3>>xQ2uueP-R;Oth`H@Tup-|Q| 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 Nz2&jP7>hGM{|{8ked+)J literal 0 HcmV?d00001 diff --git a/docs/static/img/web-subscribe.png b/docs/static/img/web-subscribe.png index f60a865844580d11258c9a6ac8d4e6cc9d727fa4..50db6763e427eb94d848d9f9deb6958cceb8d1b7 100644 GIT binary patch literal 300865 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Ü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 b!MXe!~=o#KPPyFt~ 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∈=)zMuGKG~Ey!`!A!p3$e9Z9FYP!9# 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

HT=0ZO(Fyy95lq3%0uhR-EXz^#n;W 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 uuPV-8pGrs}PL<;c$ diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md new file mode 100644 index 00000000..65284543 --- /dev/null +++ b/docs/subscribe/desktop.md @@ -0,0 +1,12 @@ +# Using the web app as an installed PWA + +While ntfy doesn't have a built desktop app, it is built as a progressive web app and can be installed. + +This is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. +[caniuse reference](https://caniuse.com/web-app-manifest) + + diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index 5c2672f0..a563f8b0 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -1,7 +1,41 @@ # Subscribe from the Web UI -You can use the Web UI to subscribe to topics as well. If you do, and you keep the website open, **notifications will -pop up as desktop notifications**. Simply type in the topic name and click the *Subscribe* button. The browser will -keep a connection open and listen for incoming notifications. + +You can use the Web UI to subscribe to topics as well. Simply type in the topic name and click the *Subscribe* button. + +While subscribing, you have the option to enable desktop notifications, as well as background notifications. When you +enable them for the first time, you will be prompted to allow notifications on your browser. + +- **Sound only** + + If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title + will show the number of new notifications. + +- **Browser Notifications** + + This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will + appear as a system notification. If you don't see these, check that your browser is allowed to show notifications + (for example in System Settings on macOS). + + If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave + it running. + +- **Background Notifications** + + This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some + cases you may need to keep your browser open. + + + | Browser | Platform | Browser Running | Browser Not Running | Notes | + | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | + | Chrome | Desktop | ✅ | ❌ | | + | Firefox | Desktop | ✅ | ❌ | | + | Edge | Desktop | ✅ | ❌ | | + | Opera | Desktop | ✅ | ❌ | | + | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | + | Chrome | Android | ✅ | ✅ | | + | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | + + (Browsers below 1% usage not shown, look at the Push API link for more info) To learn how to send messages, check out the [publishing page](../publish.md). @@ -11,17 +45,16 @@ To learn how to send messages, check out the [publishing page](../publish.md). -To keep receiving desktop notifications from ntfy, you need to keep the website open. What I do, and what I highly recommend, -is to pin the tab so that it's always open, but sort of out of the way: - -
- ![pinned](../static/img/web-pin.png){ width=500 } -
Pin web app to move it out of the way
-
- If topic reservations are enabled, you can claim ownership over topics and define access to it:
+ +You can set your default choice for new subscriptions (for example synced account subscriptions and the default toggle state) +in the settings page: + +
+ +
diff --git a/mkdocs.yml b/mkdocs.yml index 4a7db366..76d39299 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -82,6 +82,7 @@ nav: - "Subscribing": - "From your phone": subscribe/phone.md - "From the Web app": subscribe/web.md + - "From the Desktop": subscribe/desktop.md - "From the CLI": subscribe/cli.md - "Using the API": subscribe/api.md - "Self-hosting": diff --git a/server/config.go b/server/config.go index f7c1813d..d5c87672 100644 --- a/server/config.go +++ b/server/config.go @@ -233,8 +233,10 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", + WebPushEnabled: false, WebPushPrivateKey: "", WebPushPublicKey: "", WebPushSubscriptionsFile: "", + WebPushEmailAddress: "", } } diff --git a/server/server.go b/server/server.go index cba74280..72e9c19a 100644 --- a/server/server.go +++ b/server/server.go @@ -77,7 +77,7 @@ var ( rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - webPushPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push$`) + webPushSubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/subscribe$`) webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) @@ -535,7 +535,7 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPost && webPushPathRegex.MatchString(r.URL.Path) { + } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) @@ -985,7 +985,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { return } - failedCount := 0 totalCount := len(subscriptions) wg := &sync.WaitGroup{} @@ -1029,12 +1028,11 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { jsonPayload, err := json.Marshal(payload) if err != nil { - failedCount++ logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") return } - _, err = webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, @@ -1044,26 +1042,29 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { }) if err != nil { - failedCount++ logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - // probably need to handle different codes differently, - // but for now just expire the subscription on any error err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) if err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } + + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") + + err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return } }(i, xi) } - - ctx = log.Context{"topic": m.Topic, "message_id": m.ID, "failed_count": failedCount, "total_count": totalCount} - - if failedCount > 0 { - logvm(v, m).Fields(ctx).Warn("Unable to publish web push messages to %d of %d endpoints", failedCount, totalCount) - } else { - logvm(v, m).Fields(ctx).Debug("Published %d web push messages successfully", totalCount) - } } func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { diff --git a/server/server.yml b/server/server.yml index ecb89994..e747e264 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,7 +40,7 @@ # Enable web push # -# Run ntfy web-push-keys to generate the keys +# Run ntfy web-push generate-keys to generate the keys # # web-push-enabled: true # web-push-public-key: "" diff --git a/server/server_test.go b/server/server_test.go index b9f2912d..f264d096 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/SherClockHolmes/webpush-go" "github.com/stretchr/testify/require" "heckel.io/ntfy/log" "heckel.io/ntfy/util" @@ -2604,14 +2605,35 @@ func newTestConfig(t *testing.T) *Config { return conf } -func newTestConfigWithAuthFile(t *testing.T) *Config { - conf := newTestConfig(t) +func configureAuth(t *testing.T, conf *Config) *Config { conf.AuthFile = filepath.Join(t.TempDir(), "user.db") conf.AuthStartupQueries = "pragma journal_mode = WAL; pragma synchronous = normal; pragma temp_store = memory;" conf.AuthBcryptCost = bcrypt.MinCost // This speeds up tests a lot return conf } +func newTestConfigWithAuthFile(t *testing.T) *Config { + conf := newTestConfig(t) + conf = configureAuth(t, conf) + return conf +} + +func newTestConfigWithWebPush(t *testing.T) *Config { + conf := newTestConfig(t) + + privateKey, publicKey, err := webpush.GenerateVAPIDKeys() + if err != nil { + t.Fatal(err) + } + + conf.WebPushEnabled = true + conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") + conf.WebPushEmailAddress = "testing@example.com" + conf.WebPushPrivateKey = privateKey + conf.WebPushPublicKey = publicKey + return conf +} + func newTestServer(t *testing.T, config *Config) *Server { server, err := New(config) if err != nil { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go new file mode 100644 index 00000000..80f37e3e --- /dev/null +++ b/server/server_web_push_test.go @@ -0,0 +1,212 @@ +package server + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + + "github.com/SherClockHolmes/webpush-go" + "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" +) + +var ( + webPushSubscribePayloadExample = `{ + "browser_subscription":{ + "endpoint": "https://example.com/webpush", + "keys": { + "p256dh": "p256dh-key", + "auth": "auth-key" + } + } + }` +) + +func TestServer_WebPush_GetConfig(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "GET", "/v1/web-push-config", "", nil) + require.Equal(t, 200, response.Code) + require.Equal(t, fmt.Sprintf(`{"public_key":"%s"}`, s.config.WebPushPublicKey)+"\n", response.Body.String()) +} + +func TestServer_WebPush_TopicSubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, 1) + require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") + require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") + require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") + require.Equal(t, subs[0].Username, "") +} + +func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) + require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, 1) + require.Equal(t, subs[0].Username, "ben") +} + +func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 403, response.Code) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 1) + + unsubscribe := `{"endpoint":"https://example.com/webpush"}` + response = request(t, s, "POST", "/test-topic/web-push/unsubscribe", unsubscribe, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) + require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 1) + + request(t, s, "DELETE", "/v1/account", `{"password":"ben"}`, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + // should've been deleted with the account + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_Publish(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + require.Equal(t, "/push-receive", r.URL.Path) + require.Equal(t, "high", r.Header.Get("Urgency")) + require.Equal(t, "", r.Header.Get("Topic")) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + + request(t, s, "PUT", "/test-topic", "web push test", nil) + + waitFor(t, func() bool { + return received.Load() + }) +} + +func TestServer_WebPush_PublishExpire(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + // Gone + w.WriteHeader(410) + w.Write([]byte(``)) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic-abc", upstreamServer.URL+"/push-receive") + + requireSubscriptionCount(t, s, "test-topic", 1) + requireSubscriptionCount(t, s, "test-topic-abc", 1) + + request(t, s, "PUT", "/test-topic", "web push test", nil) + + waitFor(t, func() bool { + return received.Load() + }) + + // Receiving the 410 should've caused the publisher to expire all subscriptions on the endpoint + + requireSubscriptionCount(t, s, "test-topic", 0) + requireSubscriptionCount(t, s, "test-topic-abc", 0) +} + +func addSubscription(t *testing.T, s *Server, topic string, url string) { + err := s.webPushSubscriptionStore.AddSubscription("test-topic", "", webPushSubscribePayload{ + BrowserSubscription: webpush.Subscription{ + Endpoint: url, + Keys: webpush.Keys{ + // connected to a local test VAPID key, not a leak! + Auth: "kSC3T8aN1JCQxxPdrFLrZg", + P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", + }, + }, + }) + if err != nil { + t.Fatal(err) + } +} + +func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, expectedLength) +} diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 0f879373..bf09bef3 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,7 +20,7 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; -export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push`; +export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; From f94bb1aa3034e0530dee8ea15f7addcc2d1f48b1 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 29 May 2023 22:09:40 +0200 Subject: [PATCH 018/158] Improve web push docs --- README.md | 1 + docs/config.md | 49 +++++++++++++++++++++++++++++++++++++++ docs/subscribe/desktop.md | 16 +++++++++---- docs/subscribe/web.md | 42 +++++++++++++++++---------------- 4 files changed, 84 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index cebf55be..c8f79c88 100644 --- a/README.md +++ b/README.md @@ -178,3 +178,4 @@ Third party libraries and resources: * [Regex for auto-linking](https://github.com/bryanwoods/autolink-js) (MIT) is used to highlight links (the library is not used) * [Statically linking go-sqlite3](https://www.arp242.net/static-go.html) * [Linked tabs in mkdocs](https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs) +* [webpush-go](https://github.com/SherClockHolmes/webpush-go) (MIT) is used to send web push notifications diff --git a/docs/config.md b/docs/config.md index 3aeab614..7e1ef6c6 100644 --- a/docs/config.md +++ b/docs/config.md @@ -789,6 +789,55 @@ Note that the self-hosted server literally sends the message `New message` for e may be `Some other message`. This is so that if iOS cannot talk to the self-hosted server (in time, or at all), it'll show `New message` as a popup. +## Web Push notifications +[Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) ([RFC8030](https://datatracker.ietf.org/doc/html/rfc8030)) +is supported, but needs a little configuration to enable it. Since there is no central server (other than the browser's push endpoint), +you have to configure your own [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keys. These identify the publisher, +and are used to encrypt the messages before sending them to the push endpoint. + +Limitations: + +- Like foreground browser notifications, background push notifications require the web app to be served over HTTPS. A _valid_ + certificate is required, as service workers will not run on origins with untrusted certificates. + +- Web Push is only supported for the same server. You cannot use subscribe to web push on a topic on another server. This + is due to a limitation of the Push API, which doesn't allow multiple push servers for the same origin. + +To configure VAPID keys, first generate them: + +```sh +$ ntfy web-push generate-keys +Keys generated. + +VAPID Public Key: +AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 + +VAPID Private Key: +AA2BB1234567890abcdefzxcvbnm1234567890 +``` + +Then copy the generated values into your `server.yml` or use the corresponding environment variables or command line arguments: + +```yaml +web-push-enabled: true +web-push-public-key: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +web-push-private-key: AA2BB1234567890abcdefzxcvbnm1234567890 +web-push-subscriptions-file: /var/cache/ntfy/subscriptions.db +web-push-email-address: sysadmin@example.com + +# don't forget to set the required base-url for web push notifications +base-url: https://ntfy.example.com +``` + +The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push +gateway returns an error (e.g. 410 Gone when a user has unsubscribed). + +The web app refreshes subscriptions on start and regularly on an interval, but this file should be persisted across restarts. If the subscription +file is deleted or lost, any web apps that aren't open will not receive new web push notifications until you open then. + +Changing your public/private keypair is NOT recommended. Browsers only allow one server identity (public key) per origin, and +if you change them the clients will not be able to subscribe via web push until the user manually clears the notification permission. + ## Tiers ntfy supports associating users to pre-defined tiers. Tiers can be used to grant users higher limits, such as daily message limits, attachment size, or make it possible for users to reserve topics. If [payments are enabled](#payments), diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md index 65284543..b13d11a4 100644 --- a/docs/subscribe/desktop.md +++ b/docs/subscribe/desktop.md @@ -1,9 +1,17 @@ -# Using the web app as an installed PWA +# Using the web app as an installed web app + +While ntfy doesn't have a native desktop app, it is built as a [progressive web app](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) +and thus can be installed on both desktop and mobile. + +This gives it its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux) own window, +push notifications, and an app badge with the unread notification count. + +To receive background notifications, either the browser or the installed web app must be open. + +Web app installation is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. +Look at the [compatibility table](https://caniuse.com/web-app-manifest) for more info. -While ntfy doesn't have a built desktop app, it is built as a progressive web app and can be installed. -This is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. -[caniuse reference](https://caniuse.com/web-app-manifest)
diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index a563f8b0..e073bec9 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -7,35 +7,37 @@ enable them for the first time, you will be prompted to allow notifications on y - **Sound only** - If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title - will show the number of new notifications. + If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title + will show the number of new notifications. - **Browser Notifications** - This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will - appear as a system notification. If you don't see these, check that your browser is allowed to show notifications - (for example in System Settings on macOS). + This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will + appear as a system notification. If you don't see these, check that your browser is allowed to show notifications + (for example in System Settings on macOS). - If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave - it running. + If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave + it running. - **Background Notifications** - This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some - cases you may need to keep your browser open. + This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some + cases you may need to keep your browser open. + Background notifications are only supported on the same server hosting the web app. You cannot use another server, + but can instead subscribe on the other server itself. - | Browser | Platform | Browser Running | Browser Not Running | Notes | - | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | - | Chrome | Desktop | ✅ | ❌ | | - | Firefox | Desktop | ✅ | ❌ | | - | Edge | Desktop | ✅ | ❌ | | - | Opera | Desktop | ✅ | ❌ | | - | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | - | Chrome | Android | ✅ | ✅ | | - | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | - - (Browsers below 1% usage not shown, look at the Push API link for more info) + | Browser | Platform | Browser Running | Browser Not Running | Restrictions | + | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | + | Chrome | Desktop | ✅ | ❌ | | + | Firefox | Desktop | ✅ | ❌ | | + | Edge | Desktop | ✅ | ❌ | | + | Opera | Desktop | ✅ | ❌ | | + | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | + | Chrome | Android | ✅ | ✅ | | + | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | + + (Browsers below 1% usage not shown, look at the [Push API](https://caniuse.com/push-api) for more info) To learn how to send messages, check out the [publishing page](../publish.md). From 7b23158e0a2580f67aee6c98281917abbcedeae4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 13:50:24 -0400 Subject: [PATCH 019/158] Cosmetic changes --- server/message_cache.go | 4 +-- server/server.go | 17 ++++-------- server/web_push.go | 59 +++++++++++++++++++---------------------- 3 files changed, 35 insertions(+), 45 deletions(-) diff --git a/server/message_cache.go b/server/message_cache.go index 1d7302af..140271fe 100644 --- a/server/message_cache.go +++ b/server/message_cache.go @@ -270,7 +270,7 @@ func newSqliteCache(filename, startupQueries string, cacheDuration time.Duration if err != nil { return nil, err } - if err := setupDB(db, startupQueries, cacheDuration); err != nil { + if err := setupMessagesDB(db, startupQueries, cacheDuration); err != nil { return nil, err } var queue *util.BatchingQueue[*message] @@ -749,7 +749,7 @@ func (c *messageCache) Close() error { return c.db.Close() } -func setupDB(db *sql.DB, startupQueries string, cacheDuration time.Duration) error { +func setupMessagesDB(db *sql.DB, startupQueries string, cacheDuration time.Duration) error { // Run startup queries if startupQueries != "" { if _, err := db.Exec(startupQueries); err != nil { diff --git a/server/server.go b/server/server.go index 72e9c19a..ebb8b70e 100644 --- a/server/server.go +++ b/server/server.go @@ -55,7 +55,7 @@ type Server struct { messagesHistory []int64 // Last n values of the messages counter, used to determine rate userManager *user.Manager // Might be nil! messageCache *messageCache // Database that stores the messages - webPushSubscriptionStore *webPushSubscriptionStore // Database that stores web push subscriptions + webPushSubscriptionStore *webPushStore // Database that stores web push subscriptions fileCache *fileCache // File system based cache that stores attachments stripe stripeAPI // Stripe API, can be replaced with a mock priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) @@ -227,12 +227,12 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } -func createWebPushSubscriptionStore(conf *Config) (*webPushSubscriptionStore, error) { +func createWebPushSubscriptionStore(conf *Config) (*webPushStore, error) { if !conf.WebPushEnabled { return nil, nil } - return newWebPushSubscriptionStore(conf.WebPushSubscriptionsFile) + return newWebPushStore(conf.WebPushSubscriptionsFile) } // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts @@ -979,18 +979,12 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) - if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") return } - - totalCount := len(subscriptions) - - wg := &sync.WaitGroup{} - wg.Add(totalCount) - - ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": totalCount} + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} // Importing the emojis in the service worker would add unnecessary complexity, // simply do it here for web push notifications instead @@ -1017,7 +1011,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { - defer wg.Done() ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} payload := &webPushPayload{ diff --git a/server/web_push.go b/server/web_push.go index fe9f5149..2fafb2a8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -6,11 +6,10 @@ import ( _ "github.com/mattn/go-sqlite3" // SQLite driver ) -// Messages cache const ( createWebPushSubscriptionsTableQuery = ` BEGIN; - CREATE TABLE IF NOT EXISTS web_push_subscriptions ( + CREATE TABLE IF NOT EXISTS subscriptions ( id INTEGER PRIMARY KEY AUTOINCREMENT, topic TEXT NOT NULL, username TEXT, @@ -19,60 +18,58 @@ const ( key_p256dh TEXT NOT NULL, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); - CREATE INDEX IF NOT EXISTS idx_topic ON web_push_subscriptions (topic); - CREATE INDEX IF NOT EXISTS idx_endpoint ON web_push_subscriptions (endpoint); - CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON web_push_subscriptions (topic, endpoint); + CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); + CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); + CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); COMMIT; ` insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO web_push_subscriptions (topic, username, endpoint, key_auth, key_p256dh) - VALUES (?, ?, ?, ?, ?); + INSERT OR REPLACE INTO subscriptions (topic, username, endpoint, key_auth, key_p256dh) + VALUES (?, ?, ?, ?, ?) ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM web_push_subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM web_push_subscriptions WHERE username = ?` - deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM web_push_subscriptions WHERE topic = ? AND endpoint = ?` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM subscriptions WHERE username = ?` + deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM web_push_subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM web_push_subscriptions` + selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) -type webPushSubscriptionStore struct { +type webPushStore struct { db *sql.DB } -func newWebPushSubscriptionStore(filename string) (*webPushSubscriptionStore, error) { +func newWebPushStore(filename string) (*webPushStore, error) { db, err := sql.Open("sqlite3", filename) if err != nil { return nil, err } - if err := setupSubscriptionDb(db); err != nil { + if err := setupSubscriptionsDB(db); err != nil { return nil, err } - webPushSubscriptionStore := &webPushSubscriptionStore{ + return &webPushStore{ db: db, - } - return webPushSubscriptionStore, nil + }, nil } -func setupSubscriptionDb(db *sql.DB) error { - // If 'messages' table does not exist, this must be a new database +func setupSubscriptionsDB(db *sql.DB) error { + // If 'subscriptions' table does not exist, this must be a new database rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) if err != nil { - return setupNewSubscriptionDb(db) + return setupNewSubscriptionsDB(db) } - rowsMC.Close() - return nil + return rowsMC.Close() } -func setupNewSubscriptionDb(db *sql.DB) error { +func setupNewSubscriptionsDB(db *sql.DB) error { if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { return err } return nil } -func (c *webPushSubscriptionStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { +func (c *webPushStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, @@ -84,7 +81,7 @@ func (c *webPushSubscriptionStore) AddSubscription(topic string, username string return err } -func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint string) error { +func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByTopicAndEndpointQuery, topic, @@ -93,14 +90,14 @@ func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint str return err } -func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - data := []webPushSubscription{} + var data []webPushSubscription for rows.Next() { i := webPushSubscription{} err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) @@ -112,7 +109,7 @@ func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subsc return data, nil } -func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error { +func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, endpoint, @@ -120,13 +117,13 @@ func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error return err } -func (c *webPushSubscriptionStore) ExpireWebPushForUser(username string) error { +func (c *webPushStore) ExpireWebPushForUser(username string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByUsernameQuery, username, ) return err } -func (c *webPushSubscriptionStore) Close() error { +func (c *webPushStore) Close() error { return c.db.Close() } From 7f3e4b5f473d66a70453fd1d6eb9ff3b01537716 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 13:56:10 -0400 Subject: [PATCH 020/158] Move stuff to server_web_push.go --- server/server.go | 229 +++++++-------------------------- server/server_account.go | 4 +- server/server_web_push.go | 142 ++++++++++++++++++++ server/server_web_push_test.go | 8 +- 4 files changed, 193 insertions(+), 190 deletions(-) create mode 100644 server/server_web_push.go diff --git a/server/server.go b/server/server.go index ebb8b70e..35d6f47d 100644 --- a/server/server.go +++ b/server/server.go @@ -33,35 +33,33 @@ import ( "heckel.io/ntfy/log" "heckel.io/ntfy/user" "heckel.io/ntfy/util" - - "github.com/SherClockHolmes/webpush-go" ) // Server is the main server, providing the UI and API for ntfy type Server struct { - config *Config - httpServer *http.Server - httpsServer *http.Server - httpMetricsServer *http.Server - httpProfileServer *http.Server - unixListener net.Listener - smtpServer *smtp.Server - smtpServerBackend *smtpBackend - smtpSender mailer - topics map[string]*topic - visitors map[string]*visitor // ip: or user: - firebaseClient *firebaseClient - messages int64 // Total number of messages (persisted if messageCache enabled) - messagesHistory []int64 // Last n values of the messages counter, used to determine rate - userManager *user.Manager // Might be nil! - messageCache *messageCache // Database that stores the messages - webPushSubscriptionStore *webPushStore // Database that stores web push subscriptions - fileCache *fileCache // File system based cache that stores attachments - stripe stripeAPI // Stripe API, can be replaced with a mock - priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) - metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set - closeChan chan bool - mu sync.RWMutex + config *Config + httpServer *http.Server + httpsServer *http.Server + httpMetricsServer *http.Server + httpProfileServer *http.Server + unixListener net.Listener + smtpServer *smtp.Server + smtpServerBackend *smtpBackend + smtpSender mailer + topics map[string]*topic + visitors map[string]*visitor // ip: or user: + firebaseClient *firebaseClient + messages int64 // Total number of messages (persisted if messageCache enabled) + messagesHistory []int64 // Last n values of the messages counter, used to determine rate + userManager *user.Manager // Might be nil! + messageCache *messageCache // Database that stores the messages + webPush *webPushStore // Database that stores web push subscriptions + fileCache *fileCache // File system based cache that stores attachments + stripe stripeAPI // Stripe API, can be replaced with a mock + priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) + metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set + closeChan chan bool + mu sync.RWMutex } // handleFunc extends the normal http.HandlerFunc to be able to easily return errors @@ -160,9 +158,12 @@ func New(conf *Config) (*Server, error) { if err != nil { return nil, err } - webPushSubscriptionStore, err := createWebPushSubscriptionStore(conf) - if err != nil { - return nil, err + var webPush *webPushStore + if conf.WebPushEnabled { + webPush, err = newWebPushStore(conf.WebPushSubscriptionsFile) + if err != nil { + return nil, err + } } topics, err := messageCache.Topics() if err != nil { @@ -201,18 +202,18 @@ func New(conf *Config) (*Server, error) { firebaseClient = newFirebaseClient(sender, auther) } s := &Server{ - config: conf, - messageCache: messageCache, - webPushSubscriptionStore: webPushSubscriptionStore, - fileCache: fileCache, - firebaseClient: firebaseClient, - smtpSender: mailer, - topics: topics, - userManager: userManager, - messages: messages, - messagesHistory: []int64{messages}, - visitors: make(map[string]*visitor), - stripe: stripe, + config: conf, + messageCache: messageCache, + webPush: webPush, + fileCache: fileCache, + firebaseClient: firebaseClient, + smtpSender: mailer, + topics: topics, + userManager: userManager, + messages: messages, + messagesHistory: []int64{messages}, + visitors: make(map[string]*visitor), + stripe: stripe, } s.priceCache = util.NewLookupCache(s.fetchStripePrices, conf.StripePriceCacheDuration) return s, nil @@ -227,14 +228,6 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } -func createWebPushSubscriptionStore(conf *Config) (*webPushStore, error) { - if !conf.WebPushEnabled { - return nil, nil - } - - return newWebPushStore(conf.WebPushSubscriptionsFile) -} - // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts // a manager go routine to print stats and prune messages. func (s *Server) Run() error { @@ -364,8 +357,8 @@ func (s *Server) closeDatabases() { s.userManager.Close() } s.messageCache.Close() - if s.webPushSubscriptionStore != nil { - s.webPushSubscriptionStore.Close() + if s.webPush != nil { + s.webPush.Close() } } @@ -536,9 +529,9 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { - return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) + return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushSubscribe)))(w, r, v) } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { - return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) + return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushUnsubscribe)))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } @@ -578,55 +571,6 @@ func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, return s.writeJSON(w, response) } -func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var username string - u := v.User() - if u != nil { - username = u.Name - } - - var sub webPushSubscribePayload - err := json.NewDecoder(r.Body).Decode(&sub) - - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - - err = s.webPushSubscriptionStore.AddSubscription(topic.ID, username, sub) - if err != nil { - return err - } - - return s.writeJSON(w, newSuccessResponse()) -} - -func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - var payload webPushUnsubscribePayload - - err := json.NewDecoder(r.Body).Decode(&payload) - - if err != nil { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - - err = s.webPushSubscriptionStore.RemoveSubscription(topic.ID, payload.Endpoint) - if err != nil { - return err - } - - return s.writeJSON(w, newSuccessResponse()) -} - func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -977,89 +921,6 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { } } -func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { - subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) - if err != nil { - logvm(v, m).Err(err).Warn("Unable to publish web push messages") - return - } - - ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} - - // Importing the emojis in the service worker would add unnecessary complexity, - // simply do it here for web push notifications instead - var titleWithDefault string - var formattedTitle string - - emojis, _, err := toEmojis(m.Tags) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - if m.Title == "" { - titleWithDefault = m.Topic - } else { - titleWithDefault = m.Title - } - - if len(emojis) > 0 { - formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) - } else { - formattedTitle = titleWithDefault - } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} - - payload := &webPushPayload{ - SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), - Message: *m, - FormattedTitle: formattedTitle, - } - jsonPayload, err := json.Marshal(payload) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ - Subscriber: s.config.WebPushEmailAddress, - VAPIDPublicKey: s.config.WebPushPublicKey, - VAPIDPrivateKey: s.config.WebPushPrivateKey, - // deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, - }) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - - err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - - return - } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - - err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - - return - } - }(i, xi) - } -} - func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { cache = readBoolParam(r, true, "x-cache", "cache") firebase = readBoolParam(r, true, "x-firebase", "firebase") diff --git a/server/server_account.go b/server/server_account.go index dbadb81a..0336f816 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -170,8 +170,8 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * if _, err := s.userManager.Authenticate(u.Name, req.Password); err != nil { return errHTTPBadRequestIncorrectPasswordConfirmation } - if s.webPushSubscriptionStore != nil { - err := s.webPushSubscriptionStore.ExpireWebPushForUser(u.Name) + if s.webPush != nil { + err := s.webPush.ExpireWebPushForUser(u.Name) if err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) diff --git a/server/server_web_push.go b/server/server_web_push.go new file mode 100644 index 00000000..d3f669cf --- /dev/null +++ b/server/server_web_push.go @@ -0,0 +1,142 @@ +package server + +import ( + "encoding/json" + "fmt" + "github.com/SherClockHolmes/webpush-go" + "heckel.io/ntfy/log" + "net/http" + "strings" +) + +func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { + var username string + u := v.User() + if u != nil { + username = u.Name + } + + var sub webPushSubscribePayload + err := json.NewDecoder(r.Body).Decode(&sub) + + if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPush.AddSubscription(topic.ID, username, sub) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { + var payload webPushUnsubscribePayload + + err := json.NewDecoder(r.Body).Decode(&payload) + + if err != nil { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPush.RemoveSubscription(topic.ID, payload.Endpoint) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { + subscriptions, err := s.webPush.GetSubscriptionsForTopic(m.Topic) + if err != nil { + logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return + } + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} + + // Importing the emojis in the service worker would add unnecessary complexity, + // simply do it here for web push notifications instead + var titleWithDefault string + var formattedTitle string + + emojis, _, err := toEmojis(m.Tags) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + if m.Title == "" { + titleWithDefault = m.Topic + } else { + titleWithDefault = m.Title + } + + if len(emojis) > 0 { + formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) + } else { + formattedTitle = titleWithDefault + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + + payload := &webPushPayload{ + SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), + Message: *m, + FormattedTitle: formattedTitle, + } + jsonPayload, err := json.Marshal(payload) + + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + + err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") + + err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return + } + }(i, xi) + } +} diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 80f37e3e..3b8863d4 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -41,7 +41,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -68,7 +68,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -187,7 +187,7 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { } func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPushSubscriptionStore.AddSubscription("test-topic", "", webPushSubscribePayload{ + err := s.webPush.AddSubscription("test-topic", "", webPushSubscribePayload{ BrowserSubscription: webpush.Subscription{ Endpoint: url, Keys: webpush.Keys{ @@ -203,7 +203,7 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } From 9e0687e142e213e08007f36fd49b4ad9f8ef5f35 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:23:03 -0400 Subject: [PATCH 021/158] Random tiny changes --- go.mod | 2 +- server/server_account.go | 4 +--- server/server_test.go | 10 ++-------- server/server_web_push.go | 34 +++++++--------------------------- server/server_web_push_test.go | 17 +++++++---------- server/types.go | 4 ++-- server/web_push.go | 24 ++++++++++++------------ 7 files changed, 32 insertions(+), 63 deletions(-) diff --git a/go.mod b/go.mod index dda58c9b..96ffff98 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.11.0 + github.com/SherClockHolmes/webpush-go v1.2.0 github.com/prometheus/client_golang v1.15.1 github.com/stripe/stripe-go/v74 v74.21.0 ) @@ -39,7 +40,6 @@ require ( cloud.google.com/go/longrunning v0.5.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect - github.com/SherClockHolmes/webpush-go v1.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/server/server_account.go b/server/server_account.go index 0336f816..b42496db 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -171,9 +171,7 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * return errHTTPBadRequestIncorrectPasswordConfirmation } if s.webPush != nil { - err := s.webPush.ExpireWebPushForUser(u.Name) - - if err != nil { + if err := s.webPush.RemoveByUserID(u.ID); err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) } } diff --git a/server/server_test.go b/server/server_test.go index f264d096..76f83eea 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2620,12 +2620,8 @@ func newTestConfigWithAuthFile(t *testing.T) *Config { func newTestConfigWithWebPush(t *testing.T) *Config { conf := newTestConfig(t) - privateKey, publicKey, err := webpush.GenerateVAPIDKeys() - if err != nil { - t.Fatal(err) - } - + require.Nil(t, err) conf.WebPushEnabled = true conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") conf.WebPushEmailAddress = "testing@example.com" @@ -2636,9 +2632,7 @@ func newTestConfigWithWebPush(t *testing.T) *Config { func newTestServer(t *testing.T, config *Config) *Server { server, err := New(config) - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) return server } diff --git a/server/server_web_push.go b/server/server_web_push.go index d3f669cf..d8a25e61 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -10,15 +10,8 @@ import ( ) func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var username string - u := v.User() - if u != nil { - username = u.Name - } - var sub webPushSubscribePayload err := json.NewDecoder(r.Body).Decode(&sub) - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } @@ -27,12 +20,9 @@ func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Requ if err != nil { return err } - - err = s.webPush.AddSubscription(topic.ID, username, sub) - if err != nil { + if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), sub); err != nil { return err } - return s.writeJSON(w, newSuccessResponse()) } @@ -59,7 +49,7 @@ func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Re } func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { - subscriptions, err := s.webPush.GetSubscriptionsForTopic(m.Topic) + subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") return @@ -69,21 +59,17 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { // Importing the emojis in the service worker would add unnecessary complexity, // simply do it here for web push notifications instead - var titleWithDefault string - var formattedTitle string - + var titleWithDefault, formattedTitle string emojis, _, err := toEmojis(m.Tags) if err != nil { logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") return } - if m.Title == "" { titleWithDefault = m.Topic } else { titleWithDefault = m.Title } - if len(emojis) > 0 { formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) } else { @@ -92,7 +78,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} payload := &webPushPayload{ SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), @@ -110,31 +96,25 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, - // deliverability on iOS isn't great with lower urgency values, + // Deliverability on iOS isn't great with lower urgency values, // and thus we can't really map lower ntfy priorities to lower urgency values Urgency: webpush.UrgencyHigh, }) if err != nil { logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - - err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } - return } // May want to handle at least 429 differently, but for now treat all errors the same if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - - err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } - return } }(i, xi) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 3b8863d4..56936529 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -5,6 +5,7 @@ import ( "io" "net/http" "net/http/httptest" + "strings" "sync/atomic" "testing" @@ -41,7 +42,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -50,7 +51,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") - require.Equal(t, subs[0].Username, "") + require.Equal(t, subs[0].UserID, "") } func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { @@ -64,17 +65,13 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) - require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } - + subs, err := s.webPush.SubscriptionsForTopic("test-topic") + require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].Username, "ben") + require.True(t, strings.HasPrefix(subs[0].UserID, "u_")) } func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { @@ -203,7 +200,7 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } diff --git a/server/types.go b/server/types.go index 6eed5eef..bac4a478 100644 --- a/server/types.go +++ b/server/types.go @@ -41,7 +41,7 @@ type message struct { PollID string `json:"poll_id,omitempty"` Encoding string `json:"encoding,omitempty"` // empty for raw UTF-8, or "base64" for encoded bytes Sender netip.Addr `json:"-"` // IP address of uploader, used for rate limiting - User string `json:"-"` // Username of the uploader, used to associated attachments + User string `json:"-"` // UserID of the uploader, used to associated attachments } func (m *message) Context() log.Context { @@ -476,7 +476,7 @@ type webPushPayload struct { type webPushSubscription struct { BrowserSubscription webpush.Subscription - Username string + UserID string } type webPushSubscribePayload struct { diff --git a/server/web_push.go b/server/web_push.go index 2fafb2a8..8969af68 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -12,7 +12,7 @@ const ( CREATE TABLE IF NOT EXISTS subscriptions ( id INTEGER PRIMARY KEY AUTOINCREMENT, topic TEXT NOT NULL, - username TEXT, + user_id TEXT, endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, @@ -24,14 +24,14 @@ const ( COMMIT; ` insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO subscriptions (topic, username, endpoint, key_auth, key_p256dh) + INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) ` deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM subscriptions WHERE username = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) @@ -69,11 +69,11 @@ func setupNewSubscriptionsDB(db *sql.DB) error { return nil } -func (c *webPushStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { +func (c *webPushStore) AddSubscription(topic string, userID string, subscription webPushSubscribePayload) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, - username, + userID, subscription.BrowserSubscription.Endpoint, subscription.BrowserSubscription.Keys.Auth, subscription.BrowserSubscription.Keys.P256dh, @@ -90,7 +90,7 @@ func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { return err } -func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err @@ -100,7 +100,7 @@ func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []w var data []webPushSubscription for rows.Next() { i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.UserID) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []w return data, nil } -func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { +func (c *webPushStore) RemoveByEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, endpoint, @@ -117,10 +117,10 @@ func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { return err } -func (c *webPushStore) ExpireWebPushForUser(username string) error { +func (c *webPushStore) RemoveByUserID(userID string) error { _, err := c.db.Exec( - deleteWebPushSubscriptionByUsernameQuery, - username, + deleteWebPushSubscriptionByUserIDQuery, + userID, ) return err } From e8139ad655da9d60a263ecb2a1c8cafa46b25a81 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:42:17 -0400 Subject: [PATCH 022/158] Move web-push-config endpoint to config.js --- server/server.go | 13 ++----------- server/server_web_push_test.go | 9 --------- server/types.go | 6 ++---- web/public/config.js | 2 ++ web/src/app/Api.js | 24 +++--------------------- web/src/app/Notifier.js | 13 ++----------- web/src/app/utils.js | 1 - 7 files changed, 11 insertions(+), 57 deletions(-) diff --git a/server/server.go b/server/server.go index 35d6f47d..12ccee5c 100644 --- a/server/server.go +++ b/server/server.go @@ -104,7 +104,6 @@ var ( apiAccountBillingSubscriptionCheckoutSuccessTemplate = "/v1/account/billing/subscription/success/{CHECKOUT_SESSION_ID}" apiAccountBillingSubscriptionCheckoutSuccessRegex = regexp.MustCompile(`/v1/account/billing/subscription/success/(.+)$`) apiAccountReservationSingleRegex = regexp.MustCompile(`/v1/account/reservation/([-_A-Za-z0-9]{1,64})$`) - apiWebPushConfig = "/v1/web-push-config" staticRegex = regexp.MustCompile(`^/static/.+`) docsRegex = regexp.MustCompile(`^/docs(|/.*)$`) fileRegex = regexp.MustCompile(`^/file/([-_A-Za-z0-9]{1,64})(?:\.[A-Za-z0-9]{1,16})?$`) @@ -496,8 +495,6 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { return s.ensurePaymentsEnabled(s.handleBillingTiersGet)(w, r, v) - } else if r.Method == http.MethodGet && r.URL.Path == apiWebPushConfig { - return s.ensureWebPushEnabled(s.handleAPIWebPushConfig)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == matrixPushPath { return s.handleMatrixDiscovery(w) } else if r.Method == http.MethodGet && r.URL.Path == metricsPath && s.metricsHandler != nil { @@ -563,14 +560,6 @@ func (s *Server) handleTopicAuth(w http.ResponseWriter, _ *http.Request, _ *visi return s.writeJSON(w, newSuccessResponse()) } -func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, _ *visitor) error { - response := &apiWebPushConfigResponse{ - PublicKey: s.config.WebPushPublicKey, - } - - return s.writeJSON(w, response) -} - func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -588,7 +577,9 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi EnableCalls: s.config.TwilioAccount != "", EnableEmails: s.config.SMTPSenderFrom != "", EnableReservations: s.config.EnableReservations, + EnableWebPush: s.config.WebPushEnabled, BillingContact: s.config.BillingContact, + WebPushPublicKey: s.config.WebPushPublicKey, DisallowedTopics: s.config.DisallowedTopics, } b, err := json.MarshalIndent(response, "", " ") diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 56936529..e6dda63e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -1,7 +1,6 @@ package server import ( - "fmt" "io" "net/http" "net/http/httptest" @@ -27,14 +26,6 @@ var ( }` ) -func TestServer_WebPush_GetConfig(t *testing.T) { - s := newTestServer(t, newTestConfigWithWebPush(t)) - - response := request(t, s, "GET", "/v1/web-push-config", "", nil) - require.Equal(t, 200, response.Code) - require.Equal(t, fmt.Sprintf(`{"public_key":"%s"}`, s.config.WebPushPublicKey)+"\n", response.Body.String()) -} - func TestServer_WebPush_TopicSubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) diff --git a/server/types.go b/server/types.go index bac4a478..9f436152 100644 --- a/server/types.go +++ b/server/types.go @@ -398,14 +398,12 @@ type apiConfigResponse struct { EnableCalls bool `json:"enable_calls"` EnableEmails bool `json:"enable_emails"` EnableReservations bool `json:"enable_reservations"` + EnableWebPush bool `json:"enable_web_push"` BillingContact string `json:"billing_contact"` + WebPushPublicKey string `json:"web_push_public_key"` DisallowedTopics []string `json:"disallowed_topics"` } -type apiWebPushConfigResponse struct { - PublicKey string `json:"public_key"` -} - type apiAccountBillingPrices struct { Month int64 `json:"month"` Year int64 `json:"year"` diff --git a/web/public/config.js b/web/public/config.js index 7bcad73f..63bc97bd 100644 --- a/web/public/config.js +++ b/web/public/config.js @@ -14,6 +14,8 @@ var config = { enable_reservations: true, enable_emails: true, enable_calls: true, + enable_web_push: true, billing_contact: "", + web_push_public_key: "", disallowed_topics: ["docs", "static", "file", "app", "account", "settings", "signup", "login", "v1"], }; diff --git a/web/src/app/Api.js b/web/src/app/Api.js index f731e61f..c3effb92 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -8,7 +8,6 @@ import { topicUrlJsonPollWithSince, topicUrlWebPushSubscribe, topicUrlWebPushUnsubscribe, - webPushConfigUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -117,27 +116,8 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - /** - * @returns {Promise<{ public_key: string } | undefined>} - */ - async getWebPushConfig(baseUrl) { - const response = await fetch(webPushConfigUrl(baseUrl)); - - if (response.ok) { - return response.json(); - } - - if (response.status === 404) { - // web push is not enabled - return undefined; - } - - throw new Error(`Unexpected server response ${response.status}`); - } - async subscribeWebPush(baseUrl, topic, browserSubscription) { const user = await userManager.get(baseUrl); - const url = topicUrlWebPushSubscribe(baseUrl, topic); console.log(`[Api] Sending Web Push Subscription ${url}`); @@ -163,7 +143,9 @@ class Api { const response = await fetch(url, { method: "POST", headers: maybeWithAuth({}, user), - body: JSON.stringify({ endpoint: subscription.webPushEndpoint }), + body: JSON.stringify({ + endpoint: subscription.webPushEndpoint + }), }); if (response.ok) { diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index a005f460..c9e3c182 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -53,7 +53,7 @@ class Notifier { } async subscribeWebPush(baseUrl, topic) { - if (!this.supported() || !this.pushSupported()) { + if (!this.supported() || !this.pushSupported() || !config.enable_web_push) { return {}; } @@ -71,21 +71,12 @@ class Notifier { } try { - const webPushConfig = await api.getWebPushConfig(baseUrl); - - if (!webPushConfig) { - console.log("[Notifier.subscribeWebPush] Web push not configured on server"); - } - const browserSubscription = await registration.pushManager.subscribe({ userVisibleOnly: true, - applicationServerKey: urlB64ToUint8Array(webPushConfig.public_key), + applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), }); - await api.subscribeWebPush(baseUrl, topic, browserSubscription); - console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - return browserSubscription; } catch (e) { console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); diff --git a/web/src/app/utils.js b/web/src/app/utils.js index bf09bef3..69132b2e 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -23,7 +23,6 @@ export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/aut export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); -export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; From 20c7650e515df910d6cc15202f16f12ba841a107 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:53:23 -0400 Subject: [PATCH 023/158] server.yml update --- server/server.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/server.yml b/server/server.yml index e747e264..6b921bbd 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,13 +40,13 @@ # Enable web push # -# Run ntfy web-push generate-keys to generate the keys +# Run "ntfy web-push generate-keys" to generate the keys # -# web-push-enabled: true -# web-push-public-key: "" -# web-push-private-key: "" -# web-push-subscriptions-file: "" -# web-push-email-address: "" +# web-push-enabled: false +# web-push-public-key: +# web-push-private-key: +# web-push-subscriptions-file: +# web-push-email-address: # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. From 44913c1668dda3ab80039d72933db60c0e97bf77 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:02:04 +0200 Subject: [PATCH 024/158] Replace if err-nil-Fatal check with require.Nil --- server/server_web_push_test.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index e6dda63e..0c8526b1 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -34,9 +34,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, `{"success":true}`+"\n", response.Body.String()) subs, err := s.webPush.SubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) require.Len(t, subs, 1) require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") @@ -185,16 +183,12 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { }, }, }) - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { subs, err := s.webPush.SubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) require.Len(t, subs, expectedLength) } From 4648f83669d97aee30d71b6a4c7d0e75a85e337d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:27:32 +0200 Subject: [PATCH 025/158] Format emojis in the service worker directly --- docs/develop.md | 9 ++++-- server/server_web_push.go | 23 --------------- server/smtp_sender.go | 24 ++++++++++++++++ server/types.go | 1 - server/util.go | 24 ---------------- web/public/sw.js | 16 ++++++----- web/src/app/Api.js | 2 +- web/src/app/Notifier.js | 3 +- web/src/app/emojisMapped.js | 4 +++ web/src/app/notificationUtils.js | 35 ++++++++++++++++++++++ web/src/app/utils.js | 43 ++-------------------------- web/src/components/Notifications.jsx | 13 ++------- 12 files changed, 85 insertions(+), 112 deletions(-) create mode 100644 web/src/app/emojisMapped.js create mode 100644 web/src/app/notificationUtils.js diff --git a/docs/develop.md b/docs/develop.md index 09215d9a..49ed8dbc 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -261,8 +261,11 @@ Reference: 0 { - formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) - } else { - formattedTitle = titleWithDefault - } - for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} @@ -83,7 +61,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { payload := &webPushPayload{ SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), Message: *m, - FormattedTitle: formattedTitle, } jsonPayload, err := json.Marshal(payload) diff --git a/server/smtp_sender.go b/server/smtp_sender.go index 759ef396..9093687e 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -1,6 +1,8 @@ package server import ( + _ "embed" // required by go:embed + "encoding/json" "fmt" "mime" "net" @@ -128,3 +130,25 @@ This message was sent by {ip} at {time} via {topicURL}` body = strings.ReplaceAll(body, "{ip}", senderIP) return body, nil } + +var ( + //go:embed "mailer_emoji_map.json" + emojisJSON string +) + +func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { + var emojiMap map[string]string + if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { + return nil, nil, err + } + tagsOut = make([]string, 0) + emojisOut = make([]string, 0) + for _, t := range tags { + if emoji, ok := emojiMap[t]; ok { + emojisOut = append(emojisOut, emoji) + } else { + tagsOut = append(tagsOut, t) + } + } + return +} diff --git a/server/types.go b/server/types.go index 9f436152..1c124c7a 100644 --- a/server/types.go +++ b/server/types.go @@ -469,7 +469,6 @@ type apiStripeSubscriptionDeletedEvent struct { type webPushPayload struct { SubscriptionID string `json:"subscription_id"` Message message `json:"message"` - FormattedTitle string `json:"formatted_title"` } type webPushSubscription struct { diff --git a/server/util.go b/server/util.go index be724c76..03eb8661 100644 --- a/server/util.go +++ b/server/util.go @@ -2,8 +2,6 @@ package server import ( "context" - _ "embed" // required by go:embed - "encoding/json" "fmt" "heckel.io/ntfy/util" "io" @@ -135,25 +133,3 @@ func maybeDecodeHeader(header string) string { } return decoded } - -var ( - //go:embed "mailer_emoji_map.json" - emojisJSON string -) - -func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { - var emojiMap map[string]string - if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { - return nil, nil, err - } - tagsOut = make([]string, 0) - emojisOut = make([]string, 0) - for _, t := range tags { - if emoji, ok := emojiMap[t]; ok { - emojisOut = append(emojisOut, emoji) - } else { - tagsOut = append(tagsOut, t) - } - } - return -} diff --git a/web/public/sw.js b/web/public/sw.js index 43a2e3b3..70ad9a7d 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -4,6 +4,7 @@ import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; import { getDbAsync } from "../src/app/getDb"; +import { formatMessage, formatTitleWithDefault } from "../src/app/notificationUtils"; // See WebPushWorker, this is to play a sound on supported browsers, // if the app is in the foreground @@ -27,11 +28,11 @@ self.addEventListener("pushsubscriptionchange", (event) => { }); self.addEventListener("push", (event) => { - console.log("[ServiceWorker] Received Web Push Event", { event }); // server/types.go webPushPayload const data = event.data.json(); + console.log("[ServiceWorker] Received Web Push Event", { event, data }); - const { formatted_title: formattedTitle, subscription_id: subscriptionId, message } = data; + const { subscription_id: subscriptionId, message } = data; broadcastChannel.postMessage(message); event.waitUntil( @@ -53,9 +54,9 @@ self.addEventListener("push", (event) => { db.subscriptions.update(subscriptionId, { last: message.id, }), - self.registration.showNotification(formattedTitle, { + self.registration.showNotification(formatTitleWithDefault(message, message.topic), { tag: subscriptionId, - body: message.message, + body: formatMessage(message), icon: "/static/images/ntfy.png", data, }), @@ -106,6 +107,7 @@ precacheAndRoute(self.__WB_MANIFEST); cleanupOutdatedCaches(); // to allow work offline -registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); - -registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); +if (import.meta.env.MODE !== "development") { + registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); + registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); +} diff --git a/web/src/app/Api.js b/web/src/app/Api.js index c3effb92..377dcccb 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -144,7 +144,7 @@ class Api { method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: subscription.webPushEndpoint + endpoint: subscription.webPushEndpoint, }), }); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index c9e3c182..0ace7b39 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -1,4 +1,5 @@ -import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; +import { openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; +import { formatMessage, formatTitleWithDefault } from "./notificationUtils"; import prefs from "./Prefs"; import logo from "../img/ntfy.png"; import api from "./Api"; diff --git a/web/src/app/emojisMapped.js b/web/src/app/emojisMapped.js new file mode 100644 index 00000000..d823bbe0 --- /dev/null +++ b/web/src/app/emojisMapped.js @@ -0,0 +1,4 @@ +import { rawEmojis } from "./emojis"; + +// Format emojis (see emoji.js) +export default Object.fromEntries(rawEmojis.flatMap((emoji) => emoji.aliases.map((alias) => [alias, emoji.emoji]))); diff --git a/web/src/app/notificationUtils.js b/web/src/app/notificationUtils.js new file mode 100644 index 00000000..b385f481 --- /dev/null +++ b/web/src/app/notificationUtils.js @@ -0,0 +1,35 @@ +// This is a separate file since the other utils import `config.js`, which depends on `window` +// and cannot be used in the service worker + +import emojisMapped from "./emojisMapped"; + +const toEmojis = (tags) => { + if (!tags) return []; + return tags.filter((tag) => tag in emojisMapped).map((tag) => emojisMapped[tag]); +}; + +export const formatTitle = (m) => { + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.title}`; + } + return m.title; +}; + +export const formatTitleWithDefault = (m, fallback) => { + if (m.title) { + return formatTitle(m); + } + return fallback; +}; + +export const formatMessage = (m) => { + if (m.title) { + return m.message; + } + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.message}`; + } + return m.message; +}; diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 69132b2e..906a88a4 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,5 +1,4 @@ import { Base64 } from "js-base64"; -import { rawEmojis } from "./emojis"; import beep from "../sounds/beep.mp3"; import juntos from "../sounds/juntos.mp3"; import pristine from "../sounds/pristine.mp3"; @@ -8,6 +7,7 @@ import dadum from "../sounds/dadum.mp3"; import pop from "../sounds/pop.mp3"; import popSwoosh from "../sounds/pop-swoosh.mp3"; import config from "./config"; +import emojisMapped from "./emojisMapped"; export const tiersUrl = (baseUrl) => `${baseUrl}/v1/tiers`; export const shortUrl = (url) => url.replaceAll(/https?:\/\//g, ""); @@ -56,48 +56,9 @@ export const topicDisplayName = (subscription) => { return topicShortUrl(subscription.baseUrl, subscription.topic); }; -// Format emojis (see emoji.js) -const emojis = {}; -rawEmojis.forEach((emoji) => { - emoji.aliases.forEach((alias) => { - emojis[alias] = emoji.emoji; - }); -}); - -const toEmojis = (tags) => { - if (!tags) return []; - return tags.filter((tag) => tag in emojis).map((tag) => emojis[tag]); -}; - -export const formatTitle = (m) => { - const emojiList = toEmojis(m.tags); - if (emojiList.length > 0) { - return `${emojiList.join(" ")} ${m.title}`; - } - return m.title; -}; - -export const formatTitleWithDefault = (m, fallback) => { - if (m.title) { - return formatTitle(m); - } - return fallback; -}; - -export const formatMessage = (m) => { - if (m.title) { - return m.message; - } - const emojiList = toEmojis(m.tags); - if (emojiList.length > 0) { - return `${emojiList.join(" ")} ${m.message}`; - } - return m.message; -}; - export const unmatchedTags = (tags) => { if (!tags) return []; - return tags.filter((tag) => !(tag in emojis)); + return tags.filter((tag) => !(tag in emojisMapped)); }; export const encodeBase64 = (s) => Base64.encode(s); diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index 2faf2fd2..fe9fcc48 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -24,17 +24,8 @@ import { useLiveQuery } from "dexie-react-hooks"; import InfiniteScroll from "react-infinite-scroll-component"; import { Trans, useTranslation } from "react-i18next"; import { useOutletContext } from "react-router-dom"; -import { - formatBytes, - formatMessage, - formatShortDateTime, - formatTitle, - maybeAppendActionErrors, - openUrl, - shortUrl, - topicShortUrl, - unmatchedTags, -} from "../app/utils"; +import { formatBytes, formatShortDateTime, maybeAppendActionErrors, openUrl, shortUrl, topicShortUrl, unmatchedTags } from "../app/utils"; +import { formatMessage, formatTitle } from "../app/notificationUtils"; import { LightboxBackdrop, Paragraph, VerticallyCenteredContainer } from "./styles"; import subscriptionManager from "../app/SubscriptionManager"; import priority1 from "../img/priority-1.svg"; From 0c25425346a43b3f5f56d1293194d315afc46198 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:30:20 +0200 Subject: [PATCH 026/158] Use readJSONWithLimit for web push sub/unsub --- server/server_web_push.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index a465764e..bf5b92b9 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -9,8 +9,7 @@ import ( ) func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var sub webPushSubscribePayload - err := json.NewDecoder(r.Body).Decode(&sub) + sub, err := readJSONWithLimit[webPushSubscribePayload](r.Body, jsonBodyBytesLimit, false) if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } @@ -19,17 +18,14 @@ func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Requ if err != nil { return err } - if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), sub); err != nil { + if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), *sub); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) } func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - var payload webPushUnsubscribePayload - - err := json.NewDecoder(r.Body).Decode(&payload) - + payload, err := readJSONWithLimit[webPushUnsubscribePayload](r.Body, jsonBodyBytesLimit, false) if err != nil { return errHTTPBadRequestWebPushSubscriptionInvalid } From 7aa3d8f59bab59bed6c14fb49ecf878e00b08f13 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:43:06 +0200 Subject: [PATCH 027/158] Hide web push toggles if disabled on server --- web/src/app/Notifier.js | 2 +- web/src/components/SubscribeDialog.jsx | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 0ace7b39..73bb51ac 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -115,7 +115,7 @@ class Notifier { } pushSupported() { - return "serviceWorker" in navigator && "PushManager" in window; + return config.enable_web_push && "serviceWorker" in navigator && "PushManager" in window; } /** diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 57281661..60b69863 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -103,6 +103,7 @@ const SubscribeDialog = (props) => { const browserNotificationsSupported = notifier.supported(); const pushNotificationsSupported = notifier.pushSupported(); const iosInstallRequired = notifier.iosSupportedButInstallRequired(); +const pushPossible = pushNotificationsSupported && iosInstallRequired; const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { if (backgroundNotificationsEnabled) { @@ -138,12 +139,14 @@ const SubscribePage = (props) => { const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); // default to on if notifications are already granted const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState( + pushPossible && props.webPushDefaultEnabled === "enabled" + ); const handleBrowserNotificationsChanged = async (e) => { if (e.target.checked && (await notifier.maybeRequestPermission())) { setBrowserNotificationsEnabled(true); - if (props.webPushDefaultEnabled === "enabled") { + if (pushPossible && props.webPushDefaultEnabled === "enabled") { setBackgroundNotificationsEnabled(true); } } else { From 4944e3ae4b89b6e593fae3dd454bff400c2c4446 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 21:08:46 +0200 Subject: [PATCH 028/158] Remove webPushEndpoint from indexeddb Rely directly on getting it from the browser --- web/src/app/Api.js | 4 ++-- web/src/app/Notifier.js | 31 +++++++++++++++++++----------- web/src/app/SubscriptionManager.js | 25 ++++++------------------ 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 377dcccb..398f8088 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -134,7 +134,7 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async unsubscribeWebPush(subscription) { + async unsubscribeWebPush(subscription, browserSubscription) { const user = await userManager.get(subscription.baseUrl); const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); @@ -144,7 +144,7 @@ class Api { method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: subscription.webPushEndpoint, + endpoint: browserSubscription.endpoint, }), }); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 73bb51ac..47c2fa1a 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -47,9 +47,14 @@ class Notifier { async unsubscribeWebPush(subscription) { try { - await api.unsubscribeWebPush(subscription); + const pushManager = await this.pushManager(); + const browserSubscription = await pushManager.getSubscription(); + if (!browserSubscription) { + throw new Error("No browser subscription found"); + } + await api.unsubscribeWebPush(subscription, browserSubscription); } catch (e) { - console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + console.error("[Notifier] Error unsubscribing from web push", e); } } @@ -64,21 +69,15 @@ class Notifier { return {}; } - const registration = await navigator.serviceWorker.getRegistration(); - - if (!registration) { - console.log("[Notifier.subscribeWebPush] Web push supported but no service worker registration found, skipping"); - return {}; - } - try { - const browserSubscription = await registration.pushManager.subscribe({ + const pushManager = await this.pushManager(); + const browserSubscription = await pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), }); + await api.subscribeWebPush(baseUrl, topic, browserSubscription); console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - return browserSubscription; } catch (e) { console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); } @@ -86,6 +85,16 @@ class Notifier { return {}; } + async pushManager() { + const registration = await navigator.serviceWorker.getRegistration(); + + if (!registration) { + throw new Error("No service worker registration found"); + } + + return registration.pushManager; + } + granted() { return this.supported() && Notification.permission === "granted"; } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index ae4bf49e..15958914 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -68,16 +68,12 @@ class SubscriptionManager { async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); - const webPushFields = opts.notificationType === "background" ? await notifier.subscribeWebPush(baseUrl, topic) : {}; + if (opts.notificationType === "background") { + await notifier.subscribeWebPush(baseUrl, topic); + } const existingSubscription = await this.get(id); if (existingSubscription) { - if (webPushFields.endpoint) { - await this.db.subscriptions.update(existingSubscription.id, { - webPushEndpoint: webPushFields.endpoint, - }); - } - return existingSubscription; } @@ -88,7 +84,6 @@ class SubscriptionManager { mutedUntil: 0, last: null, ...opts, - webPushEndpoint: webPushFields.endpoint, }; await this.db.subscriptions.put(subscription); @@ -139,7 +134,7 @@ class SubscriptionManager { await this.db.subscriptions.delete(subscription.id); await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); - if (subscription.webPushEndpoint) { + if (subscription.notificationType === NotificationType.BACKGROUND) { await notifier.unsubscribeWebPush(subscription); } } @@ -240,10 +235,7 @@ class SubscriptionManager { if (mutedUntil === 1) { await notifier.unsubscribeWebPush(subscription); } else { - const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - await this.db.subscriptions.update(subscriptionId, { - webPushEndpoint: webPushFields.endpoint, - }); + await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); } } } @@ -261,19 +253,14 @@ class SubscriptionManager { return; } - let { webPushEndpoint } = subscription; - if (oldNotificationType === "background") { await notifier.unsubscribeWebPush(subscription); - webPushEndpoint = undefined; } else if (newNotificationType === "background") { - const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - webPushEndpoint = webPushFields.webPushEndpoint; + await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); } await this.db.subscriptions.update(subscription.id, { notificationType: newNotificationType, - webPushEndpoint, }); } From 47ad024ec786da91ece3e2050303326230387534 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 13:22:54 +0200 Subject: [PATCH 029/158] Simplify web push UX and updates - Use a single endpoint - Use a declarative web push sync hook. This thus handles all edge cases that had to be manually handled before: logout, login, account sync, etc. - Simplify UX: browser notifications are always enabled (unless denied), web push toggle only shows up if permissions are already granted. --- server/server.go | 27 +++--- server/server_web_push.go | 40 ++++----- server/server_web_push_test.go | 85 +++++++++--------- server/types.go | 12 ++- server/web_push.go | 38 ++++++--- web/public/static/langs/en.json | 9 +- web/src/app/Api.js | 36 ++------ web/src/app/ConnectionManager.js | 9 +- web/src/app/Notifier.js | 53 ++++-------- web/src/app/SubscriptionManager.js | 104 +++++------------------ web/src/app/WebPushWorker.js | 64 +++++++++++--- web/src/app/getDb.js | 2 +- web/src/app/utils.js | 3 +- web/src/components/Account.jsx | 2 - web/src/components/ActionBar.jsx | 2 - web/src/components/Navigation.jsx | 91 ++++++++++++-------- web/src/components/Preferences.jsx | 2 +- web/src/components/SubscribeDialog.jsx | 82 +++--------------- web/src/components/SubscriptionPopup.jsx | 51 +++-------- web/src/components/hooks.js | 9 +- 20 files changed, 294 insertions(+), 427 deletions(-) diff --git a/server/server.go b/server/server.go index 12ccee5c..a3170817 100644 --- a/server/server.go +++ b/server/server.go @@ -67,17 +67,15 @@ type handleFunc func(http.ResponseWriter, *http.Request, *visitor) error var ( // If changed, don't forget to update Android App and auth_sqlite.go - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! - topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! - externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic - jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) - ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) - rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) - wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) - authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - webPushSubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/subscribe$`) - webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) - publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! + topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! + externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic + jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) + ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) + rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) + wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) + authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) + publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) webConfigPath = "/config.js" webManifestPath = "/manifest.webmanifest" @@ -96,6 +94,7 @@ var ( apiAccountSettingsPath = "/v1/account/settings" apiAccountSubscriptionPath = "/v1/account/subscription" apiAccountReservationPath = "/v1/account/reservation" + apiAccountWebPushPath = "/v1/account/web-push" apiAccountPhonePath = "/v1/account/phone" apiAccountPhoneVerifyPath = "/v1/account/phone/verify" apiAccountBillingPortalPath = "/v1/account/billing/portal" @@ -525,10 +524,8 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { - return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushSubscribe)))(w, r, v) - } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { - return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushUnsubscribe)))(w, r, v) + } else if r.Method == http.MethodPut && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } diff --git a/server/server_web_push.go b/server/server_web_push.go index bf5b92b9..fcf0dad6 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -3,40 +3,36 @@ package server import ( "encoding/json" "fmt" + "net/http" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" - "net/http" + "heckel.io/ntfy/user" ) -func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - sub, err := readJSONWithLimit[webPushSubscribePayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { +func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { + payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) + if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), *sub); err != nil { - return err - } - return s.writeJSON(w, newSuccessResponse()) -} + u := v.User() -func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - payload, err := readJSONWithLimit[webPushUnsubscribePayload](r.Body, jsonBodyBytesLimit, false) - if err != nil { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) + topics, err := s.topicsFromIDs(payload.Topics...) if err != nil { return err } - err = s.webPush.RemoveSubscription(topic.ID, payload.Endpoint) - if err != nil { + if s.userManager != nil { + for _, t := range topics { + if err := s.userManager.Authorize(u, t.ID, user.PermissionRead); err != nil { + logvr(v, r).With(t).Err(err).Debug("Access to topic %s not authorized", t.ID) + return errHTTPForbidden.With(t) + } + } + } + + if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { return err } diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 0c8526b1..75746918 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -1,6 +1,8 @@ package server import ( + "encoding/json" + "fmt" "io" "net/http" "net/http/httptest" @@ -14,22 +16,10 @@ import ( "heckel.io/ntfy/util" ) -var ( - webPushSubscribePayloadExample = `{ - "browser_subscription":{ - "endpoint": "https://example.com/webpush", - "keys": { - "p256dh": "p256dh-key", - "auth": "auth-key" - } - } - }` -) - -func TestServer_WebPush_TopicSubscribe(t *testing.T) { +func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -43,6 +33,19 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, subs[0].UserID, "") } +func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + addSubscription(t, s, "test-topic", "https://example.com/webpush") + requireSubscriptionCount(t, s, "test-topic", 1) + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}), nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { config := configureAuth(t, newTestConfigWithWebPush(t)) config.AuthDefault = user.PermissionDenyAll @@ -51,7 +54,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -68,38 +71,20 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) } -func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { - s := newTestServer(t, newTestConfigWithWebPush(t)) - - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) - require.Equal(t, 200, response.Code) - require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - - requireSubscriptionCount(t, s, "test-topic", 1) - - unsubscribe := `{"endpoint":"https://example.com/webpush"}` - response = request(t, s, "POST", "/test-topic/web-push/unsubscribe", unsubscribe, nil) - require.Equal(t, 200, response.Code) - require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - - requireSubscriptionCount(t, s, "test-topic", 0) -} - func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { config := configureAuth(t, newTestConfigWithWebPush(t)) - config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -172,15 +157,29 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { requireSubscriptionCount(t, s, "test-topic-abc", 0) } +func payloadForTopics(t *testing.T, topics []string) string { + topicsJson, err := json.Marshal(topics) + require.Nil(t, err) + + return fmt.Sprintf(`{ + "topics": %s, + "browser_subscription":{ + "endpoint": "https://example.com/webpush", + "keys": { + "p256dh": "p256dh-key", + "auth": "auth-key" + } + } + }`, topicsJson) +} + func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPush.AddSubscription("test-topic", "", webPushSubscribePayload{ - BrowserSubscription: webpush.Subscription{ - Endpoint: url, - Keys: webpush.Keys{ - // connected to a local test VAPID key, not a leak! - Auth: "kSC3T8aN1JCQxxPdrFLrZg", - P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", - }, + err := s.webPush.AddSubscription(topic, "", webpush.Subscription{ + Endpoint: url, + Keys: webpush.Keys{ + // connected to a local test VAPID key, not a leak! + Auth: "kSC3T8aN1JCQxxPdrFLrZg", + P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", }, }) require.Nil(t, err) diff --git a/server/types.go b/server/types.go index 1c124c7a..f1f15735 100644 --- a/server/types.go +++ b/server/types.go @@ -1,12 +1,13 @@ package server import ( - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" "net/http" "net/netip" "time" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -476,10 +477,7 @@ type webPushSubscription struct { UserID string } -type webPushSubscribePayload struct { +type webPushSubscriptionPayload struct { BrowserSubscription webpush.Subscription `json:"browser_subscription"` -} - -type webPushUnsubscribePayload struct { - Endpoint string `json:"endpoint"` + Topics []string `json:"topics"` } diff --git a/server/web_push.go b/server/web_push.go index 8969af68..c48920d8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -2,7 +2,9 @@ package server import ( "database/sql" + "fmt" + "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver ) @@ -69,23 +71,33 @@ func setupNewSubscriptionsDB(db *sql.DB) error { return nil } -func (c *webPushStore) AddSubscription(topic string, userID string, subscription webPushSubscribePayload) error { +func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { + fmt.Printf("AAA") + tx, err := c.db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + + if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { + return err + } + for _, topic := range topics { + if err := c.AddSubscription(topic, userID, subscription); err != nil { + return err + } + } + return tx.Commit() +} + +func (c *webPushStore) AddSubscription(topic string, userID string, subscription webpush.Subscription) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, userID, - subscription.BrowserSubscription.Endpoint, - subscription.BrowserSubscription.Keys.Auth, - subscription.BrowserSubscription.Keys.P256dh, - ) - return err -} - -func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByTopicAndEndpointQuery, - topic, - endpoint, + subscription.Endpoint, + subscription.Keys.Auth, + subscription.Keys.P256dh, ) return err } diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 53b8c3f5..2d58311a 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -52,6 +52,8 @@ "nav_button_connecting": "connecting", "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", + "alert_notification_permission_required_title": "Permission required", + "alert_notification_permission_required_description": "Please click here to enable notifications", "alert_notification_permission_denied_title": "Notifications are blocked", "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", "alert_notification_ios_install_required_title": "iOS Install Required", @@ -94,9 +96,7 @@ "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", "notification_toggle_unmute": "Unmute", - "notification_toggle_sound": "Sound only", - "notification_toggle_browser": "Browser notifications", - "notification_toggle_background": "Browser and background notifications", + "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -169,8 +169,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_enable_browser_notifications_label": "Notify me via browser notifications", - "subscribe_dialog_subscribe_enable_background_notifications_label": "Also notify me when ntfy is not open (web push)", + "subscribe_dialog_subscribe_enable_background_notifications_label": "Enable background notifications (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 398f8088..b763346b 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,8 +6,7 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, - topicUrlWebPushSubscribe, - topicUrlWebPushUnsubscribe, + webPushSubscriptionsUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -116,36 +115,15 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async subscribeWebPush(baseUrl, topic, browserSubscription) { - const user = await userManager.get(baseUrl); - const url = topicUrlWebPushSubscribe(baseUrl, topic); - console.log(`[Api] Sending Web Push Subscription ${url}`); + async updateWebPushSubscriptions(topics, browserSubscription) { + const user = await userManager.get(config.base_url); + const url = webPushSubscriptionsUrl(config.base_url); + console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); const response = await fetch(url, { - method: "POST", + method: "PUT", headers: maybeWithAuth({}, user), - body: JSON.stringify({ browser_subscription: browserSubscription }), - }); - - if (response.ok) { - return true; - } - - throw new Error(`Unexpected server response ${response.status}`); - } - - async unsubscribeWebPush(subscription, browserSubscription) { - const user = await userManager.get(subscription.baseUrl); - - const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); - console.log(`[Api] Unsubscribing Web Push Subscription ${url}`); - - const response = await fetch(url, { - method: "POST", - headers: maybeWithAuth({}, user), - body: JSON.stringify({ - endpoint: browserSubscription.endpoint, - }), + body: JSON.stringify({ topics, browser_subscription: browserSubscription }), }); if (response.ok) { diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 952c74af..7cb12e90 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -1,5 +1,4 @@ import Connection from "./Connection"; -import { NotificationType } from "./SubscriptionManager"; import { hashCode } from "./utils"; const makeConnectionId = (subscription, user) => @@ -52,11 +51,9 @@ class ConnectionManager { const connectionId = makeConnectionId(s, user); return { ...s, user, connectionId }; }) - // we want to create a ws for both sound-only and active browser notifications, - // only background notifications don't need this as they come over web push. - // however, if background notifications are muted, we again need the ws while - // the page is active - .filter((s) => s.notificationType !== NotificationType.BACKGROUND && s.mutedUntil !== 1); + // background notifications don't need this as they come over web push. + // however, if they are muted, we again need the ws while the page is active + .filter((s) => !s.webPushEnabled && s.mutedUntil !== 1); console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 47c2fa1a..428b8979 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -2,7 +2,6 @@ import { openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array import { formatMessage, formatTitleWithDefault } from "./notificationUtils"; import prefs from "./Prefs"; import logo from "../img/ntfy.png"; -import api from "./Api"; /** * The notifier is responsible for displaying desktop notifications. Note that not all modern browsers @@ -45,44 +44,20 @@ class Notifier { } } - async unsubscribeWebPush(subscription) { - try { - const pushManager = await this.pushManager(); - const browserSubscription = await pushManager.getSubscription(); - if (!browserSubscription) { - throw new Error("No browser subscription found"); - } - await api.unsubscribeWebPush(subscription, browserSubscription); - } catch (e) { - console.error("[Notifier] Error unsubscribing from web push", e); - } - } - - async subscribeWebPush(baseUrl, topic) { - if (!this.supported() || !this.pushSupported() || !config.enable_web_push) { - return {}; + async getBrowserSubscription() { + if (!this.pushPossible()) { + throw new Error("Unsupported or denied"); } - // only subscribe to web push for the current server. this is a limitation of the web push API, - // which only allows a single server per service worker origin. - if (baseUrl !== config.base_url) { - return {}; - } + const pushManager = await this.pushManager(); - try { - const pushManager = await this.pushManager(); - const browserSubscription = await pushManager.subscribe({ + return ( + (await pushManager.getSubscription()) ?? + pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), - }); - - await api.subscribeWebPush(baseUrl, topic, browserSubscription); - console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - } catch (e) { - console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); - } - - return {}; + }) + ); } async pushManager() { @@ -95,6 +70,10 @@ class Notifier { return registration.pushManager; } + notRequested() { + return this.supported() && Notification.permission === "default"; + } + granted() { return this.supported() && Notification.permission === "granted"; } @@ -127,6 +106,10 @@ class Notifier { return config.enable_web_push && "serviceWorker" in navigator && "PushManager" in window; } + pushPossible() { + return this.pushSupported() && this.contextSupported() && this.granted() && !this.iosSupportedButInstallRequired(); + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification @@ -136,7 +119,7 @@ class Notifier { } iosSupportedButInstallRequired() { - return "standalone" in window.navigator && window.navigator.standalone === false; + return this.pushSupported() && "standalone" in window.navigator && window.navigator.standalone === false; } } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 15958914..3cdaa85e 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,20 +1,9 @@ +import api from "./Api"; import notifier from "./Notifier"; import prefs from "./Prefs"; import getDb from "./getDb"; import { topicUrl } from "./utils"; -/** @typedef {string} NotificationTypeEnum */ - -/** @enum {NotificationTypeEnum} */ -export const NotificationType = { - /** sound-only */ - SOUND: "sound", - /** browser notifications when there is an active tab, via websockets */ - BROWSER: "browser", - /** web push notifications, regardless of whether the window is open */ - BACKGROUND: "background", -}; - class SubscriptionManager { constructor(db) { this.db = db; @@ -31,6 +20,11 @@ class SubscriptionManager { ); } + async webPushTopics() { + const subscriptions = await this.db.subscriptions.where({ webPushEnabled: 1, mutedUntil: 0 }).toArray(); + return subscriptions.map(({ topic }) => topic); + } + async get(subscriptionId) { return this.db.subscriptions.get(subscriptionId); } @@ -47,14 +41,7 @@ class SubscriptionManager { return; } - await notifier.playSound(); - - // sound only - if (subscription.notificationType === "sound") { - return; - } - - await notifier.notify(subscription, notification, defaultClickAction); + await Promise.all([notifier.playSound(), notifier.notify(subscription, notification, defaultClickAction)]); } /** @@ -62,28 +49,25 @@ class SubscriptionManager { * @param {string} topic * @param {object} opts * @param {boolean} opts.internal - * @param {NotificationTypeEnum} opts.notificationType + * @param {boolean} opts.webPushEnabled * @returns */ async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); - if (opts.notificationType === "background") { - await notifier.subscribeWebPush(baseUrl, topic); - } - const existingSubscription = await this.get(id); if (existingSubscription) { return existingSubscription; } const subscription = { + ...opts, id: topicUrl(baseUrl, topic), baseUrl, topic, mutedUntil: 0, last: null, - ...opts, + webPushEnabled: opts.webPushEnabled ? 1 : 0, }; await this.db.subscriptions.put(subscription); @@ -94,17 +78,16 @@ class SubscriptionManager { async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); - const notificationType = (await prefs.webPushDefaultEnabled()) === "enabled" ? "background" : "browser"; + const webPushEnabled = (await prefs.webPushDefaultEnabled()) === "enabled"; // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { - const local = await this.add(remote.base_url, remote.topic, { - notificationType, - }); const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; - await this.update(local.id, { + const local = await this.add(remote.base_url, remote.topic, { + // only if same-origin subscription + webPushEnabled: webPushEnabled && remote.base_url === config.base_url, displayName: remote.display_name, // May be undefined reservation, // May be null! }); @@ -126,6 +109,12 @@ class SubscriptionManager { ); } + async refreshWebPushSubscriptions(presetTopics) { + const topics = presetTopics ?? (await this.webPushTopics()); + + await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription()); + } + async updateState(subscriptionId, state) { this.db.subscriptions.update(subscriptionId, { state }); } @@ -133,10 +122,6 @@ class SubscriptionManager { async remove(subscription) { await this.db.subscriptions.delete(subscription.id); await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); - - if (subscription.notificationType === NotificationType.BACKGROUND) { - await notifier.unsubscribeWebPush(subscription); - } } async first() { @@ -228,59 +213,14 @@ class SubscriptionManager { await this.db.subscriptions.update(subscriptionId, { mutedUntil, }); - - const subscription = await this.get(subscriptionId); - - if (subscription.notificationType === "background") { - if (mutedUntil === 1) { - await notifier.unsubscribeWebPush(subscription); - } else { - await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - } - } } - /** - * - * @param {object} subscription - * @param {NotificationTypeEnum} newNotificationType - * @returns - */ - async setNotificationType(subscription, newNotificationType) { - const oldNotificationType = subscription.notificationType ?? "browser"; - - if (oldNotificationType === newNotificationType) { - return; - } - - if (oldNotificationType === "background") { - await notifier.unsubscribeWebPush(subscription); - } else if (newNotificationType === "background") { - await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - } - + async toggleBackgroundNotifications(subscription) { await this.db.subscriptions.update(subscription.id, { - notificationType: newNotificationType, + webPushEnabled: subscription.webPushEnabled === 1 ? 0 : 1, }); } - // for logout/delete, unsubscribe first to prevent receiving dangling notifications - async unsubscribeAllWebPush() { - const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); - await Promise.all(subscriptions.map((subscription) => notifier.unsubscribeWebPush(subscription))); - } - - async refreshWebPushSubscriptions() { - const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); - const browserSubscription = await (await navigator.serviceWorker.getRegistration())?.pushManager?.getSubscription(); - - if (browserSubscription) { - await Promise.all(subscriptions.map((subscription) => notifier.subscribeWebPush(subscription.baseUrl, subscription.topic))); - } else { - await Promise.all(subscriptions.map((subscription) => this.setNotificationType(subscription, "sound"))); - } - } - async setDisplayName(subscriptionId, displayName) { await this.db.subscriptions.update(subscriptionId, { displayName, diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js index 508df725..4ba0f9e1 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPushWorker.js @@ -1,16 +1,40 @@ +import { useState, useEffect } from "react"; +import { useLiveQuery } from "dexie-react-hooks"; import notifier from "./Notifier"; import subscriptionManager from "./SubscriptionManager"; -const onMessage = () => { - notifier.playSound(); +export const useWebPushUpdateWorker = () => { + const topics = useLiveQuery(() => subscriptionManager.webPushTopics()); + const [lastTopics, setLastTopics] = useState(); + + useEffect(() => { + if (!notifier.pushPossible() || JSON.stringify(topics) === JSON.stringify(lastTopics)) { + return; + } + + (async () => { + try { + console.log("[useWebPushUpdateWorker] Refreshing web push subscriptions"); + + await subscriptionManager.refreshWebPushSubscriptions(topics); + + setLastTopics(topics); + } catch (e) { + console.error("[useWebPushUpdateWorker] Error refreshing web push subscriptions", e); + } + })(); + }, [topics, lastTopics]); }; -const delayMillis = 2000; // 2 seconds -const intervalMillis = 300000; // 5 minutes +const intervalMillis = 5 * 60 * 1_000; // 5 minutes +const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour -class WebPushWorker { +class WebPushRefreshWorker { constructor() { this.timer = null; + this.lastUpdate = null; + this.messageHandler = this.onMessage.bind(this); + this.visibilityHandler = this.onVisibilityChange.bind(this); } startWorker() { @@ -19,28 +43,42 @@ class WebPushWorker { } this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); - setTimeout(() => this.updateSubscriptions(), delayMillis); this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); - this.broadcastChannel.addEventListener("message", onMessage); + this.broadcastChannel.addEventListener("message", this.messageHandler); + + document.addEventListener("visibilitychange", this.visibilityHandler); } stopWorker() { clearTimeout(this.timer); - this.broadcastChannel.removeEventListener("message", onMessage); + this.broadcastChannel.removeEventListener("message", this.messageHandler); this.broadcastChannel.close(); + + document.removeEventListener("visibilitychange", this.visibilityHandler); + } + + onMessage() { + notifier.playSound(); + } + + onVisibilityChange() { + if (document.visibilityState === "visible") { + this.updateSubscriptions(); + } } async updateSubscriptions() { - try { - console.log("[WebPushBroadcastListener] Refreshing web push subscriptions"); + if (!notifier.pushPossible()) { + return; + } + if (!this.lastUpdate || Date.now() - this.lastUpdate > updateIntervalMillis) { await subscriptionManager.refreshWebPushSubscriptions(); - } catch (e) { - console.error("[WebPushBroadcastListener] Error refreshing web push subscriptions", e); + this.lastUpdate = Date.now(); } } } -export default new WebPushWorker(); +export const webPushRefreshWorker = new WebPushRefreshWorker(); diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js index 9cf8c66e..92b62c43 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/getDb.js @@ -14,7 +14,7 @@ const getDbBase = (username) => { const db = new Dexie(dbName); db.version(2).stores({ - subscriptions: "&id,baseUrl,notificationType", + subscriptions: "&id,baseUrl,[webPushEnabled+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", prefs: "&key", diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 906a88a4..d5b3e976 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,9 +20,8 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; -export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; -export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); +export const webPushSubscriptionsUrl = (baseUrl) => `${baseUrl}/v1/account/web-push`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index bbc380c9..1fb66cb5 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -1078,8 +1078,6 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { - await subscriptionManager.unsubscribeAllWebPush(); - await accountApi.delete(password); await getDb().delete(); console.debug(`[Account] Account deleted`); diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 154f17cb..f0b031a3 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -120,8 +120,6 @@ const ProfileIcon = () => { const handleLogout = async () => { try { - await subscriptionManager.unsubscribeAllWebPush(); - await accountApi.logout(); await getDb().delete(); } finally { diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index b2755aa9..a5852525 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -108,27 +108,34 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const showNotificationPermissionDenied = notifier.denied(); + const [showNotificationPermissionRequired, setShowNotificationPermissionRequired] = useState(notifier.notRequested()); + const [showNotificationPermissionDenied, setShowNotificationPermissionDenied] = useState(notifier.denied()); const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const navListPadding = + const refreshPermissions = () => { + setShowNotificationPermissionRequired(notifier.notRequested()); + setShowNotificationPermissionDenied(notifier.denied()); + }; + + const alertVisible = + showNotificationPermissionRequired || showNotificationPermissionDenied || showNotificationIOSInstallRequired || showNotificationBrowserNotSupportedBox || - showNotificationContextNotSupportedBox - ? "0" - : ""; + showNotificationContextNotSupportedBox; return ( <> - + + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } {showNotificationIOSInstallRequired && } + {alertVisible && } {!showSubscriptionsList && ( navigate(routes.app)} selected={location.pathname === config.app_root}> @@ -346,16 +353,36 @@ const SubscriptionItem = (props) => { ); }; +const NotificationPermissionRequired = ({ refreshPermissions }) => { + const { t } = useTranslation(); + return ( + + {t("alert_notification_permission_required_title")} + + {/* component=Button is not an anchor, false positive */} + {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} + { + await notifier.maybeRequestPermission(); + refreshPermissions(); + }} + > + {t("alert_notification_permission_required_description")} + + + + ); +}; + const NotificationPermissionDeniedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_notification_permission_denied_title")} - {t("alert_notification_permission_denied_description")} - - - + + {t("alert_notification_permission_denied_title")} + {t("alert_notification_permission_denied_description")} + ); }; @@ -363,7 +390,7 @@ const NotificationIOSInstallRequiredAlert = () => { const { t } = useTranslation(); return ( <> - + {t("alert_notification_ios_install_required_title")} {t("alert_notification_ios_install_required_description")} @@ -375,33 +402,27 @@ const NotificationIOSInstallRequiredAlert = () => { const NotificationBrowserNotSupportedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_not_supported_title")} - {t("alert_not_supported_description")} - - - + + {t("alert_not_supported_title")} + {t("alert_not_supported_description")} + ); }; const NotificationContextNotSupportedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_not_supported_title")} - - , - }} - /> - - - - + + {t("alert_not_supported_title")} + + , + }} + /> + + ); }; diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 091e1f51..37f9f772 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -86,7 +86,7 @@ const Notifications = () => { - {notifier.pushSupported() && } + {notifier.pushPossible() && } ); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 60b69863..ad311d5e 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -12,16 +12,14 @@ import { FormGroup, useMediaQuery, Switch, - Stack, } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { Warning } from "@mui/icons-material"; import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; -import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; +import subscriptionManager from "../app/SubscriptionManager"; import poller from "../app/Poller"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -59,16 +57,16 @@ const SubscribeDialog = (props) => { const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleSuccess = async (notificationType) => { + const handleSuccess = async (webPushEnabled) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; const subscription = await subscribeTopic(actualBaseUrl, topic, { - notificationType, + webPushEnabled, }); poller.pollInBackground(subscription); // Dangle! // if the user hasn't changed the default web push setting yet, set it to enabled - if (notificationType === "background" && webPushDefaultEnabled === "initial") { + if (webPushEnabled && webPushDefaultEnabled === "initial") { await prefs.setWebPushDefaultEnabled(true); } @@ -100,23 +98,6 @@ const SubscribeDialog = (props) => { ); }; -const browserNotificationsSupported = notifier.supported(); -const pushNotificationsSupported = notifier.pushSupported(); -const iosInstallRequired = notifier.iosSupportedButInstallRequired(); -const pushPossible = pushNotificationsSupported && iosInstallRequired; - -const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { - if (backgroundNotificationsEnabled) { - return NotificationType.BACKGROUND; - } - - if (browserNotificationsEnabled) { - return NotificationType.BROWSER; - } - - return NotificationType.SOUND; -}; - const SubscribePage = (props) => { const { t } = useTranslation(); const { account } = useContext(AccountContext); @@ -134,27 +115,7 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - // load initial value, but update it in `handleBrowserNotificationsChanged` - // if we interact with the API and therefore possibly change it (from default -> denied) - const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); - // default to on if notifications are already granted - const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState( - pushPossible && props.webPushDefaultEnabled === "enabled" - ); - - const handleBrowserNotificationsChanged = async (e) => { - if (e.target.checked && (await notifier.maybeRequestPermission())) { - setBrowserNotificationsEnabled(true); - if (pushPossible && props.webPushDefaultEnabled === "enabled") { - setBackgroundNotificationsEnabled(true); - } - } else { - setNotificationsExplicitlyDenied(notifier.denied()); - setBrowserNotificationsEnabled(false); - setBackgroundNotificationsEnabled(false); - } - }; + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); const handleBackgroundNotificationsChanged = (e) => { setBackgroundNotificationsEnabled(e.target.checked); @@ -197,7 +158,7 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(getNotificationTypeFromToggles(browserNotificationsEnabled, backgroundNotificationsEnabled)); + props.onSuccess(backgroundNotificationsEnabled); }; const handleUseAnotherChanged = (e) => { @@ -311,41 +272,20 @@ const SubscribePage = (props) => { )} )} - {browserNotificationsSupported && ( + {notifier.pushPossible() && !anotherServerVisible && ( } - label={ - - {t("subscribe_dialog_subscribe_enable_browser_notifications_label")} - {notificationsExplicitlyDenied && } - - } + label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} /> - {pushNotificationsSupported && !anotherServerVisible && browserNotificationsEnabled && ( - - } - label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} - /> - )} )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 90c63b3f..429c2a9f 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -33,7 +33,7 @@ import { Send, } from "@mui/icons-material"; import theme from "./theme"; -import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; +import subscriptionManager from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; import session from "../app/Session"; @@ -334,14 +334,6 @@ const DisplayNameDialog = (props) => { ); }; -const getNotificationType = (subscription) => { - if (subscription.mutedUntil === 1) { - return "muted"; - } - - return subscription.notificationType ?? NotificationType.BROWSER; -}; - const checkedItem = ( @@ -350,15 +342,10 @@ const checkedItem = ( const NotificationToggle = ({ subscription }) => { const { t } = useTranslation(); - const type = getNotificationType(subscription); - const handleChange = async (newType) => { + const handleToggleBackground = async () => { try { - if (newType !== NotificationType.SOUND && !(await notifier.maybeRequestPermission())) { - return; - } - - await subscriptionManager.setNotificationType(subscription, newType); + await subscriptionManager.toggleBackgroundNotifications(subscription); } catch (e) { console.error("[NotificationToggle] Error setting notification type", e); } @@ -368,7 +355,7 @@ const NotificationToggle = ({ subscription }) => { await subscriptionManager.setMutedUntil(subscription.id, 0); }; - if (type === "muted") { + if (subscription.mutedUntil === 1) { return ( @@ -381,30 +368,14 @@ const NotificationToggle = ({ subscription }) => { return ( <> - - {type === NotificationType.SOUND && checkedItem} - handleChange(NotificationType.SOUND)}> - {t("notification_toggle_sound")} - - - {!notifier.denied() && !notifier.iosSupportedButInstallRequired() && ( + {notifier.pushPossible() && ( <> - {notifier.supported() && ( - - {type === NotificationType.BROWSER && checkedItem} - handleChange(NotificationType.BROWSER)}> - {t("notification_toggle_browser")} - - - )} - {notifier.pushSupported() && ( - - {type === NotificationType.BACKGROUND && checkedItem} - handleChange(NotificationType.BACKGROUND)}> - {t("notification_toggle_background")} - - - )} + + {subscription.webPushEnabled === 1 && checkedItem} + + {t("notification_toggle_background")} + + )} diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 3a710e3a..eb40e443 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -9,7 +9,8 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; -import webPushWorker from "../app/WebPushWorker"; +import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; +import notifier from "../app/Notifier"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -134,24 +135,26 @@ const stopWorkers = () => { poller.stopWorker(); pruner.stopWorker(); accountApi.stopWorker(); + webPushRefreshWorker.stopWorker(); }; const startWorkers = () => { poller.startWorker(); pruner.startWorker(); accountApi.startWorker(); + webPushRefreshWorker.startWorker(); }; export const useBackgroundProcesses = () => { + useWebPushUpdateWorker(); + useEffect(() => { console.log("[useBackgroundProcesses] mounting"); startWorkers(); - webPushWorker.startWorker(); return () => { console.log("[useBackgroundProcesses] unloading"); stopWorkers(); - webPushWorker.stopWorker(); }; }, []); }; From 0f0074cbab14ddb77bc9135b02b4dd60e3581a58 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 14:45:05 +0200 Subject: [PATCH 030/158] Implement push subscription expiry --- cmd/serve.go | 8 +++ docs/config.md | 10 +++ docs/subscribe/web.md | 15 ++--- server/config.go | 10 +++ server/log.go | 1 + server/server.yml | 2 + server/server_manager.go | 3 + server/server_web_push.go | 92 ++++++++++++++++----------- server/server_web_push_test.go | 38 ++++++++++- server/types.go | 19 ++++++ server/web_push.go | 55 +++++++++++++++- web/public/sw.js | 112 +++++++++++++++++++-------------- web/src/app/Prefs.js | 3 +- web/src/components/Account.jsx | 1 - web/src/components/App.jsx | 4 +- web/src/components/hooks.js | 1 - 16 files changed, 272 insertions(+), 102 deletions(-) diff --git a/cmd/serve.go b/cmd/serve.go index 4ec94945..a77227e6 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -99,6 +99,8 @@ var flagsServe = append( altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), + altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-warning-duration", Aliases: []string{"web_push_expiry_warning_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION"}, Value: server.DefaultWebPushExpiryWarningDuration, Usage: "duration after last update to send a warning notification"}), + altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-duration", Aliases: []string{"web_push_expiry_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_DURATION"}, Value: server.DefaultWebPushExpiryDuration, Usage: "duration after last update to expire subscription"}), ) var cmdServe = &cli.Command{ @@ -138,6 +140,8 @@ func execServe(c *cli.Context) error { webPushPrivateKey := c.String("web-push-private-key") webPushPublicKey := c.String("web-push-public-key") webPushSubscriptionsFile := c.String("web-push-subscriptions-file") + webPushExpiryWarningDuration := c.Duration("web-push-expiry-warning-duration") + webPushExpiryDuration := c.Duration("web-push-expiry-duration") webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") @@ -197,6 +201,8 @@ func execServe(c *cli.Context) error { return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") + } else if webPushEnabled && (webPushExpiryWarningDuration < 24*time.Hour || (webPushExpiryDuration-webPushExpiryWarningDuration < 24*time.Hour)) { + return errors.New("web push expiry warning duration must be at least 1 day, expire duration must be at least 1 day later") } else if managerInterval < 5*time.Second { return errors.New("manager interval cannot be lower than five seconds") } else if cacheDuration > 0 && cacheDuration < managerInterval { @@ -364,6 +370,8 @@ func execServe(c *cli.Context) error { conf.WebPushPublicKey = webPushPublicKey conf.WebPushSubscriptionsFile = webPushSubscriptionsFile conf.WebPushEmailAddress = webPushEmailAddress + conf.WebPushExpiryDuration = webPushExpiryDuration + conf.WebPushExpiryWarningDuration = webPushExpiryWarningDuration // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/docs/config.md b/docs/config.md index 7e1ef6c6..cfd14034 100644 --- a/docs/config.md +++ b/docs/config.md @@ -827,6 +827,11 @@ web-push-email-address: sysadmin@example.com # don't forget to set the required base-url for web push notifications base-url: https://ntfy.example.com + +# you can also set custom expiry and warning durations +# the minimum is 1 day for warning, and 1 day after warning for expiry +web-push-expiry-warning-duration: 168h +web-push-expiry-duration: 192h ``` The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push @@ -1339,6 +1344,8 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | | `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | +| `web-push-expiry-warning-duration` | `NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION` | *duration* | 1 week | Web Push: Time before expiry warning is sent (min 1 day) | +| `web-push-expiry-duration` | `NTFY_WEB_PUSH_EXPIRY_DURATION` | *duration* | 1 week + 1 day | Web Push: Time before subscription is expired (min 1 day after warning) | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. @@ -1436,5 +1443,8 @@ OPTIONS: --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] + --web-push-expiry-warning-duration value, --web_push_expiry_warning_duration value duration after last update to send a warning notification (default: 168h0m0s) [$NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION] + --web-push-expiry-duration value, --web_push_expiry_duration value duration after last update to expire subscription (default: 192h0m0s) [$NTFY_WEB_PUSH_EXPIRY_DURATION] --help, -h show help + ``` diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index e073bec9..465a53ee 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -2,15 +2,9 @@ You can use the Web UI to subscribe to topics as well. Simply type in the topic name and click the *Subscribe* button. -While subscribing, you have the option to enable desktop notifications, as well as background notifications. When you -enable them for the first time, you will be prompted to allow notifications on your browser. +While subscribing, you have the option to enable background notifications on supported browsers. -- **Sound only** - - If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title - will show the number of new notifications. - -- **Browser Notifications** +- If background notifications are off: This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will appear as a system notification. If you don't see these, check that your browser is allowed to show notifications @@ -19,7 +13,7 @@ enable them for the first time, you will be prompted to allow notifications on y If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave it running. -- **Background Notifications** +- If background notifications are on: This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some cases you may need to keep your browser open. @@ -27,6 +21,9 @@ enable them for the first time, you will be prompted to allow notifications on y Background notifications are only supported on the same server hosting the web app. You cannot use another server, but can instead subscribe on the other server itself. + If the ntfy app is not opened for more than a week, background notifications will be paused. You can resume them + by opening the app again, and will get a warning notification before they are paused. + | Browser | Platform | Browser Running | Browser Not Running | Restrictions | | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | | Chrome | Desktop | ✅ | ❌ | | diff --git a/server/config.go b/server/config.go index d5c87672..e26ee0dd 100644 --- a/server/config.go +++ b/server/config.go @@ -23,6 +23,12 @@ const ( DefaultStripePriceCacheDuration = 3 * time.Hour // Time to keep Stripe prices cached in memory before a refresh is needed ) +// Defines default web push settings +const ( + DefaultWebPushExpiryWarningDuration = 7 * 24 * time.Hour + DefaultWebPushExpiryDuration = DefaultWebPushExpiryWarningDuration + 24*time.Hour +) + // Defines all global and per-visitor limits // - message size limit: the max number of bytes for a message // - total topic limit: max number of topics overall @@ -152,6 +158,8 @@ type Config struct { WebPushPublicKey string WebPushSubscriptionsFile string WebPushEmailAddress string + WebPushExpiryDuration time.Duration + WebPushExpiryWarningDuration time.Duration } // NewConfig instantiates a default new server config @@ -238,5 +246,7 @@ func NewConfig() *Config { WebPushPublicKey: "", WebPushSubscriptionsFile: "", WebPushEmailAddress: "", + WebPushExpiryDuration: DefaultWebPushExpiryDuration, + WebPushExpiryWarningDuration: DefaultWebPushExpiryWarningDuration, } } diff --git a/server/log.go b/server/log.go index c638ed97..9f922b6a 100644 --- a/server/log.go +++ b/server/log.go @@ -29,6 +29,7 @@ const ( tagResetter = "resetter" tagWebsocket = "websocket" tagMatrix = "matrix" + tagWebPush = "web_push" ) var ( diff --git a/server/server.yml b/server/server.yml index 6b921bbd..e59c8336 100644 --- a/server/server.yml +++ b/server/server.yml @@ -47,6 +47,8 @@ # web-push-private-key: # web-push-subscriptions-file: # web-push-email-address: +# web-push-expiry-warning-duration: 168h +# web-push-expiry-duration: 192h # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. diff --git a/server/server_manager.go b/server/server_manager.go index 52e3621e..a8626bd5 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,6 +15,9 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() + if s.config.WebPushEnabled { + s.expireOrNotifyOldSubscriptions() + } // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index fcf0dad6..d7c28955 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -43,6 +43,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return } @@ -50,42 +51,61 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { go func(i int, sub webPushSubscription) { ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} - payload := &webPushPayload{ - SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), - Message: *m, - } - jsonPayload, err := json.Marshal(payload) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ - Subscriber: s.config.WebPushEmailAddress, - VAPIDPublicKey: s.config.WebPushPublicKey, - VAPIDPrivateKey: s.config.WebPushPrivateKey, - // Deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, - }) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - return - } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - return - } + s.sendWebPushNotification(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), *m), &sub, &ctx) }(i, xi) } } + +func (s *Server) expireOrNotifyOldSubscriptions() { + subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") + + return + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint} + + s.sendWebPushNotification(newWebPushSubscriptionExpiringPayload(), &sub, &ctx) + }(i, xi) + } + + log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) +} + +func (s *Server) sendWebPushNotification(payload any, sub *webPushSubscription, ctx *log.Context) { + jsonPayload, err := json.Marshal(payload) + + if err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + return + } + + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // Deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + } + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + log.Tag(tagWebPush).Fields(*ctx).Field("response", resp).Debug("Unable to publish web push message") + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + } + return + } +} diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 75746918..0086b794 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -157,8 +157,42 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { requireSubscriptionCount(t, s, "test-topic-abc", 0) } +func TestServer_WebPush_Expiry(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + w.WriteHeader(200) + w.Write([]byte(``)) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + requireSubscriptionCount(t, s, "test-topic", 1) + + _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") + require.Nil(t, err) + + s.expireOrNotifyOldSubscriptions() + requireSubscriptionCount(t, s, "test-topic", 1) + + waitFor(t, func() bool { + return received.Load() + }) + + _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") + require.Nil(t, err) + + s.expireOrNotifyOldSubscriptions() + requireSubscriptionCount(t, s, "test-topic", 0) +} + func payloadForTopics(t *testing.T, topics []string) string { - topicsJson, err := json.Marshal(topics) + topicsJSON, err := json.Marshal(topics) require.Nil(t, err) return fmt.Sprintf(`{ @@ -170,7 +204,7 @@ func payloadForTopics(t *testing.T, topics []string) string { "auth": "auth-key" } } - }`, topicsJson) + }`, topicsJSON) } func addSubscription(t *testing.T, s *Server, topic string, url string) { diff --git a/server/types.go b/server/types.go index f1f15735..3ddfcbba 100644 --- a/server/types.go +++ b/server/types.go @@ -468,10 +468,29 @@ type apiStripeSubscriptionDeletedEvent struct { } type webPushPayload struct { + Event string `json:"event"` SubscriptionID string `json:"subscription_id"` Message message `json:"message"` } +func newWebPushPayload(subscriptionID string, message message) webPushPayload { + return webPushPayload{ + Event: "message", + SubscriptionID: subscriptionID, + Message: message, + } +} + +type webPushControlMessagePayload struct { + Event string `json:"event"` +} + +func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { + return webPushControlMessagePayload{ + Event: "subscription_expiring", + } +} + type webPushSubscription struct { BrowserSubscription webpush.Subscription UserID string diff --git a/server/web_push.go b/server/web_push.go index c48920d8..a98d6ad8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -3,6 +3,7 @@ package server import ( "database/sql" "fmt" + "time" "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver @@ -18,7 +19,8 @@ const ( endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + warning_sent BOOLEAN DEFAULT FALSE ); CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); @@ -32,8 +34,12 @@ const ( deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` + deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + + updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) @@ -72,7 +78,6 @@ func setupNewSubscriptionsDB(db *sql.DB) error { } func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { - fmt.Printf("AAA") tx, err := c.db.Begin() if err != nil { return err @@ -121,6 +126,49 @@ func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webP return data, nil } +func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { + tx, err := c.db.Begin() + if err != nil { + return nil, err + } + defer tx.Rollback() + + _, err = tx.Exec(deleteWebPushSubscriptionsByAgeQuery, fmt.Sprintf("-%.2f seconds", expiryDuration.Seconds())) + if err != nil { + return nil, err + } + + rows, err := tx.Query(selectWebPushSubscriptionsExpiringSoonQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) + if err != nil { + return nil, err + } + defer rows.Close() + + var data []webPushSubscription + for rows.Next() { + i := webPushSubscription{} + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh) + fmt.Printf("%v+", i) + if err != nil { + return nil, err + } + data = append(data, i) + } + + // also set warning as sent + _, err = tx.Exec(updateWarningSentQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) + if err != nil { + return nil, err + } + + err = tx.Commit() + if err != nil { + return nil, err + } + + return data, nil +} + func (c *webPushStore) RemoveByEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, @@ -136,6 +184,7 @@ func (c *webPushStore) RemoveByUserID(userID string) error { ) return err } + func (c *webPushStore) Close() error { return c.db.Close() } diff --git a/web/public/sw.js b/web/public/sw.js index 70ad9a7d..dba350fa 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -32,35 +32,50 @@ self.addEventListener("push", (event) => { const data = event.data.json(); console.log("[ServiceWorker] Received Web Push Event", { event, data }); - const { subscription_id: subscriptionId, message } = data; - broadcastChannel.postMessage(message); - event.waitUntil( (async () => { - const db = await getDbAsync(); - - await Promise.all([ - (async () => { - await db.notifications.add({ - ...message, - subscriptionId, - // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation - new: 1, - }); - const badgeCount = await db.notifications.where({ new: 1 }).count(); - console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); - self.navigator.setAppBadge?.(badgeCount); - })(), - db.subscriptions.update(subscriptionId, { - last: message.id, - }), - self.registration.showNotification(formatTitleWithDefault(message, message.topic), { - tag: subscriptionId, - body: formatMessage(message), + if (data.event === "subscription_expiring") { + await self.registration.showNotification("Notifications will be paused", { + body: "Open ntfy to continue receiving notifications", icon: "/static/images/ntfy.png", data, - }), - ]); + }); + } else if (data.event === "message") { + const { subscription_id: subscriptionId, message } = data; + broadcastChannel.postMessage(message); + + const db = await getDbAsync(); + + await Promise.all([ + (async () => { + await db.notifications.add({ + ...message, + subscriptionId, + // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation + new: 1, + }); + const badgeCount = await db.notifications.where({ new: 1 }).count(); + console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); + self.navigator.setAppBadge?.(badgeCount); + })(), + db.subscriptions.update(subscriptionId, { + last: message.id, + }), + self.registration.showNotification(formatTitleWithDefault(message, message.topic), { + tag: subscriptionId, + body: formatMessage(message), + icon: "/static/images/ntfy.png", + data, + }), + ]); + } else { + // We can't ignore the push, since permission can be revoked by the browser + await self.registration.showNotification("Unknown notification received from server", { + body: "You may need to update ntfy by opening the web app", + icon: "/static/images/ntfy.png", + data, + }); + } })() ); }); @@ -68,33 +83,38 @@ self.addEventListener("push", (event) => { self.addEventListener("notificationclick", (event) => { event.notification.close(); - const { message } = event.notification.data; - - if (message.click) { - self.clients.openWindow(message.click); - return; - } - - const rootUrl = new URL(self.location.origin); - const topicUrl = new URL(message.topic, self.location.origin); - event.waitUntil( (async () => { const clients = await self.clients.matchAll({ type: "window" }); - const topicClient = clients.find((client) => client.url === topicUrl.toString()); - if (topicClient) { - topicClient.focus(); - return; - } - + const rootUrl = new URL(self.location.origin); const rootClient = clients.find((client) => client.url === rootUrl.toString()); - if (rootClient) { - rootClient.focus(); - return; - } - self.clients.openWindow(topicUrl); + if (event.notification.data.event !== "message") { + if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(rootUrl); + } + } else { + const { message } = event.notification.data; + + if (message.click) { + self.clients.openWindow(message.click); + return; + } + + const topicUrl = new URL(message.topic, self.location.origin); + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + + if (topicClient) { + topicClient.focus(); + } else if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(topicUrl); + } + } })() ); }); diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 45078352..22f767af 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -42,4 +42,5 @@ class Prefs { } } -export default new Prefs(getDb()); +const prefs = new Prefs(getDb()); +export default prefs; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 1fb66cb5..400ca08c 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -57,7 +57,6 @@ import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; import theme from "./theme"; import session from "../app/Session"; -import subscriptionManager from "../app/SubscriptionManager"; const Account = () => { if (!session.exists()) { diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 148c3ac2..f19710d8 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -58,9 +58,7 @@ const App = () => { const updateTitle = (newNotificationsCount) => { document.title = newNotificationsCount > 0 ? `(${newNotificationsCount}) ntfy` : "ntfy"; - if ("setAppBadge" in window.navigator) { - window.navigator.setAppBadge(newNotificationsCount); - } + window.navigator.setAppBadge?.(newNotificationsCount); }; const Layout = () => { diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index eb40e443..815f0596 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -10,7 +10,6 @@ import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; -import notifier from "../app/Notifier"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection From 46f34ca1e3e844f31ca8ac8e78142651a3c3283b Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 16:52:35 +0200 Subject: [PATCH 031/158] Add push service allowlist and topic limit --- server/errors.go | 2 ++ server/server_web_push.go | 27 ++++++++++++++ server/server_web_push_test.go | 66 +++++++++++++++++++++++----------- 3 files changed, 74 insertions(+), 21 deletions(-) diff --git a/server/errors.go b/server/errors.go index d13e2969..c8d96edb 100644 --- a/server/errors.go +++ b/server/errors.go @@ -115,6 +115,8 @@ var ( errHTTPBadRequestPhoneNumberVerifyChannelInvalid = &errHTTP{40036, http.StatusBadRequest, "invalid request: verification channel must be 'sms' or 'call'", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestDelayNoCall = &errHTTP{40037, http.StatusBadRequest, "delayed call notifications are not supported", "", nil} errHTTPBadRequestWebPushSubscriptionInvalid = &errHTTP{40038, http.StatusBadRequest, "invalid request: web push payload malformed", "", nil} + errHTTPBadRequestWebPushEndpointUnknown = &errHTTP{40039, http.StatusBadRequest, "invalid request: web push endpoint unknown", "", nil} + errHTTPBadRequestWebPushTopicCountTooHigh = &errHTTP{40040, http.StatusBadRequest, "invalid request: too many web push topic subscriptions", "", nil} errHTTPNotFound = &errHTTP{40401, http.StatusNotFound, "page not found", "", nil} errHTTPUnauthorized = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication", nil} errHTTPForbidden = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication", nil} diff --git a/server/server_web_push.go b/server/server_web_push.go index d7c28955..caccce92 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -4,18 +4,45 @@ import ( "encoding/json" "fmt" "net/http" + "regexp" "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" "heckel.io/ntfy/user" ) +// test: https://regexr.com/7eqvl +// example urls: +// +// https://android.googleapis.com/XYZ +// https://fcm.googleapis.com/XYZ +// https://updates.push.services.mozilla.com/XYZ +// https://updates-autopush.stage.mozaws.net/XYZ +// https://updates-autopush.dev.mozaws.net/XYZ +// https://AAA.notify.windows.com/XYZ +// https://AAA.push.apple.com/XYZ +const ( + webPushEndpointAllowRegexStr = `^https:\/\/(android\.googleapis\.com|fcm\.googleapis\.com|updates\.push\.services\.mozilla\.com|updates-autopush\.stage\.mozaws\.net|updates-autopush\.dev\.mozaws\.net|.*\.notify\.windows\.com|.*\.push\.apple\.com)\/.*$` + webPushTopicSubscribeLimit = 50 +) + +var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) + func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) + if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } + if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + return errHTTPBadRequestWebPushEndpointUnknown + } + + if len(payload.Topics) > webPushTopicSubscribeLimit { + return errHTTPBadRequestWebPushTopicCountTooHigh + } + u := v.User() topics, err := s.topicsFromIDs(payload.Topics...) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 0086b794..29d91f7e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -16,10 +16,14 @@ import ( "heckel.io/ntfy/util" ) +const ( + defaultEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" +) + func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -27,19 +31,40 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") + require.Equal(t, subs[0].BrowserSubscription.Endpoint, defaultEndpoint) require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") require.Equal(t, subs[0].UserID, "") } +func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + require.Equal(t, 400, response.Code) + require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) +} + +func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + topicList := make([]string, 51) + for i := range topicList { + topicList[i] = util.RandomString(5) + } + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, topicList, defaultEndpoint), nil) + require.Equal(t, 400, response.Code) + require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) +} + func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - addSubscription(t, s, "test-topic", "https://example.com/webpush") + addSubscription(t, s, "test-topic", defaultEndpoint) requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -54,7 +79,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -71,7 +96,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -84,7 +109,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -105,7 +130,7 @@ func TestServer_WebPush_Publish(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) require.Equal(t, "/push-receive", r.URL.Path) @@ -113,9 +138,9 @@ func TestServer_WebPush_Publish(t *testing.T) { require.Equal(t, "", r.Header.Get("Topic")) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") request(t, s, "PUT", "/test-topic", "web push test", nil) @@ -129,18 +154,17 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) // Gone w.WriteHeader(410) - w.Write([]byte(``)) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") - addSubscription(t, s, "test-topic-abc", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") + addSubscription(t, s, "test-topic-abc", pushService.URL+"/push-receive") requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) @@ -162,16 +186,16 @@ func TestServer_WebPush_Expiry(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) w.WriteHeader(200) w.Write([]byte(``)) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") requireSubscriptionCount(t, s, "test-topic", 1) _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") @@ -191,20 +215,20 @@ func TestServer_WebPush_Expiry(t *testing.T) { requireSubscriptionCount(t, s, "test-topic", 0) } -func payloadForTopics(t *testing.T, topics []string) string { +func payloadForTopics(t *testing.T, topics []string, endpoint string) string { topicsJSON, err := json.Marshal(topics) require.Nil(t, err) return fmt.Sprintf(`{ "topics": %s, "browser_subscription":{ - "endpoint": "https://example.com/webpush", + "endpoint": "%s", "keys": { "p256dh": "p256dh-key", "auth": "auth-key" } } - }`, topicsJSON) + }`, topicsJSON, endpoint) } func addSubscription(t *testing.T, s *Server, topic string, url string) { From 03aa67ed6851678d47f557314ed49763ece09f2a Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:36:20 +0200 Subject: [PATCH 032/158] Remove `webPushDefaultEnabled` --- web/public/static/langs/en.json | 5 ---- web/src/app/Prefs.js | 9 ------- web/src/app/SubscriptionManager.js | 4 --- web/src/components/Preferences.jsx | 32 ------------------------ web/src/components/SubscribeDialog.jsx | 18 +------------ web/src/components/SubscriptionPopup.jsx | 20 ++++++--------- 6 files changed, 8 insertions(+), 80 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 2d58311a..80994504 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -369,11 +369,6 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_default_title": "Enable web push notifications by default", - "prefs_notifications_web_push_default_description": "This affects the initial state in the subscribe dialog, as well as the default state for synced topics", - "prefs_notifications_web_push_default_initial": "Unset", - "prefs_notifications_web_push_default_enabled": "Enabled", - "prefs_notifications_web_push_default_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 22f767af..75ac3ab5 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -31,15 +31,6 @@ class Prefs { const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } - - async webPushDefaultEnabled() { - const obj = await this.db.prefs.get("webPushDefaultEnabled"); - return obj?.value ?? "initial"; - } - - async setWebPushDefaultEnabled(enabled) { - await this.db.prefs.put({ key: "webPushDefaultEnabled", value: enabled ? "enabled" : "disabled" }); - } } const prefs = new Prefs(getDb()); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 3cdaa85e..6b82531d 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -78,16 +78,12 @@ class SubscriptionManager { async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); - const webPushEnabled = (await prefs.webPushDefaultEnabled()) === "enabled"; - // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; const local = await this.add(remote.base_url, remote.topic, { - // only if same-origin subscription - webPushEnabled: webPushEnabled && remote.base_url === config.base_url, displayName: remote.display_name, // May be undefined reservation, // May be null! }); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 37f9f772..4afc0f80 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,7 +48,6 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; -import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -86,7 +85,6 @@ const Notifications = () => { - {notifier.pushPossible() && } ); @@ -234,36 +232,6 @@ const DeleteAfter = () => { ); }; -const WebPushDefaultEnabled = () => { - const { t } = useTranslation(); - const labelId = "prefWebPushDefaultEnabled"; - const defaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleChange = async (ev) => { - await prefs.setWebPushDefaultEnabled(ev.target.value); - }; - - // while loading - if (defaultEnabled == null) { - return null; - } - - return ( - - - - - - ); -}; - const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index ad311d5e..8c5d7e45 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -14,7 +14,6 @@ import { Switch, } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; @@ -30,7 +29,6 @@ import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; import notifier from "../app/Notifier"; -import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; @@ -55,8 +53,6 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleSuccess = async (webPushEnabled) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; @@ -64,20 +60,9 @@ const SubscribeDialog = (props) => { webPushEnabled, }); poller.pollInBackground(subscription); // Dangle! - - // if the user hasn't changed the default web push setting yet, set it to enabled - if (webPushEnabled && webPushDefaultEnabled === "initial") { - await prefs.setWebPushDefaultEnabled(true); - } - props.onSuccess(subscription); }; - // wait for liveQuery load - if (webPushDefaultEnabled === undefined) { - return <>; - } - return ( {!showLoginPage && ( @@ -90,7 +75,6 @@ const SubscribeDialog = (props) => { onCancel={props.onCancel} onNeedsLogin={() => setShowLoginPage(true)} onSuccess={handleSuccess} - webPushDefaultEnabled={webPushDefaultEnabled} /> )} {showLoginPage && setShowLoginPage(false)} onSuccess={handleSuccess} />} @@ -115,7 +99,7 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(false); const handleBackgroundNotificationsChanged = (e) => { setBackgroundNotificationsEnabled(e.target.checked); diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 429c2a9f..67a96da7 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -169,7 +169,7 @@ export const SubscriptionPopup = (props) => { return ( <> - + {notifier.pushPossible() && } @@ -367,18 +367,12 @@ const NotificationToggle = ({ subscription }) => { } return ( - <> - {notifier.pushPossible() && ( - <> - - {subscription.webPushEnabled === 1 && checkedItem} - - {t("notification_toggle_background")} - - - - )} - + + {subscription.webPushEnabled === 1 && checkedItem} + + {t("notification_toggle_background")} + + ); }; From 18edff9afe230732445f5f5d1a7f69161ec2f018 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:44:28 +0200 Subject: [PATCH 033/158] Add TODO comment about Safari 17 PWA --- docs/subscribe/desktop.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md index b13d11a4..b9ba02d9 100644 --- a/docs/subscribe/desktop.md +++ b/docs/subscribe/desktop.md @@ -8,6 +8,8 @@ push notifications, and an app badge with the unread notification count. To receive background notifications, either the browser or the installed web app must be open. + + Web app installation is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. Look at the [compatibility table](https://caniuse.com/web-app-manifest) for more info. From f3db0e083e40f70465927b669dcfc511decf0259 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:11:31 +0200 Subject: [PATCH 034/158] Add release notes --- docs/releases.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/releases.md b/docs/releases.md index 0e93b677..eec09358 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1222,6 +1222,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ### ntfy server v2.6.0 (UNRELEASED) +**Features:** + +* The web app now supports web push, and is installable on Chrome, Edge, Android, and iOS. Look at the [web app docs](https://docs.ntfy.sh/subscribe/web/) for more information ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) + **Bug fixes:** * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) From a8db08c7d4602c009481247274222b0a94bde989 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:40:35 +0200 Subject: [PATCH 035/158] Use attachment URL for image & add timestamp --- web/public/sw.js | 9 ++++++++- web/src/app/Notifier.js | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/web/public/sw.js b/web/public/sw.js index dba350fa..96e5bf51 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -46,6 +46,8 @@ self.addEventListener("push", (event) => { const db = await getDbAsync(); + const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; + await Promise.all([ (async () => { await db.notifications.add({ @@ -61,11 +63,14 @@ self.addEventListener("push", (event) => { db.subscriptions.update(subscriptionId, { last: message.id, }), + // Please update the desktop notification in Notifier.js to match any changes self.registration.showNotification(formatTitleWithDefault(message, message.topic), { tag: subscriptionId, body: formatMessage(message), - icon: "/static/images/ntfy.png", + icon: image ?? "/static/images/ntfy.png", + image, data, + timestamp: message.time * 1_000, }), ]); } else { @@ -81,6 +86,8 @@ self.addEventListener("push", (event) => { }); self.addEventListener("notificationclick", (event) => { + console.log("[ServiceWorker] NotificationClick"); + event.notification.close(); event.waitUntil( diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 428b8979..4b8b832c 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -17,13 +17,17 @@ class Notifier { const displayName = topicDisplayName(subscription); const message = formatMessage(notification); const title = formatTitleWithDefault(notification, displayName); + const image = notification.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? notification.attachment.url : undefined; // Show notification console.log(`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`); + // Please update sw.js if formatting changes const n = new Notification(title, { body: message, tag: subscription.id, - icon: logo, + icon: image ?? logo, + image, + timestamp: message.time * 1_000, }); if (notification.click) { n.onclick = () => openUrl(notification.click); From 46798ac322827bc941b3e9e32860af33f23e25ab Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 09:22:56 +0200 Subject: [PATCH 036/158] Make web push toggle global --- web/public/static/langs/en.json | 5 ++ web/src/app/ConnectionManager.js | 14 ++---- web/src/app/Notifier.js | 5 ++ web/src/app/Prefs.js | 9 ++++ web/src/app/SubscriptionManager.js | 20 ++++---- web/src/app/getDb.js | 2 +- web/src/components/App.jsx | 12 ++++- web/src/components/Preferences.jsx | 31 +++++++++++++ web/src/components/SubscribeDialog.jsx | 34 ++------------ web/src/components/SubscriptionPopup.jsx | 58 ++++++++---------------- 10 files changed, 99 insertions(+), 91 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 80994504..d776ac05 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -95,6 +95,7 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", + "notification_toggle_mute": "Mute", "notification_toggle_unmute": "Unmute", "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", @@ -369,6 +370,10 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", + "prefs_notifications_web_push_title": "Enable web push notifications", + "prefs_notifications_web_push_description": "Enable this to receive notifications in the background even when ntfy isn't running", + "prefs_notifications_web_push_enabled": "Enabled", + "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 7cb12e90..ea7ed15e 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -45,15 +45,11 @@ class ConnectionManager { return; } console.log(`[ConnectionManager] Refreshing connections`); - const subscriptionsWithUsersAndConnectionId = subscriptions - .map((s) => { - const [user] = users.filter((u) => u.baseUrl === s.baseUrl); - const connectionId = makeConnectionId(s, user); - return { ...s, user, connectionId }; - }) - // background notifications don't need this as they come over web push. - // however, if they are muted, we again need the ws while the page is active - .filter((s) => !s.webPushEnabled && s.mutedUntil !== 1); + const subscriptionsWithUsersAndConnectionId = subscriptions.map((s) => { + const [user] = users.filter((u) => u.baseUrl === s.baseUrl); + const connectionId = makeConnectionId(s, user); + return { ...s, user, connectionId }; + }); console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 4b8b832c..ddf68f5b 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -114,6 +114,11 @@ class Notifier { return this.pushSupported() && this.contextSupported() && this.granted() && !this.iosSupportedButInstallRequired(); } + async pushEnabled() { + const enabled = await prefs.webPushEnabled(); + return this.pushPossible() && enabled; + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 75ac3ab5..1f1a6d80 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -31,6 +31,15 @@ class Prefs { const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } + + async webPushEnabled() { + const obj = await this.db.prefs.get("webPushEnabled"); + return obj?.value ?? false; + } + + async setWebPushEnabled(enabled) { + await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); + } } const prefs = new Prefs(getDb()); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 6b82531d..1521aedf 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -21,8 +21,16 @@ class SubscriptionManager { } async webPushTopics() { - const subscriptions = await this.db.subscriptions.where({ webPushEnabled: 1, mutedUntil: 0 }).toArray(); - return subscriptions.map(({ topic }) => topic); + // the Promise.resolve wrapper is not superfluous, without it the live query breaks: + // https://dexie.org/docs/dexie-react-hooks/useLiveQuery()#calling-non-dexie-apis-from-querier + if (!(await Promise.resolve(notifier.pushEnabled()))) { + return []; + } + + const subscriptions = await this.db.subscriptions.where({ mutedUntil: 0, baseUrl: config.base_url }).toArray(); + + // internal is currently a bool, it could be a 0/1 to be indexable, but for now just filter them out here + return subscriptions.filter(({ internal }) => !internal).map(({ topic }) => topic); } async get(subscriptionId) { @@ -49,7 +57,6 @@ class SubscriptionManager { * @param {string} topic * @param {object} opts * @param {boolean} opts.internal - * @param {boolean} opts.webPushEnabled * @returns */ async add(baseUrl, topic, opts = {}) { @@ -67,7 +74,6 @@ class SubscriptionManager { topic, mutedUntil: 0, last: null, - webPushEnabled: opts.webPushEnabled ? 1 : 0, }; await this.db.subscriptions.put(subscription); @@ -211,12 +217,6 @@ class SubscriptionManager { }); } - async toggleBackgroundNotifications(subscription) { - await this.db.subscriptions.update(subscription.id, { - webPushEnabled: subscription.webPushEnabled === 1 ? 0 : 1, - }); - } - async setDisplayName(subscriptionId, displayName) { await this.db.subscriptions.update(subscriptionId, { displayName, diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js index 92b62c43..e52932c7 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/getDb.js @@ -14,7 +14,7 @@ const getDbBase = (username) => { const db = new Dexie(dbName); db.version(2).stores({ - subscriptions: "&id,baseUrl,[webPushEnabled+mutedUntil]", + subscriptions: "&id,baseUrl,[baseUrl+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", prefs: "&key", diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index f19710d8..56d5a765 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -69,6 +69,16 @@ const Layout = () => { const [sendDialogOpenMode, setSendDialogOpenMode] = useState(""); const users = useLiveQuery(() => userManager.all()); const subscriptions = useLiveQuery(() => subscriptionManager.all()); + const webPushTopics = useLiveQuery(() => subscriptionManager.webPushTopics()); + + const websocketSubscriptions = useMemo( + () => (subscriptions && webPushTopics ? subscriptions.filter((s) => !webPushTopics.includes(s.topic)) : []), + // websocketSubscriptions should stay stable unless the list of subscription ids changes. + // without the memoization, the connection listener calls a refresh for no reason. + // this isn't a problem due to the makeConnectionId, but it triggers an + // unnecessary recomputation for every received message. + [JSON.stringify({ subscriptions: subscriptions?.map(({ id }) => id), webPushTopics })] + ); const subscriptionsWithoutInternal = subscriptions?.filter((s) => !s.internal); const newNotificationsCount = subscriptionsWithoutInternal?.reduce((prev, cur) => prev + cur.new, 0) || 0; const [selected] = (subscriptionsWithoutInternal || []).filter( @@ -77,7 +87,7 @@ const Layout = () => { (config.base_url === s.baseUrl && params.topic === s.topic) ); - useConnectionListeners(account, subscriptions, users); + useConnectionListeners(account, websocketSubscriptions, users); useAccountListener(setAccount); useBackgroundProcesses(); useEffect(() => updateTitle(newNotificationsCount), [newNotificationsCount]); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 4afc0f80..7ef5a01e 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,6 +48,7 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; +import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -85,6 +86,7 @@ const Notifications = () => { + ); @@ -232,6 +234,35 @@ const DeleteAfter = () => { ); }; +const WebPushEnabled = () => { + const { t } = useTranslation(); + const labelId = "prefWebPushEnabled"; + const defaultEnabled = useLiveQuery(async () => prefs.webPushEnabled()); + const handleChange = async (ev) => { + await prefs.setWebPushEnabled(ev.target.value); + }; + + // while loading + if (defaultEnabled == null) { + return null; + } + + if (!notifier.pushPossible()) { + return null; + } + + return ( + + + + + + ); +}; + const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 8c5d7e45..fedccc39 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -28,7 +28,6 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; -import notifier from "../app/Notifier"; const publicBaseUrl = "https://ntfy.sh"; @@ -53,12 +52,10 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const handleSuccess = async (webPushEnabled) => { + const handleSuccess = async () => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; - const subscription = await subscribeTopic(actualBaseUrl, topic, { - webPushEnabled, - }); + const subscription = await subscribeTopic(actualBaseUrl, topic, {}); poller.pollInBackground(subscription); // Dangle! props.onSuccess(subscription); }; @@ -99,12 +96,6 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(false); - - const handleBackgroundNotificationsChanged = (e) => { - setBackgroundNotificationsEnabled(e.target.checked); - }; - const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -142,15 +133,12 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(backgroundNotificationsEnabled); + props.onSuccess(); }; const handleUseAnotherChanged = (e) => { props.setBaseUrl(""); setAnotherServerVisible(e.target.checked); - if (e.target.checked) { - setBackgroundNotificationsEnabled(false); - } }; const subscribeButtonEnabled = (() => { @@ -256,22 +244,6 @@ const SubscribePage = (props) => { )} )} - {notifier.pushPossible() && !anotherServerVisible && ( - - - } - label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} - /> - - )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 67a96da7..ee162972 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -15,19 +15,17 @@ import { MenuItem, IconButton, ListItemIcon, - ListItemText, - Divider, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { - Check, Clear, ClearAll, Edit, EnhancedEncryption, Lock, LockOpen, + Notifications, NotificationsOff, RemoveCircle, Send, @@ -44,7 +42,6 @@ import api from "../app/Api"; import { AccountContext } from "./App"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; -import notifier from "../app/Notifier"; export const SubscriptionPopup = (props) => { const { t } = useTranslation(); @@ -169,8 +166,8 @@ export const SubscriptionPopup = (props) => { return ( <> - {notifier.pushPossible() && } - + + @@ -334,44 +331,27 @@ const DisplayNameDialog = (props) => { ); }; -const checkedItem = ( - - - -); - const NotificationToggle = ({ subscription }) => { const { t } = useTranslation(); - const handleToggleBackground = async () => { - try { - await subscriptionManager.toggleBackgroundNotifications(subscription); - } catch (e) { - console.error("[NotificationToggle] Error setting notification type", e); - } + const handleToggleMute = async () => { + const mutedUntil = subscription.mutedUntil ? 0 : 1; // Make this a timestamp in the future + await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); }; - const unmute = async () => { - await subscriptionManager.setMutedUntil(subscription.id, 0); - }; - - if (subscription.mutedUntil === 1) { - return ( - - - - - {t("notification_toggle_unmute")} - - ); - } - - return ( - - {subscription.webPushEnabled === 1 && checkedItem} - - {t("notification_toggle_background")} - + return subscription.mutedUntil ? ( + + + + + {t("notification_toggle_unmute")} + + ) : ( + + + + + {t("notification_toggle_mute")} ); }; From 2f5acee79899d68975755dba7d5943a743a5d919 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:55:11 +0200 Subject: [PATCH 037/158] Call pushManager.subscribe only if enabled --- web/src/app/Notifier.js | 23 ++++++++++++++++++----- web/src/app/SubscriptionManager.js | 9 ++++++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index ddf68f5b..b157ef46 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -55,13 +55,26 @@ class Notifier { const pushManager = await this.pushManager(); - return ( - (await pushManager.getSubscription()) ?? - pushManager.subscribe({ + const existingSubscription = await pushManager.getSubscription(); + + if (existingSubscription) { + return existingSubscription; + } + + // create a new subscription only if web push is enabled + // it is possible that web push was previously enabled and then disabled again + // in which case there would be an existingSubscription. + // but if it was _not_ enabled previously, we reach here, and only create a new + // subscription if it is now enabled. + + if (await this.pushEnabled()) { + return pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), - }) - ); + }); + } + + return undefined; } async pushManager() { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 1521aedf..74488bc0 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -114,7 +114,14 @@ class SubscriptionManager { async refreshWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); - await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription()); + const browserSubscription = await notifier.getBrowserSubscription(); + + if (!browserSubscription) { + console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping."); + return; + } + + await api.updateWebPushSubscriptions(topics, browserSubscription); } async updateState(subscriptionId, state) { From 75a4b5bd888e7211af8d8018544404c7b5b07847 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 12:20:12 -0400 Subject: [PATCH 038/158] Small refactor --- server/errors.go | 1 + server/log.go | 2 +- server/server_web_push.go | 95 +++++++++++------------- server/types.go | 18 +++-- server/web_push.go | 26 ++++--- web/public/static/langs/en.json | 10 +-- web/src/components/Preferences.jsx | 7 +- web/src/components/SubscriptionPopup.jsx | 52 +++++-------- 8 files changed, 98 insertions(+), 113 deletions(-) diff --git a/server/errors.go b/server/errors.go index c8d96edb..27ba3df0 100644 --- a/server/errors.go +++ b/server/errors.go @@ -141,5 +141,6 @@ var ( errHTTPInternalError = &errHTTP{50001, http.StatusInternalServerError, "internal server error", "", nil} errHTTPInternalErrorInvalidPath = &errHTTP{50002, http.StatusInternalServerError, "internal server error: invalid path", "", nil} errHTTPInternalErrorMissingBaseURL = &errHTTP{50003, http.StatusInternalServerError, "internal server error: base-url must be be configured for this feature", "https://ntfy.sh/docs/config/", nil} + errHTTPInternalErrorWebPushUnableToPublish = &errHTTP{50004, http.StatusInternalServerError, "internal server error: unable to publish web push message", "", nil} errHTTPInsufficientStorageUnifiedPush = &errHTTP{50701, http.StatusInsufficientStorage, "cannot publish to UnifiedPush topic without previously active subscriber", "", nil} ) diff --git a/server/log.go b/server/log.go index 9f922b6a..978d0593 100644 --- a/server/log.go +++ b/server/log.go @@ -29,7 +29,7 @@ const ( tagResetter = "resetter" tagWebsocket = "websocket" tagMatrix = "matrix" - tagWebPush = "web_push" + tagWebPush = "webpush" ) var ( diff --git a/server/server_web_push.go b/server/server_web_push.go index caccce92..6b3e4adc 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -30,27 +30,19 @@ var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } - - if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + } else if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown - } - - if len(payload.Topics) > webPushTopicSubscribeLimit { + } else if len(payload.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh } - - u := v.User() - topics, err := s.topicsFromIDs(payload.Topics...) if err != nil { return err } - if s.userManager != nil { + u := v.User() for _, t := range topics { if err := s.userManager.Authorize(u, t.ID, user.PermissionRead); err != nil { logvr(v, r).With(t).Err(err).Debug("Access to topic %s not authorized", t.ID) @@ -58,11 +50,9 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { return err } - return s.writeJSON(w, newSuccessResponse()) } @@ -70,69 +60,68 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") - return } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} - - s.sendWebPushNotification(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), *m), &sub, &ctx) - }(i, xi) + payload, err := json.Marshal(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), m)) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") + return + } + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} + if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish web push message") + } } } +// TODO this should return error +// TODO the updated_at field is not actually updated ever + func (s *Server) expireOrNotifyOldSubscriptions() { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") - + return + } else if len(subscriptions) == 0 { return } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint} - - s.sendWebPushNotification(newWebPushSubscriptionExpiringPayload(), &sub, &ctx) - }(i, xi) + payload, err := json.Marshal(newWebPushSubscriptionExpiringPayload()) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") + return } - - log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + go func() { + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} + if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") + } + } + }() + log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) } -func (s *Server) sendWebPushNotification(payload any, sub *webPushSubscription, ctx *log.Context) { - jsonPayload, err := json.Marshal(payload) - - if err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ +func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { + resp, err := webpush.SendNotification(message, &sub.BrowserSubscription, &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, - // Deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, + Urgency: webpush.UrgencyHigh, // iOS requires this to ensure delivery }) - if err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + return err } - return + return err } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - log.Tag(tagWebPush).Fields(*ctx).Field("response", resp).Debug("Unable to publish web push message") + if (resp.StatusCode < 200 || resp.StatusCode > 299) && resp.StatusCode != 429 { + log.Tag(tagWebPush).Fields(*ctx).Field("response_code", resp.StatusCode).Debug("Unable to publish web push message, unexpected response") if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + return err } - return + return errHTTPInternalErrorWebPushUnableToPublish.Fields(*ctx) } + return nil } diff --git a/server/types.go b/server/types.go index 3ddfcbba..a8a01301 100644 --- a/server/types.go +++ b/server/types.go @@ -467,15 +467,21 @@ type apiStripeSubscriptionDeletedEvent struct { Customer string `json:"customer"` } +// List of possible Web Push events +const ( + webPushMessageEvent = "message" + webPushExpiringEvent = "subscription_expiring" +) + type webPushPayload struct { - Event string `json:"event"` - SubscriptionID string `json:"subscription_id"` - Message message `json:"message"` + Event string `json:"event"` + SubscriptionID string `json:"subscription_id"` + Message *message `json:"message"` } -func newWebPushPayload(subscriptionID string, message message) webPushPayload { +func newWebPushPayload(subscriptionID string, message *message) webPushPayload { return webPushPayload{ - Event: "message", + Event: webPushMessageEvent, SubscriptionID: subscriptionID, Message: message, } @@ -487,7 +493,7 @@ type webPushControlMessagePayload struct { func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { return webPushControlMessagePayload{ - Event: "subscription_expiring", + Event: webPushExpiringEvent, } } diff --git a/server/web_push.go b/server/web_push.go index a98d6ad8..0bea0857 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -63,11 +63,11 @@ func newWebPushStore(filename string) (*webPushStore, error) { func setupSubscriptionsDB(db *sql.DB) error { // If 'subscriptions' table does not exist, this must be a new database - rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) + rows, err := db.Query(selectWebPushSubscriptionsCountQuery) if err != nil { return setupNewSubscriptionsDB(db) } - return rowsMC.Close() + return rows.Close() } func setupNewSubscriptionsDB(db *sql.DB) error { @@ -83,7 +83,6 @@ func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subsc return err } defer tx.Rollback() - if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { return err } @@ -107,26 +106,35 @@ func (c *webPushStore) AddSubscription(topic string, userID string, subscription return err } -func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []*webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - var data []webPushSubscription + var data []*webPushSubscription for rows.Next() { - i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.UserID) - if err != nil { + var userID, endpoint, auth, p256dh string + if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, i) + data = append(data, &webPushSubscription{ + UserID: userID, + BrowserSubscription: webpush.Subscription{ + Endpoint: endpoint, + Keys: webpush.Keys{ + Auth: auth, + P256dh: p256dh, + }, + }, + }) } return data, nil } func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { + // TODO this should be two functions tx, err := c.db.Begin() if err != nil { return nil, err diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index d776ac05..9571272f 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -29,6 +29,8 @@ "action_bar_reservation_limit_reached": "Limit reached", "action_bar_send_test_notification": "Send test notification", "action_bar_clear_notifications": "Clear all notifications", + "action_bar_mute_notifications": "Mute notifications", + "action_bar_unmute_notifications": "Unmute notifications", "action_bar_unsubscribe": "Unsubscribe", "action_bar_toggle_mute": "Mute/unmute notifications", "action_bar_toggle_action_menu": "Open/close action menu", @@ -95,9 +97,6 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", - "notification_toggle_mute": "Mute", - "notification_toggle_unmute": "Unmute", - "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -170,7 +169,6 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_enable_background_notifications_label": "Enable background notifications (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -370,8 +368,8 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_title": "Enable web push notifications", - "prefs_notifications_web_push_description": "Enable this to receive notifications in the background even when ntfy isn't running", + "prefs_notifications_web_push_title": "Background notifications", + "prefs_notifications_web_push_description": "Receive notifications in the background via Web Push, even when app is not running", "prefs_notifications_web_push_enabled": "Enabled", "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 7ef5a01e..7944f9be 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -242,11 +242,6 @@ const WebPushEnabled = () => { await prefs.setWebPushEnabled(ev.target.value); }; - // while loading - if (defaultEnabled == null) { - return null; - } - if (!notifier.pushPossible()) { return null; } @@ -254,7 +249,7 @@ const WebPushEnabled = () => { return ( - {t("prefs_notifications_web_push_enabled")} {t("prefs_notifications_web_push_disabled")} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index ee162972..74438f9a 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -142,6 +142,10 @@ export const SubscriptionPopup = (props) => { await subscriptionManager.deleteNotifications(props.subscription.id); }; + const handleSetMutedUntil = async (mutedUntil) => { + await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); + }; + const handleUnsubscribe = async () => { console.log(`[SubscriptionPopup] Unsubscribing from ${props.subscription.id}`, props.subscription); await subscriptionManager.remove(props.subscription); @@ -166,8 +170,6 @@ export const SubscriptionPopup = (props) => { return ( <> - - @@ -198,7 +200,6 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_reservation_edit")} )} @@ -207,7 +208,6 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_reservation_delete")} )} @@ -215,21 +215,34 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_send_test_notification")} - {t("action_bar_clear_notifications")} + {!!subscription.mutedUntil && ( + handleSetMutedUntil(0)}> + + + + {t("action_bar_unmute_notifications")} + + )} + {!subscription.mutedUntil && ( + handleSetMutedUntil(1)}> + + + + {t("action_bar_mute_notifications")} + + )} - {t("action_bar_unsubscribe")} @@ -331,31 +344,6 @@ const DisplayNameDialog = (props) => { ); }; -const NotificationToggle = ({ subscription }) => { - const { t } = useTranslation(); - - const handleToggleMute = async () => { - const mutedUntil = subscription.mutedUntil ? 0 : 1; // Make this a timestamp in the future - await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); - }; - - return subscription.mutedUntil ? ( - - - - - {t("notification_toggle_unmute")} - - ) : ( - - - - - {t("notification_toggle_mute")} - - ); -}; - export const ReserveLimitChip = () => { const { account } = useContext(AccountContext); if (account?.role === Role.ADMIN || account?.stats.reservations_remaining > 0) { From 4ce6fdcc5acbf2afa73eff7c8937b33806ff1c3d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 20:12:41 +0200 Subject: [PATCH 039/158] Implement http actions in service worker These are only supported in Chrome-based browsers via the service worker and not for regular desktop notifications. --- web/public/sw.js | 69 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/web/public/sw.js b/web/public/sw.js index 96e5bf51..39d60a8a 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -48,6 +48,13 @@ self.addEventListener("push", (event) => { const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; + const actions = message.actions + ?.filter(({ action }) => action === "view" || action === "http") + .map(({ label }) => ({ + action: label, + title: label, + })); + await Promise.all([ (async () => { await db.notifications.add({ @@ -71,6 +78,7 @@ self.addEventListener("push", (event) => { image, data, timestamp: message.time * 1_000, + actions, }), ]); } else { @@ -88,8 +96,6 @@ self.addEventListener("push", (event) => { self.addEventListener("notificationclick", (event) => { console.log("[ServiceWorker] NotificationClick"); - event.notification.close(); - event.waitUntil( (async () => { const clients = await self.clients.matchAll({ type: "window" }); @@ -97,29 +103,64 @@ self.addEventListener("notificationclick", (event) => { const rootUrl = new URL(self.location.origin); const rootClient = clients.find((client) => client.url === rootUrl.toString()); - if (event.notification.data.event !== "message") { + if (event.notification.data?.event !== "message") { if (rootClient) { rootClient.focus(); } else { self.clients.openWindow(rootUrl); } + event.notification.close(); } else { const { message } = event.notification.data; - if (message.click) { + if (event.action) { + const action = event.notification.data.message.actions.find(({ label }) => event.action === label); + + if (action.action === "view") { + self.clients.openWindow(action.url); + + if (action.clear) { + event.notification.close(); + } + } else if (action.action === "http") { + try { + const response = await fetch(action.url, { + method: action.method ?? "POST", + headers: action.headers ?? {}, + body: action.body, + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status} ${response.statusText}`); + } + + if (action.clear) { + event.notification.close(); + } + } catch (e) { + console.error("[ServiceWorker] Error performing http action", e); + self.registration.showNotification(`Unsuccessful action ${action.label} (${action.action})`, { + body: e.message, + }); + } + } + } else if (message.click) { self.clients.openWindow(message.click); - return; - } - const topicUrl = new URL(message.topic, self.location.origin); - const topicClient = clients.find((client) => client.url === topicUrl.toString()); - - if (topicClient) { - topicClient.focus(); - } else if (rootClient) { - rootClient.focus(); + event.notification.close(); } else { - self.clients.openWindow(topicUrl); + const topicUrl = new URL(message.topic, self.location.origin); + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + + if (topicClient) { + topicClient.focus(); + } else if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(topicUrl); + } + + event.notification.close(); } } })() From d3ac976d05e8052fea2f4c8d7d2ad3c995db4534 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 14:30:19 -0400 Subject: [PATCH 040/158] Remove web-push-(enabled|duration*), change endpoint, other cosmetic changes --- cmd/serve.go | 13 +------- cmd/web_push.go | 25 ++++------------ cmd/web_push_test.go | 6 ++-- docs/config.md | 48 ++++++++++++------------------ server/config.go | 2 -- server/server.go | 10 +++---- server/server.yml | 5 +--- server/server_manager.go | 2 +- server/server_middleware.go | 2 +- server/server_test.go | 3 +- server/server_web_push.go | 2 +- server/server_web_push_test.go | 14 ++++----- server/web_push.go | 10 +++---- web/src/app/Api.js | 4 +-- web/src/app/Notifier.js | 7 ++--- web/src/app/SubscriptionManager.js | 1 - web/src/app/utils.js | 2 +- 17 files changed, 55 insertions(+), 101 deletions(-) diff --git a/cmd/serve.go b/cmd/serve.go index a77227e6..6d1b111a 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -94,13 +94,10 @@ var flagsServe = append( altsrc.NewBoolFlag(&cli.BoolFlag{Name: "enable-metrics", Aliases: []string{"enable_metrics"}, EnvVars: []string{"NTFY_ENABLE_METRICS"}, Value: false, Usage: "if set, Prometheus metrics are exposed via the /metrics endpoint"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "metrics-listen-http", Aliases: []string{"metrics_listen_http"}, EnvVars: []string{"NTFY_METRICS_LISTEN_HTTP"}, Usage: "ip:port used to expose the metrics endpoint (implicitly enables metrics)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "profile-listen-http", Aliases: []string{"profile_listen_http"}, EnvVars: []string{"NTFY_PROFILE_LISTEN_HTTP"}, Usage: "ip:port used to expose the profiling endpoints (implicitly enables profiling)"}), - altsrc.NewBoolFlag(&cli.BoolFlag{Name: "web-push-enabled", Aliases: []string{"web_push_enabled"}, EnvVars: []string{"NTFY_WEB_PUSH_ENABLED"}, Usage: "enable web push (requires public and private key)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-public-key", Aliases: []string{"web_push_public_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PUBLIC_KEY"}, Usage: "public key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), - altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-warning-duration", Aliases: []string{"web_push_expiry_warning_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION"}, Value: server.DefaultWebPushExpiryWarningDuration, Usage: "duration after last update to send a warning notification"}), - altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-duration", Aliases: []string{"web_push_expiry_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_DURATION"}, Value: server.DefaultWebPushExpiryDuration, Usage: "duration after last update to expire subscription"}), ) var cmdServe = &cli.Command{ @@ -136,12 +133,9 @@ func execServe(c *cli.Context) error { keyFile := c.String("key-file") certFile := c.String("cert-file") firebaseKeyFile := c.String("firebase-key-file") - webPushEnabled := c.Bool("web-push-enabled") webPushPrivateKey := c.String("web-push-private-key") webPushPublicKey := c.String("web-push-public-key") webPushSubscriptionsFile := c.String("web-push-subscriptions-file") - webPushExpiryWarningDuration := c.Duration("web-push-expiry-warning-duration") - webPushExpiryDuration := c.Duration("web-push-expiry-duration") webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") @@ -197,12 +191,10 @@ func execServe(c *cli.Context) error { // Check values if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") - } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { + } else if webPushPublicKey != "" && (webPushPrivateKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") - } else if webPushEnabled && (webPushExpiryWarningDuration < 24*time.Hour || (webPushExpiryDuration-webPushExpiryWarningDuration < 24*time.Hour)) { - return errors.New("web push expiry warning duration must be at least 1 day, expire duration must be at least 1 day later") } else if managerInterval < 5*time.Second { return errors.New("manager interval cannot be lower than five seconds") } else if cacheDuration > 0 && cacheDuration < managerInterval { @@ -365,13 +357,10 @@ func execServe(c *cli.Context) error { conf.MetricsListenHTTP = metricsListenHTTP conf.ProfileListenHTTP = profileListenHTTP conf.Version = c.App.Version - conf.WebPushEnabled = webPushEnabled conf.WebPushPrivateKey = webPushPrivateKey conf.WebPushPublicKey = webPushPublicKey conf.WebPushSubscriptionsFile = webPushSubscriptionsFile conf.WebPushEmailAddress = webPushEmailAddress - conf.WebPushExpiryDuration = webPushExpiryDuration - conf.WebPushExpiryWarningDuration = webPushExpiryWarningDuration // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/cmd/web_push.go b/cmd/web_push.go index 8b09762c..94f45c77 100644 --- a/cmd/web_push.go +++ b/cmd/web_push.go @@ -14,7 +14,7 @@ func init() { } var cmdWebPush = &cli.Command{ - Name: "web-push", + Name: "webpush", Usage: "Generate keys, in the future manage web push subscriptions", UsageText: "ntfy web-push [generate-keys]", Category: categoryServer, @@ -22,7 +22,7 @@ var cmdWebPush = &cli.Command{ Subcommands: []*cli.Command{ { Action: generateWebPushKeys, - Name: "generate-keys", + Name: "keys", Usage: "Generate VAPID keys to enable browser background push notifications", UsageText: "ntfy web-push generate-keys", Category: categoryServer, @@ -36,28 +36,15 @@ func generateWebPushKeys(c *cli.Context) error { return err } - fmt.Fprintf(c.App.ErrWriter, `Keys generated. + fmt.Fprintf(c.App.ErrWriter, `Web Push keys generated. Add the following lines to your config file: -VAPID Public Key: -%s - -VAPID Private Key: -%s - ---- - -Add the following lines to your config file: - -web-push-enabled: true web-push-public-key: %s web-push-private-key: %s -web-push-subscriptions-file: +web-push-subscriptions-file: /var/cache/ntfy/webpush.db # or similar web-push-email-address: -Look at the docs for other methods (e.g. command line flags & environment variables). - -You will also need to set a base-url. -`, publicKey, privateKey, publicKey, privateKey) +See https://ntfy.sh/docs/config/#web-push for details. +`, publicKey, privateKey) return nil } diff --git a/cmd/web_push_test.go b/cmd/web_push_test.go index 3241ea43..1b364701 100644 --- a/cmd/web_push_test.go +++ b/cmd/web_push_test.go @@ -10,15 +10,15 @@ import ( func TestCLI_WebPush_GenerateKeys(t *testing.T) { app, _, _, stderr := newTestApp() - require.Nil(t, runWebPushCommand(app, server.NewConfig(), "generate-keys")) - require.Contains(t, stderr.String(), "Keys generated.") + require.Nil(t, runWebPushCommand(app, server.NewConfig(), "keys")) + require.Contains(t, stderr.String(), "Web Push keys generated.") } func runWebPushCommand(app *cli.App, conf *server.Config, args ...string) error { webPushArgs := []string{ "ntfy", "--log-level=ERROR", - "web-push", + "webpush", } return app.Run(append(webPushArgs, args...)) } diff --git a/docs/config.md b/docs/config.md index cfd14034..b15b8022 100644 --- a/docs/config.md +++ b/docs/config.md @@ -791,9 +791,18 @@ it'll show `New message` as a popup. ## Web Push notifications [Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) ([RFC8030](https://datatracker.ietf.org/doc/html/rfc8030)) -is supported, but needs a little configuration to enable it. Since there is no central server (other than the browser's push endpoint), -you have to configure your own [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keys. These identify the publisher, -and are used to encrypt the messages before sending them to the push endpoint. +allows ntfy to receive push notifications, even when the ntfy web app (or even the browser, depending on the platform) is closed. +When enabled, the user can enable **background notifications** for their topics in the wep app under Settings. Once enabled by the +user, ntfy will forward published messages to the push endpoint (browser-provided, e.g. fcm.googleapis.com), which will then +forward it to the browser. + +To configure Web Push, you need to generate and configure a [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keypair (via `ntfy webpush keys`), +a database to keep track of the browser's subscriptions, and an admin email address (you): + +- `web-push-public-key` is the generated VAPID public key, e.g. AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +- `web-push-private-key` is the generated VAPID private key, e.g. AA2BB1234567890abcdefzxcvbnm1234567890 +- `web-push-subscriptions-file` is a database file to keep track of browser subscription endpoints, e.g. `/var/cache/ntfy/webpush.db` +- `web-push-email-address` is the admin email address send to the push provider, e.g. `sysadmin@example.com` Limitations: @@ -806,32 +815,17 @@ Limitations: To configure VAPID keys, first generate them: ```sh -$ ntfy web-push generate-keys -Keys generated. - -VAPID Public Key: -AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 - -VAPID Private Key: -AA2BB1234567890abcdefzxcvbnm1234567890 +$ ntfy webpush keys +Web Push keys generated. ``` Then copy the generated values into your `server.yml` or use the corresponding environment variables or command line arguments: ```yaml -web-push-enabled: true web-push-public-key: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 web-push-private-key: AA2BB1234567890abcdefzxcvbnm1234567890 -web-push-subscriptions-file: /var/cache/ntfy/subscriptions.db +web-push-subscriptions-file: /var/cache/ntfy/webpush.db web-push-email-address: sysadmin@example.com - -# don't forget to set the required base-url for web push notifications -base-url: https://ntfy.example.com - -# you can also set custom expiry and warning durations -# the minimum is 1 day for warning, and 1 day after warning for expiry -web-push-expiry-warning-duration: 168h -web-push-expiry-duration: 192h ``` The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push @@ -840,7 +834,7 @@ gateway returns an error (e.g. 410 Gone when a user has unsubscribed). The web app refreshes subscriptions on start and regularly on an interval, but this file should be persisted across restarts. If the subscription file is deleted or lost, any web apps that aren't open will not receive new web push notifications until you open then. -Changing your public/private keypair is NOT recommended. Browsers only allow one server identity (public key) per origin, and +Changing your public/private keypair is **not recommended**. Browsers only allow one server identity (public key) per origin, and if you change them the clients will not be able to subscribe via web push until the user manually clears the notification permission. ## Tiers @@ -1340,12 +1334,10 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | | `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | -| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push generate-keys` to generate | -| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | -| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy webpush generate-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy webpush generate-keys` to generate | +| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | -| `web-push-expiry-warning-duration` | `NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION` | *duration* | 1 week | Web Push: Time before expiry warning is sent (min 1 day) | -| `web-push-expiry-duration` | `NTFY_WEB_PUSH_EXPIRY_DURATION` | *duration* | 1 week + 1 day | Web Push: Time before subscription is expired (min 1 day after warning) | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. @@ -1443,8 +1435,6 @@ OPTIONS: --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] - --web-push-expiry-warning-duration value, --web_push_expiry_warning_duration value duration after last update to send a warning notification (default: 168h0m0s) [$NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION] - --web-push-expiry-duration value, --web_push_expiry_duration value duration after last update to expire subscription (default: 192h0m0s) [$NTFY_WEB_PUSH_EXPIRY_DURATION] --help, -h show help ``` diff --git a/server/config.go b/server/config.go index e26ee0dd..3d779fba 100644 --- a/server/config.go +++ b/server/config.go @@ -153,7 +153,6 @@ type Config struct { EnableMetrics bool AccessControlAllowOrigin string // CORS header field to restrict access from web clients Version string // injected by App - WebPushEnabled bool WebPushPrivateKey string WebPushPublicKey string WebPushSubscriptionsFile string @@ -241,7 +240,6 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", - WebPushEnabled: false, WebPushPrivateKey: "", WebPushPublicKey: "", WebPushSubscriptionsFile: "", diff --git a/server/server.go b/server/server.go index a3170817..c9b95ba6 100644 --- a/server/server.go +++ b/server/server.go @@ -94,7 +94,7 @@ var ( apiAccountSettingsPath = "/v1/account/settings" apiAccountSubscriptionPath = "/v1/account/subscription" apiAccountReservationPath = "/v1/account/reservation" - apiAccountWebPushPath = "/v1/account/web-push" + apiAccountWebPushPath = "/v1/account/webpush" apiAccountPhonePath = "/v1/account/phone" apiAccountPhoneVerifyPath = "/v1/account/phone/verify" apiAccountBillingPortalPath = "/v1/account/billing/portal" @@ -157,7 +157,7 @@ func New(conf *Config) (*Server, error) { return nil, err } var webPush *webPushStore - if conf.WebPushEnabled { + if conf.WebPushPublicKey != "" { webPush, err = newWebPushStore(conf.WebPushSubscriptionsFile) if err != nil { return nil, err @@ -574,7 +574,7 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi EnableCalls: s.config.TwilioAccount != "", EnableEmails: s.config.SMTPSenderFrom != "", EnableReservations: s.config.EnableReservations, - EnableWebPush: s.config.WebPushEnabled, + EnableWebPush: s.config.WebPushPublicKey != "", BillingContact: s.config.BillingContact, WebPushPublicKey: s.config.WebPushPublicKey, DisallowedTopics: s.config.DisallowedTopics, @@ -792,7 +792,7 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { go s.publishToWebPushEndpoints(v, m) } } else { @@ -1724,7 +1724,7 @@ func (s *Server) sendDelayedMessage(v *visitor, m *message) error { if s.config.UpstreamBaseURL != "" { go s.forwardPollRequest(v, m) } - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { go s.publishToWebPushEndpoints(v, m) } if err := s.messageCache.MarkPublished(m); err != nil { diff --git a/server/server.yml b/server/server.yml index e59c8336..0afd4b43 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,15 +40,12 @@ # Enable web push # -# Run "ntfy web-push generate-keys" to generate the keys +# Run "ntfy webpush keys" to generate the keys # -# web-push-enabled: false # web-push-public-key: # web-push-private-key: # web-push-subscriptions-file: # web-push-email-address: -# web-push-expiry-warning-duration: 168h -# web-push-expiry-duration: 192h # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. diff --git a/server/server_manager.go b/server/server_manager.go index a8626bd5..97572a55 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,7 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { s.expireOrNotifyOldSubscriptions() } diff --git a/server/server_middleware.go b/server/server_middleware.go index 41c2706c..b9d1bb88 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -60,7 +60,7 @@ func (s *Server) ensureWebEnabled(next handleFunc) handleFunc { func (s *Server) ensureWebPushEnabled(next handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, v *visitor) error { - if !s.config.WebPushEnabled { + if s.config.WebPushPublicKey == "" { return errHTTPNotFound } return next(w, r, v) diff --git a/server/server_test.go b/server/server_test.go index 76f83eea..2c361e3b 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2622,8 +2622,7 @@ func newTestConfigWithWebPush(t *testing.T) *Config { conf := newTestConfig(t) privateKey, publicKey, err := webpush.GenerateVAPIDKeys() require.Nil(t, err) - conf.WebPushEnabled = true - conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") + conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "webpush.db") conf.WebPushEmailAddress = "testing@example.com" conf.WebPushPrivateKey = privateKey conf.WebPushPublicKey = publicKey diff --git a/server/server_web_push.go b/server/server_web_push.go index 6b3e4adc..20bd4e7c 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -76,7 +76,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { } // TODO this should return error -// TODO the updated_at field is not actually updated ever +// TODO rate limiting func (s *Server) expireOrNotifyOldSubscriptions() { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 29d91f7e..57c52a0d 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -23,7 +23,7 @@ const ( func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -40,7 +40,7 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) } @@ -53,7 +53,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, topicList, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, defaultEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -64,7 +64,7 @@ func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { addSubscription(t, s, "test-topic", defaultEndpoint) requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -79,7 +79,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -96,7 +96,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -109,7 +109,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) diff --git a/server/web_push.go b/server/web_push.go index 0bea0857..6a6b5ee3 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -31,10 +31,9 @@ const ( INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` - deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` + deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` @@ -169,8 +168,7 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du return nil, err } - err = tx.Commit() - if err != nil { + if err = tx.Commit(); err != nil { return nil, err } diff --git a/web/src/app/Api.js b/web/src/app/Api.js index b763346b..d4281d33 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,7 +6,7 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, - webPushSubscriptionsUrl, + accountWebPushUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -117,7 +117,7 @@ class Api { async updateWebPushSubscriptions(topics, browserSubscription) { const user = await userManager.get(config.base_url); - const url = webPushSubscriptionsUrl(config.base_url); + const url = accountWebPushUrl(config.base_url); console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); const response = await fetch(url, { diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index b157ef46..8ef1a1ae 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -52,17 +52,14 @@ class Notifier { if (!this.pushPossible()) { throw new Error("Unsupported or denied"); } - const pushManager = await this.pushManager(); - const existingSubscription = await pushManager.getSubscription(); - if (existingSubscription) { return existingSubscription; } - // create a new subscription only if web push is enabled - // it is possible that web push was previously enabled and then disabled again + // Create a new subscription only if web push is enabled. + // It is possible that web push was previously enabled and then disabled again // in which case there would be an existingSubscription. // but if it was _not_ enabled previously, we reach here, and only create a new // subscription if it is now enabled. diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 74488bc0..592db6f9 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -113,7 +113,6 @@ class SubscriptionManager { async refreshWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); - const browserSubscription = await notifier.getBrowserSubscription(); if (!browserSubscription) { diff --git a/web/src/app/utils.js b/web/src/app/utils.js index d5b3e976..8a1026d7 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -21,7 +21,6 @@ export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, top export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); -export const webPushSubscriptionsUrl = (baseUrl) => `${baseUrl}/v1/account/web-push`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; @@ -33,6 +32,7 @@ export const accountBillingSubscriptionUrl = (baseUrl) => `${baseUrl}/v1/account export const accountBillingPortalUrl = (baseUrl) => `${baseUrl}/v1/account/billing/portal`; export const accountPhoneUrl = (baseUrl) => `${baseUrl}/v1/account/phone`; export const accountPhoneVerifyUrl = (baseUrl) => `${baseUrl}/v1/account/phone/verify`; +export const accountWebPushUrl = (baseUrl) => `${baseUrl}/v1/account/webpush`; export const validUrl = (url) => url.match(/^https?:\/\/.+/); From 9d38aeb863551d939efdf27f5c751fe14d481230 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 21:45:52 -0400 Subject: [PATCH 041/158] Docs in server.yml, schemaVersion table, refactoring --- cmd/{web_push.go => webpush.go} | 0 cmd/{web_push_test.go => webpush_test.go} | 0 server/server.yml | 28 ++++++++++++------- server/server_manager.go | 4 +-- server/server_web_push.go | 33 +++++++++++++++-------- server/server_web_push_test.go | 13 +++++---- server/{web_push.go => webpush_store.go} | 33 ++++++++++++++++------- 7 files changed, 74 insertions(+), 37 deletions(-) rename cmd/{web_push.go => webpush.go} (100%) rename cmd/{web_push_test.go => webpush_test.go} (100%) rename server/{web_push.go => webpush_store.go} (81%) diff --git a/cmd/web_push.go b/cmd/webpush.go similarity index 100% rename from cmd/web_push.go rename to cmd/webpush.go diff --git a/cmd/web_push_test.go b/cmd/webpush_test.go similarity index 100% rename from cmd/web_push_test.go rename to cmd/webpush_test.go diff --git a/server/server.yml b/server/server.yml index 0afd4b43..37efb74a 100644 --- a/server/server.yml +++ b/server/server.yml @@ -38,15 +38,6 @@ # # firebase-key-file: -# Enable web push -# -# Run "ntfy webpush keys" to generate the keys -# -# web-push-public-key: -# web-push-private-key: -# web-push-subscriptions-file: -# web-push-email-address: - # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. # @@ -153,6 +144,25 @@ # smtp-server-domain: # smtp-server-addr-prefix: +# Web Push support (background notifications for browsers) +# +# If enabled, allows ntfy to receive push notifications, even when the ntfy web app is closed. When enabled, the user +# can enable background notifications. Once enabled by the user, ntfy will forward published messages to the push +# endpoint, which will then forward it to the browser. +# +# You must configure all settings below to enable Web Push. +# Run "ntfy webpush keys" to generate the keys. +# +# - web-push-public-key is the generated VAPID public key, e.g. AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +# - web-push-private-key is the generated VAPID private key, e.g. AA2BB1234567890abcdefzxcvbnm1234567890 +# - web-push-subscriptions-file is a database file to keep track of browser subscription endpoints, e.g. `/var/cache/ntfy/webpush.db` +# - web-push-email-address is the admin email address send to the push provider, e.g. `sysadmin@example.com` +# +# web-push-public-key: +# web-push-private-key: +# web-push-subscriptions-file: +# web-push-email-address: + # If enabled, ntfy can perform voice calls via Twilio via the "X-Call" header. # # - twilio-account is the Twilio account SID, e.g. AC12345beefbeef67890beefbeef122586 diff --git a/server/server_manager.go b/server/server_manager.go index 97572a55..b065aff1 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,9 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - if s.config.WebPushPublicKey != "" { - s.expireOrNotifyOldSubscriptions() - } + s.pruneOrNotifyWebPushSubscriptions() // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index 20bd4e7c..37754db2 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -78,28 +78,39 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { // TODO this should return error // TODO rate limiting -func (s *Server) expireOrNotifyOldSubscriptions() { +func (s *Server) pruneOrNotifyWebPushSubscriptions() { + if s.config.WebPushPublicKey == "" { + return + } + go func() { + if err := s.pruneOrNotifyWebPushSubscriptionsInternal(); err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to prune or notify web push subscriptions") + } + }() +} + +func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") - return + return err } else if len(subscriptions) == 0 { - return + return nil } payload, err := json.Marshal(newWebPushSubscriptionExpiringPayload()) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") - return + return err } - go func() { - for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} - if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { - log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") - } + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} + if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") + return err } - }() + } log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + return nil } func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 57c52a0d..3255662c 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -149,7 +149,7 @@ func TestServer_WebPush_Publish(t *testing.T) { }) } -func TestServer_WebPush_PublishExpire(t *testing.T) { +func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool @@ -201,7 +201,7 @@ func TestServer_WebPush_Expiry(t *testing.T) { _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") require.Nil(t, err) - s.expireOrNotifyOldSubscriptions() + s.pruneOrNotifyWebPushSubscriptions() requireSubscriptionCount(t, s, "test-topic", 1) waitFor(t, func() bool { @@ -211,8 +211,12 @@ func TestServer_WebPush_Expiry(t *testing.T) { _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") require.Nil(t, err) - s.expireOrNotifyOldSubscriptions() - requireSubscriptionCount(t, s, "test-topic", 0) + s.pruneOrNotifyWebPushSubscriptions() + waitFor(t, func() bool { + subs, err := s.webPush.SubscriptionsForTopic("test-topic") + require.Nil(t, err) + return len(subs) == 0 + }) } func payloadForTopics(t *testing.T, topics []string, endpoint string) string { @@ -246,6 +250,5 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { subs, err := s.webPush.SubscriptionsForTopic("test-topic") require.Nil(t, err) - require.Len(t, subs, expectedLength) } diff --git a/server/web_push.go b/server/webpush_store.go similarity index 81% rename from server/web_push.go rename to server/webpush_store.go index 6a6b5ee3..86d9eea1 100644 --- a/server/web_push.go +++ b/server/webpush_store.go @@ -22,11 +22,16 @@ const ( updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, warning_sent BOOLEAN DEFAULT FALSE ); + CREATE TABLE IF NOT EXISTS schemaVersion ( + id INT PRIMARY KEY, + version INT NOT NULL + ); CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); COMMIT; ` + insertWebPushSubscriptionQuery = ` INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) @@ -39,8 +44,13 @@ const ( selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` +) - selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` +// Schema management queries +const ( + currentWebPushSchemaVersion = 1 + insertWebPushSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)` + selectWebPushSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1` ) type webPushStore struct { @@ -52,7 +62,7 @@ func newWebPushStore(filename string) (*webPushStore, error) { if err != nil { return nil, err } - if err := setupSubscriptionsDB(db); err != nil { + if err := setupWebPushDB(db); err != nil { return nil, err } return &webPushStore{ @@ -60,33 +70,38 @@ func newWebPushStore(filename string) (*webPushStore, error) { }, nil } -func setupSubscriptionsDB(db *sql.DB) error { - // If 'subscriptions' table does not exist, this must be a new database - rows, err := db.Query(selectWebPushSubscriptionsCountQuery) +func setupWebPushDB(db *sql.DB) error { + // If 'schemaVersion' table does not exist, this must be a new database + rows, err := db.Query(selectWebPushSchemaVersionQuery) if err != nil { - return setupNewSubscriptionsDB(db) + return setupNewWebPushDB(db) } return rows.Close() } -func setupNewSubscriptionsDB(db *sql.DB) error { +func setupNewWebPushDB(db *sql.DB) error { if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { return err } + if _, err := db.Exec(insertWebPushSchemaVersion, currentWebPushSchemaVersion); err != nil { + return err + } return nil } +// UpdateSubscriptions updates the subscriptions for the given topics and user ID. It always first deletes all +// existing entries for a given endpoint. func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { + if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, subscription.Endpoint); err != nil { return err } for _, topic := range topics { - if err := c.AddSubscription(topic, userID, subscription); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, subscription.Endpoint, subscription.Keys.Auth, subscription.Keys.P256dh); err != nil { return err } } From 966ffe1669a799978de7399a292bc98d16d12970 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 23:09:38 -0400 Subject: [PATCH 042/158] More refactor --- server/server_account.go | 2 +- server/server_web_push.go | 27 ++++++------ server/server_web_push_test.go | 68 +++++++++++------------------ server/types.go | 26 ++++++++--- server/webpush_store.go | 79 +++++++++++++--------------------- server/webpush_store_test.go | 12 ++++++ web/src/app/Api.js | 22 +++++----- web/src/app/Notifier.js | 4 +- 8 files changed, 110 insertions(+), 130 deletions(-) create mode 100644 server/webpush_store_test.go diff --git a/server/server_account.go b/server/server_account.go index b42496db..c9ebc702 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -171,7 +171,7 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * return errHTTPBadRequestIncorrectPasswordConfirmation } if s.webPush != nil { - if err := s.webPush.RemoveByUserID(u.ID); err != nil { + if err := s.webPush.RemoveSubscriptionsByUserID(u.ID); err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) } } diff --git a/server/server_web_push.go b/server/server_web_push.go index 37754db2..1adf5580 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -29,15 +29,15 @@ const ( var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { - payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { + req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) + if err != nil || req.Endpoint == "" || req.P256dh == "" || req.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } else if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + } else if !webPushEndpointAllowRegex.MatchString(req.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown - } else if len(payload.Topics) > webPushTopicSubscribeLimit { + } else if len(req.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh } - topics, err := s.topicsFromIDs(payload.Topics...) + topics, err := s.topicsFromIDs(req.Topics...) if err != nil { return err } @@ -50,7 +50,7 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { + if err := s.webPush.UpsertSubscription(req.Endpoint, req.Topics, v.MaybeUserID(), req.Auth, req.P256dh); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) @@ -68,16 +68,13 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { return } for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} + ctx := log.Context{"endpoint": subscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish web push message") } } } -// TODO this should return error -// TODO rate limiting - func (s *Server) pruneOrNotifyWebPushSubscriptions() { if s.config.WebPushPublicKey == "" { return @@ -103,8 +100,8 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { return err } for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} - if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + ctx := log.Context{"endpoint": subscription.Endpoint} + if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") return err } @@ -114,7 +111,7 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { } func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { - resp, err := webpush.SendNotification(message, &sub.BrowserSubscription, &webpush.Options{ + resp, err := webpush.SendNotification(message, sub.ToSubscription(), &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, @@ -122,14 +119,14 @@ func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscriptio }) if err != nil { log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + if err := s.webPush.RemoveSubscriptionsByEndpoint(sub.Endpoint); err != nil { return err } return err } if (resp.StatusCode < 200 || resp.StatusCode > 299) && resp.StatusCode != 429 { log.Tag(tagWebPush).Fields(*ctx).Field("response_code", resp.StatusCode).Debug("Unable to publish web push message, unexpected response") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + if err := s.webPush.RemoveSubscriptionsByEndpoint(sub.Endpoint); err != nil { return err } return errHTTPInternalErrorWebPushUnableToPublish.Fields(*ctx) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 3255662c..c60ceaad 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -3,27 +3,25 @@ package server import ( "encoding/json" "fmt" + "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/http/httptest" "strings" "sync/atomic" "testing" - - "github.com/SherClockHolmes/webpush-go" - "github.com/stretchr/testify/require" - "heckel.io/ntfy/user" - "heckel.io/ntfy/util" ) const ( - defaultEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" + testWebPushEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" ) func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -31,9 +29,9 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].BrowserSubscription.Endpoint, defaultEndpoint) - require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") - require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") + require.Equal(t, subs[0].Endpoint, testWebPushEndpoint) + require.Equal(t, subs[0].P256dh, "p256dh-key") + require.Equal(t, subs[0].Auth, "auth-key") require.Equal(t, subs[0].UserID, "") } @@ -53,7 +51,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -61,10 +59,10 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - addSubscription(t, s, "test-topic", defaultEndpoint) + addSubscription(t, s, testWebPushEndpoint, "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -79,7 +77,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -96,7 +94,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -109,7 +107,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -129,7 +127,6 @@ func TestServer_WebPush_Publish(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool - pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) @@ -140,8 +137,7 @@ func TestServer_WebPush_Publish(t *testing.T) { })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") - + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") request(t, s, "PUT", "/test-topic", "web push test", nil) waitFor(t, func() bool { @@ -153,19 +149,15 @@ func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool - pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) - // Gone - w.WriteHeader(410) + w.WriteHeader(http.StatusGone) received.Store(true) })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") - addSubscription(t, s, "test-topic-abc", pushService.URL+"/push-receive") - + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic", "test-topic-abc") requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) @@ -195,7 +187,7 @@ func TestServer_WebPush_Expiry(t *testing.T) { })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") @@ -225,30 +217,18 @@ func payloadForTopics(t *testing.T, topics []string, endpoint string) string { return fmt.Sprintf(`{ "topics": %s, - "browser_subscription":{ - "endpoint": "%s", - "keys": { - "p256dh": "p256dh-key", - "auth": "auth-key" - } - } + "endpoint": "%s", + "p256dh": "p256dh-key", + "auth": "auth-key" }`, topicsJSON, endpoint) } -func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPush.AddSubscription(topic, "", webpush.Subscription{ - Endpoint: url, - Keys: webpush.Keys{ - // connected to a local test VAPID key, not a leak! - Auth: "kSC3T8aN1JCQxxPdrFLrZg", - P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", - }, - }) - require.Nil(t, err) +func addSubscription(t *testing.T, s *Server, endpoint string, topics ...string) { + require.Nil(t, s.webPush.UpsertSubscription(endpoint, topics, "", "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE")) // Test auth and p256dh } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPush.SubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic(topic) require.Nil(t, err) require.Len(t, subs, expectedLength) } diff --git a/server/types.go b/server/types.go index a8a01301..99f1c4f7 100644 --- a/server/types.go +++ b/server/types.go @@ -1,6 +1,7 @@ package server import ( + "github.com/SherClockHolmes/webpush-go" "net/http" "net/netip" "time" @@ -8,7 +9,6 @@ import ( "heckel.io/ntfy/log" "heckel.io/ntfy/user" - "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -467,6 +467,13 @@ type apiStripeSubscriptionDeletedEvent struct { Customer string `json:"customer"` } +type apiWebPushUpdateSubscriptionRequest struct { + Endpoint string `json:"endpoint"` + Auth string `json:"auth"` + P256dh string `json:"p256dh"` + Topics []string `json:"topics"` +} + // List of possible Web Push events const ( webPushMessageEvent = "message" @@ -498,11 +505,18 @@ func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { } type webPushSubscription struct { - BrowserSubscription webpush.Subscription - UserID string + Endpoint string + Auth string + P256dh string + UserID string } -type webPushSubscriptionPayload struct { - BrowserSubscription webpush.Subscription `json:"browser_subscription"` - Topics []string `json:"topics"` +func (w *webPushSubscription) ToSubscription() *webpush.Subscription { + return &webpush.Subscription{ + Endpoint: w.Endpoint, + Keys: webpush.Keys{ + Auth: w.Auth, + P256dh: w.P256dh, + }, + } } diff --git a/server/webpush_store.go b/server/webpush_store.go index 86d9eea1..774772be 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver ) @@ -41,7 +40,7 @@ const ( deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` ) @@ -89,65 +88,48 @@ func setupNewWebPushDB(db *sql.DB) error { return nil } -// UpdateSubscriptions updates the subscriptions for the given topics and user ID. It always first deletes all +// UpsertSubscription adds or updates Web Push subscriptions for the given topics and user ID. It always first deletes all // existing entries for a given endpoint. -func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { +func (c *webPushStore) UpsertSubscription(endpoint string, topics []string, userID, auth, p256dh string) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, subscription.Endpoint); err != nil { + if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint); err != nil { return err } for _, topic := range topics { - if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, subscription.Endpoint, subscription.Keys.Auth, subscription.Keys.P256dh); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, endpoint, auth, p256dh); err != nil { return err } } return tx.Commit() } -func (c *webPushStore) AddSubscription(topic string, userID string, subscription webpush.Subscription) error { - _, err := c.db.Exec( - insertWebPushSubscriptionQuery, - topic, - userID, - subscription.Endpoint, - subscription.Keys.Auth, - subscription.Keys.P256dh, - ) - return err -} - -func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []*webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) ([]*webPushSubscription, error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - - var data []*webPushSubscription + subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - var userID, endpoint, auth, p256dh string + var endpoint, auth, p256dh, userID string if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, &webPushSubscription{ - UserID: userID, - BrowserSubscription: webpush.Subscription{ - Endpoint: endpoint, - Keys: webpush.Keys{ - Auth: auth, - P256dh: p256dh, - }, - }, + subscriptions = append(subscriptions, &webPushSubscription{ + Endpoint: endpoint, + Auth: auth, + P256dh: p256dh, + UserID: userID, }) } - return data, nil + return subscriptions, nil } -func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) ([]*webPushSubscription, error) { // TODO this should be two functions tx, err := c.db.Begin() if err != nil { @@ -166,15 +148,18 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du } defer rows.Close() - var data []webPushSubscription + subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh) - fmt.Printf("%v+", i) - if err != nil { + var endpoint, auth, p256dh, userID string + if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, i) + subscriptions = append(subscriptions, &webPushSubscription{ + Endpoint: endpoint, + Auth: auth, + P256dh: p256dh, + UserID: userID, + }) } // also set warning as sent @@ -187,22 +172,16 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du return nil, err } - return data, nil + return subscriptions, nil } -func (c *webPushStore) RemoveByEndpoint(endpoint string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByEndpointQuery, - endpoint, - ) +func (c *webPushStore) RemoveSubscriptionsByEndpoint(endpoint string) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint) return err } -func (c *webPushStore) RemoveByUserID(userID string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByUserIDQuery, - userID, - ) +func (c *webPushStore) RemoveSubscriptionsByUserID(userID string) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByUserIDQuery, userID) return err } diff --git a/server/webpush_store_test.go b/server/webpush_store_test.go new file mode 100644 index 00000000..28068ebe --- /dev/null +++ b/server/webpush_store_test.go @@ -0,0 +1,12 @@ +package server + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func newTestWebPushStore(t *testing.T, filename string) *webPushStore { + webPush, err := newWebPushStore(filename) + require.Nil(t, err) + return webPush +} diff --git a/web/src/app/Api.js b/web/src/app/Api.js index d4281d33..43b20a74 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -115,22 +115,22 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async updateWebPushSubscriptions(topics, browserSubscription) { + async updateWebPushSubscriptions(topics, pushSubscription) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); - console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); - - const response = await fetch(url, { + console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: pushSubscription.endpoint }); + console.log(`[Api] Sending Web Push Subscriptions`, { pushSubscription }); + const serializedSubscription = JSON.parse(JSON.stringify(pushSubscription)); // Ugh ... https://stackoverflow.com/a/40525434/1440785 + await fetchOrThrow(url, { method: "PUT", headers: maybeWithAuth({}, user), - body: JSON.stringify({ topics, browser_subscription: browserSubscription }), + body: JSON.stringify({ + endpoint: serializedSubscription.endpoint, + auth: serializedSubscription.keys.auth, + p256dh: serializedSubscription.keys.p256dh, + topics + }), }); - - if (response.ok) { - return true; - } - - throw new Error(`Unexpected server response ${response.status}`); } } diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 8ef1a1ae..04d51281 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -58,7 +58,7 @@ class Notifier { return existingSubscription; } - // Create a new subscription only if web push is enabled. + // Create a new subscription only if web push is enabled. // It is possible that web push was previously enabled and then disabled again // in which case there would be an existingSubscription. // but if it was _not_ enabled previously, we reach here, and only create a new @@ -76,11 +76,9 @@ class Notifier { async pushManager() { const registration = await navigator.serviceWorker.getRegistration(); - if (!registration) { throw new Error("No service worker registration found"); } - return registration.pushManager; } From 9e4eafe8d5180133f5bf2bcb96dbf6623ae92c17 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 9 Jun 2023 10:03:11 +0200 Subject: [PATCH 043/158] Format --- web/src/app/Api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 43b20a74..43bfe283 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -128,7 +128,7 @@ class Api { endpoint: serializedSubscription.endpoint, auth: serializedSubscription.keys.auth, p256dh: serializedSubscription.keys.p256dh, - topics + topics, }), }); } From 4704b2a0e4d413a3cdc5e7de73418e8d5d9c6212 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 9 Jun 2023 11:32:44 +0200 Subject: [PATCH 044/158] Set default TTL for web push to the cache duration --- server/server_web_push.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/server_web_push.go b/server/server_web_push.go index 1adf5580..0b9ac808 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -116,6 +116,7 @@ func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscriptio VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, Urgency: webpush.UrgencyHigh, // iOS requires this to ensure delivery + TTL: int(s.config.CacheDuration.Seconds()), }) if err != nil { log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") From 2e8292a65f5de5354869fb28f5a226ef66c9ff8a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 9 Jun 2023 14:32:34 -0400 Subject: [PATCH 045/158] No real changes, just renames --- web/public/sw.js | 5 ++--- web/src/app/Prefs.js | 4 ++-- web/src/app/Session.js | 6 ++++-- web/src/app/SessionReplica.js | 17 +++++++---------- web/src/app/SubscriptionManager.js | 4 ++-- web/src/app/UserManager.js | 4 ++-- web/src/app/WebPushWorker.js | 2 +- web/src/app/{getDb.js => db.js} | 16 +++++++--------- web/src/components/Account.jsx | 4 ++-- web/src/components/ActionBar.jsx | 4 ++-- 10 files changed, 31 insertions(+), 35 deletions(-) rename web/src/app/{getDb.js => db.js} (64%) diff --git a/web/public/sw.js b/web/public/sw.js index 39d60a8a..6e834367 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -3,7 +3,7 @@ import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; -import { getDbAsync } from "../src/app/getDb"; +import { dbAsync } from "../src/app/db"; import { formatMessage, formatTitleWithDefault } from "../src/app/notificationUtils"; // See WebPushWorker, this is to play a sound on supported browsers, @@ -44,8 +44,7 @@ self.addEventListener("push", (event) => { const { subscription_id: subscriptionId, message } = data; broadcastChannel.postMessage(message); - const db = await getDbAsync(); - + const db = await dbAsync(); const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; const actions = message.actions diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 1f1a6d80..ac1d82db 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,4 +1,4 @@ -import getDb from "./getDb"; +import db from "./db"; class Prefs { constructor(db) { @@ -42,5 +42,5 @@ class Prefs { } } -const prefs = new Prefs(getDb()); +const prefs = new Prefs(db()); export default prefs; diff --git a/web/src/app/Session.js b/web/src/app/Session.js index 8affa53c..bc50864b 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,5 +1,9 @@ import sessionReplica from "./SessionReplica"; +/** + * Manages the logged-in user's session and access token. + * The session replica is stored in IndexedDB so that the service worker can access it. + */ class Session { constructor(replica) { this.replica = replica; @@ -8,14 +12,12 @@ class Session { store(username, token) { localStorage.setItem("user", username); localStorage.setItem("token", token); - this.replica.store(username, token); } reset() { localStorage.removeItem("user"); localStorage.removeItem("token"); - this.replica.reset(); } diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js index 808833f6..a68d4c70 100644 --- a/web/src/app/SessionReplica.js +++ b/web/src/app/SessionReplica.js @@ -1,24 +1,21 @@ import Dexie from "dexie"; -// Store to IndexedDB as well so that the -// service worker can access it -// TODO: Probably make everything depend on this and not use localStorage, -// but that's a larger refactoring effort for another PR - +/** + * Replica of the session in IndexedDB. This is used by the service + * worker to access the session. This is a bit of a hack. + */ class SessionReplica { constructor() { const db = new Dexie("session-replica"); - db.version(1).stores({ - keyValueStore: "&key", + kv: "&key", }); - this.db = db; } async store(username, token) { try { - await this.db.keyValueStore.bulkPut([ + await this.db.kv.bulkPut([ { key: "user", value: username }, { key: "token", value: token }, ]); @@ -36,7 +33,7 @@ class SessionReplica { } async username() { - return (await this.db.keyValueStore.get({ key: "user" }))?.value; + return (await this.db.kv.get({ key: "user" }))?.value; } } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 592db6f9..88b95e7b 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,7 +1,7 @@ import api from "./Api"; import notifier from "./Notifier"; import prefs from "./Prefs"; -import getDb from "./getDb"; +import db from "./db"; import { topicUrl } from "./utils"; class SubscriptionManager { @@ -244,4 +244,4 @@ class SubscriptionManager { } } -export default new SubscriptionManager(getDb()); +export default new SubscriptionManager(db()); diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index a3dee0a3..412e41da 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -1,4 +1,4 @@ -import getDb from "./getDb"; +import db from "./db"; import session from "./Session"; class UserManager { @@ -47,4 +47,4 @@ class UserManager { } } -export default new UserManager(getDb()); +export default new UserManager(db()); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js index 4ba0f9e1..b0d319c7 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPushWorker.js @@ -26,7 +26,7 @@ export const useWebPushUpdateWorker = () => { }, [topics, lastTopics]); }; -const intervalMillis = 5 * 60 * 1_000; // 5 minutes +const intervalMillis = 13 * 60 * 1_000; // 13 minutes const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour class WebPushRefreshWorker { diff --git a/web/src/app/getDb.js b/web/src/app/db.js similarity index 64% rename from web/src/app/getDb.js rename to web/src/app/db.js index e52932c7..6a192011 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/db.js @@ -8,12 +8,11 @@ import sessionReplica from "./SessionReplica"; // Notes: // - As per docs, we only declare the indexable columns, not all columns -const getDbBase = (username) => { - // The IndexedDB database name is based on the logged-in user - const dbName = username ? `ntfy-${username}` : "ntfy"; +const createDatabase = (username) => { + const dbName = username ? `ntfy-${username}` : "ntfy"; // IndexedDB database is based on the logged-in user const db = new Dexie(dbName); - db.version(2).stores({ + db.version(1).stores({ subscriptions: "&id,baseUrl,[baseUrl+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", @@ -23,12 +22,11 @@ const getDbBase = (username) => { return db; }; -export const getDbAsync = async () => { +export const dbAsync = async () => { const username = await sessionReplica.username(); - - return getDbBase(username); + return createDatabase(username); }; -const getDb = () => getDbBase(session.username()); +export const db = () => createDatabase(session.username()); -export default getDb; +export default db; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 400ca08c..47449515 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -48,7 +48,7 @@ import routes from "./routes"; import { formatBytes, formatShortDate, formatShortDateTime, openUrl } from "../app/utils"; import accountApi, { LimitBasis, Role, SubscriptionInterval, SubscriptionStatus } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; -import getDb from "../app/getDb"; +import db from "../app/db"; import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import DialogFooter from "./DialogFooter"; @@ -1078,7 +1078,7 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { await accountApi.delete(password); - await getDb().delete(); + await db().delete(); console.debug(`[Account] Account deleted`); session.resetAndRedirect(routes.app); } catch (e) { diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index f0b031a3..a8cb18ce 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -13,7 +13,7 @@ import session from "../app/Session"; import logo from "../img/ntfy.svg"; import subscriptionManager from "../app/SubscriptionManager"; import routes from "./routes"; -import getDb from "../app/getDb"; +import db from "../app/db"; import { topicDisplayName } from "../app/utils"; import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; @@ -121,7 +121,7 @@ const ProfileIcon = () => { const handleLogout = async () => { try { await accountApi.logout(); - await getDb().delete(); + await db().delete(); } finally { session.resetAndRedirect(routes.app); } From 1abcc88fce53c041767f025fa89734ab5ed685ed Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 9 Jun 2023 23:17:48 -0400 Subject: [PATCH 046/158] Add subscription_topic table, change updated_at type to INT, split expire function --- server/config.go | 4 +- server/server_manager.go | 2 +- server/server_web_push.go | 25 +++-- server/server_web_push_test.go | 11 ++- server/types.go | 1 + server/webpush_store.go | 169 ++++++++++++++++++++------------- 6 files changed, 131 insertions(+), 81 deletions(-) diff --git a/server/config.go b/server/config.go index 3d779fba..3bdda835 100644 --- a/server/config.go +++ b/server/config.go @@ -23,10 +23,10 @@ const ( DefaultStripePriceCacheDuration = 3 * time.Hour // Time to keep Stripe prices cached in memory before a refresh is needed ) -// Defines default web push settings +// Defines default Web Push settings const ( DefaultWebPushExpiryWarningDuration = 7 * 24 * time.Hour - DefaultWebPushExpiryDuration = DefaultWebPushExpiryWarningDuration + 24*time.Hour + DefaultWebPushExpiryDuration = 9 * 24 * time.Hour ) // Defines all global and per-visitor limits diff --git a/server/server_manager.go b/server/server_manager.go index b065aff1..66d449de 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,7 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index 0b9ac808..30a2cd02 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -50,7 +50,7 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpsertSubscription(req.Endpoint, req.Topics, v.MaybeUserID(), req.Auth, req.P256dh); err != nil { + if err := s.webPush.UpsertSubscription(req.Endpoint, req.Auth, req.P256dh, v.MaybeUserID(), req.Topics); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) @@ -75,21 +75,25 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { } } -func (s *Server) pruneOrNotifyWebPushSubscriptions() { +func (s *Server) pruneAndNotifyWebPushSubscriptions() { if s.config.WebPushPublicKey == "" { return } go func() { - if err := s.pruneOrNotifyWebPushSubscriptionsInternal(); err != nil { + if err := s.pruneAndNotifyWebPushSubscriptionsInternal(); err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to prune or notify web push subscriptions") } }() } -func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { - subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) +func (s *Server) pruneAndNotifyWebPushSubscriptionsInternal() error { + // Expire old subscriptions + if err := s.webPush.RemoveExpiredSubscriptions(s.config.WebPushExpiryDuration); err != nil { + return err + } + // Notify subscriptions that will expire soon + subscriptions, err := s.webPush.SubscriptionsExpiring(s.config.WebPushExpiryWarningDuration) if err != nil { - log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") return err } else if len(subscriptions) == 0 { return nil @@ -99,14 +103,19 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") return err } + warningSent := make([]*webPushSubscription, 0) for _, subscription := range subscriptions { ctx := log.Context{"endpoint": subscription.Endpoint} if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") - return err + continue } + warningSent = append(warningSent, subscription) } - log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + if err := s.webPush.MarkExpiryWarningSent(warningSent); err != nil { + return err + } + log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) return nil } diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index c60ceaad..82ad7215 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -12,6 +12,7 @@ import ( "strings" "sync/atomic" "testing" + "time" ) const ( @@ -190,20 +191,20 @@ func TestServer_WebPush_Expiry(t *testing.T) { addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") + _, err := s.webPush.db.Exec("UPDATE subscription SET updated_at = ?", time.Now().Add(-7*24*time.Hour).Unix()) require.Nil(t, err) - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() requireSubscriptionCount(t, s, "test-topic", 1) waitFor(t, func() bool { return received.Load() }) - _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") + _, err = s.webPush.db.Exec("UPDATE subscription SET updated_at = ?", time.Now().Add(-9*24*time.Hour).Unix()) require.Nil(t, err) - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() waitFor(t, func() bool { subs, err := s.webPush.SubscriptionsForTopic("test-topic") require.Nil(t, err) @@ -224,7 +225,7 @@ func payloadForTopics(t *testing.T, topics []string, endpoint string) string { } func addSubscription(t *testing.T, s *Server, endpoint string, topics ...string) { - require.Nil(t, s.webPush.UpsertSubscription(endpoint, topics, "", "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE")) // Test auth and p256dh + require.Nil(t, s.webPush.UpsertSubscription(endpoint, "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", "u_123", topics)) // Test auth and p256dh } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { diff --git a/server/types.go b/server/types.go index 99f1c4f7..90995878 100644 --- a/server/types.go +++ b/server/types.go @@ -505,6 +505,7 @@ func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { } type webPushSubscription struct { + ID string Endpoint string Auth string P256dh string diff --git a/server/webpush_store.go b/server/webpush_store.go index 774772be..6dc1ddef 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -2,47 +2,68 @@ package server import ( "database/sql" - "fmt" + "heckel.io/ntfy/util" "time" _ "github.com/mattn/go-sqlite3" // SQLite driver ) +const ( + subscriptionIDPrefix = "wps_" + subscriptionIDLength = 10 +) + const ( createWebPushSubscriptionsTableQuery = ` BEGIN; - CREATE TABLE IF NOT EXISTS subscriptions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - topic TEXT NOT NULL, - user_id TEXT, + CREATE TABLE IF NOT EXISTS subscription ( + id TEXT PRIMARY KEY, endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, - warning_sent BOOLEAN DEFAULT FALSE + user_id TEXT NOT NULL, + updated_at INT NOT NULL, + warned_at INT NOT NULL DEFAULT 0 ); + CREATE UNIQUE INDEX IF NOT EXISTS idx_endpoint ON subscription (endpoint); + CREATE TABLE IF NOT EXISTS subscription_topic ( + subscription_id TEXT NOT NULL, + topic TEXT NOT NULL, + PRIMARY KEY (subscription_id, topic), + FOREIGN KEY (subscription_id) REFERENCES subscription (id) ON DELETE CASCADE + ); + CREATE INDEX IF NOT EXISTS idx_topic ON subscription_topic (topic); CREATE TABLE IF NOT EXISTS schemaVersion ( id INT PRIMARY KEY, version INT NOT NULL - ); - CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); - CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); - CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); + ); COMMIT; ` - - insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) - VALUES (?, ?, ?, ?, ?) + builtinStartupQueries = ` + PRAGMA foreign_keys = ON; ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` - deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + selectWebPushSubscriptionIDByEndpoint = `SELECT id FROM subscription WHERE endpoint = ?` + selectWebPushSubscriptionsForTopicQuery = ` + SELECT id, endpoint, key_auth, key_p256dh, user_id + FROM subscription_topic st + JOIN subscription s ON s.id = st.subscription_id + WHERE st.topic = ? + ` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT id, endpoint, key_auth, key_p256dh, user_id FROM subscription WHERE warned_at = 0 AND updated_at <= ?` + insertWebPushSubscriptionQuery = ` + INSERT INTO subscription (id, endpoint, key_auth, key_p256dh, user_id, updated_at, warned_at) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON CONFLICT (endpoint) + DO UPDATE SET key_auth = excluded.key_auth, key_p256dh = excluded.key_p256dh, user_id = excluded.user_id, updated_at = excluded.updated_at, warned_at = excluded.warned_at + ` + updateWebPushSubscriptionWarningSentQuery = `UPDATE subscription SET warned_at = ? WHERE id = ?` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscription WHERE endpoint = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?` + deleteWebPushSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan! - updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + insertWebPushSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)` + deleteWebPushSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?` ) // Schema management queries @@ -64,6 +85,9 @@ func newWebPushStore(filename string) (*webPushStore, error) { if err := setupWebPushDB(db); err != nil { return nil, err } + if err := runWebPushStartupQueries(db); err != nil { + return nil, err + } return &webPushStore{ db: db, }, nil @@ -88,19 +112,47 @@ func setupNewWebPushDB(db *sql.DB) error { return nil } +func runWebPushStartupQueries(db *sql.DB) error { + _, err := db.Exec(builtinStartupQueries) + return err +} + // UpsertSubscription adds or updates Web Push subscriptions for the given topics and user ID. It always first deletes all // existing entries for a given endpoint. -func (c *webPushStore) UpsertSubscription(endpoint string, topics []string, userID, auth, p256dh string) error { +func (c *webPushStore) UpsertSubscription(endpoint string, auth, p256dh, userID string, topics []string) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint); err != nil { + // Read existing subscription ID for endpoint (or create new ID) + rows, err := tx.Query(selectWebPushSubscriptionIDByEndpoint, endpoint) + if err != nil { + return err + } + defer rows.Close() + var subscriptionID string + if rows.Next() { + if err := rows.Scan(&subscriptionID); err != nil { + return err + } + } else { + subscriptionID = util.RandomStringPrefix(subscriptionIDPrefix, subscriptionIDLength) + } + if err := rows.Close(); err != nil { + return err + } + // Insert or update subscription + updatedAt, warnedAt := time.Now().Unix(), 0 + if _, err = tx.Exec(insertWebPushSubscriptionQuery, subscriptionID, endpoint, auth, p256dh, userID, updatedAt, warnedAt); err != nil { + return err + } + // Replace all subscription topics + if _, err := tx.Exec(deleteWebPushSubscriptionTopicAllQuery, subscriptionID); err != nil { return err } for _, topic := range topics { - if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, endpoint, auth, p256dh); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionTopicQuery, subscriptionID, topic); err != nil { return err } } @@ -113,65 +165,47 @@ func (c *webPushStore) SubscriptionsForTopic(topic string) ([]*webPushSubscripti return nil, err } defer rows.Close() - subscriptions := make([]*webPushSubscription, 0) - for rows.Next() { - var endpoint, auth, p256dh, userID string - if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { - return nil, err - } - subscriptions = append(subscriptions, &webPushSubscription{ - Endpoint: endpoint, - Auth: auth, - P256dh: p256dh, - UserID: userID, - }) - } - return subscriptions, nil + return c.subscriptionsFromRows(rows) } -func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) ([]*webPushSubscription, error) { - // TODO this should be two functions - tx, err := c.db.Begin() - if err != nil { - return nil, err - } - defer tx.Rollback() - - _, err = tx.Exec(deleteWebPushSubscriptionsByAgeQuery, fmt.Sprintf("-%.2f seconds", expiryDuration.Seconds())) - if err != nil { - return nil, err - } - - rows, err := tx.Query(selectWebPushSubscriptionsExpiringSoonQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) +func (c *webPushStore) SubscriptionsExpiring(warnAfter time.Duration) ([]*webPushSubscription, error) { + rows, err := c.db.Query(selectWebPushSubscriptionsExpiringSoonQuery, time.Now().Add(-warnAfter).Unix()) if err != nil { return nil, err } defer rows.Close() + return c.subscriptionsFromRows(rows) +} +func (c *webPushStore) MarkExpiryWarningSent(subscriptions []*webPushSubscription) error { + tx, err := c.db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + for _, subscription := range subscriptions { + if _, err := tx.Exec(updateWebPushSubscriptionWarningSentQuery, time.Now().Unix(), subscription.ID); err != nil { + return err + } + } + return tx.Commit() +} + +func (c *webPushStore) subscriptionsFromRows(rows *sql.Rows) ([]*webPushSubscription, error) { subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - var endpoint, auth, p256dh, userID string - if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { + var id, endpoint, auth, p256dh, userID string + if err := rows.Scan(&id, &endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } subscriptions = append(subscriptions, &webPushSubscription{ + ID: id, Endpoint: endpoint, Auth: auth, P256dh: p256dh, UserID: userID, }) } - - // also set warning as sent - _, err = tx.Exec(updateWarningSentQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) - if err != nil { - return nil, err - } - - if err = tx.Commit(); err != nil { - return nil, err - } - return subscriptions, nil } @@ -185,6 +219,11 @@ func (c *webPushStore) RemoveSubscriptionsByUserID(userID string) error { return err } +func (c *webPushStore) RemoveExpiredSubscriptions(expireAfter time.Duration) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByAgeQuery, time.Now().Add(-expireAfter).Unix()) + return err +} + func (c *webPushStore) Close() error { return c.db.Close() } From 9d5556c7f554877d38f1ac5f85f4ec51490bd1b0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 20:42:02 -0400 Subject: [PATCH 047/158] Rename things, add comments --- web/src/app/Prefs.js | 4 +-- web/src/app/SubscriptionManager.js | 9 +++--- web/src/app/{WebPushWorker.js => WebPush.js} | 33 ++++++++++++-------- web/src/components/hooks.js | 8 ++--- 4 files changed, 30 insertions(+), 24 deletions(-) rename web/src/app/{WebPushWorker.js => WebPush.js} (69%) diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index ac1d82db..b4cef0ac 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -33,8 +33,8 @@ class Prefs { } async webPushEnabled() { - const obj = await this.db.prefs.get("webPushEnabled"); - return obj?.value ?? false; + const webPushEnabled = await this.db.prefs.get("webPushEnabled"); + return webPushEnabled?.value ?? false; } async setWebPushEnabled(enabled) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 88b95e7b..67b9faa3 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -20,16 +20,15 @@ class SubscriptionManager { ); } + /** List of topics for which Web Push is enabled, excludes internal topics; returns empty list if Web Push is disabled */ async webPushTopics() { // the Promise.resolve wrapper is not superfluous, without it the live query breaks: // https://dexie.org/docs/dexie-react-hooks/useLiveQuery()#calling-non-dexie-apis-from-querier - if (!(await Promise.resolve(notifier.pushEnabled()))) { + const pushEnabled = await Promise.resolve(notifier.pushEnabled()); + if (!pushEnabled) { return []; } - const subscriptions = await this.db.subscriptions.where({ mutedUntil: 0, baseUrl: config.base_url }).toArray(); - - // internal is currently a bool, it could be a 0/1 to be indexable, but for now just filter them out here return subscriptions.filter(({ internal }) => !internal).map(({ topic }) => topic); } @@ -111,7 +110,7 @@ class SubscriptionManager { ); } - async refreshWebPushSubscriptions(presetTopics) { + async updateWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); const browserSubscription = await notifier.getBrowserSubscription(); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPush.js similarity index 69% rename from web/src/app/WebPushWorker.js rename to web/src/app/WebPush.js index b0d319c7..1a9b59eb 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPush.js @@ -3,21 +3,26 @@ import { useLiveQuery } from "dexie-react-hooks"; import notifier from "./Notifier"; import subscriptionManager from "./SubscriptionManager"; -export const useWebPushUpdateWorker = () => { +const intervalMillis = 13 * 60 * 1_000; // 13 minutes +const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour + +/** + * Updates the Web Push subscriptions when the list of topics changes. + */ +export const useWebPushTopicListener = () => { const topics = useLiveQuery(() => subscriptionManager.webPushTopics()); const [lastTopics, setLastTopics] = useState(); useEffect(() => { - if (!notifier.pushPossible() || JSON.stringify(topics) === JSON.stringify(lastTopics)) { + const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); + if (!notifier.pushPossible() || !topicsChanged) { return; } (async () => { try { console.log("[useWebPushUpdateWorker] Refreshing web push subscriptions"); - - await subscriptionManager.refreshWebPushSubscriptions(topics); - + await subscriptionManager.updateWebPushSubscriptions(topics); setLastTopics(topics); } catch (e) { console.error("[useWebPushUpdateWorker] Error refreshing web push subscriptions", e); @@ -26,10 +31,13 @@ export const useWebPushUpdateWorker = () => { }, [topics, lastTopics]); }; -const intervalMillis = 13 * 60 * 1_000; // 13 minutes -const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour - -class WebPushRefreshWorker { +/** + * Helper class for Web Push that does three things: + * 1. Updates the Web Push subscriptions on a schedule + * 2. Updates the Web Push subscriptions when the window is minimised / app switched + * 3. Listens to the broadcast channel from the service worker to play a sound when a message comes in + */ +class WebPushWorker { constructor() { this.timer = null; this.lastUpdate = null; @@ -43,7 +51,6 @@ class WebPushRefreshWorker { } this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); - this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); this.broadcastChannel.addEventListener("message", this.messageHandler); @@ -60,7 +67,7 @@ class WebPushRefreshWorker { } onMessage() { - notifier.playSound(); + notifier.playSound(); // Service Worker cannot play sound, so we do it here! } onVisibilityChange() { @@ -75,10 +82,10 @@ class WebPushRefreshWorker { } if (!this.lastUpdate || Date.now() - this.lastUpdate > updateIntervalMillis) { - await subscriptionManager.refreshWebPushSubscriptions(); + await subscriptionManager.updateWebPushSubscriptions(); this.lastUpdate = Date.now(); } } } -export const webPushRefreshWorker = new WebPushRefreshWorker(); +export const webPush = new WebPushWorker(); diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 815f0596..8da8fdf0 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -9,7 +9,7 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; -import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; +import { webPush, useWebPushTopicListener } from "../app/WebPush"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -134,18 +134,18 @@ const stopWorkers = () => { poller.stopWorker(); pruner.stopWorker(); accountApi.stopWorker(); - webPushRefreshWorker.stopWorker(); + webPush.stopWorker(); }; const startWorkers = () => { poller.startWorker(); pruner.startWorker(); accountApi.startWorker(); - webPushRefreshWorker.startWorker(); + webPush.startWorker(); }; export const useBackgroundProcesses = () => { - useWebPushUpdateWorker(); + useWebPushTopicListener(); useEffect(() => { console.log("[useBackgroundProcesses] mounting"); From eb220544a371617e2cdb25bd7675fe5141f0ac4b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 20:51:24 -0400 Subject: [PATCH 048/158] Change wording in prefs based on setting --- web/public/static/langs/en.json | 9 +++++---- web/src/components/Preferences.jsx | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 9571272f..89ca8931 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -330,6 +330,11 @@ "prefs_notifications_delete_after_one_day_description": "Notifications are auto-deleted after one day", "prefs_notifications_delete_after_one_week_description": "Notifications are auto-deleted after one week", "prefs_notifications_delete_after_one_month_description": "Notifications are auto-deleted after one month", + "prefs_notifications_web_push_title": "Background notifications", + "prefs_notifications_web_push_enabled_description": "Notifications are received when web app is not running via Web Push", + "prefs_notifications_web_push_disabled_description": "Notification are only received when web app is running", + "prefs_notifications_web_push_enabled": "Enabled", + "prefs_notifications_web_push_disabled": "Disabled", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", @@ -368,10 +373,6 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_title": "Background notifications", - "prefs_notifications_web_push_description": "Receive notifications in the background via Web Push, even when app is not running", - "prefs_notifications_web_push_enabled": "Enabled", - "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 7944f9be..5cac0c5a 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -237,7 +237,7 @@ const DeleteAfter = () => { const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; - const defaultEnabled = useLiveQuery(async () => prefs.webPushEnabled()); + const enabled = useLiveQuery(async () => prefs.webPushEnabled()); const handleChange = async (ev) => { await prefs.setWebPushEnabled(ev.target.value); }; @@ -247,9 +247,9 @@ const WebPushEnabled = () => { } return ( - + - {t("prefs_notifications_web_push_enabled")} {t("prefs_notifications_web_push_disabled")} From 58992fc795dc0367c4081071190a1441457a1fae Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 21:09:01 -0400 Subject: [PATCH 049/158] Make DELETE endpoint, add different UI description --- server/server.go | 6 ++++-- server/server_web_push.go | 11 +++++++++++ server/server_web_push_test.go | 18 +++++++++--------- web/src/app/Api.js | 21 +++++++++++++++++---- web/src/app/SubscriptionManager.js | 7 ++++++- 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/server/server.go b/server/server.go index c9b95ba6..d053b3d3 100644 --- a/server/server.go +++ b/server/server.go @@ -490,6 +490,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.ensureUser(s.ensureCallsEnabled(s.withAccountSync(s.handleAccountPhoneNumberAdd)))(w, r, v) } else if r.Method == http.MethodDelete && r.URL.Path == apiAccountPhonePath { return s.ensureUser(s.ensureCallsEnabled(s.withAccountSync(s.handleAccountPhoneNumberDelete)))(w, r, v) + } else if r.Method == http.MethodPost && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) + } else if r.Method == http.MethodDelete && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushDelete))(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiStatsPath { return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { @@ -524,8 +528,6 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPut && apiAccountWebPushPath == r.URL.Path { - return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } diff --git a/server/server_web_push.go b/server/server_web_push.go index 30a2cd02..d0da147f 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -56,6 +56,17 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * return s.writeJSON(w, newSuccessResponse()) } +func (s *Server) handleWebPushDelete(w http.ResponseWriter, r *http.Request, _ *visitor) error { + req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) + if err != nil || req.Endpoint == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + if err := s.webPush.RemoveSubscriptionsByEndpoint(req.Endpoint); err != nil { + return err + } + return s.writeJSON(w, newSuccessResponse()) +} + func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 82ad7215..7db82b8e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -22,7 +22,7 @@ const ( func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -39,7 +39,7 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) } @@ -52,7 +52,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -63,7 +63,7 @@ func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { addSubscription(t, s, testWebPushEndpoint, "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -78,7 +78,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -95,7 +95,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -108,7 +108,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -139,7 +139,7 @@ func TestServer_WebPush_Publish(t *testing.T) { defer pushService.Close() addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") - request(t, s, "PUT", "/test-topic", "web push test", nil) + request(t, s, "POST", "/test-topic", "web push test", nil) waitFor(t, func() bool { return received.Load() @@ -162,7 +162,7 @@ func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) - request(t, s, "PUT", "/test-topic", "web push test", nil) + request(t, s, "POST", "/test-topic", "web push test", nil) waitFor(t, func() bool { return received.Load() diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 43bfe283..8b7fc79b 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -115,14 +115,13 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async updateWebPushSubscriptions(topics, pushSubscription) { + async updateWebPush(pushSubscription, topics) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); - console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: pushSubscription.endpoint }); - console.log(`[Api] Sending Web Push Subscriptions`, { pushSubscription }); + console.log(`[Api] Updating Web Push subscription`, { url, topics, endpoint: pushSubscription.endpoint }); const serializedSubscription = JSON.parse(JSON.stringify(pushSubscription)); // Ugh ... https://stackoverflow.com/a/40525434/1440785 await fetchOrThrow(url, { - method: "PUT", + method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ endpoint: serializedSubscription.endpoint, @@ -132,6 +131,20 @@ class Api { }), }); } + + + async deleteWebPush(pushSubscription) { + const user = await userManager.get(config.base_url); + const url = accountWebPushUrl(config.base_url); + console.log(`[Api] Deleting Web Push subscription`, { url, endpoint: pushSubscription.endpoint }); + await fetchOrThrow(url, { + method: "DELETE", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ + endpoint: pushSubscription.endpoint + }), + }); + } } const api = new Api(); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 67b9faa3..b9e5d083 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -119,7 +119,12 @@ class SubscriptionManager { return; } - await api.updateWebPushSubscriptions(topics, browserSubscription); + if (topics.length > 0) { + await api.updateWebPush(browserSubscription, topics); + } else { + await api.deleteWebPush(browserSubscription); + } + } async updateState(subscriptionId, state) { From 1dbcfe3c6e184fdd452f17589747df68b6408945 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 21:11:48 -0400 Subject: [PATCH 050/158] Thank you @KevinWang15 for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cebf55be..f0617bdb 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + I'd also like to thank JetBrains for providing their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/) to me for free, and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project: From e6c83b6efbfd60f231940b16dd3e9c9763801792 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 08:48:51 -0400 Subject: [PATCH 051/158] Add Lemmy, etc. --- README.md | 4 ++-- docs/integrations.md | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f0617bdb..cff77e3d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Discord](https://img.shields.io/discord/874398661709295626?label=Discord)](https://discord.gg/cT7ECsZj9w) [![Matrix](https://img.shields.io/matrix/ntfy:matrix.org?label=Matrix)](https://matrix.to/#/#ntfy:matrix.org) [![Matrix space](https://img.shields.io/matrix/ntfy-space:matrix.org?label=Matrix+space)](https://matrix.to/#/#ntfy-space:matrix.org) -[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/ntfy?color=%23317f6f&label=-%20r%2Fntfy&style=social)](https://www.reddit.com/r/ntfy/) +[![Lemmy](https://img.shields.io/badge/Lemmy-discuss-green)](https://discuss.ntfy.sh/) [![Healthcheck](https://healthchecks.io/badge/68b65976-b3b0-4102-aec9-980921/kcoEgrLY.svg)](https://ntfy.statuspage.io/) [![Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/binwiederhier/ntfy) @@ -47,7 +47,7 @@ works best for you: * [Discord server](https://discord.gg/cT7ECsZj9w) - direct chat with the community * [Matrix room #ntfy](https://matrix.to/#/#ntfy:matrix.org) (+ [Matrix space](https://matrix.to/#/#ntfy-space:matrix.org)) - same chat, bridged from Discord -* [Reddit r/ntfy](https://www.reddit.com/r/ntfy/) - asynchronous forum (_new as of October 2022_) +* [Lemmy discussion board](https://discuss.ntfy.sh/) - asynchronous forum (_new as of June 2023_) * [GitHub issues](https://github.com/binwiederhier/ntfy/issues) - questions, features, bugs * [Email](https://heckel.io/about) - reach me directly (_I usually prefer the other methods_) diff --git a/docs/integrations.md b/docs/integrations.md index e6113ed7..bc996019 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -55,6 +55,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [ntfy-for-delphi](https://github.com/hazzelnuts/ntfy-for-delphi) - A friendly library to push instant notifications ntfy (Delphi) - [ntfy](https://github.com/ffflorian/ntfy) - Send notifications over ntfy (JS) - [ntfy_dart](https://github.com/jr1221/ntfy_dart) - Dart wrapper around the ntfy API (Dart) +- [gotfy](https://github.com/AnthonyHewins/gotfy) - A Go wrapper for the ntfy API (Go) ## CLIs + GUIs @@ -121,6 +122,9 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [ntfyd](https://github.com/joachimschmidt557/ntfyd) - ntfy desktop daemon (Zig) - [ntfy-browser](https://github.com/johman10/ntfy-browser) - browser extension to receive notifications without having the page open (TypeScript) - [ntfy-electron](https://github.com/xdpirate/ntfy-electron) - Electron wrapper for the ntfy web app (JS) +- [systemd-ntfy-poweronoff](https://github.com/stendler/systemd-ntfy-poweronoff) - Systemd services to send notifications on system startup and shutdown (Go) +- [msgdrop](https://github.com/jbrubake/msgdrop) - Send and receive encrypted messages (Bash) +- [vigilant](https://github.com/VerifiedJoseph/vigilant) - Monitor RSS/ATOM and JSON feeds, and send push notifications on new entries (PHP) ## Blog + forum posts From a8def0aed2ef4267f7b6e80c1493b2981d607b49 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:01:43 -0400 Subject: [PATCH 052/158] Make allowed endpoints a list of patterns --- server/server_web_push.go | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index d0da147f..2a0b548a 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -5,34 +5,44 @@ import ( "fmt" "net/http" "regexp" + "strings" "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" "heckel.io/ntfy/user" ) -// test: https://regexr.com/7eqvl -// example urls: -// -// https://android.googleapis.com/XYZ -// https://fcm.googleapis.com/XYZ -// https://updates.push.services.mozilla.com/XYZ -// https://updates-autopush.stage.mozaws.net/XYZ -// https://updates-autopush.dev.mozaws.net/XYZ -// https://AAA.notify.windows.com/XYZ -// https://AAA.push.apple.com/XYZ const ( - webPushEndpointAllowRegexStr = `^https:\/\/(android\.googleapis\.com|fcm\.googleapis\.com|updates\.push\.services\.mozilla\.com|updates-autopush\.stage\.mozaws\.net|updates-autopush\.dev\.mozaws\.net|.*\.notify\.windows\.com|.*\.push\.apple\.com)\/.*$` - webPushTopicSubscribeLimit = 50 + webPushTopicSubscribeLimit = 50 ) -var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) +var ( + webPushAllowedEndpointsPatterns = []string{ + "https://*.google.com/", + "https://*.googleapis.com/", + "https://*.mozilla.com/", + "https://*.mozaws.net/", + "https://*.windows.com/", + "https://*.microsoft.com/", + "https://*.apple.com/", + } + webPushAllowedEndpointsRegex *regexp.Regexp +) + +func init() { + for i, pattern := range webPushAllowedEndpointsPatterns { + webPushAllowedEndpointsPatterns[i] = strings.ReplaceAll(strings.ReplaceAll(pattern, ".", "\\."), "*", ".+") + } + allPatterns := fmt.Sprintf("^(%s)", strings.Join(webPushAllowedEndpointsPatterns, "|")) + fmt.Println(allPatterns) + webPushAllowedEndpointsRegex = regexp.MustCompile(allPatterns) +} func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) if err != nil || req.Endpoint == "" || req.P256dh == "" || req.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } else if !webPushEndpointAllowRegex.MatchString(req.Endpoint) { + } else if !webPushAllowedEndpointsRegex.MatchString(req.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown } else if len(req.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh From 2d0c043dfd6a5df9908d6f4b3d21113271c78053 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:03:49 -0400 Subject: [PATCH 053/158] Derp --- server/server_web_push.go | 1 - 1 file changed, 1 deletion(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index 2a0b548a..dee88f4f 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -34,7 +34,6 @@ func init() { webPushAllowedEndpointsPatterns[i] = strings.ReplaceAll(strings.ReplaceAll(pattern, ".", "\\."), "*", ".+") } allPatterns := fmt.Sprintf("^(%s)", strings.Join(webPushAllowedEndpointsPatterns, "|")) - fmt.Println(allPatterns) webPushAllowedEndpointsRegex = regexp.MustCompile(allPatterns) } From ae3e8a00947db188c15f87f3fa6149fb33edab6a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:13:05 -0400 Subject: [PATCH 054/158] Blog post --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index bc996019..ce3bb32b 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -128,6 +128,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [Pingdom alternative in one line of curl through ntfy.sh](https://piqoni.bearblog.dev/uptime-monitoring-in-one-line-of-curl/) - bearblog.dev - 6/2023 - [#OpenSourceDiscovery 78: ntfy.sh](https://opensourcedisc.substack.com/p/opensourcediscovery-78-ntfysh) - opensourcedisc.substack.com - 6/2023 - [ntfy: des notifications instantanées](https://blogmotion.fr/diy/ntfy-notification-push-domotique-20708) - blogmotion.fr - 5/2023 - [桌面通知:ntfy](https://www.cnblogs.com/xueweihan/archive/2023/05/04/17370060.html) - cnblogs.com - 5/2023 From 8073bb4e248fd6891718e72886f8bf98fc5749a7 Mon Sep 17 00:00:00 2001 From: Laur Date: Mon, 12 Jun 2023 08:08:16 +0000 Subject: [PATCH 055/158] Translated using Weblate (Romanian) Currently translated at 26.7% (102 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ro/ --- web/public/static/langs/ro.json | 94 ++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ro.json b/web/public/static/langs/ro.json index d9cb66e3..f2d76c6e 100644 --- a/web/public/static/langs/ro.json +++ b/web/public/static/langs/ro.json @@ -9,5 +9,97 @@ "message_bar_type_message": "Scrie un mesaj aici", "message_bar_error_publishing": "Eroare la publicarea notificării", "action_bar_profile_title": "Profil", - "action_bar_profile_settings": "Setări" + "action_bar_profile_settings": "Setări", + "nav_button_settings": "Setări", + "nav_button_connecting": "conectare", + "notifications_attachment_file_video": "fișier video", + "publish_dialog_priority_default": "Prioritate default", + "publish_dialog_priority_high": "Prioritate înaltă", + "publish_dialog_priority_max": "Max. prioritate", + "publish_dialog_message_placeholder": "Introdu un mesaj aici", + "nav_button_subscribe": "Abonează-te la topic", + "nav_upgrade_banner_label": "Upgrade la ntfy Pro", + "nav_upgrade_banner_description": "Rezervă topic-uri, mai multe mesaje și email-uri, și atașamente mai mari", + "common_back": "Înapoi", + "nav_button_account": "Cont", + "nav_button_documentation": "Documentație", + "nav_button_publish_message": "Publică notificarea", + "alert_grant_title": "Notificările sunt dezactivate", + "alert_grant_button": "Permite acum", + "alert_not_supported_title": "Notificările nu sunt acceptate", + "alert_not_supported_description": "Notificările nu sunt acceptate în browser.", + "alert_grant_description": "Permite browser-ului să afișeze notificări.", + "notifications_list": "Lista de notificări", + "notifications_list_item": "Notificare", + "notifications_mark_read": "Marchează ca citit", + "notifications_delete": "Șterge", + "notifications_copied_to_clipboard": "Copiat în clipboard", + "notifications_tags": "Tag-uri", + "notifications_new_indicator": "Notificare nouă", + "notifications_attachment_image": "Imagine atașament", + "notifications_attachment_copy_url_title": "Copiază URL-ul atașamentului în clipboard", + "notifications_attachment_copy_url_button": "Copiază URL", + "notifications_attachment_open_title": "Mergi la {{url}}", + "notifications_attachment_link_expires": "link-ul expiră {{date}}", + "notifications_actions_not_supported": "Acțiune neacceptată în aplicația web", + "notifications_actions_http_request_title": "Trimite {{method}} HTTP la {{url}}", + "notifications_none_for_topic_title": "N-ați primit încă notificări pe acest subiect.", + "notifications_none_for_topic_description": "Pentru a trimite notificări pe acest subiect, setați PUT sau POST pe URL-ul subiectului.", + "notifications_none_for_any_title": "N-ați primit nici o notificare.", + "notifications_none_for_any_description": "Pentru a trimite notificări pe acest subiect, setează PUT sau POST pe URL-ul subiectului. Uite un exemplu cu unul dintre subiectele tale.", + "notifications_no_subscriptions_title": "Se pare că nu ai nici o înscriere.", + "notifications_no_subscriptions_description": "Click pe link-ul \"{{linktext}}\" ca sa creezi o înscriere la un subiect. După aceea, poți trimite mesaje via PUT sau POST și vei primi notificări aici.", + "notifications_example": "Exemplu", + "notifications_more_details": "Pentru mai multe informații, vezi site-ul web sau documentația.", + "display_name_dialog_title": "Schimbă numele afișat", + "display_name_dialog_description": "Setează un nume alternativ pentru subiect care este afișat în lista de înscrieri. Va ajuta la ușurarea identificării subiectelor cu nume complexe.", + "display_name_dialog_placeholder": "Nume afișat", + "reserve_dialog_checkbox_label": "Rezervă subiectul și configurează accesul", + "publish_dialog_progress_uploading": "Încărcare…", + "publish_dialog_progress_uploading_detail": "Încărcare {{loaded}}/{{total}} ({{percent}}%) …", + "publish_dialog_message_published": "Notificare publicată", + "publish_dialog_attachment_limits_file_and_quota_reached": "depășește {{fileSizeLimit}} limita fișierului și cota, {{remainingBytes}} mai rămân", + "publish_dialog_attachment_limits_file_reached": "depășește {{fileSizeLimit}} limita fișierului", + "publish_dialog_attachment_limits_quota_reached": "depășește cota, {{remainingBytes}} mai rămân", + "publish_dialog_priority_min": "Min. prioritate", + "publish_dialog_base_url_label": "URL serviciu", + "publish_dialog_base_url_placeholder": "URL serviciu, ex: https://example.com", + "publish_dialog_topic_label": "Nume subiect", + "publish_dialog_topic_placeholder": "Nume subiect, ex: alerte_phil", + "publish_dialog_topic_reset": "Resetare subiect", + "publish_dialog_title_label": "Titlu", + "publish_dialog_title_placeholder": "Titlu notificare, ex: Alerta spațiu disc", + "publish_dialog_message_label": "Mesaj", + "publish_dialog_tags_label": "Tag-uri", + "publish_dialog_tags_placeholder": "Lista de tag-uri separate prin virgula, ex: avertizare,srv1-backup", + "publish_dialog_priority_label": "Prioritate", + "publish_dialog_click_label": "Click URL", + "publish_dialog_click_placeholder": "URL deschis când notificarea este selectată", + "publish_dialog_click_reset": "Șterge URL selecție", + "publish_dialog_email_label": "E-mail", + "signup_form_confirm_password": "Confirmă parola", + "action_bar_account": "Cont", + "action_bar_change_display_name": "Schimbă numele afișat", + "action_bar_reservation_limit_reached": "Limita atinsă", + "common_cancel": "Anulează", + "common_save": "Salvează", + "common_add": "Adaugă", + "signup_form_password": "Parolă", + "publish_dialog_title_topic": "Publică în {{topic}}", + "publish_dialog_title_no_topic": "Publică notificare", + "nav_button_all_notifications": "Toate notificările", + "notifications_priority_x": "Prioritate {{priority}}", + "notifications_attachment_file_image": "fișier imagine", + "notifications_attachment_open_button": "Deschide atașament", + "notifications_attachment_file_audio": "fișier audio", + "notifications_actions_open_url_title": "Mergi la {{url}}", + "notifications_attachment_file_document": "alt document", + "notifications_attachment_link_expired": "link-ul de descărcare expirat", + "notifications_attachment_file_app": "fișier aplicație Android", + "notifications_click_copy_url_title": "Copiază URL-ul în clipboard", + "notifications_click_copy_url_button": "Copiază link", + "notifications_click_open_button": "Deschide link", + "publish_dialog_emoji_picker_show": "Alege un emoji", + "notifications_loading": "Încărcare notificări…", + "publish_dialog_priority_low": "Prioritate joasă" } From 8ccfa5c3fb35be628b0f4e6b8375b8d2f4c7acb6 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:00:51 +0200 Subject: [PATCH 056/158] Fix session replica behaviour (merge with session) The harder-to-refactor parts are the places where exists/username/token are called within a React component. However, `resetAndRedirect` and `store` are already called from async contexts, so adding an `await` is simple. This thus merges the logic, keeping localStorage for the components to call, but making sure reset/store behaviour works correctly for the replica. --- web/src/app/AccountApi.js | 2 +- web/src/app/Session.js | 29 ++++++++++------- web/src/app/SessionReplica.js | 41 ------------------------ web/src/app/db.js | 3 +- web/src/components/Account.jsx | 18 +++++------ web/src/components/ActionBar.jsx | 2 +- web/src/components/Login.jsx | 2 +- web/src/components/Preferences.jsx | 2 +- web/src/components/PublishDialog.jsx | 2 +- web/src/components/ReserveDialogs.jsx | 6 ++-- web/src/components/Signup.jsx | 2 +- web/src/components/SubscribeDialog.jsx | 4 +-- web/src/components/SubscriptionPopup.jsx | 4 +-- web/src/components/UpgradeDialog.jsx | 2 +- web/src/components/hooks.js | 2 +- 15 files changed, 43 insertions(+), 78 deletions(-) delete mode 100644 web/src/app/SessionReplica.js diff --git a/web/src/app/AccountApi.js b/web/src/app/AccountApi.js index 572764fe..d9380438 100644 --- a/web/src/app/AccountApi.js +++ b/web/src/app/AccountApi.js @@ -367,7 +367,7 @@ class AccountApi { } catch (e) { console.log(`[AccountApi] Error fetching account`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } return undefined; } diff --git a/web/src/app/Session.js b/web/src/app/Session.js index bc50864b..82249b06 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,29 +1,36 @@ -import sessionReplica from "./SessionReplica"; +import Dexie from "dexie"; /** * Manages the logged-in user's session and access token. * The session replica is stored in IndexedDB so that the service worker can access it. */ class Session { - constructor(replica) { - this.replica = replica; + constructor() { + const db = new Dexie("session-replica"); + db.version(1).stores({ + kv: "&key", + }); + this.db = db; } - store(username, token) { + async store(username, token) { + await this.db.kv.bulkPut([ + { key: "user", value: username }, + { key: "token", value: token }, + ]); localStorage.setItem("user", username); localStorage.setItem("token", token); - this.replica.store(username, token); } - reset() { + async resetAndRedirect(url) { + await this.db.delete(); localStorage.removeItem("user"); localStorage.removeItem("token"); - this.replica.reset(); + window.location.href = url; } - resetAndRedirect(url) { - this.reset(); - window.location.href = url; + async usernameAsync() { + return (await this.db.kv.get({ key: "user" }))?.value; } exists() { @@ -39,5 +46,5 @@ class Session { } } -const session = new Session(sessionReplica); +const session = new Session(); export default session; diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js deleted file mode 100644 index a68d4c70..00000000 --- a/web/src/app/SessionReplica.js +++ /dev/null @@ -1,41 +0,0 @@ -import Dexie from "dexie"; - -/** - * Replica of the session in IndexedDB. This is used by the service - * worker to access the session. This is a bit of a hack. - */ -class SessionReplica { - constructor() { - const db = new Dexie("session-replica"); - db.version(1).stores({ - kv: "&key", - }); - this.db = db; - } - - async store(username, token) { - try { - await this.db.kv.bulkPut([ - { key: "user", value: username }, - { key: "token", value: token }, - ]); - } catch (e) { - console.error("[Session] Error replicating session to IndexedDB", e); - } - } - - async reset() { - try { - await this.db.delete(); - } catch (e) { - console.error("[Session] Error resetting session on IndexedDB", e); - } - } - - async username() { - return (await this.db.kv.get({ key: "user" }))?.value; - } -} - -const sessionReplica = new SessionReplica(); -export default sessionReplica; diff --git a/web/src/app/db.js b/web/src/app/db.js index 6a192011..357f4e96 100644 --- a/web/src/app/db.js +++ b/web/src/app/db.js @@ -1,6 +1,5 @@ import Dexie from "dexie"; import session from "./Session"; -import sessionReplica from "./SessionReplica"; // Uses Dexie.js // https://dexie.org/docs/API-Reference#quick-reference @@ -23,7 +22,7 @@ const createDatabase = (username) => { }; export const dbAsync = async () => { - const username = await sessionReplica.username(); + const username = await session.usernameAsync(); return createDatabase(username); }; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 47449515..a6a624b8 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -164,7 +164,7 @@ const ChangePasswordDialog = (props) => { if (e instanceof IncorrectPasswordError) { setError(t("account_basics_password_dialog_current_password_incorrect")); } else if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -245,7 +245,7 @@ const AccountType = () => { } catch (e) { console.log(`[Account] Error opening billing portal`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setShowPortalError(true); } @@ -371,7 +371,7 @@ const PhoneNumbers = () => { } catch (e) { console.log(`[Account] Error deleting phone number`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } }; @@ -447,7 +447,7 @@ const AddPhoneNumberDialog = (props) => { } catch (e) { console.log(`[Account] Error sending verification`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -464,7 +464,7 @@ const AddPhoneNumberDialog = (props) => { } catch (e) { console.log(`[Account] Error confirming verification`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -946,7 +946,7 @@ const TokenDialog = (props) => { } catch (e) { console.log(`[Account] Error creating token`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -1003,7 +1003,7 @@ const TokenDeleteDialog = (props) => { } catch (e) { console.log(`[Account] Error deleting token`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -1080,13 +1080,13 @@ const DeleteAccountDialog = (props) => { await accountApi.delete(password); await db().delete(); console.debug(`[Account] Account deleted`); - session.resetAndRedirect(routes.app); + await session.resetAndRedirect(routes.app); } catch (e) { console.log(`[Account] Error deleting account`, e); if (e instanceof IncorrectPasswordError) { setError(t("account_basics_password_dialog_current_password_incorrect")); } else if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index a8cb18ce..a16022e4 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -123,7 +123,7 @@ const ProfileIcon = () => { await accountApi.logout(); await db().delete(); } finally { - session.resetAndRedirect(routes.app); + await session.resetAndRedirect(routes.app); } }; diff --git a/web/src/components/Login.jsx b/web/src/components/Login.jsx index 489eee0f..4efec255 100644 --- a/web/src/components/Login.jsx +++ b/web/src/components/Login.jsx @@ -24,7 +24,7 @@ const Login = () => { try { const token = await accountApi.login(user); console.log(`[Login] User auth for user ${user.username} successful, token is ${token}`); - session.store(user.username, token); + await session.store(user.username, token); window.location.href = routes.app; } catch (e) { console.log(`[Login] User auth for user ${user.username} failed`, e); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 5cac0c5a..5a68a8ed 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -59,7 +59,7 @@ const maybeUpdateAccountSettings = async (payload) => { } catch (e) { console.log(`[Preferences] Error updating account settings`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } }; diff --git a/web/src/components/PublishDialog.jsx b/web/src/components/PublishDialog.jsx index eb0af0dd..0929a5e9 100644 --- a/web/src/components/PublishDialog.jsx +++ b/web/src/components/PublishDialog.jsx @@ -211,7 +211,7 @@ const PublishDialog = (props) => { } catch (e) { console.log(`[PublishDialog] Retrieving attachment limits failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setAttachFileError(""); // Reset error (rely on server-side checking) } diff --git a/web/src/components/ReserveDialogs.jsx b/web/src/components/ReserveDialogs.jsx index 3dc370e6..e413657a 100644 --- a/web/src/components/ReserveDialogs.jsx +++ b/web/src/components/ReserveDialogs.jsx @@ -43,7 +43,7 @@ export const ReserveAddDialog = (props) => { } catch (e) { console.log(`[ReserveAddDialog] Error adding topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else if (e instanceof TopicReservedError) { setError(t("subscribe_dialog_error_topic_already_reserved")); return; @@ -99,7 +99,7 @@ export const ReserveEditDialog = (props) => { } catch (e) { console.log(`[ReserveEditDialog] Error updating topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; @@ -136,7 +136,7 @@ export const ReserveDeleteDialog = (props) => { } catch (e) { console.log(`[ReserveDeleteDialog] Error deleting topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; diff --git a/web/src/components/Signup.jsx b/web/src/components/Signup.jsx index 3b82cd61..2e97956f 100644 --- a/web/src/components/Signup.jsx +++ b/web/src/components/Signup.jsx @@ -27,7 +27,7 @@ const Signup = () => { await accountApi.create(user.username, user.password); const token = await accountApi.login(user); console.log(`[Signup] User signup for user ${user.username} successful, token is ${token}`); - session.store(user.username, token); + await session.store(user.username, token); window.location.href = routes.app; } catch (e) { console.log(`[Signup] Signup for user ${user.username} failed`, e); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index fedccc39..e777d873 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -39,7 +39,7 @@ export const subscribeTopic = async (baseUrl, topic, opts) => { } catch (e) { console.log(`[SubscribeDialog] Subscribing to topic ${topic} failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } @@ -124,7 +124,7 @@ const SubscribePage = (props) => { } catch (e) { console.log(`[SubscribeDialog] Error reserving topic`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else if (e instanceof TopicReservedError) { setError(t("subscribe_dialog_error_topic_already_reserved")); return; diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 74438f9a..7d154ef5 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -155,7 +155,7 @@ export const SubscriptionPopup = (props) => { } catch (e) { console.log(`[SubscriptionPopup] Error unsubscribing`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } @@ -298,7 +298,7 @@ const DisplayNameDialog = (props) => { } catch (e) { console.log(`[SubscriptionSettingsDialog] Error updating subscription`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index a554f1f8..6d569fa2 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -140,7 +140,7 @@ const UpgradeDialog = (props) => { } catch (e) { console.log(`[UpgradeDialog] Error changing billing subscription`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 8da8fdf0..792a1126 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -114,7 +114,7 @@ export const useAutoSubscribe = (subscriptions, selected) => { } catch (e) { console.log(`[Hooks] Auto-subscribing failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } From 390d42c6076934a25205d5e3a98f1fd74de35ecd Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:02:54 +0200 Subject: [PATCH 057/158] Format & fix lint --- web/src/app/Api.js | 3 +-- web/src/app/Prefs.js | 4 ++-- web/src/app/SubscriptionManager.js | 5 ++--- web/src/app/UserManager.js | 4 ++-- web/src/app/db.js | 2 +- web/src/components/Preferences.jsx | 6 +++++- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 8b7fc79b..afe59c7c 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -132,7 +132,6 @@ class Api { }); } - async deleteWebPush(pushSubscription) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); @@ -141,7 +140,7 @@ class Api { method: "DELETE", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: pushSubscription.endpoint + endpoint: pushSubscription.endpoint, }), }); } diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index b4cef0ac..4826e061 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,8 +1,8 @@ import db from "./db"; class Prefs { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } async setSound(sound) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index b9e5d083..5b876ae1 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -5,8 +5,8 @@ import db from "./db"; import { topicUrl } from "./utils"; class SubscriptionManager { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } /** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */ @@ -124,7 +124,6 @@ class SubscriptionManager { } else { await api.deleteWebPush(browserSubscription); } - } async updateState(subscriptionId, state) { diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index 412e41da..b53b1da8 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -2,8 +2,8 @@ import db from "./db"; import session from "./Session"; class UserManager { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } async all() { diff --git a/web/src/app/db.js b/web/src/app/db.js index 357f4e96..77ac2562 100644 --- a/web/src/app/db.js +++ b/web/src/app/db.js @@ -26,6 +26,6 @@ export const dbAsync = async () => { return createDatabase(username); }; -export const db = () => createDatabase(session.username()); +const db = () => createDatabase(session.username()); export default db; diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 5a68a8ed..eeb6ee0c 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -247,7 +247,11 @@ const WebPushEnabled = () => { } return ( - + - {t("prefs_notifications_web_push_enabled")} + {t("prefs_notifications_web_push_enabled", { server: shortUrl(config.base_url) })} {t("prefs_notifications_web_push_disabled")} From 95cfe16676976e10f52d5afbc3410a5e86562dd9 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 08:57:57 +0200 Subject: [PATCH 122/158] Add background notif text to subscribe dialog only when web push is enabled --- web/public/static/langs/en.json | 1 + web/src/components/SubscribeDialog.jsx | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 296124de..45ea629a 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -171,6 +171,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", + "subscribe_dialog_subscribe_use_another_background_info": "Note: Background notifications are not supported on other servers", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index e777d873..09879e33 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -14,6 +14,7 @@ import { Switch, } from "@mui/material"; import { useTranslation } from "react-i18next"; +import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; @@ -28,6 +29,7 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; +import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; @@ -96,6 +98,8 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); + const webPushEnabled = useLiveQuery(() => prefs.webPushEnabled()); + const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -233,12 +237,19 @@ const SubscribePage = (props) => { inputValue={props.baseUrl} onInputChange={updateBaseUrl} renderInput={(params) => ( - + <> + + {webPushEnabled && ( +
+ {t("subscribe_dialog_subscribe_use_another_background_info")} +
+ )} + )} /> )} From 9216dbe28a189d86ad98512d43056098a0b3c066 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 10:38:02 +0200 Subject: [PATCH 123/158] Add Safari IndexedDB known issue --- docs/known-issues.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/known-issues.md b/docs/known-issues.md index 681ad070..401d82a1 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -1,5 +1,5 @@ # Known issues -This is an incomplete list of known issues with the ntfy server, Android app, and iOS app. You can find a complete +This is an incomplete list of known issues with the ntfy server, web app, Android app, and iOS app. You can find a complete list [on GitHub](https://github.com/binwiederhier/ntfy/labels/%F0%9F%AA%B2%20bug), but I thought it may be helpful to have the prominent ones here to link to. @@ -27,7 +27,7 @@ Be sure that in your selfhosted server: * Set `upstream-base-url: "https://ntfy.sh"` (**not your own hostname!**) * Ensure that the URL you set in `base-url` **matches exactly** what you set the Default Server in iOS to -## Firefox on Android not automatically subscribing to web push +## Firefox on Android not automatically subscribing to web push (see [#789](https://github.com/binwiederhier/ntfy/issues/789)) ntfy defaults to web-push based subscriptions when installed as a [progressive web app](./subscribe/pwa.md). Firefox Android has an [open bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1796434) where it reports the PWA mode incorrectly. This causes ntfy to not automatically subscribe to web push, and requires you to go to the ntfy Settings page to enable @@ -36,3 +36,7 @@ it manually. ## Safari does not play sounds for web push notifications Safari does not support playing sounds for web push notifications, and treats them all as silent. This will be fixed with iOS 17 / Safari 17, which will be released later in 2023. + +## PWA on iOS sometimes crashes with an IndexedDB error (see [#787](https://github.com/binwiederhier/ntfy/issues/787)) +When resuming the installed PWA from the background, it sometimes crashes with an error from IndexedDB/Dexie, due to a +[WebKit bug]( https://bugs.webkit.org/show_bug.cgi?id=197050). A reload will fix it until a permanent fix is found. From 9dbac2cb33149618a8853c77ef41f3ef70c67826 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 15:34:55 +0200 Subject: [PATCH 124/158] Update wording --- web/public/static/langs/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 45ea629a..330d4dd1 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -171,7 +171,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_use_another_background_info": "Note: Background notifications are not supported on other servers", + "subscribe_dialog_subscribe_use_another_background_info": "Notifications from other servers will not be received when the web app is not open", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -334,8 +334,8 @@ "prefs_notifications_delete_after_one_week_description": "Notifications are auto-deleted after one week", "prefs_notifications_delete_after_one_month_description": "Notifications are auto-deleted after one month", "prefs_notifications_web_push_title": "Background notifications", - "prefs_notifications_web_push_enabled_description": "Notifications are received even when web app is not running (via Web Push)", - "prefs_notifications_web_push_disabled_description": "Notification are received when web app is running (via WebSocket)", + "prefs_notifications_web_push_enabled_description": "Notifications are received even when the web app is not running (via Web Push)", + "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", "prefs_users_title": "Manage users", From f3932e4b656b00ed3378b06b5abb218c6f4d191e Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 10:38:11 -0400 Subject: [PATCH 125/158] Bump deps --- go.mod | 12 ++++----- go.sum | 12 +++++++++ web/package-lock.json | 58 +++++++++++++++++++++---------------------- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index 1d9aa101..ab327b70 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.10.0 // indirect + cloud.google.com/go/firestore v1.11.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect @@ -19,7 +19,7 @@ require ( golang.org/x/sync v0.3.0 golang.org/x/term v0.9.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.128.0 + google.golang.org/api v0.129.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -69,10 +69,10 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.3 // indirect - google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 // indirect google.golang.org/grpc v1.56.1 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index fb4a7172..a4017570 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/firestore v1.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= +cloud.google.com/go/firestore v1.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= @@ -232,6 +234,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= +google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -244,10 +248,16 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= +google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= +google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -271,6 +281,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/web/package-lock.json b/web/package-lock.json index c36388fe..0b7c0daf 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -41,6 +41,15 @@ "vite-plugin-pwa": "^0.15.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -2721,9 +2730,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3157,9 +3166,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001507", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", - "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", "dev": true, "funding": [ { @@ -3432,9 +3441,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.440", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", - "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", + "version": "1.4.442", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", + "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", "dev": true }, "node_modules/emoji-regex": { @@ -5498,17 +5507,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -6007,9 +6016,9 @@ } }, "node_modules/rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6398,9 +6407,9 @@ } }, "node_modules/terser": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.1.tgz", - "integrity": "sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6783,15 +6792,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workbox-background-sync": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", From 8db569e8a54352f83e5a3e6bd5060fe271c9da9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=80=AA=E7=9B=97kidou?= Date: Tue, 27 Jun 2023 14:43:51 +0000 Subject: [PATCH 126/158] Translated using Weblate (Chinese (Simplified)) Currently translated at 94.5% (361 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/zh_Hans/ --- web/public/static/langs/zh_Hans.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index 2db95f56..52e0a1b8 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -352,5 +352,12 @@ "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月计费。", "account_upgrade_dialog_tier_price_billed_yearly": "{{价格}} 按年计费。节省 {{save}}。", "account_upgrade_dialog_billing_contact_email": "有关账单问题,请直接联系我们 。", - "account_upgrade_dialog_billing_contact_website": "有关账单问题,请参考我们的网站 。" + "account_upgrade_dialog_billing_contact_website": "有关账单问题,请参考我们的网站 。", + "publish_dialog_call_item": "拨打电话 {{number}}", + "publish_dialog_call_label": "拨号", + "publish_dialog_chip_call_label": "拨号", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "未验证的手机号", + "account_basics_phone_numbers_title": "电话号码", + "account_basics_phone_numbers_description": "电话通知", + "account_basics_phone_numbers_dialog_description": "要使用来电通知功能,您需要添加并验证至少一个电话号码。可以通过短信或电话进行验证。" } From 4f39c7c155f0a26ecb5832e36285b291ea24348f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 16:45:40 +0200 Subject: [PATCH 127/158] Implement dark mode Resolves #206 --- web/src/components/Account.jsx | 6 ++- web/src/components/App.jsx | 19 ++++++++-- web/src/components/Preferences.jsx | 3 +- web/src/components/PublishDialog.jsx | 4 +- web/src/components/ReserveDialogs.jsx | 5 ++- web/src/components/SubscribeDialog.jsx | 3 +- web/src/components/SubscriptionPopup.jsx | 3 +- web/src/components/UpgradeDialog.jsx | 3 +- web/src/components/styles.js | 5 +-- web/src/components/theme.js | 47 ++++++++++++++++-------- 10 files changed, 69 insertions(+), 29 deletions(-) diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 977bf161..8b1931db 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -33,6 +33,7 @@ import { IconButton, MenuItem, DialogContentText, + useTheme, } from "@mui/material"; import EditIcon from "@mui/icons-material/Edit"; import { Trans, useTranslation } from "react-i18next"; @@ -55,7 +56,6 @@ import DialogFooter from "./DialogFooter"; import { Paragraph } from "./styles"; import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; -import theme from "./theme"; import session from "../app/Session"; const Account = () => { @@ -147,6 +147,7 @@ const ChangePassword = () => { }; const ChangePasswordDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [currentPassword, setCurrentPassword] = useState(""); @@ -430,6 +431,7 @@ const PhoneNumbers = () => { }; const AddPhoneNumberDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [phoneNumber, setPhoneNumber] = useState(""); @@ -928,6 +930,7 @@ const TokensTable = (props) => { }; const TokenDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [label, setLabel] = useState(props.token?.label || ""); @@ -1069,6 +1072,7 @@ const DeleteAccount = () => { }; const DeleteAccountDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); const [error, setError] = useState(""); diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 9b939ea5..9c5e8f79 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -1,11 +1,11 @@ import * as React from "react"; import { createContext, Suspense, useContext, useEffect, useState, useMemo } from "react"; -import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress } from "@mui/material"; -import { ThemeProvider } from "@mui/material/styles"; +import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery } from "@mui/material"; +import { ThemeProvider, createTheme } from "@mui/material/styles"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; -import theme from "./theme"; +import themeOptions, { darkPalette, lightPalette } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; import notifier from "../app/Notifier"; @@ -29,6 +29,19 @@ const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); + const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); + + const theme = React.useMemo( + () => + createTheme({ + ...themeOptions, + palette: { + ...(prefersDarkMode ? darkPalette : lightPalette), + }, + }), + [prefersDarkMode] + ); + return ( }> diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 6de67d7c..0911d69e 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -26,6 +26,7 @@ import { DialogTitle, DialogContent, DialogActions, + useTheme, } from "@mui/material"; import EditIcon from "@mui/icons-material/Edit"; import CloseIcon from "@mui/icons-material/Close"; @@ -34,7 +35,6 @@ import { useLiveQuery } from "dexie-react-hooks"; import { useTranslation } from "react-i18next"; import { Info } from "@mui/icons-material"; import { useOutletContext } from "react-router-dom"; -import theme from "./theme"; import userManager from "../app/UserManager"; import { playSound, shortUrl, shuffle, sounds, validUrl } from "../app/utils"; import session from "../app/Session"; @@ -400,6 +400,7 @@ const UserTable = (props) => { }; const UserDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [baseUrl, setBaseUrl] = useState(""); const [username, setUsername] = useState(""); diff --git a/web/src/components/PublishDialog.jsx b/web/src/components/PublishDialog.jsx index 0929a5e9..6cea1a9c 100644 --- a/web/src/components/PublishDialog.jsx +++ b/web/src/components/PublishDialog.jsx @@ -19,6 +19,7 @@ import { IconButton, MenuItem, Box, + useTheme, } from "@mui/material"; import InsertEmoticonIcon from "@mui/icons-material/InsertEmoticon"; import { Close } from "@mui/icons-material"; @@ -34,7 +35,6 @@ import DialogFooter from "./DialogFooter"; import api from "../app/Api"; import userManager from "../app/UserManager"; import EmojiPicker from "./EmojiPicker"; -import theme from "./theme"; import session from "../app/Session"; import routes from "./routes"; import accountApi from "../app/AccountApi"; @@ -42,6 +42,7 @@ import { UnauthorizedError } from "../app/errors"; import { AccountContext } from "./App"; const PublishDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); const [baseUrl, setBaseUrl] = useState(""); @@ -806,6 +807,7 @@ const AttachmentBox = (props) => { }; const ExpandingTextField = (props) => { + const theme = useTheme(); const invisibleFieldRef = useRef(); const [textWidth, setTextWidth] = useState(props.minWidth); const determineTextWidth = () => { diff --git a/web/src/components/ReserveDialogs.jsx b/web/src/components/ReserveDialogs.jsx index e413657a..7eb893cd 100644 --- a/web/src/components/ReserveDialogs.jsx +++ b/web/src/components/ReserveDialogs.jsx @@ -14,10 +14,10 @@ import { MenuItem, ListItemIcon, ListItemText, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { Check, DeleteForever } from "@mui/icons-material"; -import theme from "./theme"; import { validTopic } from "../app/utils"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -27,6 +27,7 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; export const ReserveAddDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [topic, setTopic] = useState(props.topic || ""); @@ -87,6 +88,7 @@ export const ReserveAddDialog = (props) => { }; export const ReserveEditDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [everyone, setEveryone] = useState(props.reservation?.everyone || Permission.DENY_ALL); @@ -124,6 +126,7 @@ export const ReserveEditDialog = (props) => { }; export const ReserveDeleteDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [deleteMessages, setDeleteMessages] = useState(false); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 09879e33..f7a24f5e 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -12,10 +12,10 @@ import { FormGroup, useMediaQuery, Switch, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useLiveQuery } from "dexie-react-hooks"; -import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; @@ -49,6 +49,7 @@ export const subscribeTopic = async (baseUrl, topic, opts) => { }; const SubscribeDialog = (props) => { + const theme = useTheme(); const [baseUrl, setBaseUrl] = useState(""); const [topic, setTopic] = useState(""); const [showLoginPage, setShowLoginPage] = useState(false); diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 24ce9cbc..17b12504 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -15,6 +15,7 @@ import { MenuItem, IconButton, ListItemIcon, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; @@ -30,7 +31,6 @@ import { RemoveCircle, Send, } from "@mui/icons-material"; -import theme from "./theme"; import subscriptionManager from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; @@ -281,6 +281,7 @@ export const SubscriptionPopup = (props) => { }; const DisplayNameDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { subscription } = props; const [error, setError] = useState(""); diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index 6d569fa2..4bf0244d 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -21,6 +21,7 @@ import { Box, DialogContentText, DialogActions, + useTheme, } from "@mui/material"; import { Trans, useTranslation } from "react-i18next"; import { Check, Close } from "@mui/icons-material"; @@ -31,7 +32,6 @@ import { AccountContext } from "./App"; import routes from "./routes"; import session from "../app/Session"; import accountApi, { SubscriptionInterval } from "../app/AccountApi"; -import theme from "./theme"; const Feature = (props) => {props.children}; @@ -61,6 +61,7 @@ const Banner = { }; const UpgradeDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); // May be undefined! const [error, setError] = useState(""); diff --git a/web/src/components/styles.js b/web/src/components/styles.js index edcfb46e..db0690bc 100644 --- a/web/src/components/styles.js +++ b/web/src/components/styles.js @@ -1,19 +1,18 @@ import { Typography, Container, Backdrop, styled } from "@mui/material"; -import theme from "./theme"; export const Paragraph = styled(Typography)({ paddingTop: 8, paddingBottom: 8, }); -export const VerticallyCenteredContainer = styled(Container)({ +export const VerticallyCenteredContainer = styled(Container)(({ theme }) => ({ display: "flex", flexGrow: 1, flexDirection: "column", justifyContent: "center", alignContent: "center", color: theme.palette.text.primary, -}); +})); export const LightboxBackdrop = styled(Backdrop)({ backgroundColor: "rgba(0, 0, 0, 0.8)", // was: 0.5 diff --git a/web/src/components/theme.js b/web/src/components/theme.js index ca77cdc8..c833e631 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -1,18 +1,7 @@ -import { red } from "@mui/material/colors"; -import { createTheme } from "@mui/material/styles"; +import { grey, red } from "@mui/material/colors"; -const theme = createTheme({ - palette: { - primary: { - main: "#338574", - }, - secondary: { - main: "#6cead0", - }, - error: { - main: red.A400, - }, - }, +/** @type {import("@mui/material").ThemeOptions} */ +const themeOptions = { components: { MuiListItemIcon: { styleOverrides: { @@ -31,6 +20,32 @@ const theme = createTheme({ }, }, }, -}); +}; -export default theme; +/** @type {import("@mui/material").ThemeOptions['palette']} */ +export const lightPalette = { + mode: "light", + primary: { + main: "#338574", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: red.A400, + }, +}; + +/** @type {import("@mui/material").ThemeOptions['palette']} */ +export const darkPalette = { + ...lightPalette, + mode: "dark", + background: { + paper: grey["800"], + }, + primary: { + main: "#6cead0", + }, +}; + +export default themeOptions; From d790ad91e2a06773d8802d85888898797dd35405 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 10:58:52 -0400 Subject: [PATCH 128/158] Bump --- go.sum | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/go.sum b/go.sum index a4017570..61584efa 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,6 @@ cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZN cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/firestore v1.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= -cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= cloud.google.com/go/firestore v1.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= @@ -232,8 +230,6 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= -google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -246,16 +242,10 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -279,8 +269,6 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From e607944ad1db49ca49871bbbecf7d1687d3867c0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 17:20:01 +0200 Subject: [PATCH 129/158] Update colors --- web/src/components/ActionBar.jsx | 5 +++-- web/src/components/theme.js | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index a16022e4..6a36cdb6 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -1,4 +1,4 @@ -import { AppBar, Toolbar, IconButton, Typography, Box, MenuItem, Button, Divider, ListItemIcon } from "@mui/material"; +import { AppBar, Toolbar, IconButton, Typography, Box, MenuItem, Button, Divider, ListItemIcon, useTheme } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import * as React from "react"; import { useState } from "react"; @@ -21,6 +21,7 @@ import PopupMenu from "./PopupMenu"; import { SubscriptionPopup } from "./SubscriptionPopup"; const ActionBar = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const location = useLocation(); let title = "ntfy"; @@ -43,7 +44,7 @@ const ActionBar = (props) => { Date: Wed, 28 Jun 2023 17:39:40 +0200 Subject: [PATCH 130/158] Add preference --- web/public/static/langs/en.json | 4 ++++ web/src/app/Prefs.js | 15 +++++++++++++++ web/src/components/App.jsx | 21 +++++++++++++++++++-- web/src/components/Preferences.jsx | 24 +++++++++++++++++++++++- 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 330d4dd1..fa0a3b0f 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -338,6 +338,10 @@ "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", + "prefs_ui_mode_title": "UI Mode", + "prefs_ui_mode_system": "System (default)", + "prefs_ui_mode_dark": "Dark", + "prefs_ui_mode_light": "Light", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index a9510dd2..006e8bf5 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,5 +1,11 @@ import db from "./db"; +export const UI_MODE = { + DARK: "dark", + LIGHT: "light", + SYSTEM: "system", +}; + class Prefs { constructor(dbImpl) { this.db = dbImpl; @@ -40,6 +46,15 @@ class Prefs { async setWebPushEnabled(enabled) { await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); } + + async uiMode() { + const uiMode = await this.db.prefs.get("uiMode"); + return uiMode?.value ?? UI_MODE.SYSTEM; + } + + async setUIMode(mode) { + await this.db.prefs.put({ key: "uiMode", value: mode }); + } } const prefs = new Prefs(db()); diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 9c5e8f79..38343785 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -22,24 +22,41 @@ import Login from "./Login"; import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! +import prefs, { UI_MODE } from "../app/Prefs"; export const AccountContext = createContext(null); +const darkModeEnabled = (prefersDarkMode, uiModePreference) => { + switch (uiModePreference) { + case UI_MODE.DARK: + return true; + + case UI_MODE.LIGHT: + return false; + + case UI_MODE.SYSTEM: + default: + return prefersDarkMode; + } +}; + const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); + const uiModePreference = useLiveQuery(() => prefs.uiMode()); + const theme = React.useMemo( () => createTheme({ ...themeOptions, palette: { - ...(prefersDarkMode ? darkPalette : lightPalette), + ...(darkModeEnabled(prefersDarkMode, uiModePreference) ? darkPalette : lightPalette), }, }), - [prefersDarkMode] + [prefersDarkMode, uiModePreference] ); return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 0911d69e..42b04b4d 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -43,7 +43,7 @@ import accountApi, { Permission, Role } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; import { AccountContext } from "./App"; import { Paragraph } from "./styles"; -import prefs from "../app/Prefs"; +import prefs, { UI_MODE } from "../app/Prefs"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; @@ -86,6 +86,7 @@ const Notifications = () => { {t("prefs_notifications_title")} + @@ -237,6 +238,27 @@ const DeleteAfter = () => { ); }; +const UIMode = () => { + const { t } = useTranslation(); + const labelId = "prefUIMode"; + const enabled = useLiveQuery(async () => prefs.uiMode()); + const handleChange = async (ev) => { + await prefs.setUIMode(ev.target.value); + }; + + return ( + + + + + + ); +}; + const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; From 48a5a55e2fbf08afcf04c2366484e938b54199a5 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 12:54:13 -0400 Subject: [PATCH 131/158] Release notes --- docs/releases.md | 49 +++++++++++++++++++++++++------------------ user/manager.go | 1 + web/package-lock.json | 12 ++++++----- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 6b2e5a93..cd7e37da 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,6 +2,35 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). +### ntfy server v2.6.0 +Released June 28, 2023 + +With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) +with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar +to a native app (__even on iOS!__ 🥳), and get basic push notification support (without any battery drain). + +Installing the PWA gives ntfy web its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux, +home screen icon on iOS, and launcher icon on Android), a standalone window, push notifications, and an app badge with +the unread notification count. + +**Features:** + +* The web app now supports Web Push, and is installable as a [progressive web app (PWA)](https://docs.ntfy.sh/subscribe/pwa/) on Chrome, Edge, Android, and iOS ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) + +**Bug fixes:** + +* Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) +* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) +* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) +* Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) + +**Maintenance:** + +* Improved GitHub Actions flow ([#745](https://github.com/binwiederhier/ntfy/pull/745), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Add JS formatter "prettier" ([#746](https://github.com/binwiederhier/ntfy/pull/746), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) + ## ntfy server v2.5.0 Released May 18, 2023 @@ -1219,23 +1248,3 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Additional languages:** * Swedish (thanks to [@hellbown](https://hosted.weblate.org/user/hellbown/)) - -### ntfy server v2.6.0 (UNRELEASED) - -**Features:** - -* The web app now supports web push, and is installable on Chrome, Edge, Android, and iOS. Look at the [web app docs](https://docs.ntfy.sh/subscribe/web/) for more information ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) - -**Bug fixes:** - -* Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) -* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) -* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) -* Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) - -**Maintenance:** - -* Improved GitHub Actions flow ([#745](https://github.com/binwiederhier/ntfy/pull/745), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Add JS formatter "prettier" ([#746](https://github.com/binwiederhier/ntfy/pull/746), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) diff --git a/user/manager.go b/user/manager.go index 3307134a..87b385e6 100644 --- a/user/manager.go +++ b/user/manager.go @@ -126,6 +126,7 @@ const ( ON CONFLICT (id) DO NOTHING; COMMIT; ` + builtinStartupQueries = ` PRAGMA foreign_keys = ON; ` diff --git a/web/package-lock.json b/web/package-lock.json index 0b7c0daf..c4994367 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5166,13 +5166,15 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" From e359499e79a38e6b7a59e4d3bbd69cc6ec56f4c2 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 12:59:30 -0400 Subject: [PATCH 132/158] Bump install.md --- docs/install.md | 60 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/install.md b/docs/install.md index e4469f52..d61454b1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_x86_64.tar.gz - tar zxvf ntfy_2.5.0_linux_x86_64.tar.gz - sudo cp -a ntfy_2.5.0_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_x86_64.tar.gz + tar zxvf ntfy_2.6.0_linux_x86_64.tar.gz + sudo cp -a ntfy_2.6.0_linux_x86_64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.tar.gz - tar zxvf ntfy_2.5.0_linux_armv6.tar.gz - sudo cp -a ntfy_2.5.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.tar.gz + tar zxvf ntfy_2.6.0_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.0_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.tar.gz - tar zxvf ntfy_2.5.0_linux_armv7.tar.gz - sudo cp -a ntfy_2.5.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.tar.gz + tar zxvf ntfy_2.6.0_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.0_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.tar.gz - tar zxvf ntfy_2.5.0_linux_arm64.tar.gz - sudo cp -a ntfy_2.5.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.tar.gz + tar zxvf ntfy_2.6.0_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.0_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_macOS_all.tar.gz > ntfy_2.5.0_macOS_all.tar.gz -tar zxvf ntfy_2.5.0_macOS_all.tar.gz -sudo cp -a ntfy_2.5.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz > ntfy_2.6.0_macOS_all.tar.gz +tar zxvf ntfy_2.6.0_macOS_all.tar.gz +sudo cp -a ntfy_2.6.0_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.5.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). From 64ac111d55383c4d73adcf8cd2a52e2d5e4df625 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 13:30:51 -0400 Subject: [PATCH 133/158] Rename UI_MODE to THEME --- docs/releases.md | 15 +++++++++++---- web/public/static/langs/en.json | 8 ++++---- web/src/app/Prefs.js | 12 ++++++------ web/src/components/App.jsx | 21 +++++++++------------ web/src/components/Preferences.jsx | 20 ++++++++++---------- 5 files changed, 40 insertions(+), 36 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index cd7e37da..475b03fd 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -7,15 +7,22 @@ Released June 28, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar -to a native app (__even on iOS!__ 🥳), and get basic push notification support (without any battery drain). +to a native app (__even on iOS!__ 🥳). Installing the PWA gives ntfy web its own launcher, a standalone window, +push notifications, and an app badge with the unread notification count. -Installing the PWA gives ntfy web its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux, -home screen icon on iOS, and launcher icon on Android), a standalone window, push notifications, and an app badge with -the unread notification count. +On top of that, this release also brings **dark mode** 🧛🌙 to the web app. + +🙏 A huge thanks for this release goes to [@nimbleghost](https://github.com/nimbleghost), for basically implementing the +Web Push / PWA and dark mode feature by himself. I'm really grateful for your contributions. + +❤️ If you like ntfy, **please consider sponsoring us** via [GitHub Sponsors](https://github.com/sponsors/binwiederhier) +and [Liberapay](https://en.liberapay.com/ntfy/), or buying a [paid plan via the web app](https://ntfy.sh/app) (20% off +if you use promo code `MYTOPIC`). ntfy will always remain open source. **Features:** * The web app now supports Web Push, and is installable as a [progressive web app (PWA)](https://docs.ntfy.sh/subscribe/pwa/) on Chrome, Edge, Android, and iOS ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Support for dark mode in the web app ([#206](https://github.com/binwiederhier/ntfy/issues/206), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Bug fixes:** diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index fa0a3b0f..0b74c6e2 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -338,10 +338,6 @@ "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", - "prefs_ui_mode_title": "UI Mode", - "prefs_ui_mode_system": "System (default)", - "prefs_ui_mode_dark": "Dark", - "prefs_ui_mode_light": "Light", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", @@ -359,6 +355,10 @@ "prefs_users_dialog_password_label": "Password", "prefs_appearance_title": "Appearance", "prefs_appearance_language_title": "Language", + "prefs_appearance_theme_title": "Theme", + "prefs_appearance_theme_system": "System (default)", + "prefs_appearance_theme_dark": "Dark mode", + "prefs_appearance_theme_light": "Light mode", "prefs_reservations_title": "Reserved topics", "prefs_reservations_description": "You can reserve topic names for personal use here. Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_limit_reached": "You reached your reserved topics limit.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 006e8bf5..4f28f87e 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,6 +1,6 @@ import db from "./db"; -export const UI_MODE = { +export const THEME = { DARK: "dark", LIGHT: "light", SYSTEM: "system", @@ -47,13 +47,13 @@ class Prefs { await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); } - async uiMode() { - const uiMode = await this.db.prefs.get("uiMode"); - return uiMode?.value ?? UI_MODE.SYSTEM; + async theme() { + const theme = await this.db.prefs.get("theme"); + return theme?.value ?? THEME.SYSTEM; } - async setUIMode(mode) { - await this.db.prefs.put({ key: "uiMode", value: mode }); + async setTheme(mode) { + await this.db.prefs.put({ key: "theme", value: mode }); } } diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 38343785..6c4761f1 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -22,19 +22,19 @@ import Login from "./Login"; import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! -import prefs, { UI_MODE } from "../app/Prefs"; +import prefs, { THEME } from "../app/Prefs"; export const AccountContext = createContext(null); -const darkModeEnabled = (prefersDarkMode, uiModePreference) => { - switch (uiModePreference) { - case UI_MODE.DARK: +const darkModeEnabled = (prefersDarkMode, themePreference) => { + switch (themePreference) { + case THEME.DARK: return true; - case UI_MODE.LIGHT: + case THEME.LIGHT: return false; - case UI_MODE.SYSTEM: + case THEME.SYSTEM: default: return prefersDarkMode; } @@ -43,20 +43,17 @@ const darkModeEnabled = (prefersDarkMode, uiModePreference) => { const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); - const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); - - const uiModePreference = useLiveQuery(() => prefs.uiMode()); - + const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( () => createTheme({ ...themeOptions, palette: { - ...(darkModeEnabled(prefersDarkMode, uiModePreference) ? darkPalette : lightPalette), + ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkPalette : lightPalette), }, }), - [prefersDarkMode, uiModePreference] + [prefersDarkMode, themePreference] ); return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 42b04b4d..add9b8c0 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -43,7 +43,7 @@ import accountApi, { Permission, Role } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; import { AccountContext } from "./App"; import { Paragraph } from "./styles"; -import prefs, { UI_MODE } from "../app/Prefs"; +import prefs, { THEME } from "../app/Prefs"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; @@ -86,7 +86,6 @@ const Notifications = () => { {t("prefs_notifications_title")} - @@ -238,21 +237,21 @@ const DeleteAfter = () => { ); }; -const UIMode = () => { +const Theme = () => { const { t } = useTranslation(); - const labelId = "prefUIMode"; - const enabled = useLiveQuery(async () => prefs.uiMode()); + const labelId = "prefTheme"; + const enabled = useLiveQuery(async () => prefs.theme()); const handleChange = async (ev) => { - await prefs.setUIMode(ev.target.value); + await prefs.setTheme(ev.target.value); }; return ( - + @@ -511,6 +510,7 @@ const Appearance = () => { {t("prefs_appearance_title")} + From 9ce35459015a16ff7786d9ac6926a2415de3a71a Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 20:26:54 +0200 Subject: [PATCH 134/158] Fix refreshing things when permission is granted We refreshed some things but not everything, this makes it more responsive if you have the settings page open when granting permissions, for example. --- web/src/components/App.jsx | 4 --- web/src/components/Navigation.jsx | 15 +++------ web/src/components/Preferences.jsx | 5 +-- web/src/components/hooks.js | 53 +++++++++++++++++------------- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 6c4761f1..e174ccc4 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -8,7 +8,6 @@ import { AllSubscriptions, SingleSubscription } from "./Notifications"; import themeOptions, { darkPalette, lightPalette } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; -import notifier from "../app/Notifier"; import Preferences from "./Preferences"; import subscriptionManager from "../app/SubscriptionManager"; import userManager from "../app/UserManager"; @@ -91,7 +90,6 @@ const Layout = () => { const params = useParams(); const { account, setAccount } = useContext(AccountContext); const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false); - const [notificationsGranted, setNotificationsGranted] = useState(notifier.granted()); const [sendDialogOpenMode, setSendDialogOpenMode] = useState(""); const users = useLiveQuery(() => userManager.all()); const subscriptions = useLiveQuery(() => subscriptionManager.all()); @@ -115,10 +113,8 @@ const Layout = () => { setMobileDrawerOpen(!mobileDrawerOpen)} - onNotificationGranted={setNotificationsGranted} onPublishMessageClick={() => setSendDialogOpenMode(PublishDialog.OPEN_MODE_DEFAULT)} />
diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index fe1cf8be..ad671d99 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -43,6 +43,7 @@ import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { SubscriptionPopup } from "./SubscriptionPopup"; +import { useNotificationPermissionListener } from "./hooks"; const navWidth = 280; @@ -109,17 +110,12 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const [showNotificationPermissionRequired, setShowNotificationPermissionRequired] = useState(notifier.notRequested()); - const [showNotificationPermissionDenied, setShowNotificationPermissionDenied] = useState(notifier.denied()); + const showNotificationPermissionRequired = useNotificationPermissionListener(() => notifier.notRequested()); + const showNotificationPermissionDenied = useNotificationPermissionListener(() => notifier.denied()); const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const refreshPermissions = () => { - setShowNotificationPermissionRequired(notifier.notRequested()); - setShowNotificationPermissionDenied(notifier.denied()); - }; - const alertVisible = showNotificationPermissionRequired || showNotificationPermissionDenied || @@ -131,7 +127,7 @@ const NavList = (props) => { <> - {showNotificationPermissionRequired && } + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } @@ -354,11 +350,10 @@ const SubscriptionItem = (props) => { ); }; -const NotificationPermissionRequired = ({ refreshPermissions }) => { +const NotificationPermissionRequired = () => { const { t } = useTranslation(); const requestPermission = async () => { await notifier.maybeRequestPermission(); - refreshPermissions(); }; return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index add9b8c0..a24ccd96 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -49,7 +49,7 @@ import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./Rese import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; import notifier from "../app/Notifier"; -import { useIsLaunchedPWA } from "./hooks"; +import { useIsLaunchedPWA, useNotificationPermissionListener } from "./hooks"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -79,6 +79,7 @@ const Preferences = () => ( const Notifications = () => { const { t } = useTranslation(); const isLaunchedPWA = useIsLaunchedPWA(); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); return ( @@ -89,7 +90,7 @@ const Notifications = () => { - {!isLaunchedPWA && notifier.pushPossible() && } + {!isLaunchedPWA && pushPossible && } ); diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 5ff375d2..6d5f3d51 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -136,8 +136,31 @@ export const useAutoSubscribe = (subscriptions, selected) => { }; const webPushBroadcastChannel = new BroadcastChannel("web-push-broadcast"); -const matchMedia = window.matchMedia("(display-mode: standalone)"); -const isIOSStandalone = window.navigator.standalone === true; + +/** + * Hook to return a value that's refreshed when the notification permission changes + */ +export const useNotificationPermissionListener = (query) => { + const [result, setResult] = useState(query()); + + useEffect(() => { + const handler = () => { + setResult(query()); + }; + + if ("permissions" in navigator) { + navigator.permissions.query({ name: "notifications" }).then((permission) => { + permission.addEventListener("change", handler); + + return () => { + permission.removeEventListener("change", handler); + }; + }); + } + }, []); + + return result; +}; /** * Updates the Web Push subscriptions when the list of topics changes, @@ -146,10 +169,11 @@ const isIOSStandalone = window.navigator.standalone === true; */ const useWebPushListener = (topics) => { const [lastTopics, setLastTopics] = useState(); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); useEffect(() => { const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); - if (!notifier.pushPossible() || !topicsChanged) { + if (!pushPossible || !topicsChanged) { return; } @@ -183,25 +207,7 @@ const useWebPushListener = (topics) => { * automatically. */ export const useWebPushTopics = () => { - const [pushPossible, setPushPossible] = useState(notifier.pushPossible()); - - useEffect(() => { - const handler = () => { - const newPushPossible = notifier.pushPossible(); - console.log(`[useWebPushTopics] Notification Permission changed`, { pushPossible: newPushPossible }); - setPushPossible(newPushPossible); - }; - - if ("permissions" in navigator) { - navigator.permissions.query({ name: "notifications" }).then((permission) => { - permission.addEventListener("change", handler); - - return () => { - permission.removeEventListener("change", handler); - }; - }); - } - }); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); const topics = useLiveQuery( async () => subscriptionManager.webPushTopics(pushPossible), @@ -214,6 +220,9 @@ export const useWebPushTopics = () => { return topics; }; +const matchMedia = window.matchMedia("(display-mode: standalone)"); +const isIOSStandalone = window.navigator.standalone === true; + /* * Watches the "display-mode" to detect if the app is running as a standalone app (PWA). */ From d838790b8fbca371750d3c51c4d38bb841fe7ef0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 20:42:34 +0200 Subject: [PATCH 135/158] Fix ntfy upgrade banner in dark mode --- web/src/components/ActionBar.jsx | 5 ++++- web/src/components/Navigation.jsx | 22 +++++++++++++++++----- web/src/components/theme.js | 2 -- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 6a36cdb6..62a16286 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -44,7 +44,10 @@ const ActionBar = (props) => { { Navigation.width = navWidth; const NavList = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); @@ -190,7 +192,11 @@ const NavList = (props) => { - {showUpgradeBanner && } + {showUpgradeBanner && ( + // The text background gradient didn't seem to do well with switching between light/dark mode, + // So adding a `key` forces React to replace the entire component when the theme changes + + )} { ); }; -const UpgradeBanner = () => { +const UpgradeBanner = ({ mode }) => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); const [dialogOpen, setDialogOpen] = useState(false); @@ -220,13 +226,16 @@ const UpgradeBanner = () => { width: `${Navigation.width - 1}px`, bottom: 0, mt: "auto", - background: "linear-gradient(150deg, rgba(196, 228, 221, 0.46) 0%, rgb(255, 255, 255) 100%)", + background: + mode === "light" + ? "linear-gradient(150deg, rgba(196, 228, 221, 0.46) 0%, rgb(255, 255, 255) 100%)" + : "linear-gradient(150deg, #203631 0%, #2a6e60 100%)", }} > - + { style: { fontWeight: 500, fontSize: "1.1rem", - background: "-webkit-linear-gradient(45deg, #09009f, #00ff95 80%)", + background: + mode === "light" + ? "-webkit-linear-gradient(45deg, #09009f, #00ff95 80%)" + : "-webkit-linear-gradient(45deg,rgb(255, 255, 255), #00ff95 80%)", WebkitBackgroundClip: "text", WebkitTextFillColor: "transparent", }, diff --git a/web/src/components/theme.js b/web/src/components/theme.js index f789a0c5..cdfaf07d 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -34,7 +34,6 @@ export const lightPalette = { error: { main: "#c30000", }, - actionBarBackground: "linear-gradient(150deg, #338574 0%, #56bda8 100%)", }; /** @type {import("@mui/material").ThemeOptions['palette']} */ @@ -52,7 +51,6 @@ export const darkPalette = { error: { main: "#fe4d2e", }, - actionBarBackground: "linear-gradient(150deg, #203631 0%, #2a6e60 100%)", }; export default themeOptions; From 0d231d8bd9f4783367548043b60198b202af3716 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 21:18:04 +0200 Subject: [PATCH 136/158] Fix snackbars in dark mode --- web/src/components/App.jsx | 10 ++---- web/src/components/theme.js | 70 +++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 6c4761f1..70d6936a 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -5,7 +5,7 @@ import { ThemeProvider, createTheme } from "@mui/material/styles"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; -import themeOptions, { darkPalette, lightPalette } from "./theme"; +import { darkTheme, lightTheme } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; import notifier from "../app/Notifier"; @@ -46,13 +46,7 @@ const App = () => { const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( - () => - createTheme({ - ...themeOptions, - palette: { - ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkPalette : lightPalette), - }, - }), + () => createTheme(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), [prefersDarkMode, themePreference] ); diff --git a/web/src/components/theme.js b/web/src/components/theme.js index cdfaf07d..64217eee 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -1,5 +1,5 @@ /** @type {import("@mui/material").ThemeOptions} */ -const themeOptions = { +const baseThemeOptions = { components: { MuiListItemIcon: { styleOverrides: { @@ -22,35 +22,53 @@ const themeOptions = { // https://github.com/binwiederhier/ntfy-android/blob/main/app/src/main/res/values/colors.xml -/** @type {import("@mui/material").ThemeOptions['palette']} */ -export const lightPalette = { - mode: "light", - primary: { - main: "#338574", +/** @type {import("@mui/material").ThemeOptions} */ +export const lightTheme = { + ...baseThemeOptions, + components: { + ...baseThemeOptions.components, }, - secondary: { - main: "#6cead0", - }, - error: { - main: "#c30000", + palette: { + mode: "light", + primary: { + main: "#338574", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: "#c30000", + }, }, }; -/** @type {import("@mui/material").ThemeOptions['palette']} */ -export const darkPalette = { - mode: "dark", - background: { - paper: "#1b2124", +/** @type {import("@mui/material").ThemeOptions} */ +export const darkTheme = { + ...baseThemeOptions, + components: { + ...baseThemeOptions.components, + MuiSnackbarContent: { + styleOverrides: { + root: { + color: "#000", + backgroundColor: "#aeaeae", + }, + }, + }, }, - primary: { - main: "#65b5a3", - }, - secondary: { - main: "#6cead0", - }, - error: { - main: "#fe4d2e", + palette: { + mode: "dark", + background: { + paper: "#1b2124", + }, + primary: { + main: "#65b5a3", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: "#fe4d2e", + }, }, }; - -export default themeOptions; From 365a0b28323d330eae7a80131e809895df2523ac Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 23:38:57 +0200 Subject: [PATCH 137/158] Fix preferences warnings --- web/src/components/Pref.jsx | 10 +++++----- web/src/components/Preferences.jsx | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/web/src/components/Pref.jsx b/web/src/components/Pref.jsx index 5e64c41f..4da17381 100644 --- a/web/src/components/Pref.jsx +++ b/web/src/components/Pref.jsx @@ -11,14 +11,14 @@ const PrefRow = styled("div")` display: flex; flex-direction: row; - > :first-child { + > div:first-of-type { flex: 1 0 40%; display: flex; flex-direction: column; justify-content: ${(props) => (props.alignTop ? "normal" : "center")}; } - > :last-child { + > div:last-of-type { flex: 1 0 calc(60% - 50px); display: flex; flex-direction: column; @@ -29,12 +29,12 @@ const PrefRow = styled("div")` flex-direction: column; gap: 10px; - > :first-child, - > :last-child { + > :div:first-of-type, + > :div:last-of-type { flex: unset; } - > :last-child { + > div:last-of-type { .MuiFormControl-root { margin: 0; } diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index a24ccd96..a93032ce 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -241,7 +241,7 @@ const DeleteAfter = () => { const Theme = () => { const { t } = useTranslation(); const labelId = "prefTheme"; - const enabled = useLiveQuery(async () => prefs.theme()); + const theme = useLiveQuery(async () => prefs.theme()); const handleChange = async (ev) => { await prefs.setTheme(ev.target.value); }; @@ -249,7 +249,7 @@ const Theme = () => { return ( - {t("prefs_appearance_theme_system")} {t("prefs_appearance_theme_dark")} {t("prefs_appearance_theme_light")} From e8216ae9e7eacdce9f84b295e3f51b13a4acb98f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 00:02:18 +0200 Subject: [PATCH 138/158] Fix resubscribing when notifications are re-granted (case: from denied to granted) --- web/public/static/langs/en.json | 6 +++--- web/src/app/Notifier.js | 3 --- web/src/app/SubscriptionManager.js | 9 +++++---- web/src/components/hooks.js | 10 +++++----- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 0b74c6e2..3f2947e4 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -55,14 +55,14 @@ "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", "alert_notification_permission_required_title": "Notifications are disabled", - "alert_notification_permission_required_description": "Grant your browser permission to display desktop notifications.", + "alert_notification_permission_required_description": "Grant your browser permission to display desktop notifications", "alert_notification_permission_required_button": "Grant now", "alert_notification_permission_denied_title": "Notifications are blocked", - "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", + "alert_notification_permission_denied_description": "Please re-enable them in your browser", "alert_notification_ios_install_required_title": "iOS install required", "alert_notification_ios_install_required_description": "Click on the Share icon and Add to Home Screen to enable notifications on iOS", "alert_not_supported_title": "Notifications not supported", - "alert_not_supported_description": "Notifications are not supported in your browser.", + "alert_not_supported_description": "Notifications are not supported in your browser", "alert_not_supported_context_description": "Notifications are only supported over HTTPS. This is a limitation of the Notifications API.", "notifications_list": "Notifications list", "notifications_list_item": "Notification", diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 7f394ae9..4089746a 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -44,9 +44,6 @@ class Notifier { } async webPushSubscription(hasWebPushTopics) { - if (!this.pushPossible()) { - throw new Error("Unsupported or denied"); - } const pushManager = await this.pushManager(); const existingSubscription = await pushManager.getSubscription(); if (existingSubscription) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 28beb455..de99b642 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -27,7 +27,7 @@ class SubscriptionManager { * It is important to note that "mutedUntil" must be part of the where() query, otherwise the Dexie live query * will not react to it, and the Web Push topics will not be updated when the user mutes a topic. */ - async webPushTopics(pushPossible = notifier.pushPossible()) { + async webPushTopics(pushPossible) { if (!pushPossible) { return []; } @@ -120,13 +120,14 @@ class SubscriptionManager { ); } - async updateWebPushSubscriptions(presetTopics) { - const topics = presetTopics ?? (await this.webPushTopics()); + async updateWebPushSubscriptions(topics) { const hasWebPushTopics = topics.length > 0; const browserSubscription = await notifier.webPushSubscription(hasWebPushTopics); if (!browserSubscription) { - console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping."); + console.log( + "[SubscriptionManager] No browser subscription currently exists, so web push was never enabled or the notification permission was removed. Skipping." + ); return; } diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 6d5f3d51..519d4c6a 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -168,12 +168,12 @@ export const useNotificationPermissionListener = (query) => { * the service worker, since the service worker cannot play sounds. */ const useWebPushListener = (topics) => { - const [lastTopics, setLastTopics] = useState(); + const [prevUpdate, setPrevUpdate] = useState(); const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); useEffect(() => { - const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); - if (!pushPossible || !topicsChanged) { + const nextUpdate = JSON.stringify({ topics, pushPossible }); + if (topics === undefined || nextUpdate === prevUpdate) { return; } @@ -181,12 +181,12 @@ const useWebPushListener = (topics) => { try { console.log("[useWebPushListener] Refreshing web push subscriptions", topics); await subscriptionManager.updateWebPushSubscriptions(topics); - setLastTopics(topics); + setPrevUpdate(nextUpdate); } catch (e) { console.error("[useWebPushListener] Error refreshing web push subscriptions", e); } })(); - }, [topics, lastTopics]); + }, [topics, pushPossible, prevUpdate]); useEffect(() => { const onMessage = () => { From 6b4c04c390c45b16b72729ba1f7ac8198bd2fc10 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 00:22:58 +0200 Subject: [PATCH 139/158] Make action bar match theme colour when run as PWA --- web/src/components/ActionBar.jsx | 24 ++++++++++++++++++++---- web/src/components/Navigation.jsx | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 62a16286..1f41aac0 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -19,11 +19,14 @@ import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; import PopupMenu from "./PopupMenu"; import { SubscriptionPopup } from "./SubscriptionPopup"; +import { useIsLaunchedPWA } from "./hooks"; const ActionBar = (props) => { const theme = useTheme(); const { t } = useTranslation(); const location = useLocation(); + const isLaunchedPWA = useIsLaunchedPWA(); + let title = "ntfy"; if (props.selected) { title = topicDisplayName(props.selected); @@ -32,6 +35,22 @@ const ActionBar = (props) => { } else if (location.pathname === routes.account) { title = t("action_bar_account"); } + + const getActionBarBackground = () => { + if (isLaunchedPWA) { + return "#317f6f"; + } + + switch (theme.palette.mode) { + case "dark": + return "linear-gradient(150deg, #203631 0%, #2a6e60 100%)"; + + case "light": + default: + return "linear-gradient(150deg, #338574 0%, #56bda8 100%)"; + } + }; + return ( { { return ( <> - + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } From 8e1e0b37404492aaa7744d06e56c90b5111e1836 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 20:17:49 -0400 Subject: [PATCH 140/158] Overflow auto --- web/src/components/Account.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 8b1931db..541a008d 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -787,7 +787,7 @@ const Tokens = () => { }} /> -
{tokens?.length > 0 && }
+
{tokens?.length > 0 && }
From 5784b07f149c9a7df706af3925196d39f9ce8d26 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 20:23:10 -0400 Subject: [PATCH 141/158] Bump --- docs/install.md | 60 +++++++++++++++++++++---------------------- docs/releases.md | 3 ++- go.mod | 8 +++--- go.sum | 8 ++++++ web/package-lock.json | 6 ++--- 5 files changed, 47 insertions(+), 38 deletions(-) diff --git a/docs/install.md b/docs/install.md index d61454b1..729cfd99 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_x86_64.tar.gz - tar zxvf ntfy_2.6.0_linux_x86_64.tar.gz - sudo cp -a ntfy_2.6.0_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_x86_64.tar.gz + tar zxvf ntfy_2.6.1_linux_x86_64.tar.gz + sudo cp -a ntfy_2.6.1_linux_x86_64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.tar.gz - tar zxvf ntfy_2.6.0_linux_armv6.tar.gz - sudo cp -a ntfy_2.6.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.tar.gz + tar zxvf ntfy_2.6.1_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.1_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.tar.gz - tar zxvf ntfy_2.6.0_linux_armv7.tar.gz - sudo cp -a ntfy_2.6.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.tar.gz + tar zxvf ntfy_2.6.1_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.1_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.tar.gz - tar zxvf ntfy_2.6.0_linux_arm64.tar.gz - sudo cp -a ntfy_2.6.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.tar.gz + tar zxvf ntfy_2.6.1_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.1_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz > ntfy_2.6.0_macOS_all.tar.gz -tar zxvf ntfy_2.6.0_macOS_all.tar.gz -sudo cp -a ntfy_2.6.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz > ntfy_2.6.1_macOS_all.tar.gz +tar zxvf ntfy_2.6.1_macOS_all.tar.gz +sudo cp -a ntfy_2.6.1_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.6.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 475b03fd..426ce360 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.0 +### ntfy server v2.6.1 Released June 28, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) @@ -30,6 +30,7 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) * Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) * Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) +* The .1 release fixes a few visual issues with dark mode, and other web app updates ([#791](https://github.com/binwiederhier/ntfy/pull/791), [#793](https://github.com/binwiederhier/ntfy/pull/793), [#792](https://github.com/binwiederhier/ntfy/pull/792), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Maintenance:** diff --git a/go.mod b/go.mod index ab327b70..88d09d01 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( cloud.google.com/go/firestore v1.11.0 // indirect - cloud.google.com/go/storage v1.30.1 // indirect + cloud.google.com/go/storage v1.31.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.16.0 @@ -69,9 +69,9 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.3 // indirect - google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 // indirect google.golang.org/grpc v1.56.1 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 61584efa..b3094d21 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,8 @@ cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tE cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= +cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= @@ -244,10 +246,16 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 h1:Wdfp5Hc1bqGCWYZNrir4A1Jb+SmVaV2j1DL/pbMMTGI= +google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 h1:iI5Fmsfz4zDINYxJLxn2YChI//ypkHM/KuVSvlN7ZXk= +google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 h1:6b+zGQBiXFlAMpQr+cCarAdrZD4QgXSG7uUZadYysgg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/web/package-lock.json b/web/package-lock.json index c4994367..40dff80d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -3441,9 +3441,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.442", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", - "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", + "version": "1.4.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.444.tgz", + "integrity": "sha512-/AjkL4syRvOpowXWy3N4OHmVbFdWQpfSKHh0sCVYipDeEAtMce3rLjMJi/27Ia9jNIbw6P1JuPN32pSWybXXEQ==", "dev": true }, "node_modules/emoji-regex": { From abb1baeecdc9677f4f9d4352ee2b9a292ddcbbcd Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:20:42 +0200 Subject: [PATCH 142/158] =?UTF-8?q?Don=E2=80=99t=20include=20mp3=20due=20t?= =?UTF-8?q?o=20Firefox=20sw=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/vite.config.js b/web/vite.config.js index 22d17d9b..86e17646 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -25,7 +25,7 @@ export default defineConfig(({ mode }) => ({ navigateFallback: "index.html", }, injectManifest: { - globPatterns: ["**/*.{js,css,html,mp3,ico,png,svg,json}"], + globPatterns: ["**/*.{js,css,html,ico,png,svg,json}"], globIgnores: ["config.js"], manifestTransforms: [ (entries) => ({ From 55eed868faf2e8092d864c6dd777ada4feae2e4d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 13:02:17 +0200 Subject: [PATCH 143/158] Reduce padding on mobile / narrow screens --- web/src/components/App.jsx | 5 ++--- web/src/components/Notifications.jsx | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 2951a2bc..2ad7f419 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -1,7 +1,6 @@ import * as React from "react"; import { createContext, Suspense, useContext, useEffect, useState, useMemo } from "react"; -import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery } from "@mui/material"; -import { ThemeProvider, createTheme } from "@mui/material/styles"; +import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery, ThemeProvider, createTheme } from "@mui/material"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; @@ -133,7 +132,7 @@ const Main = (props) => ( display: "flex", flexGrow: 1, flexDirection: "column", - padding: 3, + padding: { xs: 0, md: 3 }, width: { sm: `calc(100% - ${Navigation.width}px)` }, height: "100dvh", overflow: "auto", diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index fe9fcc48..85ced743 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -184,7 +184,7 @@ const NotificationItem = (props) => { const hasUserActions = notification.actions && notification.actions.length > 0; const showActions = hasAttachmentActions || hasClickAction || hasUserActions; return ( - + From 9fa1288dbc8610405fa23adfa2d6d975ed43081f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:07:18 +0200 Subject: [PATCH 144/158] Fix update behaviour --- web/public/sw.js | 3 +++ web/src/index.jsx | 28 ++++++++++++++++++++++++++++ web/vite.config.js | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/web/public/sw.js b/web/public/sw.js index d3967441..33154628 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -2,6 +2,7 @@ import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching"; import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; +import { clientsClaim } from "workbox-core"; import { dbAsync } from "../src/app/db"; @@ -224,6 +225,8 @@ precacheAndRoute( self.__WB_MANIFEST ); +// Claim all open windows +clientsClaim(); // Delete any cached old dist files from previous service worker versions cleanupOutdatedCaches(); diff --git a/web/src/index.jsx b/web/src/index.jsx index d60c05a4..040f94b5 100644 --- a/web/src/index.jsx +++ b/web/src/index.jsx @@ -1,6 +1,34 @@ import * as React from "react"; import { createRoot } from "react-dom/client"; +// eslint-disable-next-line import/no-unresolved +import { registerSW } from "virtual:pwa-register"; import App from "./components/App"; +// fetch new sw every hour, i.e. update app every hour while running +const intervalMS = 60 * 60 * 1000; + +// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html +registerSW({ + onRegisteredSW(swUrl, registration) { + if (!registration) { + return; + } + + setInterval(async () => { + if (registration.installing || navigator?.onLine === false) return; + + const resp = await fetch(swUrl, { + cache: "no-store", + headers: { + cache: "no-store", + "cache-control": "no-cache", + }, + }); + + if (resp?.status === 200) await registration.update(); + }, intervalMS); + }, +}); + const root = createRoot(document.querySelector("#root")); root.render(); diff --git a/web/vite.config.js b/web/vite.config.js index 86e17646..4df6ef9d 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -16,7 +16,7 @@ export default defineConfig(({ mode }) => ({ react(), VitePWA({ registerType: "autoUpdate", - injectRegister: "inline", + injectRegister: null, strategies: "injectManifest", devOptions: { enabled: true, From 57bd37ef2fc9444cd1df3a71cc21591c623655af Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:22:59 +0200 Subject: [PATCH 145/158] Fix sidebar colour on mobile --- web/src/components/theme.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 64217eee..0ce693a6 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -55,6 +55,13 @@ export const darkTheme = { }, }, }, + MuiPaper: { + styleOverrides: { + root: { + backgroundImage: "none", + }, + }, + }, }, palette: { mode: "dark", From 0b918464c191b892517908b069565a5ccbc6f7f3 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 30 Jun 2023 08:59:20 +0200 Subject: [PATCH 146/158] Move registerSW out --- web/src/components/theme.js | 1 + web/src/index.jsx | 29 ++--------------------------- web/src/registerSW.js | 31 +++++++++++++++++++++++++++++++ web/vite.config.js | 1 + 4 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 web/src/registerSW.js diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 0ce693a6..9cf6649f 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -58,6 +58,7 @@ export const darkTheme = { MuiPaper: { styleOverrides: { root: { + // for the sidebar on narrow (xs) screens backgroundImage: "none", }, }, diff --git a/web/src/index.jsx b/web/src/index.jsx index 040f94b5..1a123a8a 100644 --- a/web/src/index.jsx +++ b/web/src/index.jsx @@ -1,34 +1,9 @@ import * as React from "react"; import { createRoot } from "react-dom/client"; -// eslint-disable-next-line import/no-unresolved -import { registerSW } from "virtual:pwa-register"; import App from "./components/App"; +import registerSW from "./registerSW"; -// fetch new sw every hour, i.e. update app every hour while running -const intervalMS = 60 * 60 * 1000; - -// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html -registerSW({ - onRegisteredSW(swUrl, registration) { - if (!registration) { - return; - } - - setInterval(async () => { - if (registration.installing || navigator?.onLine === false) return; - - const resp = await fetch(swUrl, { - cache: "no-store", - headers: { - cache: "no-store", - "cache-control": "no-cache", - }, - }); - - if (resp?.status === 200) await registration.update(); - }, intervalMS); - }, -}); +registerSW(); const root = createRoot(document.querySelector("#root")); root.render(); diff --git a/web/src/registerSW.js b/web/src/registerSW.js new file mode 100644 index 00000000..adef4746 --- /dev/null +++ b/web/src/registerSW.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line import/no-unresolved +import { registerSW as viteRegisterSW } from "virtual:pwa-register"; + +// fetch new sw every hour, i.e. update app every hour while running +const intervalMS = 60 * 60 * 1000; + +// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html +const registerSW = () => + viteRegisterSW({ + onRegisteredSW(swUrl, registration) { + if (!registration) { + return; + } + + setInterval(async () => { + if (registration.installing || navigator?.onLine === false) return; + + const resp = await fetch(swUrl, { + cache: "no-store", + headers: { + cache: "no-store", + "cache-control": "no-cache", + }, + }); + + if (resp?.status === 200) await registration.update(); + }, intervalMS); + }, + }); + +export default registerSW; diff --git a/web/vite.config.js b/web/vite.config.js index 4df6ef9d..a4fd5a31 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -16,6 +16,7 @@ export default defineConfig(({ mode }) => ({ react(), VitePWA({ registerType: "autoUpdate", + // see registerSW.js imported by index.jsx injectRegister: null, strategies: "injectManifest", devOptions: { From 7581058c9398124506918bafe224aa3d8a541bc7 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 08:45:28 -0400 Subject: [PATCH 147/158] Bump Go version in pipelines --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/test.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0076c0fa..de22292a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -11,7 +11,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f709332a..b61e3361 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,7 +14,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7473567b..f76862a9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -11,7 +11,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 From 7d3d697a203175207f8a6bab564d1d23bc6333eb Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 09:30:36 -0400 Subject: [PATCH 148/158] Fix goreleaser --- .goreleaser.yml | 6 ------ go.mod | 8 ++++---- go.sum | 24 ++++++++---------------- web/package-lock.json | 24 ++++++++++-------------- 4 files changed, 22 insertions(+), 40 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 131a302a..d3e71df2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -119,8 +119,6 @@ archives: - server/ntfy.service - client/client.yml - client/ntfy-client.service - replacements: - amd64: x86_64 - id: ntfy_windows builds: @@ -131,8 +129,6 @@ archives: - LICENSE - README.md - client/client.yml - replacements: - amd64: x86_64 - id: ntfy_darwin builds: @@ -142,8 +138,6 @@ archives: - LICENSE - README.md - client/client.yml - replacements: - darwin: macOS universal_binaries: - id: ntfy_darwin_all diff --git a/go.mod b/go.mod index 88d09d01..35d6b293 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( firebase.google.com/go/v4 v4.11.0 github.com/SherClockHolmes/webpush-go v1.2.0 github.com/prometheus/client_golang v1.16.0 - github.com/stripe/stripe-go/v74 v74.23.0 + github.com/stripe/stripe-go/v74 v74.24.0 ) require ( @@ -69,9 +69,9 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.3 // indirect - google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 // indirect google.golang.org/grpc v1.56.1 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index b3094d21..77b79db0 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= @@ -145,8 +143,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.23.0 h1:9spORjBMhg8SieRrlrqQdlrw+JllpL6gZnD3QGsCN6Q= -github.com/stripe/stripe-go/v74 v74.23.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/stripe/stripe-go/v74 v74.24.0 h1:h+hXEI5avC5moAh2YLtphMFTBnp11TfXTcP4suuWDLk= +github.com/stripe/stripe-go/v74 v74.24.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -244,18 +242,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= -google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 h1:Wdfp5Hc1bqGCWYZNrir4A1Jb+SmVaV2j1DL/pbMMTGI= -google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= -google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 h1:iI5Fmsfz4zDINYxJLxn2YChI//ypkHM/KuVSvlN7ZXk= -google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 h1:6b+zGQBiXFlAMpQr+cCarAdrZD4QgXSG7uUZadYysgg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUFd6UsOUNmA5kCcWOfORaT3tpAsKQs= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/web/package-lock.json b/web/package-lock.json index 40dff80d..a6aa129e 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2381,14 +2381,10 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", + "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", + "dev": true }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", @@ -3441,9 +3437,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.444", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.444.tgz", - "integrity": "sha512-/AjkL4syRvOpowXWy3N4OHmVbFdWQpfSKHh0sCVYipDeEAtMce3rLjMJi/27Ia9jNIbw6P1JuPN32pSWybXXEQ==", + "version": "1.4.446", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.446.tgz", + "integrity": "sha512-4Gnw7ztEQ/E0eOt5JWfPn9jjeupfUlKoeW5ETKP9nLdWj+4spFoS3Stj19fqlKIaX28UQs0fNX+uKEyoLCBnkw==", "dev": true }, "node_modules/emoji-regex": { @@ -6018,9 +6014,9 @@ } }, "node_modules/rollup": { - "version": "3.25.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", - "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz", + "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" From 26c835cdd1932fec6fb9e7a406dac0902d1d43fe Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 09:58:56 -0400 Subject: [PATCH 149/158] Install notes, background change for xs dark mode drawer --- docs/install.md | 60 +++++++++++++++---------------- docs/releases.md | 13 +++++-- web/src/components/Navigation.jsx | 2 +- web/src/components/theme.js | 8 ----- 4 files changed, 42 insertions(+), 41 deletions(-) diff --git a/docs/install.md b/docs/install.md index 729cfd99..c156f42c 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_x86_64.tar.gz - tar zxvf ntfy_2.6.1_linux_x86_64.tar.gz - sudo cp -a ntfy_2.6.1_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.tar.gz + tar zxvf ntfy_2.6.2_linux_amd64.tar.gz + sudo cp -a ntfy_2.6.2_linux_amd64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_amd64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.tar.gz - tar zxvf ntfy_2.6.1_linux_armv6.tar.gz - sudo cp -a ntfy_2.6.1_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.tar.gz + tar zxvf ntfy_2.6.2_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.2_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.tar.gz - tar zxvf ntfy_2.6.1_linux_armv7.tar.gz - sudo cp -a ntfy_2.6.1_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.tar.gz + tar zxvf ntfy_2.6.2_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.2_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.tar.gz - tar zxvf ntfy_2.6.1_linux_arm64.tar.gz - sudo cp -a ntfy_2.6.1_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.tar.gz + tar zxvf ntfy_2.6.2_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.2_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz > ntfy_2.6.1_macOS_all.tar.gz -tar zxvf ntfy_2.6.1_macOS_all.tar.gz -sudo cp -a ntfy_2.6.1_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz > ntfy_2.6.2_darwin_all.tar.gz +tar zxvf ntfy_2.6.2_darwin_all.tar.gz +sudo cp -a ntfy_2.6.2_darwin_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.6.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.2_darwin_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_windows_amd64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 426ce360..129e0b9e 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,8 +2,8 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.1 -Released June 28, 2023 +### ntfy server v2.6.2 +Released June 30, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar @@ -31,6 +31,7 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) * Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) * The .1 release fixes a few visual issues with dark mode, and other web app updates ([#791](https://github.com/binwiederhier/ntfy/pull/791), [#793](https://github.com/binwiederhier/ntfy/pull/793), [#792](https://github.com/binwiederhier/ntfy/pull/792), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* The .2 release fixes issues with the service worker in Firefox and adds automatic service worker updates ([#795](https://github.com/binwiederhier/ntfy/pull/795), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Maintenance:** @@ -39,6 +40,14 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) +**Changes in tarball/zip naming:** +Due to a [change in GoReleaser](https://goreleaser.com/deprecations/#archivesreplacements), some of the binary release +archives now have slightly different names. My apologies if this causes issues in the downstream projects that use ntfy: + +- `ntfy_v${VERSION}_windows_x86_64.zip` -> `ntfy_v${VERSION}_windows_amd64.zip` +- `ntfy_v${VERSION}_linux_x86_64.tar.gz` -> `ntfy_v${VERSION}_linux_amd64.tar.gz` +- `ntfy_v${VERSION}_macOS_all.tar.gz` -> `ntfy_v${VERSION}_darwin_all.tar.gz` + ## ntfy server v2.5.0 Released May 18, 2023 diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index 9025222e..7e30931a 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -61,7 +61,7 @@ const Navigation = (props) => { ModalProps={{ keepMounted: true }} // Better open performance on mobile. sx={{ display: { xs: "block", sm: "none" }, - "& .MuiDrawer-paper": { boxSizing: "border-box", width: navWidth }, + "& .MuiDrawer-paper": { boxSizing: "border-box", width: navWidth, backgroundImage: "none" }, }} > {navigationList} diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 9cf6649f..64217eee 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -55,14 +55,6 @@ export const darkTheme = { }, }, }, - MuiPaper: { - styleOverrides: { - root: { - // for the sidebar on narrow (xs) screens - backgroundImage: "none", - }, - }, - }, }, palette: { mode: "dark", From 88eb728fe396a599ff1f2d339bdd6b4e5a18fb22 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 21:51:03 -0400 Subject: [PATCH 150/158] Changelog --- docs/install.md | 4 ++- docs/releases.md | 5 +-- docs/subscribe/pwa.md | 2 ++ web/package-lock.json | 78 +++++++++++++++++++++---------------------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/docs/install.md b/docs/install.md index c156f42c..c7febac1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -170,7 +170,9 @@ Manually installing the .deb file: ``` ## Arch Linux -ntfy can be installed using an [AUR package](https://aur.archlinux.org/packages/ntfysh-bin/). You can use an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers) like `paru`, `yay` or others to download, build and install ntfy and keep it up to date. +ntfy can be installed using an [AUR package](https://aur.archlinux.org/packages/ntfysh-bin/). +You can use an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers) like `paru`, `yay` or others to download, +build and install ntfy and keep it up to date. ``` paru -S ntfysh-bin ``` diff --git a/docs/releases.md b/docs/releases.md index 129e0b9e..e6bfb7bf 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -5,10 +5,11 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ### ntfy server v2.6.2 Released June 30, 2023 -With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) +With this release, the ntfy web app now contains a **[progressive web app](subscribe/pwa.md) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar to a native app (__even on iOS!__ 🥳). Installing the PWA gives ntfy web its own launcher, a standalone window, -push notifications, and an app badge with the unread notification count. +push notifications, and an app badge with the unread notification count. Note that for self-hosted servers, +[Web Push](config.md#web-push) must be configured. On top of that, this release also brings **dark mode** 🧛🌙 to the web app. diff --git a/docs/subscribe/pwa.md b/docs/subscribe/pwa.md index f60583f5..582cb5ae 100644 --- a/docs/subscribe/pwa.md +++ b/docs/subscribe/pwa.md @@ -12,6 +12,8 @@ Web app installation is **supported on** (see [compatibility table](https://cani - **Firefox:** Android, as well as on Windows/Linux [via an extension](https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/) - **Edge:** Windows +Note that for self-hosted servers, [Web Push](../config.md#web-push) must be configured for the PWA to work. + ## Installation ### Chrome on Desktop diff --git a/web/package-lock.json b/web/package-lock.json index a6aa129e..8ee2635d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2257,14 +2257,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2307,9 +2307,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2694,9 +2694,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.0.tgz", - "integrity": "sha512-Eu1V3kz3mV0wUpVTiFHuaT8UD1gj/0VnoFHQYX35xlslQUpe8CuYoKFn9d4WZFHm3yDywz6ALZuGdnUPKrNeAw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", + "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", "engines": { "node": ">=14" } @@ -2726,9 +2726,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3437,9 +3437,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.446", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.446.tgz", - "integrity": "sha512-4Gnw7ztEQ/E0eOt5JWfPn9jjeupfUlKoeW5ETKP9nLdWj+4spFoS3Stj19fqlKIaX28UQs0fNX+uKEyoLCBnkw==", + "version": "1.4.447", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", + "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", "dev": true }, "node_modules/emoji-regex": { @@ -3610,15 +3610,15 @@ } }, "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3630,7 +3630,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "espree": "^9.6.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3650,7 +3650,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -4039,12 +4039,12 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -4110,9 +4110,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5824,11 +5824,11 @@ } }, "node_modules/react-router": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.0.tgz", - "integrity": "sha512-OD+vkrcGbvlwkspUFDgMzsu1RXwdjNh83YgG/28lBnDzgslhCgxIqoExLlxsfTpIygp7fc+Hd3esloNwzkm2xA==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", + "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", "dependencies": { - "@remix-run/router": "1.7.0" + "@remix-run/router": "1.7.1" }, "engines": { "node": ">=14" @@ -5838,12 +5838,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.0.tgz", - "integrity": "sha512-YEwlApKwzMMMbGbhh+Q7MsloTldcwMgHxUY/1g0uA62+B1hZo2jsybCWIDCL8zvIDB1FA0pBKY9chHbZHt+2dQ==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", + "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", "dependencies": { - "@remix-run/router": "1.7.0", - "react-router": "6.14.0" + "@remix-run/router": "1.7.1", + "react-router": "6.14.1" }, "engines": { "node": ">=14" From 4267c0d9b62b11fbd3f9d421817d9be3b7ae8869 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 21:54:27 -0400 Subject: [PATCH 151/158] Update docs --- docs/subscribe/phone.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/subscribe/phone.md b/docs/subscribe/phone.md index 440dbbe3..e88ff0fb 100644 --- a/docs/subscribe/phone.md +++ b/docs/subscribe/phone.md @@ -12,6 +12,9 @@ You can get the Android app from both [Google Play](https://play.google.com/stor from [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/). Both are largely identical, with the one exception that the F-Droid flavor does not use Firebase. The iOS app can be downloaded from the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347). +Alternatively, you may also want to consider using the **[progressive web app (PWA)](pwa.md)** instead of the native app. +The PWA is a website that you can add to your home screen, and it will behave just like a native app. + ## Overview A picture is worth a thousand words. Here are a few screenshots showing what the app looks like. It's all pretty straight forward. You can add topics and as soon as you add them, you can [publish messages](../publish.md) to them. From 7a1488fcd3f02f9d0828fc813f984d48c9b4b9d9 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:10:37 +0200 Subject: [PATCH 152/158] Web app: add RTL support Ref: https://mui.com/material-ui/guides/right-to-left https://m2.material.io/design/usability/bidirectionality.html --- web/package-lock.json | 40 ++++++++++++++++-- web/package.json | 5 ++- web/src/components/App.jsx | 56 +++++++++++++++---------- web/src/components/RTLCacheProvider.jsx | 22 ++++++++++ 4 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 web/src/components/RTLCacheProvider.jsx diff --git a/web/package-lock.json b/web/package-lock.json index 8ee2635d..ef9680be 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -8,6 +8,7 @@ "name": "ntfy", "version": "1.0.0", "dependencies": { + "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", @@ -25,7 +26,9 @@ "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.0.0", @@ -1765,6 +1768,11 @@ "stylis": "4.2.0" } }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", @@ -1777,6 +1785,11 @@ "stylis": "4.2.0" } }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", @@ -3314,6 +3327,14 @@ "node": ">=8" } }, + "node_modules/cssjanus": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cssjanus/-/cssjanus-2.1.0.tgz", + "integrity": "sha512-kAijbny3GmdOi9k+QT6DGIXqFvL96aksNlGr4Rhk9qXDZYWUojU4bRc3IHWxdaLNOqgEZHuXoe5Wl2l7dxLW5g==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -6351,9 +6372,20 @@ } }, "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/stylis-plugin-rtl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz", + "integrity": "sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg==", + "dependencies": { + "cssjanus": "^2.0.1" + }, + "peerDependencies": { + "stylis": "4.x" + } }, "node_modules/supports-color": { "version": "5.5.0", diff --git a/web/package.json b/web/package.json index 2e52635a..400a090a 100644 --- a/web/package.json +++ b/web/package.json @@ -11,6 +11,7 @@ "lint": "eslint --report-unused-disable-directives --ext .js,.jsx ./src/" }, "dependencies": { + "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", @@ -28,7 +29,9 @@ "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.0.0", diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 2ad7f419..8b60b3e8 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -3,6 +3,7 @@ import { createContext, Suspense, useContext, useEffect, useState, useMemo } fro import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery, ThemeProvider, createTheme } from "@mui/material"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; +import { useTranslation } from "react-i18next"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; import { darkTheme, lightTheme } from "./theme"; import Navigation from "./Navigation"; @@ -21,6 +22,7 @@ import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! import prefs, { THEME } from "../app/Prefs"; +import RTLCacheProvider from "./RTLCacheProvider"; export const AccountContext = createContext(null); @@ -39,37 +41,47 @@ const darkModeEnabled = (prefersDarkMode, themePreference) => { }; const App = () => { + const { i18n } = useTranslation(); + const languageDir = i18n.dir(); + const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( - () => createTheme(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), - [prefersDarkMode, themePreference] + () => createTheme({ ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), direction: languageDir }), + [prefersDarkMode, themePreference, languageDir] ); + useEffect(() => { + document.documentElement.setAttribute("lang", i18n.language); + document.dir = languageDir; + }, [i18n.language, languageDir]); + return ( }> - - - - - - - } /> - } /> - }> - } /> - } /> - } /> - } /> - } /> - - - - - - + + + + + + + + } /> + } /> + }> + } /> + } /> + } /> + } /> + } /> + + + + + + + ); }; diff --git a/web/src/components/RTLCacheProvider.jsx b/web/src/components/RTLCacheProvider.jsx new file mode 100644 index 00000000..a85fced6 --- /dev/null +++ b/web/src/components/RTLCacheProvider.jsx @@ -0,0 +1,22 @@ +import React from "react"; + +import rtlPlugin from "stylis-plugin-rtl"; +import { CacheProvider } from "@emotion/react"; +import createCache from "@emotion/cache"; +import { prefixer } from "stylis"; +import { useTranslation } from "react-i18next"; + +// https://mui.com/material-ui/guides/right-to-left + +const cacheRtl = createCache({ + key: "muirtl", + stylisPlugins: [prefixer, rtlPlugin], +}); + +const RTLCacheProvider = ({ children }) => { + const { i18n } = useTranslation(); + + return i18n.dir() === "rtl" ? {children} : children; +}; + +export default RTLCacheProvider; From 311ffc36727146030b116b42234bb75fef4f17e2 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:24:13 +0200 Subject: [PATCH 153/158] Format datetimes using i18n lang --- web/src/app/utils.js | 7 ++++--- web/src/components/Account.jsx | 15 +++++++-------- web/src/components/Notifications.jsx | 8 ++++---- web/src/components/SubscriptionPopup.jsx | 10 ++++++++-- web/src/components/UpgradeDialog.jsx | 4 ++-- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 244d3321..39e7a3b2 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -130,13 +130,14 @@ export const hashCode = (s) => { return hash; }; -export const formatShortDateTime = (timestamp) => - new Intl.DateTimeFormat("default", { +export const formatShortDateTime = (timestamp, language) => + new Intl.DateTimeFormat(language, { dateStyle: "short", timeStyle: "short", }).format(new Date(timestamp * 1000)); -export const formatShortDate = (timestamp) => new Intl.DateTimeFormat("default", { dateStyle: "short" }).format(new Date(timestamp * 1000)); +export const formatShortDate = (timestamp, language) => + new Intl.DateTimeFormat(language, { dateStyle: "short" }).format(new Date(timestamp * 1000)); export const formatBytes = (bytes, decimals = 2) => { if (bytes === 0) return "0 bytes"; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 541a008d..319353df 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -39,7 +39,6 @@ import EditIcon from "@mui/icons-material/Edit"; import { Trans, useTranslation } from "react-i18next"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined"; -import i18n from "i18next"; import humanizeDuration from "humanize-duration"; import CelebrationIcon from "@mui/icons-material/Celebration"; import CloseIcon from "@mui/icons-material/Close"; @@ -224,7 +223,7 @@ const ChangePasswordDialog = (props) => { }; const AccountType = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); const [upgradeDialogKey, setUpgradeDialogKey] = useState(0); const [upgradeDialogOpen, setUpgradeDialogOpen] = useState(false); @@ -283,7 +282,7 @@ const AccountType = () => { {account.billing?.paid_until && !account.billing?.cancel_at && ( @@ -328,7 +327,7 @@ const AccountType = () => { {account.billing?.cancel_at > 0 && ( {t("account_basics_tier_canceled_subscription", { - date: formatShortDate(account.billing.cancel_at), + date: formatShortDate(account.billing.cancel_at, i18n.language), })} )} @@ -556,7 +555,7 @@ const AddPhoneNumberDialog = (props) => { }; const Stats = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); if (!account) { @@ -798,7 +797,7 @@ const Tokens = () => { }; const TokensTable = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const [snackOpen, setSnackOpen] = useState(false); const [upsertDialogKey, setUpsertDialogKey] = useState(0); const [upsertDialogOpen, setUpsertDialogOpen] = useState(false); @@ -872,11 +871,11 @@ const TokensTable = (props) => { {token.token !== session.token() && (token.label || "-")} - {token.expires ? formatShortDateTime(token.expires) : {t("account_tokens_table_never_expires")}} + {token.expires ? formatShortDateTime(token.expires, i18n.language) : {t("account_tokens_table_never_expires")}}
- {formatShortDateTime(token.last_access)} + {formatShortDateTime(token.last_access, i18n.language)} { }; const NotificationItem = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { notification } = props; const { attachment } = notification; - const date = formatShortDateTime(notification.time); + const date = formatShortDateTime(notification.time, i18n.language); const otherTags = unmatchedTags(notification.tags); const tags = otherTags.length > 0 ? otherTags.join(", ") : null; const handleDelete = async () => { @@ -277,7 +277,7 @@ const NotificationItem = (props) => { }; const Attachment = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { attachment } = props; const expired = attachment.expires && attachment.expires < Date.now() / 1000; const expires = attachment.expires && attachment.expires > Date.now() / 1000; @@ -296,7 +296,7 @@ const Attachment = (props) => { if (expires) { infos.push( t("notifications_attachment_link_expires", { - date: formatShortDateTime(attachment.expires), + date: formatShortDateTime(attachment.expires, i18n.language), }) ); } diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 17b12504..1a6a689c 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -117,10 +117,16 @@ export const SubscriptionPopup = (props) => { ])[0]; const nowSeconds = Math.round(Date.now() / 1000); const message = shuffle([ - `Hello friend, this is a test notification from ntfy web. It's ${formatShortDateTime(nowSeconds)} right now. Is that early or late?`, + `Hello friend, this is a test notification from ntfy web. It's ${formatShortDateTime( + nowSeconds, + "en-US" + )} right now. Is that early or late?`, `So I heard you like ntfy? If that's true, go to GitHub and star it, or to the Play store and rate it. Thanks! Oh yeah, this is a test notification.`, `It's almost like you want to hear what I have to say. I'm not even a machine. I'm just a sentence that Phil typed on a random Thursday.`, - `Alright then, it's ${formatShortDateTime(nowSeconds)} already. Boy oh boy, where did the time go? I hope you're alright, friend.`, + `Alright then, it's ${formatShortDateTime( + nowSeconds, + "en-US" + )} already. Boy oh boy, where did the time go? I hope you're alright, friend.`, `There are nine million bicycles in Beijing That's a fact; It's a thing we can't deny. I wonder if that's true ...`, `I'm really excited that you're trying out ntfy. Did you know that there are a few public topics, such as ntfy.sh/stats and ntfy.sh/announcements.`, `It's interesting to hear what people use ntfy for. I've heard people talk about using it for so many cool things. What do you use it for?`, diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index 4bf0244d..712c47ec 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -62,7 +62,7 @@ const Banner = { const UpgradeDialog = (props) => { const theme = useTheme(); - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); // May be undefined! const [error, setError] = useState(""); const [tiers, setTiers] = useState(null); @@ -233,7 +233,7 @@ const UpgradeDialog = (props) => { From d01ed355e06846319abe4d41810178bb9bdbebae Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 14:23:44 -0400 Subject: [PATCH 154/158] Changelog --- docs/releases.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index e6bfb7bf..a49234df 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.2 +## ntfy server v2.6.2 Released June 30, 2023 With this release, the ntfy web app now contains a **[progressive web app](subscribe/pwa.md) (PWA) @@ -1251,6 +1251,16 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet +### ntfy server v2.6.2 (UNRELEASED) + +**Features:** + +* Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) + +**Bug fixes + maintenance:** + +* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) + ### ntfy Android app v1.16.1 (UNRELEASED) **Features:** From 35cb4606f6460af0053f4a26d1b058cc2cd73eb8 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:10:17 -0400 Subject: [PATCH 155/158] FAQ --- README.md | 2 +- docs/faq.md | 10 ++++++++++ docs/releases.md | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59047eed..3e8f74a8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Discord](https://img.shields.io/discord/874398661709295626?label=Discord)](https://discord.gg/cT7ECsZj9w) [![Matrix](https://img.shields.io/matrix/ntfy:matrix.org?label=Matrix)](https://matrix.to/#/#ntfy:matrix.org) [![Matrix space](https://img.shields.io/matrix/ntfy-space:matrix.org?label=Matrix+space)](https://matrix.to/#/#ntfy-space:matrix.org) -[![Lemmy](https://img.shields.io/badge/Lemmy-discuss-green)](https://discuss.ntfy.sh/) +[![Lemmy](https://img.shields.io/badge/Lemmy-discuss-green)](https://discuss.ntfy.sh/c/ntfy) [![Healthcheck](https://healthchecks.io/badge/68b65976-b3b0-4102-aec9-980921/kcoEgrLY.svg)](https://ntfy.statuspage.io/) [![Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/binwiederhier/ntfy) diff --git a/docs/faq.md b/docs/faq.md index d7977a5f..68643938 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -80,3 +80,13 @@ a proper backend. So as long as you secure your backend with ACLs, exposing the I have just very recently started accepting donations via [GitHub Sponsors](https://github.com/sponsors/binwiederhier). I would be humbled if you helped me carry the server and developer account costs. Even small donations are very much appreciated. + +## Can I email you? Can I DM you on Discord/Matrix? +While I love chatting on [Discord](https://discord.gg/cT7ECsZj9w), [Matrix](https://matrix.to/#/#ntfy-space:matrix.org), +or on [Lemmy](https://discuss.ntfy.sh/c/ntfy), I generally **do not respond to emails about ntfy or direct messages** +about ntfy, unless you are paying for a [ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business +opportunities. + +I am sorry, but answering individual questions about ntfy on a 1-on-1 basis is not scalable. Answering your questions +in the above-mentioned forums benefits others, since I can link to the discussion at a later point in time, or other users +may be able to help out. I hope you understand. diff --git a/docs/releases.md b/docs/releases.md index a49234df..35e049c4 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1251,7 +1251,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet -### ntfy server v2.6.2 (UNRELEASED) +### ntfy server v2.7.0 (UNRELEASED) **Features:** From 77cc52e4acef722d920c01e4341f27961298c58f Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:11:45 -0400 Subject: [PATCH 156/158] Remove email --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 3e8f74a8..4c4f6645 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,8 @@ works best for you: * [Discord server](https://discord.gg/cT7ECsZj9w) - direct chat with the community * [Matrix room #ntfy](https://matrix.to/#/#ntfy:matrix.org) (+ [Matrix space](https://matrix.to/#/#ntfy-space:matrix.org)) - same chat, bridged from Discord -* [Lemmy discussion board](https://discuss.ntfy.sh/) - asynchronous forum (_new as of June 2023_) +* [Lemmy discussion board](https://discuss.ntfy.sh/c/ntfy) - asynchronous forum (_new as of June 2023_) * [GitHub issues](https://github.com/binwiederhier/ntfy/issues) - questions, features, bugs -* [Email](https://heckel.io/about) - reach me directly (_I usually prefer the other methods_) ## Announcements / beta testers For announcements of new releases and cutting-edge beta versions, please subscribe to the [ntfy.sh/announcements](https://ntfy.sh/announcements) From 53f13fd811111ded896b0fee90d3f556fb6a22dd Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:47:19 -0400 Subject: [PATCH 157/158] FAQ --- docs/faq.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 68643938..8844566f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -83,9 +83,9 @@ appreciated. ## Can I email you? Can I DM you on Discord/Matrix? While I love chatting on [Discord](https://discord.gg/cT7ECsZj9w), [Matrix](https://matrix.to/#/#ntfy-space:matrix.org), -or on [Lemmy](https://discuss.ntfy.sh/c/ntfy), I generally **do not respond to emails about ntfy or direct messages** -about ntfy, unless you are paying for a [ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business -opportunities. +[Lemmy](https://discuss.ntfy.sh/c/ntfy), or [GitHub](https://github.com/binwiederhier/ntfy/issues), I generally +**do not respond to emails about ntfy or direct messages** about ntfy, unless you are paying for a +[ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business opportunities. I am sorry, but answering individual questions about ntfy on a 1-on-1 basis is not scalable. Answering your questions in the above-mentioned forums benefits others, since I can link to the discussion at a later point in time, or other users From cd38511ad418e7d1ca0eded4419821f5a838e8e1 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:52:39 -0400 Subject: [PATCH 158/158] Update deps --- go.mod | 4 +- go.sum | 4 + web/package-lock.json | 225 ++++++++++++++++++++++-------------------- 3 files changed, 125 insertions(+), 108 deletions(-) diff --git a/go.mod b/go.mod index 35d6b293..7c53b10a 100644 --- a/go.mod +++ b/go.mod @@ -64,8 +64,8 @@ require ( github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/net v0.11.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine/v2 v2.0.3 // indirect diff --git a/go.sum b/go.sum index 77b79db0..d5685ee8 100644 --- a/go.sum +++ b/go.sum @@ -204,6 +204,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= @@ -216,6 +218,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/web/package-lock.json b/web/package-lock.json index ef9680be..de8aac16 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -78,35 +78,35 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", + "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.6", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", + "@babel/traverse": "^7.22.6", "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.2" }, "engines": { "node": ">=6.9.0" @@ -156,16 +156,16 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", + "@babel/compat-data": "^7.22.6", "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" }, "engines": { "node": ">=6.9.0" @@ -175,9 +175,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", + "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -187,8 +187,8 @@ "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" + "@babel/helper-split-export-declaration": "^7.22.6", + "@nicolo-ribaudo/semver-v6": "^6.3.3" }, "engines": { "node": ">=6.9.0" @@ -198,14 +198,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", + "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -388,9 +388,9 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" @@ -440,13 +440,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dev": true, "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", + "@babel/traverse": "^7.22.6", "@babel/types": "^7.22.5" }, "engines": { @@ -467,9 +467,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", + "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -887,19 +887,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { @@ -1295,9 +1295,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1576,13 +1576,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz", + "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1613,7 +1613,7 @@ "@babel/plugin-transform-block-scoping": "^7.22.5", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", "@babel/plugin-transform-destructuring": "^7.22.5", "@babel/plugin-transform-dotall-regex": "^7.22.5", @@ -1638,7 +1638,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.22.5", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.5", @@ -1656,11 +1656,11 @@ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", "babel-plugin-polyfill-corejs2": "^0.4.3", "babel-plugin-polyfill-corejs3": "^0.8.1", "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" + "core-js-compat": "^3.31.0" }, "engines": { "node": ">=6.9.0" @@ -1692,9 +1692,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -1717,9 +1717,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", + "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.5", @@ -1727,8 +1727,8 @@ "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.6", "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" @@ -2394,10 +2394,14 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", - "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", - "dev": true + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", @@ -2422,14 +2426,14 @@ "dev": true }, "node_modules/@mui/base": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", - "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", + "version": "5.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.6.tgz", + "integrity": "sha512-jcHy6HwOX7KzRhRtL8nvIvUlxvLx2Fl6NMRCyUSQSvMTyfou9kndekz0H4HJaXvG1Y4WEifk23RYedOlrD1kEQ==", "dependencies": { "@babel/runtime": "^7.22.5", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -2454,20 +2458,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.7.tgz", + "integrity": "sha512-/suIo4WoeL/OyO3KUsFVpdOmKiSAr6NpWXmQ4WLSxwKrTiha1FJxM6vwAki5W/5kR9WnVLw5E8JC4oHHsutT8w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.13.7.tgz", + "integrity": "sha512-zoVtkb9jYVUGfI7CobOdDBEAlpg3XESiO6cWqSDGwEma69+CBDIAwGpnO5truvQDJHBGSAfzFj3nObwxjkyA7Q==", "dependencies": { - "@babel/runtime": "^7.21.0" + "@babel/runtime": "^7.22.5" }, "engines": { "node": ">=12.0.0" @@ -2488,16 +2492,16 @@ } }, "node_modules/@mui/material": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", - "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.7.tgz", + "integrity": "sha512-+n453jDDm88zZM3b5YK29nZ7gXY+s+rryH9ovDbhmfSkOlFtp+KSqbXy5cTaC/UlDqDM7sYYJGq8BmJov3v9Tg==", "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.5", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.6", + "@mui/base": "5.0.0-beta.6", + "@mui/core-downloads-tracker": "^5.13.7", + "@mui/system": "^5.13.7", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "csstype": "^3.1.2", @@ -2532,12 +2536,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", + "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", + "@babel/runtime": "^7.22.5", + "@mui/utils": "^5.13.7", "prop-types": "^15.8.1" }, "engines": { @@ -2589,15 +2593,15 @@ } }, "node_modules/@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.7.tgz", + "integrity": "sha512-7R2KdI6vr8KtnauEfg9e9xQmPk6Gg/1vGNiALYyhSI+cYztxN6WmlSqGX4bjWn/Sygp1TUE1jhFEgs7MWruhkQ==", "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", + "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "clsx": "^1.2.1", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2641,13 +2645,13 @@ } }, "node_modules/@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.7.tgz", + "integrity": "sha512-/3BLptG/q0u36eYED7Nhf4fKXmcKb6LjjT7ZMwhZIZSdSxVqDqSTmATW3a56n3KEPQUXCU9TpxAfCBQhs6brVA==", "dependencies": { "@babel/runtime": "^7.22.5", "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2662,6 +2666,15 @@ "react": "^17.0.0 || ^18.0.0" } }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3175,9 +3188,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", "dev": true, "funding": [ { @@ -3458,9 +3471,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", + "version": "1.4.450", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", + "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", "dev": true }, "node_modules/emoji-regex": {
+ + + +

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�>okL{DfL0 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�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�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 b`>x)+l)kRO`)Z2O{A=sx@Q~U~Nris{2hW=Z literal 0 HcmV?d00001 diff --git a/docs/static/img/web-pin.png b/docs/static/img/web-pin.png deleted file mode 100644 index 3312a50fabd92cf5758edd4ee7f53b271ec5289f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18235 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