diff --git a/README.md b/README.md index f9da9ec93dd4f3da77de1463f19eb48aece5c764..8dd173c65ba2be799de9170eb11e62db179731d3 100644 --- a/README.md +++ b/README.md @@ -101,24 +101,6 @@ make build-simple To build releases, I use [GoReleaser](https://goreleaser.com/). If you have that installed, you can run `make build` or `make build-snapshot`. -## FAQ - -### Isn't this like ...? -Probably. I didn't do a whole lot of research before making this. - -### Can I use this in my app? -Yes. As long as you don't abuse it, it'll be available and free of charge. - -### What are the uptime guarantees? -Best effort. - -### Why is the web UI so ugly? -I don't particularly like JS or dealing with CSS. I'll make it pretty after it's functional. - -### Will you know what topics exist, can you spy on me? -If you don't trust me or your messages are sensitive, run your ntfy on your own server. That said, the logs do not -contain any topic names or other details about you. - ## TODO - add HTTPS diff --git a/examples/example_desktop_notifications.sh b/examples/example_desktop_notifications.sh new file mode 100644 index 0000000000000000000000000000000000000000..5329c1074946d0960ad5cbd66d32e36e11c54882 --- /dev/null +++ b/examples/example_desktop_notifications.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# This is an example shell script showing how to consume a ntfy.sh topic using +# a simple script. The notify-send command sends any arriving message as a desktop notification. + +while read msg; do + notify-send "$msg" +done < <(stdbuf -i0 -o0 curl -s ntfy.sh/mytopic/raw) diff --git a/server/index.html b/server/index.html index d5073f00dcb58a740c2f6d18b819d68185304ea0..a0ecb51e5096ccf18b89c40e8a4c338ac3414bdf 100644 --- a/server/index.html +++ b/server/index.html @@ -25,14 +25,14 @@ <meta property="og:site_name" content="ntfy.sh" /> <meta property="og:title" content="ntfy.sh | simple HTTP-based pub-sub" /> <meta property="og:description" content="ntfy is a simple HTTP-based pub-sub notification service. It allows you to send desktop notifications via scripts from any computer, entirely without signup or cost. Made with ⤠by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy." /> - <meta property="og:image" content="/static/img/ntfy.png" /> + <meta property="og:image" content="/static/img/favicon.png" /> <meta property="og:url" content="https://ntfy.sh" /> </head> <body> <div id="main"> <h1>ntfy.sh - simple HTTP-based pub-sub</h1> <p> - <b>ntfy</b> (pronounce: <i>notify</i>) is a simple HTTP-based pub-sub notification service and tool. + <b>ntfy</b> (pronounce: <i>notify</i>) is a simple HTTP-based <a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern">pub-sub</a> notification service. It allows you to send <b>desktop notifications via scripts from any computer</b>, entirely <b>without signup or cost</b>. It's also <a href="https://github.com/binwiederhier/ntfy">open source</a> if you want to run your own. </p> @@ -55,20 +55,38 @@ </p> <form id="subscribeForm"> <p> - <label for="topicField">Topic ID:</label> + <label for="topicField">Subscribe to topic:</label> <input type="text" id="topicField" placeholder="Letters, numbers, _ and -" pattern="[-_A-Za-z]{1,64}" autofocus /> <input type="submit" id="subscribeButton" value="Subscribe" /> </p> </form> - <p id="topicsHeader">Subscribed topics:</p> + <p id="topicsHeader">Topics:</p> <ul id="topicsList"></ul> - <audio id="notifySound" src="static/sound/mixkit-long-pop-2358.wav"></audio> + <audio id="notifySound" src="static/sound/mixkit-message-pop-alert-2354.mp3"></audio> <h3>Subscribe via your app, or via the CLI</h3> + <p> + Here are some examples using <tt>curl</tt>: + </p> <code> - curl -s ntfy.sh/mytopic/raw # one message per line (\n are replaced with a space)<br/> - curl -s ntfy.sh/mytopic/json # one JSON message per line<br/> - curl -s ntfy.sh/mytopic/sse # server-sent events (SSE) stream + # one message per line (\n are replaced with a space)<br/> + curl -s ntfy.sh/mytopic/raw<br/><br/> + + # one JSON message per line<br/> + curl -s ntfy.sh/mytopic/json<br/><br/> + + # server-sent events (SSE) stream, use with EventSource<br/> + curl -s ntfy.sh/mytopic/sse + </code> + <p> + Using <a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource">EventSource</a>, you can consume + notifications like this (see <a href="https://github.com/binwiederhier/ntfy/tree/main/examples">full example</a>): + </p> + <code> + const eventSource = new EventSource(`https://ntfy.sh/mytopic/sse`);<br/> + eventSource.onmessage = (e) => {<br/> + // Do something with e.data<br/> + }; </code> <h2>Publishing messages</h2> @@ -78,10 +96,44 @@ <code> curl -d "long process is done" ntfy.sh/mytopic </code> + <p> + Here's an example in JS with <tt>fetch()</tt> (see <a href="https://github.com/binwiederhier/ntfy/tree/main/examples">full example</a>): + </p> + <code> + fetch(`https://ntfy.sh/mytopic`, {<br/> + method: 'POST', // PUT works too<br/> + body: `Hello from the other side.`<br/> + }) + </code> <p> Messages published to a non-existing topic or a topic without subscribers will not be delivered later. There is (currently) no buffering of any kind. If you're not listening, the message won't be delivered. </p> + + <h2>FAQ</h2> + <p> + <b>Isn't this like ...?</b><br/> + Who knows. I didn't do a lot of research before making this. It was fun making it. + </p> + + <p> + <b>Can I use this in my app? Will it stay free?</b><br/> + Yes. As long as you don't abuse it, it'll be available and free of charge. I do not plan on monetizing + the service. + </p> + + <p> + <b>What are the uptime guarantees?</b><br/> + Best effort. + </p> + + <p> + <b>Will you know what topics exist, can you spy on me?</b><br/> + If you don't trust me or your messages are sensitive, run your own server. It's <a href="https://github.com/binwiederhier/ntfy">open source</a>. + That said, the logs do not contain any topic names or other details about you. Check the code if you don't believe me. + </p> + + <center id="ironicCenterTagDontFreakOut"><i>Made with â¤ï¸ by <a href="https://heckel.io">Philipp C. Heckel</a></i></center> </div> <script src="static/js/app.js"></script> </body> diff --git a/server/static/css/app.css b/server/static/css/app.css index 1c623901ffc8d2cf9d81ba241ca9f534375093f8..ba6c8c21ed41f829fc36bdbb5e0aa6262bd1a994 100644 --- a/server/static/css/app.css +++ b/server/static/css/app.css @@ -20,6 +20,7 @@ h1 { font-size: 2.5em; } + h2 { margin-top: 20px; margin-bottom: 5px; @@ -33,8 +34,10 @@ h3 { } p { - margin-top: 0; + margin-top: 10px; + margin-bottom: 20px; font-size: 1.1em; + line-height: 140%; } tt { @@ -49,6 +52,8 @@ code { font-family: monospace; padding: 20px; border-radius: 3px; + margin-top: 10px; + margin-bottom: 10px; } /* Lato font (OFL), https://fonts.google.com/specimen/Lato#about, @@ -74,3 +79,7 @@ code { color: darkred; font-style: italic; } + +#ironicCenterTagDontFreakOut { + color: #666; +} diff --git a/server/static/img/ntfy.png b/server/static/img/ntfy.png deleted file mode 100644 index 93982c6f1098797152e5aeef37eafaf978dd9ab5..0000000000000000000000000000000000000000 Binary files a/server/static/img/ntfy.png and /dev/null differ diff --git a/server/static/js/app.js b/server/static/js/app.js index 3670b48507e8777c9d5bdc40bcca24b827f94466..33baa990c2fa4bcf25f6a555f364458bc501708b 100644 --- a/server/static/js/app.js +++ b/server/static/js/app.js @@ -59,8 +59,11 @@ const subscribeInternal = (topic, delaySec) => { }; eventSource.onmessage = (e) => { const event = JSON.parse(e.data); - new Notification(event.message); notifySound.play(); + new Notification(topic, { + body: event.message, + icon: '/static/img/favicon.png' + }); }; topics[topic] = eventSource; localStorage.setItem('topics', JSON.stringify(Object.keys(topics))); @@ -80,7 +83,7 @@ const unsubscribe = (topic) => { const test = (topic) => { fetch(`/${topic}`, { method: 'PUT', - body: `This is a test notification for topic ${topic}!` + body: `This is a test notification` }) }; diff --git a/server/static/sound/mixkit-long-pop-2358.wav b/server/static/sound/mixkit-long-pop-2358.wav deleted file mode 100644 index 4bed79ac13a34091d96abaad652b359c5046b27e..0000000000000000000000000000000000000000 Binary files a/server/static/sound/mixkit-long-pop-2358.wav and /dev/null differ diff --git a/server/static/sound/mixkit-message-pop-alert-2354.mp3 b/server/static/sound/mixkit-message-pop-alert-2354.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a1ad34acd5b5d21a9e557143b636b23668eb67a2 Binary files /dev/null and b/server/static/sound/mixkit-message-pop-alert-2354.mp3 differ