{"id":48101148,"url":"https://github.com/distributed-system-analysis/file-relay","last_synced_at":"2026-04-04T15:43:23.500Z","repository":{"id":161730403,"uuid":"636280669","full_name":"distributed-system-analysis/file-relay","owner":"distributed-system-analysis","description":"Simple HTTP-based ad-hoc file relay utility with a RESTful interface","archived":false,"fork":false,"pushed_at":"2025-10-07T18:30:10.000Z","size":52,"stargazers_count":1,"open_issues_count":5,"forks_count":1,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-10-07T20:35:50.999Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/distributed-system-analysis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-04T13:51:37.000Z","updated_at":"2024-06-25T17:50:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"ca481877-8b10-425b-9ae0-2aea61b8687f","html_url":"https://github.com/distributed-system-analysis/file-relay","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/distributed-system-analysis/file-relay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distributed-system-analysis%2Ffile-relay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distributed-system-analysis%2Ffile-relay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distributed-system-analysis%2Ffile-relay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distributed-system-analysis%2Ffile-relay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/distributed-system-analysis","download_url":"https://codeload.github.com/distributed-system-analysis/file-relay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distributed-system-analysis%2Ffile-relay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T15:43:23.428Z","updated_at":"2026-04-04T15:43:23.490Z","avatar_url":"https://github.com/distributed-system-analysis.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# file-relay\n\nSimple HTTP-based ad-hoc file relay utility with a RESTful interface\n\n[![Build status](https://github.com/distributed-system-analysis/file-relay/actions/workflows/ci.yml/badge.svg)](https://github.com/distributed-system-analysis/file-relay/actions/workflows/ci.yml)\n[![Unit test code coverage](https://badgen.net/codecov/c/github/distributed-system-analysis/file-relay)](https://codecov.io/gh/distributed-system-analysis/file-relay)\n\nThis repo provides a single-file Python script which uses the Bottle web server framework to stand up an ad-hoc\nweb server with a simple RESTful interface for transferring files between two clients.  This is of particular\nutility if the clients are behind separate firewalls and cannot directly connect to each other.\n\nThe emphasis is on simplicity, and the expectation is that the service this program provides is transient.  That\nis, when a user needs to transfer a file, they would start the program on a host which both clients can reach,\nperform the file transfer, and then shut down the service.\n\nThis service is not intended to be \"industrial strength\", it doesn't use or require credentials for access, and\nit's not highly optimized.  If you want those things, consider using a commercial S3 service.\n\nThat said, it _is_ intended to work on a public-facing network.  A modest level of security is provided by using\n\"unguessable\" values for the components of the URIs.  The first is the \"server ID\" which is provided to the command\ninvocation when the utility is started.  If this is a sufficiently long string of arbitrary characters, it should\nprovide all the same protections as a bearer token, meaning that only clients which know the ID will be able to\naccess the service.  Analogously, resources (i.e., files) on the service are referenced using the SHA 256 hash of\ntheir contents.  This prevents collisions between uploaded files, and it means that a file can only be accessed by\nsomeone who knows that it is there (and, doing so allows the utility to confirm the file integrity on upload, and\nclients can do the same on download, without having to provide additional headers on the requests or responses).\n\nThis utility currently offers five methods:\n\n- `PUT /\u003cserver_id\u003e/\u003cfile_id\u003e`: upload a file\n- `GET /\u003cserver_id\u003e/\u003cfile_id\u003e`: download a file\n- `DELETE /\u003cserver_id\u003e/\u003cfile_id\u003e`: remove an uploaded file\n- `GET /\u003cserver_id\u003e`: return server status\n- `DELETE /\u003cserver_id\u003e`: request server shutdown\n\nThere are a number of tweaks which should be considered:\n- Change the hash algorithm for resource names or make it configurable\n- Change the underlying web server from the reference one to Gunicorn or other\n- Make the web server able to accept SSL connections or place it behind a\nsuitably-configured proxy inside the container.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistributed-system-analysis%2Ffile-relay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdistributed-system-analysis%2Ffile-relay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistributed-system-analysis%2Ffile-relay/lists"}