diff --git a/cmd/serve.go b/cmd/serve.go
index 94349f52..d11778b2 100644
--- a/cmd/serve.go
+++ b/cmd/serve.go
@@ -172,6 +172,7 @@ func execServe(c *cli.Context) error {
webRoot := c.String("web-root")
enableSignup := c.Bool("enable-signup")
enableLogin := c.Bool("enable-login")
+ requireLogin := c.Bool("require-login")
enableReservations := c.Bool("enable-reservations")
upstreamBaseURL := c.String("upstream-base-url")
upstreamAccessToken := c.String("upstream-access-token")
@@ -476,6 +477,7 @@ func execServe(c *cli.Context) error {
conf.BillingContact = billingContact
conf.EnableSignup = enableSignup
conf.EnableLogin = enableLogin
+ conf.RequireLogin = requireLogin
conf.EnableReservations = enableReservations
conf.EnableMetrics = enableMetrics
conf.MetricsListenHTTP = metricsListenHTTP
diff --git a/server/config.go b/server/config.go
index e3de1620..8e7dcda2 100644
--- a/server/config.go
+++ b/server/config.go
@@ -162,6 +162,7 @@ type Config struct {
BillingContact string
EnableSignup bool // Enable creation of accounts via API and UI
EnableLogin bool
+ RequireLogin bool
EnableReservations bool // Allow users with role "user" to own/reserve topics
EnableMetrics bool
AccessControlAllowOrigin string // CORS header field to restrict access from web clients
diff --git a/server/server.go b/server/server.go
index a7dd6d85..fc04d50f 100644
--- a/server/server.go
+++ b/server/server.go
@@ -9,8 +9,6 @@ import (
"encoding/json"
"errors"
"fmt"
- "gopkg.in/yaml.v2"
- "heckel.io/ntfy/v2/payments"
"io"
"net"
"net/http"
@@ -33,7 +31,9 @@ import (
"github.com/gorilla/websocket"
"github.com/prometheus/client_golang/prometheus/promhttp"
"golang.org/x/sync/errgroup"
+ "gopkg.in/yaml.v2"
"heckel.io/ntfy/v2/log"
+ "heckel.io/ntfy/v2/payments"
"heckel.io/ntfy/v2/user"
"heckel.io/ntfy/v2/util"
"heckel.io/ntfy/v2/util/sprig"
@@ -600,12 +600,12 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi
BaseURL: "", // Will translate to window.location.origin
AppRoot: s.config.WebRoot,
EnableLogin: s.config.EnableLogin,
+ RequireLogin: s.config.RequireLogin,
EnableSignup: s.config.EnableSignup,
EnablePayments: s.config.StripeSecretKey != "",
EnableCalls: s.config.TwilioAccount != "",
EnableEmails: s.config.SMTPSenderFrom != "",
EnableReservations: s.config.EnableReservations,
- ReuqireLogin: s.config.RequireLogin,
EnableWebPush: s.config.WebPushPublicKey != "",
BillingContact: s.config.BillingContact,
WebPushPublicKey: s.config.WebPushPublicKey,
diff --git a/server/types.go b/server/types.go
index d4aabb40..d9519b94 100644
--- a/server/types.go
+++ b/server/types.go
@@ -449,13 +449,13 @@ type apiConfigResponse struct {
BaseURL string `json:"base_url"`
AppRoot string `json:"app_root"`
EnableLogin bool `json:"enable_login"`
+ RequireLogin bool `json:"require_login"`
EnableSignup bool `json:"enable_signup"`
EnablePayments bool `json:"enable_payments"`
EnableCalls bool `json:"enable_calls"`
EnableEmails bool `json:"enable_emails"`
EnableReservations bool `json:"enable_reservations"`
EnableWebPush bool `json:"enable_web_push"`
- RequireLogin bool `json:"require_login"`
BillingContact string `json:"billing_contact"`
WebPushPublicKey string `json:"web_push_public_key"`
DisallowedTopics []string `json:"disallowed_topics"`
diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json
index 888a9450..b0d3c545 100644
--- a/web/public/static/langs/en.json
+++ b/web/public/static/langs/en.json
@@ -97,8 +97,6 @@
"notifications_none_for_any_description": "To send notifications to a topic, simply PUT or POST to the topic URL. Here's an example using one of your topics.",
"notifications_no_subscriptions_title": "It looks like you don't have any subscriptions yet.",
"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_no_subscriptions_login_title": "This page requires a Login.",
- "notifications_no_subscriptions_login_description": "Click \"{{linktext}}\" to login into your account.",
"notifications_example": "Example",
"notifications_more_details": "For more information, check out the website or documentation.",
"display_name_dialog_title": "Change display name",
diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx
index 0c4da2e5..7e30931a 100644
--- a/web/src/components/Navigation.jsx
+++ b/web/src/components/Navigation.jsx
@@ -135,7 +135,7 @@ const NavList = (props) => {
{showNotificationContextNotSupportedBox && }
{showNotificationIOSInstallRequired && }
{alertVisible && }
- {!showSubscriptionsList && (session.exists() || !config.require_login) && (
+ {!showSubscriptionsList && (
navigate(routes.app)} selected={location.pathname === config.app_root}>
@@ -164,36 +164,30 @@ const NavList = (props) => {
)}
- {session.exists() || !config.require_login && (
navigate(routes.settings)} selected={location.pathname === routes.settings}>
- )}
openUrl("/docs")}>
- {session.exists() || !config.require_login && (
props.onPublishMessageClick()}>
- )}
- {session.exists() || !config.require_login && (
setSubscribeDialogOpen(true)}>
- )}
{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
diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx
index 1995750e..449b238b 100644
--- a/web/src/components/Notifications.jsx
+++ b/web/src/components/Notifications.jsx
@@ -46,7 +46,6 @@ import priority5 from "../img/priority-5.svg";
import logoOutline from "../img/ntfy-outline.svg";
import AttachmentIcon from "./AttachmentIcon";
import { useAutoSubscribe } from "./hooks";
-import session from "../app/Session";
const priorityFiles = {
1: priority1,
@@ -645,16 +644,12 @@ const NoSubscriptions = () => {
- {!session.exists() && !config.require_login && t("notifications_no_subscriptions_title")}
- {!session.exists() && config.require_login && t("notifications_no_subscriptions_login_title")}
+ {t("notifications_no_subscriptions_title")}
- {!session.exists() && !config.require_login && t("notifications_no_subscriptions_description", {
+ {t("notifications_no_subscriptions_description", {
linktext: t("nav_button_subscribe"),
})}
- {!session.exists() && config.require_login && t("notifications_no_subscriptions_login_description", {
- linktext: t("action_bar_sign_in"),
- })}
diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx
index dcb90bf9..8621a263 100644
--- a/web/src/components/Preferences.jsx
+++ b/web/src/components/Preferences.jsx
@@ -65,22 +65,16 @@ const maybeUpdateAccountSettings = async (payload) => {
}
};
-const Preferences = () => {
- if (!session.exists() or !config.requireLogin) {
- window.location.href = routes.app;
- return <>>;
- }
- return (
-
-
-
-
-
-
-
-
- );
-};
+const Preferences = () => (
+
+
+
+
+
+
+
+
+);
const Notifications = () => {
const { t } = useTranslation();