1
0
Fork 1
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
mdPlusPlus 9f41cbda8a Hide more communities 1 year ago
languages@edb59907d5 Update language submodule 1 year ago
misc Update list_of_known_servers.txt 1 year ago
output Hide more communities 1 year ago
php Reflect cutoff period for user counts in tooltip 1 year ago
sites Clarify when Communities are hidden 1 year ago
systemd Restructure static site generation 1 year ago
.gitignore Ignore cache folder 1 year ago
.gitmodules Outsource language_flags.php into submodule 1 year ago
.phpenv Apply `--verbose` to `make dev` & propagate to SSG 1 year ago
CONTRIBUTING.md Docs, pruning & whitespace 1 year ago
Makefile Fix test-lan: in Makefile 1 year ago
README.md Docs, pruning & whitespace 1 year ago

README.md

Crawl lists of active Session Communities

What does this site do?

This script crawls known sources of published Session Communities, queries their servers for available information and displays this information as a static HTML page. The results of this can be viewed on https://sessioncommunities.online/.

What is Session?

Session is a private messaging app that protects your meta-data, encrypts your communications, and makes sure your messaging activities leave no digital trail behind. https://getsession.org/

Details

Which sources are crawled?

Currently this script crawls the following sites:

Additionally, a few other servers are hardcoded.

How does this work?

The update-listing.php script invokes the following two PHP scripts: fetch-servers.php to query available servers, and generate-html.php to generate the static HTML.

The querying logic consists of these steps:

  1. Fetching source HTML: query_known_sources()
  2. Extracting Session join URLs from the HTML: parse_join_links()
  3. Building server instances from join URLs: CommunityServer::from_join_urls()
  4. Adding known servers to list: CommunityServer::from_known_hosts()
  5. Merging servers based on URL: CommunityServer::dedupe_by_url()
  6. Making sure servers are online and querying rooms & pubkeys: CommunityServer::poll_reachable()
  7. Merging servers based on public keys: CommunityServer::dedupe_by_pubkey()

Static HTML is generated from the sites directory to the output directory, which additionally contains static assets. All contents of sites are invoked to produce a HTML page unless they are prefixed with a + sign.

Work around bad routing to Chinese servers

Depending on your location, it is possible for you to get really bad routing to SOGS servers behind the GFW. In this case, the initial connection is still successful, but you'll never receive any actual content and the retrieval attempt will simply time out. This happens randomly. To make sure this won't affect the results, we simply check whether the server is online (the initial connection being successful), and then retry a lot of times with a short timeout until we eventually get the content. The details can be seen in curl_get_contents().

Official repositories

If your favourite Session community is missing a language flag, you can issue a pull request here:

Contributing

See CONTRIBUTING.md.

Contact

If you want to contact me, you can add me on Session via my ONS: someguy.