Nothing in ssb-server fetches blobs mentioned in replicated messages; that was happening via ssb-blobs sympathy, which is the same mechanism that let strangers fill the disk. This replaces it with explicit wants scoped to feeds we actually replicate. want() has no expiry and the want map is broadcast to every peer on connect, so a standing want fires whenever a long-offline peer returns. sbot keeps that map in memory, so this process ties its lifetime to the connection and re-arms the backfill on every restart. Verified: removing a referenced blob makes it report already_have=266 newly_wanted=1 and issue the want.
ssb-viewer
HTTP server for read-only views of SSB content. Serves content as web pages or as scripts for embedding in other web pages.
Install & Run
Before you install or upgrade ssb-viewer, make sure the plugin is disabled. Otherwise sbot will crash while you install, because it tries to execute half-compiled JS. If you're running the install inside the same docker container as sbot, this will kill your build and leave you in a broken state where sbot doesn't start anymore.
As a sbot plugin:
mkdir -p ~/.ssb/node_modules
cd ~/.ssb/node_modules
# for a new installation:
git clone ssb://%MeCTQrz9uszf9EZoTnKCeFeIedhnKWuB3JHW2l1g9NA=.sha256 ssb-viewer && cd ssb-viewer
# for an upgrade:
cd ssb-viewer && git pull
npm install
sbot plugins.enable ssb-viewer
# restart sbot
Or standalone:
git clone ssb://%MeCTQrz9uszf9EZoTnKCeFeIedhnKWuB3JHW2l1g9NA=.sha256 ssb-viewer && cd ssb-viewer
npm install
./bin.js
Usage
To view a thread as a web page, navigate to a url like http://localhost:8807/%MSGID.
To embed a thread into another web page, load it as follows:
<script src="http://localhost:8807/%MSGID.js"></script>
To add more than the base styles, you can also load http://localhost:8807/static/nicer.css.
Routes
/%msgid: web page showing a message thread/%msgid.js: script to embed a message thread/%msgid.json: message thread as JSON/&feedid: web page showing a complete feed/user-feed/&feedid: web page showing messages from followed users and channels of a feed/channel/#channel: web page showing messages in a specific channel
Query options
noroot: don't include the root message in the threadbase=...: base url for links that ssb-viewer can handlemsg_base=...: base url for links to messagesfeed_base=...: base url for links to feedsblob_base=...: base url for links to blobsimg_base=...: base url for embedded blobs (images)emoji_base=...: base url for emoji images
The *_base query options overwrite the defaults set in the config.
The base option is a fallback instead of specifying the URLs separately.
The base options are mostly useful for embedding, where the script is embedded
on a different origin than where ssb-viewer is running. However, you may not
need them, as the ssb-viewer embed script will detect the base where it is
included from.
Config
To change ssb-viewer's default options, edit your ~/.ssb/config, to have
properties like the following:
{
"viewer": {
"port": 8807,
"host": "::"
}
}
You can also pass these as command-line options to ./bin.js or sbot as,
e.g. --viewer.port 8807.
viewer.port: port for the server to listen on. default:8807viewer.host: host address for the server to listen on. default:::viewer.base: default base url for links that ssb-viewer can handleviewer.msg_base: base url for links to ssb messagesviewer.feed_base: base url for links to ssb feedsviewer.blob_base: base url for links to ssb blobsviewer.img_base: base url for embedded blobs (images)viewer.emoji_base: base url for emoji imagesviewer.require_opt_in: whether to serve content from feeds that have not published apublicWebHostingaboutmessage. default:trueviewer.disallowRobots: whether to direct search engines to not index the site. default:true
References
- Concept: ssb-porthole
- UI ideas: sdash, patchbay
- Server techniques: ssb-web-server, ssb-ws, git-ssb-web
License
Copyright (c) 2016-2020 Secure Scuttlebutt Consortium
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.