diff --git a/docs/publish.md b/docs/publish.md
index 491327d..71fc13b 100644
--- a/docs/publish.md
+++ b/docs/publish.md
@@ -2678,6 +2678,27 @@ Here's a simple example:
]));
```
+#### Auth Query Param
+In some instances, you may want to send auth credentials in the URL (e.g., a GET webhook or a JSON POST request). You
+can use the `auth` query parameter. Set the value to the base64 encoding of the value of the `Authorization` header
+and strip any trailing `=`. **Be sure to only send auth credentials over an HTTPS connection**
+
+Here is an example:
+```
+ Step 1. base64(user:pass) -> base64(testuser:fakepassword) -> dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk
+ Step 2. Authorization header -> Basic base64(testuser:fakepassword) -> Basic dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk
+ Step 3. base64(Authorization header) -> base64(Basic dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk) -> QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw==
+ Step 4. remove trailing `=` (if any) -> QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw== -> QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw
+ Step 5. add query param to URL -> https://ntfy.sh/topic -> https://ntfy.sh/topic?auth=QmFzaWMgZEdWemRIVnpaWEk2Wm1GclpYQmhjM04zYjNKaw
+```
+
+!!! note
+ Do NOT remove trailing `=` after step 2
+
+The following command will generate the appropriate value for you on *nix systems:
+
+```echo -n "Basic `echo -n 'testuser:fakepassword' | base64`" | base64 | tr -d '='```
+
### Message caching
!!! info
If `Cache: no` is used, messages will only be delivered to connected subscribers, and won't be re-delivered if a
diff --git a/docs/releases.md b/docs/releases.md
index a4fb376..c03d63f 100644
--- a/docs/releases.md
+++ b/docs/releases.md
@@ -4,10 +4,15 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
## ntfy server v1.29.0 (UNRELEASED)
+**Features:**
+
+* Allow IP CIDRs in `visitor-request-limit-exempt-hosts` ([#423](https://github.com/binwiederhier/ntfy/issues/423), thanks to [@karmanyaahm](https://github.com/karmanyaahm))
+
**Bug fixes + maintenance:**
* Subscriptions can now have a display name ([#370](https://github.com/binwiederhier/ntfy/issues/370), thanks to [@tfheen](https://github.com/tfheen) for reporting)
* Bump Go version to Go 18.x ([#422](https://github.com/binwiederhier/ntfy/issues/422))
+* Web: Strip trailing slash when subscribing ([#428](https://github.com/binwiederhier/ntfy/issues/428), thanks to [@raining1123](https://github.com/raining1123) for reporting, and [@wunter8](https://github.com/wunter8) for fixing)
* Allow empty passwords in `client.yml` ([#374](https://github.com/binwiederhier/ntfy/issues/374), thanks to [@cyqsimon](https://github.com/cyqsimon) for reporting, and [@wunter8](https://github.com/wunter8) for fixing)
**Documentation:**
diff --git a/web/src/components/SubscribeDialog.js b/web/src/components/SubscribeDialog.js
index 9ab5a08..62cfeb2 100644
--- a/web/src/components/SubscribeDialog.js
+++ b/web/src/components/SubscribeDialog.js
@@ -90,6 +90,13 @@ const SubscribePage = (props) => {
return validTopic(topic) && !isExistingTopicUrl;
}
})();
+ const updateBaseUrl = (ev, newVal) => {
+ if (validUrl(newVal)) {
+ props.setBaseUrl(newVal.replace(/\/$/, '')); // strip trailing slash after https?://
+ } else {
+ props.setBaseUrl(newVal);
+ }
+ };
return (
<>
{t("subscribe_dialog_subscribe_title")}
@@ -128,7 +135,7 @@ const SubscribePage = (props) => {
options={existingBaseUrls}
sx={{ maxWidth: 400 }}
inputValue={props.baseUrl}
- onInputChange={(ev, newVal) => props.setBaseUrl(newVal)}
+ onInputChange={updateBaseUrl}
renderInput={ (params) =>