From 62668dbedd8da5b1f1d0052248a0ed22bcae034a Mon Sep 17 00:00:00 2001 From: cblgh Date: Mon, 26 Apr 2021 14:38:00 +0200 Subject: [PATCH] update documentation, add screenshot --- README.md | 29 +++++++++++++++++++------ docs/README.md | 51 ++++++++++++++++++++++++++++++++++++-------- docs/screenshot.png | Bin 0 -> 43708 bytes 3 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 docs/screenshot.png diff --git a/README.md b/README.md index cea774e..39c0735 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,18 @@ It includes: * muxrpc handlers for tunneling connections * a fully embedded HTTP server & HTML frontend, for administering the room +![](./docs/screenshot.png) + ## Features * [x] Rooms v1 (`tunnel.connect`, `tunnel.endpoints`, etc.) -* [x] Simple allow-listing, administerd via the web dashboard -* [x] Sign-in with SSB -* [ ] Alias management +* [x] User management (allow- & denylisting + moderator & administrator roles), all administered via the web dashboard +* [x] Multiple [privacy modes](https://ssb-ngi-pointer.github.io/rooms2/#privacy-modes) +* [x] [Sign-in with SSB](https://ssb-ngi-pointer.github.io/ssb-http-auth-spec/) +* [x] Alias management + +## Getting started +For an architecture and instructions on setting up a webserver to use with `go-ssb-room`, [read the documentation](./docs). ## Development @@ -26,22 +32,29 @@ go build ./server -h Usage of ./server: + -aliases-as-subdomains + needs to be disabled if a wildcard certificate for the room is not available. (default true) -dbg string listen addr for metrics and pprof HTTP server (default "localhost:6078") + -https-domain string + which domain to use for TLS and AllowedHosts checks -lishttp string address to listen on for HTTP requests (default ":3000") -lismux string address to listen on for secret-handshake+muxrpc (default ":8008") - -nounixsock - disable the UNIX socket RPC interface -logs string where to write debug output to (default is just stderr) + -mode value + the privacy mode (values: open, community, restricted) determining room access controls + -nounixsock + disable the UNIX socket RPC interface -repo string - where to put the log and indexes (default "/home/cryptix/.ssb-go-room") + where to put the log and indexes (default "~/.ssb-go-room") -shscap string secret-handshake app-key (or capability) (default "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=") -version print version number and build date + ``` If you want to view the development server in your browser: @@ -108,7 +121,7 @@ cd cmd/insert-user go build # optional step: run a script to generate a valid ssb id @.ed25519, useful for trying things out quickly ./generate-fake-id.sh -./insert-user -name -key <@pubkey.ed25519> +./insert-user -login -key <@pubkey.ed25519> ``` Then repeat your password twice and you are all set for development. @@ -132,6 +145,8 @@ The folder `web/handlers` contains the HTTP handlers for the dashboard. Each sub ## Authors * [cryptix](https://github.com/cryptix) (`@p13zSAiOpguI9nsawkGijsnMfWmFd5rlUNpzekEE+vI=.ed25519`) +* [staltz](https://github.com/staltz) +* [cblgh](https://github.com/cblgh) ## License diff --git a/docs/README.md b/docs/README.md index 627bc02..859ea0d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,18 +1,40 @@ +# Getting Started +There are two paths to starting your own room: creating a build from source, or downloading one +of the premade [releases](https://github.com/ssb-ngi-pointer/go-ssb-room/releases). + +## Creating a build +* [Download Go](https://golang.org/doc/install) & [set up your Go environment](https://golang.org/doc/install#install). You will need at least Go v1.16. +* Download the repository `git clone git@github.com:ssb-ngi-pointer/go-ssb-room.git && cd go-ssb-room` +* [Read the development instructions](../README.md) +* You should now have a working go-ssb-room binary! Read the HTTP Hosting section below, for + more instructions on the last mile. + # Architecture ## Invite flow -This implementation of Rooms 2.0 is compliant with the [Rooms 2.0 specification](https://github.com/ssb-ngi-pointer/rooms2), but we add a few additional features and pages in order to improve user experience when their SSB app does not support [SSB URIs](https://github.com/ssb-ngi-pointer/ssb-uri-spec). +This implementation of Rooms 2.0 is compliant with the [Rooms 2.0 +specification](https://github.com/ssb-ngi-pointer/rooms2), but we add a few additional features +and pages in order to improve user experience when their SSB app does not support [SSB +URIs](https://github.com/ssb-ngi-pointer/ssb-uri-spec). A summary can be seen in the following chart: ![Chart](./invites-chart.png) -When the browser and operating system detects no support for opening SSB URIs, we redirect to a fallback page which presents the user with two broad options: (1) install an SSB app that supports SSB URIs, (2) link to another page where the user can manually input the user's SSB ID in a form. +When the browser and operating system detects no support for opening SSB URIs, we redirect to a +fallback page which presents the user with two broad options: (1) install an SSB app that +supports SSB URIs, (2) link to another page where the user can manually input the user's SSB ID +in a form. ## Sign-in flow -This implementation is compliant with [SSB HTTP Authentication](https://github.com/ssb-ngi-pointer/ssb-http-auth-spec), but we add a few additional features and pages in order to improve user experience. For instance, besides conventional SSB HTTP Auth, we also render a QR code to sign-in with a remote SSB app (an SSB identity not on the device that has the browser open). We also support sign-in with username/password, what we call "fallback authentication". +This implementation is compliant with [SSB HTTP +Authentication](https://github.com/ssb-ngi-pointer/ssb-http-auth-spec), but we add a few +additional features and pages in order to improve user experience. For instance, besides +conventional SSB HTTP Auth, we also render a QR code to sign-in with a remote SSB app (an SSB +identity not on the device that has the browser open). We also support sign-in with +username/password, what we call "fallback authentication". A summary can be seen in the following chart: @@ -20,17 +42,28 @@ A summary can be seen in the following chart: # HTTP Hosting -We currently assume a standard HTTPS server in front of go-ssb-room to facilitate TLS termination and certificate management. This should be possible with most modern HTTP servers since it's a pretty standard practice, known as [reverse proxying](https://en.wikipedia.org/wiki/Reverse_proxy). +We currently assume a standard HTTPS server in front of go-ssb-room to facilitate TLS +termination and certificate management. This should be possible with most modern HTTP servers +since it's a pretty standard practice, known as [reverse +proxying](https://en.wikipedia.org/wiki/Reverse_proxy). Two bits of rationale: -1) People usually want to have more than one site on their server. Put differently, we could have [LetsEncrypt](https://letsencrypt.org/) inside the go-ssb-room server but it would have to listen on port :443—blocking the use of other domains on the same IP. -2) Listening on :443 can be pretty annoying (you might need root privileges or similar capabilities). +1) People usually want to have more than one site on their server. Put differently, we could +have [LetsEncrypt](https://letsencrypt.org/) inside the go-ssb-room server but it would have to +listen on port :443—blocking the use of other domains on the same IP. 2) Listening on :443 can +be pretty annoying (you might need root privileges or similar capabilities). -go-ssb-room needs three headers to function properly, which need to be forwarded by the webserver. +go-ssb-room needs three headers to function properly, which need to be forwarded by the +webserver. * `X-Forwarded-Host` as which domain name the room is running (enforce strict TLS checking) * `X-Forwarded-Proto` to ensure that TLS is used (and redirect if necessary) -* `X-Forwarded-For` the remote TCP/IP address of the client accessing the room (used for rate limiting) +* `X-Forwarded-For` the remote TCP/IP address of the client accessing the room (used for rate + limiting) -[nginx-example.conf](./nginx-example.conf) contains an [nginx](https://nginx.org) config that we use for [hermies.club](https://hermies.club). To get a wildcard TLS certificate you can follow the steps in [this article](https://medium.com/@alitou/getting-a-wildcard-ssl-certificate-using-certbot-and-deploy-on-nginx-15b8ffa34157), which uses the [certbot](https://certbot.eff.org/) utility. +[nginx-example.conf](./nginx-example.conf) contains an [nginx](https://nginx.org) config that +we use for [hermies.club](https://hermies.club). To get a wildcard TLS certificate you can +follow the steps in [this +article](https://medium.com/@alitou/getting-a-wildcard-ssl-certificate-using-certbot-and-deploy-on-nginx-15b8ffa34157), +which uses the [certbot](https://certbot.eff.org/) utility. diff --git a/docs/screenshot.png b/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8038931bb9f5e337eba378e40b02258934c08d GIT binary patch literal 43708 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 literal 0 HcmV?d00001