{"id":15933661,"url":"https://github.com/geopjr/kremmidi","last_synced_at":"2025-03-16T13:42:49.109Z","repository":{"id":103304033,"uuid":"546857065","full_name":"GeopJr/kremmidi","owner":"GeopJr","description":"[MIRROR] 🧅 Experimental gettor backend with multiple frontends.","archived":false,"fork":false,"pushed_at":"2022-12-11T00:38:08.000Z","size":72,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-29T07:24:26.032Z","etag":null,"topics":["anti-censorship","gettor"],"latest_commit_sha":null,"homepage":"https://gitlab.torproject.org/GeopJr/kremmidi/","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GeopJr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"GeopJr","custom":["https://www.paypal.me/GeopJr","https://geopjr.dev/donate"]}},"created_at":"2022-10-06T19:04:44.000Z","updated_at":"2022-10-07T10:02:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"6390c3a0-3fca-43e9-b45c-e5c5ae1bfa72","html_url":"https://github.com/GeopJr/kremmidi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeopJr%2Fkremmidi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeopJr%2Fkremmidi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeopJr%2Fkremmidi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeopJr%2Fkremmidi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GeopJr","download_url":"https://codeload.github.com/GeopJr/kremmidi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243878437,"owners_count":20362432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["anti-censorship","gettor"],"created_at":"2024-10-07T02:41:29.359Z","updated_at":"2025-03-16T13:42:49.082Z","avatar_url":"https://github.com/GeopJr.png","language":"Go","funding_links":["https://github.com/sponsors/GeopJr","https://www.paypal.me/GeopJr","https://geopjr.dev/donate"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🧅 Kremmidi 🧅\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eExperimental GetTor backend with multiple frontends.\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n  \u003cbr /\u003e\n    \u003ca href=\"./CODE_OF_CONDUCT.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Contributor%20Covenant-v2.1-262329.svg?style=for-the-badge\u0026labelColor=7f77bc\" alt=\"COC Contributor Covenant v2.1\" /\u003e\u003c/a\u003e\n    \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/LICENSE-BSD--2--Clause-262329.svg?style=for-the-badge\u0026labelColor=7f77bc\" alt=\"BSD-2-Clause\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\n```mermaid\nflowchart TB\n    Kremmidi --\u003e |Part \u0026 Binary\\nmetadata| MongoDB\n    Kremmidi --\u003e |GET| Mirrors[TorProject, Calyx, EFF]\n    Mirrors --\u003e |Binaries| Kremmidi\n    Kremmidi --\u003e |Save \u0026 Split| FileSystem\n    FileSystem --\u003e |Path| Kremmidi\n    FE --\u003e |Parts| User\n    FE --\u003e |Find| MongoDB\n    FE --\u003e |Read| FileSystem\n    FileSystem --\u003e |Parts| FE\n    MongoDB --\u003e |Part \u0026 Binary\\nmetadata| FE\n    User --\u003e |Parts| onion-rings\n    onion-rings --\u003e |Binary| User\n    subgraph Backend\n        Kremmidi\n        Mirrors\n        FileSystem\n    end\n    subgraph Database\n        MongoDB\n    end\n    subgraph Frontend\n        FE[Discord, Slack, Matrix...]\n    end\n```\n\n\u003c/p\u003e\n\n# What is this?\n\nOne of [GetTor](https://gettor.torproject.org/)'s main roadblocks is the upload limits of today's platforms - it's very rare for platforms to allow uploading files that are \u003e=10 MB in size. Kremmidi aims to solve that through a 2-step workaround.\n\n**Kremmidi** is responsible for **downloading** the binaries (both desktop and Android) from multiple mirrors (TorProject, Calyx, EFF), **splitting** them into parts of 5MB each (configurable) and **inserting** their paths (and other relative metadata) to the database.\n\nThen **frontends** consume the database and send all parts to the user - one at a time - \"bypassing\" their upload limits.\n\nAfter the user downloads all the parts, they have to use **onion-rings** to compile them back into one.\n\n**onion-rings** is a webpage that the user receives, downloads and runs in their browser where they **drag-n-drop** (or \"open\") all the parts downloaded previously. **onion-rings** then puts them in order, **\"compiles\"** them back into a single/complete binary and prompts the user to download it.\n\n# Building\n\nDependencies: `go`\n\n```\n$ make\n```\n\n# Docker\n\n```bash\n$ docker compose -f docker-compose.yml up -d\n```\n\n# Frontends\n\nYou can find some example frontends with more info at [`./examples`](./examples/).\n\n# Example\n\n```bash\nkremmidi -h\nNAME:\n   kremmidi - Experimental GetTor backend with multiple frontends.\n\nUSAGE:\n   kremmidi [global options] [command]\n\nVERSION:\n   v0.2.1\n\nCOMMANDS:\n   help, h  Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --database value, -d value, --db value               Database url.\n   --drop-db                                            Whether to drop all collections on start. (default: false)\n   --help, -h                                           show help (default: false)\n   --limit value, -l value                              Amount of *MB* per part. (default: 5)\n   --locales value                                      Locales to download seperated by a comma or 'ALL'. (default: en-us)\n   --mirror value, -m value                             Use a mirror. Available: TOR_PROJECT, EFF, CALYX (default: TOR_PROJECT)\n   --no-android                                         Disable grabbing Android builds. (default: false)\n   --no-desktop                                         Disable grabbing Desktop builds. (default: false)\n   --no-split                                           Disable splitting binaries into parts. (default: false)\n   --output value, -o value, --out value, --dest value  Binary destination. (default: ./data)\n   --overwrite                                          Whether to overwrite builds if they already exist. (default: false)\n   --version, -v                                        print the version (default: false)\n```\n\n```bash\n$ kremmidi -o data -m eff --db=mongodb://user:pass@host:27017\n```\n\n```bash\n$ KREMMIDI_DB=mongodb://user:pass@host:27017 kremmidi  --no-desktop\n\n2022/10/02 11:36:45 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-aarch64-multi.apk\n2022/10/02 11:37:42 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-aarch64-multi.apk\n2022/10/02 11:37:42 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-aarch64-multi.apk.asc\n2022/10/02 11:37:43 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-aarch64-multi.apk.asc\n2022/10/02 11:37:43 Saving to database...\n2022/10/02 11:37:43 Finished saving to database.\n2022/10/02 11:37:43 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-armv7-multi.apk\n2022/10/02 11:38:36 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-armv7-multi.apk\n2022/10/02 11:38:36 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-armv7-multi.apk.asc\n2022/10/02 11:38:36 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-armv7-multi.apk.asc\n2022/10/02 11:38:36 Saving to database...\n2022/10/02 11:38:36 Finished saving to database.\n2022/10/02 11:38:36 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86_64-multi.apk\n2022/10/02 11:39:37 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86_64-multi.apk\n2022/10/02 11:39:37 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86_64-multi.apk.asc\n2022/10/02 11:39:37 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86_64-multi.apk.asc\n2022/10/02 11:39:37 Saving to database...\n2022/10/02 11:39:37 Finished saving to database.\n2022/10/02 11:39:37 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86-multi.apk\n2022/10/02 11:40:38 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86-multi.apk\n2022/10/02 11:40:38 Started downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86-multi.apk.asc\n2022/10/02 11:40:38 Finished downloading https://dist.torproject.org/torbrowser/11.5.3/tor-browser-11.5.3-android-x86-multi.apk.asc\n2022/10/02 11:40:38 Saving to database...\n2022/10/02 11:40:38 Finished saving to database.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeopjr%2Fkremmidi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeopjr%2Fkremmidi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeopjr%2Fkremmidi/lists"}