From 9e32fcfb3d5e352c2e2a1fa0ac2669521f13b9e5 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 29 May 2021 16:33:47 -0700 Subject: [PATCH 01/23] Add logic to automatically generate instance list --- .github/workflows/ci.yml | 38 +++++ instances.yaml | 286 ++++++++++++++++++++++++++++++++++++++ src/create-instance-md.py | 92 ++++++++++++ src/requirements.txt | 2 + 4 files changed, 418 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 instances.yaml create mode 100644 src/create-instance-md.py create mode 100644 src/requirements.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..075bf5ab --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,38 @@ +name: Create markdown list + +on: + pull_request: + branches: "*" + paths: + - 'instances.yaml' + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + + - name: Setup python + uses: actions/setup-python@v2 + with: + python-version: 3.9.5 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r src/requirements.txt + + - name: Create markdown instance list + run: | + python src/create-instance-md.py + + # Auto commit resulting md file + - name: "Auto commiting resulting markdown instance list" + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: Update Invidious-Instances.md + file_pattern: Invidious-Instances.md \ No newline at end of file diff --git a/instances.yaml b/instances.yaml new file mode 100644 index 00000000..6887305e --- /dev/null +++ b/instances.yaml @@ -0,0 +1,286 @@ +adding_instance: + prerequisites: + - Instances must have been updated in the last month. An instance that hasn't been updated in the last month is considered unmaintained and is removed from the list. + - Instances must have statistics (/api/v1/stats) enabled (statistics_enabled:true in the configuration file) + - Instances must be served via domain name. + - Instances must be served via domain name. + - Instances using any DDoS Protection / MITM are marked as such. + - Instances using any type of anti-bot protection are marked as such. + - "Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it." + - Instances running a modified source code must respect the AGPL by publishing their source code and stating their changes before they are be added to the list, and must publish any later modification in a timely manner. + directions: + - Fork the documentation repo. + - Open `instances.yaml` for editing." + - Append your instance to the bottom of the HTTPS (or onion) list. See the examples in the yaml file for more info. + - Make a pull request. + +instances: + https: + # Template instance + # - url: example.com + # country: + # flag: 🇫🇮 + # name: Finland + # status_url: status.example.com + # privacy_policy: privacy.example.com + # ddos_mitm_protection: Cloudflare + # owner: https://github.com/example + # modified: + # is_modified: False + # source_url: null + + + - url: https://invidious.snopyta.org + country: + flag: 🇫🇮 + name: Finland + status: + url: https://status.unixfox.eu/783898765 + display_content: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: https://snopyta.org/privacy_policy + ddos_mitm_protection: null + owner: https://github.com/Perflyst + modified: + is_modified: False + source_url: null + + - url: https://yewtu.be + country: + flag: 🇫🇷 + name: France + status: null + privacy_policy: null + ddos_mitm_protection: null + owner: https://github.com/unixfox + modified: + is_modified: False + source_url: null + + - url: https://invidious.kavin.rocks + country: + flag: 🇮🇳 + name: India + status: + url: https://status.kavin.rocks/786132664 + display_content: https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71 + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: Cloudflare + owner: https://github.com/FireMasterK + modified: + is_modified: False + source_url: null + + - url: https://invidious-us.kavin.rocks + country: + flag: 🇺🇸 + name: USA + status: + url: https://status.kavin.rocks/788216947 + display_content: https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: Cloudflare + owner: https://github.com/FireMasterK + modified: + is_modified: False + source_url: null + + - url: https://invidious.048596.xyz + country: + flag: 🇨🇦 + name: Canada + status: + url: https://status.048596.xyz/786792286 + display_content: https://img.shields.io/uptimerobot/status/m786792286-b5894e4e11c42b8332375076 + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/tenpura-shrimp + modified: + is_modified: False + source_url: null + + - url: https://vid.puffyan.us + country: + flag: 🇺🇸 + name: USA + status: + url: https://stats.uptimerobot.com/n7A08HGVl6/786947233 + display_content: https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3 + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/ItsSt0ne + modified: + is_modified: False + source_url: null + + - url: https://ytprivate.com + country: + flag: 🇺🇸 + name: USA + status: + url: https://status.ytprivate.com/786947505 + display_content: https://img.shields.io/uptimerobot/status/m786947505-2a50cf3262906bb28c6cf8fc + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: DDoS-Guard + owner: https://github.com/ytprivatecom + modified: + is_modified: True + source_url: https://github.com/ytprivatecom/invidious + + - url: https://invidious.namazso.eu + country: + flag: 🇩🇪 + name: Germany + status: + privacy_policy: https://namazso.eu/privacy.html + ddos_mitm_protection: + owner: https://github.com/namazso + modified: + is_modified: False + source_url: null + + - url: https://invidious.silkky.cloud + country: + flag: 🇫🇮 + name: Finland + status: + url: https://status.silkky.cloud/787784614 + display_content: https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793 + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/TheSilkky + modified: + is_modified: False + source_url: null + + - url: https://invidious.exonip.de + country: + flag: 🇩🇪 + name: Germany + status: + url: https://status.exonip.de/ + display_content: Uptime Robot status + display_content_is_image: False + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/Exonip + modified: + is_modified: False + source_url: null + + - url: https://notyoutube.org + country: + flag: 🇫🇮 + name: Finland + status: + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/Eggo-Plant + modified: + is_modified: False + source_url: null + + - url: https://inv.riverside.rocks + country: + flag: 🇺🇸 + name: USA + status: + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/RiversideRocks + modified: + is_modified: False + source_url: null + + - url: https://invidious.blamefran.net + country: + flag: 🇺🇸 + name: USA + status: + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/Aidan16 + modified: + is_modified: False + source_url: null + + onion: + # Template onion instance + # - url: http://example.onion + # country: + # flag: 🇺🇸 + # name: USA + # associated_clearnet_instance: example.com + # privacy_policy: privacy.example.com + # owner: https://github.com/example + # modified: + # is_modified: False + # source_url: null + + - url: http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion + country: + flag: 🇫🇮 + name: Finland + invidious.snopyta.org: invidious.snopyta.org + privacy_policy: + owner: https://github.com/Perflyst + modified: + is_modified: False + source_url: null + + - url: http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/ + country: + flag: 🇮🇳 + name: India + associated_clearnet_instance: https://invidious.kavin.rocks + privacy_policy: + owner: https://github.com/FireMasterK + modified: + is_modified: False + source_url: null + + - url: http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/ + country: + flag: 🇳🇱 + name: Netherlands + associated_clearnet_instance: + privacy_policy: + owner: https://github.com/tirz + modified: + is_modified: False + source_url: null + + - url: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/ + country: + flag: 🇺🇸 + name: USA + associated_clearnet_instance: https://vid.puffyan.us + privacy_policy: + owner: https://github.com/ItsSt0ne + modified: + is_modified: False + source_url: null + + - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ + country: + flag: 🇺🇸 + name: USA + associated_clearnet_instance: https://invidious-us.kavin.rocks/ + privacy_policy: + owner: https://github.com/FireMasterK + modified: + is_modified: False + source_url: null diff --git a/src/create-instance-md.py b/src/create-instance-md.py new file mode 100644 index 00000000..eef0a7f4 --- /dev/null +++ b/src/create-instance-md.py @@ -0,0 +1,92 @@ +"""Extremely quick and dirty module for creating a markdown file from the instances.yaml file""" +from urllib.parse import urlparse + +import yaml +from mdutils.mdutils import MdUtils + + +def create_table(table_data, instance_data): + rows = [] + for field, value in instance_data.items(): + if value is None: + rows.append("") + + # Use markdown links for Addresses + elif field in ["url", "associated_clearnet_instance"]: + url = urlparse(value).hostname + rows.append(f"[{url}]({value})") + + elif field == "status" and value is not None: + if value.get("display_content_is_image"): + rows.append(f"[![{value['display_content_image_fallback']}]({value['display_content']})]({value['url']})") + else: + rows.append(f"[{value['display_content']}]({value['url']})") + + elif field == "country" and value: + rows.append(f"{value['flag']} {value['name']}") + + elif field == "modified": + if value.get("is_modified"): + rows.append(f"[Yes]({value['source_url']})") + else: + rows.append("No") + + # We're going to use a markdown link here + elif field == "privacy_policy": + rows.append(f"[Here]({value})") + + # Handle author name + elif field == "owner": + # Assuming github url + author_name = value.split("/") + rows.append(f"[@{author_name[-1]}]({value})") + else: + rows.append(value) + + table_data.extend(rows) + + +with open("instances.yaml") as configuration_yaml: + data = yaml.safe_load(configuration_yaml) + +instance_list = data["instances"] + +# Initial information +md_instance_list = MdUtils(file_name='Invidious-Instances.md') +md_instance_list.new_header(level=1, title='Public Instances') +md_instance_list.new_paragraph("Uptime History: [uptime.invidious.io](https://uptime.invidious.io)") +md_instance_list.new_paragraph("Instances API: [api.invidious.io](api.invidious.io)") + + +# Clearnet instances +md_instance_list.new_header(level=1, title='Instances list') +table_data = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Modified"] +for instance_data in instance_list["https"]: + create_table(table_data, instance_data) + +md_instance_list.new_line() +md_instance_list.new_table(columns=7, rows=len(instance_list["https"]) + 1, text=table_data, text_align='center') + + +# Onion instances +md_instance_list.new_header(level=1, title='Tor onion instances list') +table_data = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Modified"] +for instance_data in instance_list["onion"]: + create_table(table_data, instance_data) + +md_instance_list.new_line() +md_instance_list.new_table(columns=6, rows=len(instance_list["onion"]) + 1, text=table_data, text_align='center') + + +# Instance adding directions and prerequisites +md_instance_list.new_header(level=1, title='Adding your instance') + +# Prerequisites +md_instance_list.new_header(level=2, title='Prerequisites') +md_instance_list.new_list(data["adding_instance"]["prerequisites"]) +md_instance_list.new_line() + +# Directions +md_instance_list.new_header(level=2, title='Directions') +md_instance_list.new_list(data["adding_instance"]["directions"], marked_with="1") +md_instance_list.create_md_file() diff --git a/src/requirements.txt b/src/requirements.txt new file mode 100644 index 00000000..9f30f687 --- /dev/null +++ b/src/requirements.txt @@ -0,0 +1,2 @@ +mdutils==1.3.0 +PyYAML==5.4.1 From 2c578b54f650c828ee3e1d8b90bfc533690d873d Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 19 Jun 2021 05:46:33 -0700 Subject: [PATCH 02/23] Run CI on push as well --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 075bf5ab..0a476dca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,11 @@ name: Create markdown list on: + push: + branches: "*" + paths: + - 'instances.yaml' + pull_request: branches: "*" paths: From ea4d0991b217ac99b17ccf2cd0aa2bab1d0e12fc Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 19 Jun 2021 05:52:58 -0700 Subject: [PATCH 03/23] Allow CI to be run manually --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a476dca..f1ef68f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,7 @@ name: Create markdown list on: + workflow_dispatch: push: branches: "*" paths: From 4fc42649f973422fdbe99257d8288dd9c175b935 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sun, 30 May 2021 06:18:00 -0700 Subject: [PATCH 04/23] Upstream changes --- instances.yaml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/instances.yaml b/instances.yaml index 6887305e..14c9de14 100644 --- a/instances.yaml +++ b/instances.yaml @@ -10,7 +10,7 @@ adding_instance: - Instances running a modified source code must respect the AGPL by publishing their source code and stating their changes before they are be added to the list, and must publish any later modification in a timely manner. directions: - Fork the documentation repo. - - Open `instances.yaml` for editing." + - Open `instances.yaml` for editing. - Append your instance to the bottom of the HTTPS (or onion) list. See the examples in the yaml file for more info. - Make a pull request. @@ -217,6 +217,18 @@ instances: is_modified: False source_url: null + - url: https://invidious.moomoo.me + country: + flag: 🇩🇪 + name: Germany + status: + privacy_policy: + ddos_mitm_protection: Cloudflare + owner: https://github.com/moom0o + modified: + is_modified: False + source_url: null + onion: # Template onion instance # - url: http://example.onion @@ -234,7 +246,7 @@ instances: country: flag: 🇫🇮 name: Finland - invidious.snopyta.org: invidious.snopyta.org + associated_clearnet_instance: https://invidious.snopyta.org privacy_policy: owner: https://github.com/Perflyst modified: From 78929a0b7affd4d1d4dd42f68ee676a869384e41 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sun, 30 May 2021 06:27:34 -0700 Subject: [PATCH 05/23] Remove duplicate prerequisites on inst. add secti. Update templates in instances.yaml --- instances.yaml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/instances.yaml b/instances.yaml index 14c9de14..e2283f59 100644 --- a/instances.yaml +++ b/instances.yaml @@ -3,7 +3,7 @@ adding_instance: - Instances must have been updated in the last month. An instance that hasn't been updated in the last month is considered unmaintained and is removed from the list. - Instances must have statistics (/api/v1/stats) enabled (statistics_enabled:true in the configuration file) - Instances must be served via domain name. - - Instances must be served via domain name. + - Instances must be served via HTTPS. - Instances using any DDoS Protection / MITM are marked as such. - Instances using any type of anti-bot protection are marked as such. - "Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it." @@ -17,13 +17,17 @@ adding_instance: instances: https: # Template instance - # - url: example.com + # - url: https://example.com # country: # flag: 🇫🇮 # name: Finland - # status_url: status.example.com - # privacy_policy: privacy.example.com - # ddos_mitm_protection: Cloudflare + # status: + # url: https://status.example.com + # display_content: https://status-image.example.com + # display_content_is_image: True + # display_content_image_fallback: uptime status + # privacy_policy: example.com/privacy + # ddos_mitm_protection: null # owner: https://github.com/example # modified: # is_modified: False @@ -235,8 +239,8 @@ instances: # country: # flag: 🇺🇸 # name: USA - # associated_clearnet_instance: example.com - # privacy_policy: privacy.example.com + # associated_clearnet_instance: https://example.com + # privacy_policy: https://privacy.example.com # owner: https://github.com/example # modified: # is_modified: False From 7ef1bf871759f1fb26fc33cafb7d8cee2e0f68f7 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 19 Jun 2021 05:44:50 -0700 Subject: [PATCH 06/23] Upstream changes --- instances.yaml | 56 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/instances.yaml b/instances.yaml index e2283f59..be111269 100644 --- a/instances.yaml +++ b/instances.yaml @@ -185,18 +185,6 @@ instances: is_modified: False source_url: null - - url: https://notyoutube.org - country: - flag: 🇫🇮 - name: Finland - status: - privacy_policy: - ddos_mitm_protection: - owner: https://github.com/Eggo-Plant - modified: - is_modified: False - source_url: null - - url: https://inv.riverside.rocks country: flag: 🇺🇸 @@ -233,6 +221,50 @@ instances: is_modified: False source_url: null + + - url: https://ytb.trom.tf + + country: + flag: 🇩🇪 + name: Germany + status: + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/TROMsite + modified: + is_modified: False + source_url: null + + + - url: https://yt.cyberhost.uk/ + country: + flag: 🇫🇮 + name: Finland + status: + url: https://stats.uptimerobot.com/JlM0qH8Ygn + display_content: https://img.shields.io/uptimerobot/status/m788432154-c8801112193f349268ea6104 + display_content_is_image: True + display_content_image_fallback: Uptime Robot status + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/cyberhost-uk + modified: + is_modified: False + source_url: null + + + - url: https://y.com.cm/ + country: + flag: 🇩🇪 + name: Germany + status: + privacy_policy: + ddos_mitm_protection: Cloudflare + owner: https://github.com/Showfom + modified: + is_modified: False + source_url: null + onion: # Template onion instance # - url: http://example.onion From f843c8c56279f13e986cf2270fd9c232d96fa6af Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 19 Jun 2021 05:48:34 -0700 Subject: [PATCH 07/23] Add new prerequisites for adding instance --- instances.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/instances.yaml b/instances.yaml index be111269..962ef82e 100644 --- a/instances.yaml +++ b/instances.yaml @@ -8,6 +8,7 @@ adding_instance: - Instances using any type of anti-bot protection are marked as such. - "Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it." - Instances running a modified source code must respect the AGPL by publishing their source code and stating their changes before they are be added to the list, and must publish any later modification in a timely manner. + - Instances should be up and functional at least 90% of the time. directions: - Fork the documentation repo. - Open `instances.yaml` for editing. From b3d8f1b8bcfbaaae4746b2663390f01c291c4682 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 19 Jun 2021 05:50:35 -0700 Subject: [PATCH 08/23] Upstream changes --- instances.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instances.yaml b/instances.yaml index 962ef82e..cb6f4c62 100644 --- a/instances.yaml +++ b/instances.yaml @@ -183,8 +183,8 @@ instances: ddos_mitm_protection: owner: https://github.com/Exonip modified: - is_modified: False - source_url: null + is_modified: True + source_url: https://github.com/exonip-de/invidious-source-modifications - url: https://inv.riverside.rocks country: From 62a0c73c284446e409fa9767e1add94a583e39f5 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sun, 27 Jun 2021 11:27:15 -0700 Subject: [PATCH 09/23] Overhaul md list create script and instance.yaml See https://github.com/iv-org/documentation/pull/76#issuecomment-864416290 --- instances.yaml | 226 +++++++++++--------------------------- src/create-instance-md.py | 210 +++++++++++++++++++++++------------ src/requirements.txt | 1 + 3 files changed, 204 insertions(+), 233 deletions(-) diff --git a/instances.yaml b/instances.yaml index cb6f4c62..ac613175 100644 --- a/instances.yaml +++ b/instances.yaml @@ -19,9 +19,7 @@ instances: https: # Template instance # - url: https://example.com - # country: - # flag: 🇫🇮 - # name: Finland + # country: FI # status: # url: https://status.example.com # display_content: https://status-image.example.com @@ -30,16 +28,13 @@ instances: # privacy_policy: example.com/privacy # ddos_mitm_protection: null # owner: https://github.com/example - # modified: - # is_modified: False - # source_url: null + # is_modified: false + # source: null - url: https://invidious.snopyta.org - country: - flag: 🇫🇮 - name: Finland - status: + country: FI + status: url: https://status.unixfox.eu/783898765 display_content: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d display_content_is_image: True @@ -47,26 +42,20 @@ instances: privacy_policy: https://snopyta.org/privacy_policy ddos_mitm_protection: null owner: https://github.com/Perflyst - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://yewtu.be - country: - flag: 🇫🇷 - name: France + country: FR status: null privacy_policy: null ddos_mitm_protection: null owner: https://github.com/unixfox - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://invidious.kavin.rocks - country: - flag: 🇮🇳 - name: India + country: IN status: url: https://status.kavin.rocks/786132664 display_content: https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71 @@ -75,14 +64,11 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://invidious-us.kavin.rocks - country: - flag: 🇺🇸 - name: USA + country: US status: url: https://status.kavin.rocks/788216947 display_content: https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a @@ -91,30 +77,11 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK - modified: - is_modified: False - source_url: null - - - url: https://invidious.048596.xyz - country: - flag: 🇨🇦 - name: Canada - status: - url: https://status.048596.xyz/786792286 - display_content: https://img.shields.io/uptimerobot/status/m786792286-b5894e4e11c42b8332375076 - display_content_is_image: True - display_content_image_fallback: Uptime Robot status - privacy_policy: - ddos_mitm_protection: - owner: https://github.com/tenpura-shrimp - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://vid.puffyan.us - country: - flag: 🇺🇸 - name: USA + country: US status: url: https://stats.uptimerobot.com/n7A08HGVl6/786947233 display_content: https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3 @@ -123,42 +90,20 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/ItsSt0ne - modified: - is_modified: False - source_url: null - - - url: https://ytprivate.com - country: - flag: 🇺🇸 - name: USA - status: - url: https://status.ytprivate.com/786947505 - display_content: https://img.shields.io/uptimerobot/status/m786947505-2a50cf3262906bb28c6cf8fc - display_content_is_image: True - display_content_image_fallback: Uptime Robot status - privacy_policy: - ddos_mitm_protection: DDoS-Guard - owner: https://github.com/ytprivatecom - modified: - is_modified: True - source_url: https://github.com/ytprivatecom/invidious + is_modified: false + source: null - url: https://invidious.namazso.eu - country: - flag: 🇩🇪 - name: Germany + country: DE status: privacy_policy: https://namazso.eu/privacy.html ddos_mitm_protection: owner: https://github.com/namazso - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://invidious.silkky.cloud - country: - flag: 🇫🇮 - name: Finland + country: FI status: url: https://status.silkky.cloud/787784614 display_content: https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793 @@ -167,14 +112,12 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/TheSilkky - modified: - is_modified: False - source_url: null + is_modified: false + source: null + - url: https://invidious.exonip.de - country: - flag: 🇩🇪 - name: Germany + country: DE status: url: https://status.exonip.de/ display_content: Uptime Robot status @@ -182,65 +125,48 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/Exonip - modified: - is_modified: True - source_url: https://github.com/exonip-de/invidious-source-modifications + is_modified: True + source: https://github.com/exonip-de/invidious-source-modifications - url: https://inv.riverside.rocks - country: - flag: 🇺🇸 - name: USA + country: US status: privacy_policy: ddos_mitm_protection: owner: https://github.com/RiversideRocks - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://invidious.blamefran.net - country: - flag: 🇺🇸 - name: USA + country: US status: privacy_policy: ddos_mitm_protection: owner: https://github.com/Aidan16 - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://invidious.moomoo.me - country: - flag: 🇩🇪 - name: Germany + country: DE status: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/moom0o - modified: - is_modified: False - source_url: null - + is_modified: false + source: null - url: https://ytb.trom.tf - - country: - flag: 🇩🇪 - name: Germany + country: DE status: privacy_policy: ddos_mitm_protection: owner: https://github.com/TROMsite - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://yt.cyberhost.uk/ - country: - flag: 🇫🇮 - name: Finland + country: FI status: url: https://stats.uptimerobot.com/JlM0qH8Ygn display_content: https://img.shields.io/uptimerobot/status/m788432154-c8801112193f349268ea6104 @@ -250,86 +176,66 @@ instances: ddos_mitm_protection: owner: https://github.com/cyberhost-uk modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: https://y.com.cm/ - country: - flag: 🇩🇪 - name: Germany + country: DE status: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/Showfom - modified: - is_modified: False - source_url: null + is_modified: false + source: null onion: # Template onion instance - # - url: http://example.onion - # country: - # flag: 🇺🇸 - # name: USA + # url: http://example.onion + # country: FI # associated_clearnet_instance: https://example.com # privacy_policy: https://privacy.example.com # owner: https://github.com/example # modified: - # is_modified: False - # source_url: null + # is_modified: false + # source: null - url: http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion - country: - flag: 🇫🇮 - name: Finland + country: FI associated_clearnet_instance: https://invidious.snopyta.org privacy_policy: owner: https://github.com/Perflyst - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/ - country: - flag: 🇮🇳 - name: India + country: IN associated_clearnet_instance: https://invidious.kavin.rocks privacy_policy: owner: https://github.com/FireMasterK - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/ - country: - flag: 🇳🇱 - name: Netherlands + country: NL associated_clearnet_instance: privacy_policy: owner: https://github.com/tirz - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/ - country: - flag: 🇺🇸 - name: USA + country: US associated_clearnet_instance: https://vid.puffyan.us privacy_policy: owner: https://github.com/ItsSt0ne - modified: - is_modified: False - source_url: null + is_modified: false + source: null - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ - country: - flag: 🇺🇸 - name: USA + country: US associated_clearnet_instance: https://invidious-us.kavin.rocks/ privacy_policy: owner: https://github.com/FireMasterK - modified: - is_modified: False - source_url: null + is_modified: false + source: null diff --git a/src/create-instance-md.py b/src/create-instance-md.py index eef0a7f4..1fa6b80c 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -1,92 +1,156 @@ """Extremely quick and dirty module for creating a markdown file from the instances.yaml file""" from urllib.parse import urlparse +import pycountry import yaml from mdutils.mdutils import MdUtils -def create_table(table_data, instance_data): - rows = [] - for field, value in instance_data.items(): - if value is None: - rows.append("") - - # Use markdown links for Addresses - elif field in ["url", "associated_clearnet_instance"]: - url = urlparse(value).hostname - rows.append(f"[{url}]({value})") - - elif field == "status" and value is not None: - if value.get("display_content_is_image"): - rows.append(f"[![{value['display_content_image_fallback']}]({value['display_content']})]({value['url']})") - else: - rows.append(f"[{value['display_content']}]({value['url']})") - - elif field == "country" and value: - rows.append(f"{value['flag']} {value['name']}") - - elif field == "modified": - if value.get("is_modified"): - rows.append(f"[Yes]({value['source_url']})") - else: - rows.append("No") - - # We're going to use a markdown link here - elif field == "privacy_policy": - rows.append(f"[Here]({value})") - - # Handle author name - elif field == "owner": - # Assuming github url - author_name = value.split("/") - rows.append(f"[@{author_name[-1]}]({value})") - else: - rows.append(value) - - table_data.extend(rows) - +class ColumnBuilder: + def route(self, name): + router = { + "url": self._create_url_column, + "associated_clearnet_instance": self._create_url_column, + "country": self._create_country_column, + "status": self._create_status_column, + "is_modified": self._create_modified_column, + "privacy_policy": self._create_privacy_policy_column, + "ddos_mitm_protection": self.ddos_protection, + "owner": self._create_owner_column + } -with open("instances.yaml") as configuration_yaml: - data = yaml.safe_load(configuration_yaml) + return router[name] -instance_list = data["instances"] + @staticmethod + def _create_url_column(url): + if not url: + return "" -# Initial information -md_instance_list = MdUtils(file_name='Invidious-Instances.md') -md_instance_list.new_header(level=1, title='Public Instances') -md_instance_list.new_paragraph("Uptime History: [uptime.invidious.io](https://uptime.invidious.io)") -md_instance_list.new_paragraph("Instances API: [api.invidious.io](api.invidious.io)") + hostname = urlparse(url).hostname + return f"[{hostname}]({url})" + @staticmethod + def _create_country_column(country_code): + country_name = pycountry.countries.get(alpha_2=country_code).name + # https://stackoverflow.com/a/42235254 + flag = (lambda s, e: chr(ord(s.upper()) - 0x41 + 0x1F1E6) + + chr(ord(e.upper()) - 0x41 + 0x1F1E6) + )(*list(country_code)) -# Clearnet instances -md_instance_list.new_header(level=1, title='Instances list') -table_data = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Modified"] -for instance_data in instance_list["https"]: - create_table(table_data, instance_data) + return f"{flag} {country_name}" -md_instance_list.new_line() -md_instance_list.new_table(columns=7, rows=len(instance_list["https"]) + 1, text=table_data, text_align='center') + @staticmethod + def _create_status_column(status_dict): + if not status_dict: + return "" + status_url = status_dict["url"] + display_content = status_dict["display_content"] -# Onion instances -md_instance_list.new_header(level=1, title='Tor onion instances list') -table_data = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Modified"] -for instance_data in instance_list["onion"]: - create_table(table_data, instance_data) - -md_instance_list.new_line() -md_instance_list.new_table(columns=6, rows=len(instance_list["onion"]) + 1, text=table_data, text_align='center') + if status_dict.get("display_content_is_image"): + fallback = status_dict["display_content_image_fallback"] + return f"[![{fallback}]({display_content})]({status_url})" + else: + return f"[{display_content}]({status_url})" + + @staticmethod + def _create_modified_column(is_modified, source): + if is_modified: + return f"[Yes]({source})" + return f"No" + + @staticmethod + def _create_privacy_policy_column(privacy): + return f"[Here]({privacy})" + + @staticmethod + def ddos_protection(ddos): + return f"{ddos}" + + @staticmethod + def _create_owner_column(owner): + author_name = owner.split("/") + return f"[@{author_name[-1]}]({owner})" + + +class MDInstanceListBuilder: + def __init__(self, instance_list_config): + self.config = instance_list_config + self.md = MdUtils(file_name='Invidious-Instances.md') + self.builder = ColumnBuilder() + + def _generate_heading(self): + self.md.new_header(level=1, title='Public Instances') + self.md.new_paragraph("Uptime History: [uptime.invidious.io](https://uptime.invidious.io)") + self.md.new_paragraph("Instances API: [api.invidious.io](api.invidious.io)") + + def _create_instance_tables(self): + # HTTPS + self.md.new_header(level=1, title='Instances list') + rows = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Modified"] + for instance in self.config["instances"]["https"]: + rows.extend(self._create_http_row(instance)) + self.md.new_table(columns=7, rows=len(self.config["instances"]["https"]) + 1, text=rows, text_align='center') + + self.md.new_line() + + # Onion + self.md.new_header(level=1, title='Onion instances list') + rows = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Modified"] + for instance in self.config["instances"]["onion"]: + rows.extend(self._create_onion_row(instance)) + self.md.new_table(columns=6, rows=len(self.config["instances"]["onion"]) + 1, text=rows, text_align='center') + + def _create_prerequisite_list(self): + self.md.new_header(level=2, title='Prerequisites') + self.md.new_list(self.config["adding_instance"]["prerequisites"]) + self.md.new_line() + + def _create_direction_list(self): + self.md.new_header(level=2, title='Directions') + self.md.new_list(self.config["adding_instance"]["directions"], marked_with="1") + self.md.create_md_file() + + def _create_http_row(self, instance): + return [ + self.builder.route("url")(instance["url"]), + self.builder.route("country")(instance["country"]), + self.builder.route("status")(instance["status"]), + self.builder.route("privacy_policy")(instance["privacy_policy"]), + self.builder.route("ddos_mitm_protection")(instance["ddos_mitm_protection"]), + self.builder.route("owner")(instance["owner"]), + self.builder.route("is_modified")(instance["is_modified"], instance["source"]) + ] + + def _create_onion_row(self, instance): + return [ + self.builder.route("url")(instance["url"]), + self.builder.route("country")(instance["country"]), + self.builder.route("associated_clearnet_instance")(instance["associated_clearnet_instance"]), + self.builder.route("privacy_policy")(instance["privacy_policy"]), + self.builder.route("owner")(instance["owner"]), + self.builder.route("is_modified")(instance["is_modified"], instance["source"]) + ] + + def create(self): + self._generate_heading() + self.md.new_line() + + self._create_instance_tables() + self.md.new_line() + + # Instance adding directions and prerequisites + self.md.new_header(level=1, title='Adding your instance') + self._create_prerequisite_list() + self.md.new_line() + self._create_direction_list() + + self.md.create_md_file() -# Instance adding directions and prerequisites -md_instance_list.new_header(level=1, title='Adding your instance') -# Prerequisites -md_instance_list.new_header(level=2, title='Prerequisites') -md_instance_list.new_list(data["adding_instance"]["prerequisites"]) -md_instance_list.new_line() +with open("instances.yaml") as configuration_yaml: + data = yaml.safe_load(configuration_yaml) -# Directions -md_instance_list.new_header(level=2, title='Directions') -md_instance_list.new_list(data["adding_instance"]["directions"], marked_with="1") -md_instance_list.create_md_file() +md_builder = MDInstanceListBuilder(data) +md_builder.create() \ No newline at end of file diff --git a/src/requirements.txt b/src/requirements.txt index 9f30f687..c607ad16 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,2 +1,3 @@ mdutils==1.3.0 +pycountry==20.7.3 PyYAML==5.4.1 From 77eb2854f48c1f70e319809a8dac5c6122d46793 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sun, 27 Jun 2021 18:29:36 +0000 Subject: [PATCH 10/23] Upstream changes --- instances.yaml | 41 ++++++++++++++++++++++++++++++++++++----- src/requirements.txt | 2 +- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/instances.yaml b/instances.yaml index ac613175..36fd8af1 100644 --- a/instances.yaml +++ b/instances.yaml @@ -31,7 +31,6 @@ instances: # is_modified: false # source: null - - url: https://invidious.snopyta.org country: FI status: @@ -115,12 +114,11 @@ instances: is_modified: false source: null - - url: https://invidious.exonip.de country: DE status: url: https://status.exonip.de/ - display_content: Uptime Robot status + display_content: Status Page display_content_is_image: False privacy_policy: ddos_mitm_protection: @@ -164,7 +162,6 @@ instances: is_modified: false source: null - - url: https://yt.cyberhost.uk/ country: FI status: @@ -179,7 +176,6 @@ instances: is_modified: false source: null - - url: https://y.com.cm/ country: DE status: @@ -188,6 +184,16 @@ instances: owner: https://github.com/Showfom is_modified: false source: null + + - url: https://invidious.hub.ne.kr + country: SG + status: + privacy_policy: + ddos_mitm_protection: null + owner: https://github.com/hys0star + is_modified: false + source: null + onion: # Template onion instance @@ -239,3 +245,28 @@ instances: owner: https://github.com/FireMasterK is_modified: false source: null + + - url: http://xinzguzyta7riddeoygku6btmm3mdryxtfzwwjxy3zqpoxk3xg5qq6ad.onion + country: DE + associated_clearnet_instance: https://invidious.moomoo.me + privacy_policy: + owner: https://github.com/moom0o + is_modified: false + source: null + + - url: http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/ + country: DE + associated_clearnet_instance: https://invidious.exonip.de + privacy_policy: + owner: https://github.com/Exonip + is_modified: True + source: https://github.com/exonip-de/invidious-source-modifications + + - url: http://vrg2a4cdxlngik5fkx6hbkslmd6yybsnot5bcegx6cfc7xja2t4r4zqd.onion + country: SG + associated_clearnet_instance: https://invidious.hub.ne.kr + privacy_policy: + owner: https://github.com/hys0star + is_modified: false + source: null + diff --git a/src/requirements.txt b/src/requirements.txt index c607ad16..18b78e32 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,3 +1,3 @@ -mdutils==1.3.0 +mdutils==1.3.1 pycountry==20.7.3 PyYAML==5.4.1 From f272d78d1c7cda0def1d1f081a81da8c92a3f535 Mon Sep 17 00:00:00 2001 From: syeopite Date: Fri, 16 Jul 2021 02:16:41 -0700 Subject: [PATCH 11/23] Add new notes field And in order to reduce visual bloat on the markdown table, the notes and the modfiied column are merged together --- instances.yaml | 29 +++++++++++++++++++++++++++-- src/create-instance-md.py | 28 +++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/instances.yaml b/instances.yaml index 36fd8af1..b6d7e685 100644 --- a/instances.yaml +++ b/instances.yaml @@ -43,6 +43,7 @@ instances: owner: https://github.com/Perflyst is_modified: false source: null + notes: - url: https://yewtu.be country: FR @@ -52,6 +53,7 @@ instances: owner: https://github.com/unixfox is_modified: false source: null + notes: - url: https://invidious.kavin.rocks country: IN @@ -65,6 +67,7 @@ instances: owner: https://github.com/FireMasterK is_modified: false source: null + notes: - url: https://invidious-us.kavin.rocks country: US @@ -78,6 +81,7 @@ instances: owner: https://github.com/FireMasterK is_modified: false source: null + notes: - url: https://vid.puffyan.us country: US @@ -91,6 +95,7 @@ instances: owner: https://github.com/ItsSt0ne is_modified: false source: null + notes: - url: https://invidious.namazso.eu country: DE @@ -100,6 +105,7 @@ instances: owner: https://github.com/namazso is_modified: false source: null + notes: - url: https://invidious.silkky.cloud country: FI @@ -113,6 +119,8 @@ instances: owner: https://github.com/TheSilkky is_modified: false source: null + notes: + - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" - url: https://invidious.exonip.de country: DE @@ -125,6 +133,8 @@ instances: owner: https://github.com/Exonip is_modified: True source: https://github.com/exonip-de/invidious-source-modifications + notes: + - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" - url: https://inv.riverside.rocks country: US @@ -134,6 +144,7 @@ instances: owner: https://github.com/RiversideRocks is_modified: false source: null + notes: - url: https://invidious.blamefran.net country: US @@ -143,6 +154,7 @@ instances: owner: https://github.com/Aidan16 is_modified: false source: null + notes: - url: https://invidious.moomoo.me country: DE @@ -152,6 +164,7 @@ instances: owner: https://github.com/moom0o is_modified: false source: null + notes: - url: https://ytb.trom.tf country: DE @@ -161,6 +174,7 @@ instances: owner: https://github.com/TROMsite is_modified: false source: null + notes: - url: https://yt.cyberhost.uk/ country: FI @@ -175,6 +189,7 @@ instances: modified: is_modified: false source: null + notes: - url: https://y.com.cm/ country: DE @@ -184,7 +199,8 @@ instances: owner: https://github.com/Showfom is_modified: false source: null - + notes: + - url: https://invidious.hub.ne.kr country: SG status: @@ -193,6 +209,7 @@ instances: owner: https://github.com/hys0star is_modified: false source: null + notes: onion: @@ -213,6 +230,7 @@ instances: owner: https://github.com/Perflyst is_modified: false source: null + notes: - url: http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/ country: IN @@ -221,6 +239,7 @@ instances: owner: https://github.com/FireMasterK is_modified: false source: null + notes: - url: http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/ country: NL @@ -229,6 +248,7 @@ instances: owner: https://github.com/tirz is_modified: false source: null + notes: - url: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/ country: US @@ -237,6 +257,7 @@ instances: owner: https://github.com/ItsSt0ne is_modified: false source: null + notes: - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ country: US @@ -245,7 +266,8 @@ instances: owner: https://github.com/FireMasterK is_modified: false source: null - + notes: + - url: http://xinzguzyta7riddeoygku6btmm3mdryxtfzwwjxy3zqpoxk3xg5qq6ad.onion country: DE associated_clearnet_instance: https://invidious.moomoo.me @@ -253,6 +275,7 @@ instances: owner: https://github.com/moom0o is_modified: false source: null + notes: - url: http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/ country: DE @@ -261,6 +284,7 @@ instances: owner: https://github.com/Exonip is_modified: True source: https://github.com/exonip-de/invidious-source-modifications + notes: - url: http://vrg2a4cdxlngik5fkx6hbkslmd6yybsnot5bcegx6cfc7xja2t4r4zqd.onion country: SG @@ -269,4 +293,5 @@ instances: owner: https://github.com/hys0star is_modified: false source: null + notes: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index 1fa6b80c..9e189011 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -16,7 +16,8 @@ def route(self, name): "is_modified": self._create_modified_column, "privacy_policy": self._create_privacy_policy_column, "ddos_mitm_protection": self.ddos_protection, - "owner": self._create_owner_column + "owner": self._create_owner_column, + "notes": self._create_notes_column } return router[name] @@ -73,6 +74,22 @@ def _create_owner_column(owner): author_name = owner.split("/") return f"[@{author_name[-1]}]({owner})" + @staticmethod + def _create_notes_column(notes, is_modified, source): + # It is possible for both the notes and is_modified data to be falsey + if not notes and not is_modified: + return "" + + notes_list = [] + if is_modified: + notes_list.append(f" - [Instance is running a modified source code]({source})") + if notes: + [notes_list.append(f" - {note}") for note in notes] + + + return '
'.join(notes_list) + + class MDInstanceListBuilder: def __init__(self, instance_list_config): @@ -88,16 +105,17 @@ def _generate_heading(self): def _create_instance_tables(self): # HTTPS self.md.new_header(level=1, title='Instances list') - rows = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Modified"] + rows = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Notes"] for instance in self.config["instances"]["https"]: rows.extend(self._create_http_row(instance)) + self.md.new_table(columns=7, rows=len(self.config["instances"]["https"]) + 1, text=rows, text_align='center') self.md.new_line() # Onion self.md.new_header(level=1, title='Onion instances list') - rows = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Modified"] + rows = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Notes"] for instance in self.config["instances"]["onion"]: rows.extend(self._create_onion_row(instance)) self.md.new_table(columns=6, rows=len(self.config["instances"]["onion"]) + 1, text=rows, text_align='center') @@ -120,7 +138,7 @@ def _create_http_row(self, instance): self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("ddos_mitm_protection")(instance["ddos_mitm_protection"]), self.builder.route("owner")(instance["owner"]), - self.builder.route("is_modified")(instance["is_modified"], instance["source"]) + self.builder.route("notes")(instance["notes"], instance["is_modified"], instance["source"]), ] def _create_onion_row(self, instance): @@ -130,7 +148,7 @@ def _create_onion_row(self, instance): self.builder.route("associated_clearnet_instance")(instance["associated_clearnet_instance"]), self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("owner")(instance["owner"]), - self.builder.route("is_modified")(instance["is_modified"], instance["source"]) + self.builder.route("notes")(instance["notes"], instance["is_modified"], instance["source"]), ] def create(self): From 2d1b8a457fd486b483a10ed92e531ea0efe9ca67 Mon Sep 17 00:00:00 2001 From: syeopite Date: Fri, 16 Jul 2021 02:20:31 -0700 Subject: [PATCH 12/23] Upstream changes --- instances.yaml | 96 ++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 43 deletions(-) diff --git a/instances.yaml b/instances.yaml index b6d7e685..a1e4098c 100644 --- a/instances.yaml +++ b/instances.yaml @@ -41,8 +41,8 @@ instances: privacy_policy: https://snopyta.org/privacy_policy ddos_mitm_protection: null owner: https://github.com/Perflyst - is_modified: false - source: null + is_modified: + source: notes: - url: https://yewtu.be @@ -51,8 +51,8 @@ instances: privacy_policy: null ddos_mitm_protection: null owner: https://github.com/unixfox - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious.kavin.rocks @@ -65,8 +65,8 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious-us.kavin.rocks @@ -79,8 +79,8 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK - is_modified: false - source: null + is_modified: + source: notes: - url: https://vid.puffyan.us @@ -93,8 +93,8 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/ItsSt0ne - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious.namazso.eu @@ -103,8 +103,8 @@ instances: privacy_policy: https://namazso.eu/privacy.html ddos_mitm_protection: owner: https://github.com/namazso - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious.silkky.cloud @@ -117,8 +117,8 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/TheSilkky - is_modified: false - source: null + is_modified: + source: notes: - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" @@ -127,7 +127,7 @@ instances: status: url: https://status.exonip.de/ display_content: Status Page - display_content_is_image: False + display_content_is_image: privacy_policy: ddos_mitm_protection: owner: https://github.com/Exonip @@ -142,8 +142,8 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/RiversideRocks - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious.blamefran.net @@ -152,8 +152,8 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/Aidan16 - is_modified: false - source: null + is_modified: + source: notes: - url: https://invidious.moomoo.me @@ -162,8 +162,8 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/moom0o - is_modified: false - source: null + is_modified: + source: notes: - url: https://ytb.trom.tf @@ -172,8 +172,8 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/TROMsite - is_modified: false - source: null + is_modified: + source: notes: - url: https://yt.cyberhost.uk/ @@ -187,8 +187,8 @@ instances: ddos_mitm_protection: owner: https://github.com/cyberhost-uk modified: - is_modified: false - source: null + is_modified: + source: notes: - url: https://y.com.cm/ @@ -197,8 +197,18 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/Showfom - is_modified: false - source: null + is_modified: + source: + notes: + + - url: https://invidious.s1gm4.eu + country: FR + status: + privacy_policy: + ddos_mitm_protection: + owner: https://github.com/OrnithOrtion + is_modified: + source: notes: - url: https://invidious.hub.ne.kr @@ -207,8 +217,8 @@ instances: privacy_policy: ddos_mitm_protection: null owner: https://github.com/hys0star - is_modified: false - source: null + is_modified: + source: notes: @@ -228,8 +238,8 @@ instances: associated_clearnet_instance: https://invidious.snopyta.org privacy_policy: owner: https://github.com/Perflyst - is_modified: false - source: null + is_modified: + source: notes: - url: http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/ @@ -237,8 +247,8 @@ instances: associated_clearnet_instance: https://invidious.kavin.rocks privacy_policy: owner: https://github.com/FireMasterK - is_modified: false - source: null + is_modified: + source: notes: - url: http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/ @@ -246,8 +256,8 @@ instances: associated_clearnet_instance: privacy_policy: owner: https://github.com/tirz - is_modified: false - source: null + is_modified: + source: notes: - url: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/ @@ -255,8 +265,8 @@ instances: associated_clearnet_instance: https://vid.puffyan.us privacy_policy: owner: https://github.com/ItsSt0ne - is_modified: false - source: null + is_modified: + source: notes: - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ @@ -264,8 +274,8 @@ instances: associated_clearnet_instance: https://invidious-us.kavin.rocks/ privacy_policy: owner: https://github.com/FireMasterK - is_modified: false - source: null + is_modified: + source: notes: - url: http://xinzguzyta7riddeoygku6btmm3mdryxtfzwwjxy3zqpoxk3xg5qq6ad.onion @@ -273,8 +283,8 @@ instances: associated_clearnet_instance: https://invidious.moomoo.me privacy_policy: owner: https://github.com/moom0o - is_modified: false - source: null + is_modified: + source: notes: - url: http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/ @@ -291,7 +301,7 @@ instances: associated_clearnet_instance: https://invidious.hub.ne.kr privacy_policy: owner: https://github.com/hys0star - is_modified: false - source: null + is_modified: + source: notes: From 28eeadce0f3c8a9c9a8c1caa31e9f3ecd3d4b3cf Mon Sep 17 00:00:00 2001 From: syeopite Date: Fri, 16 Jul 2021 02:28:24 -0700 Subject: [PATCH 13/23] Update status attributes for human readability --- instances.yaml | 53 ++++++++++++++++++++------------------- src/create-instance-md.py | 11 ++++---- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/instances.yaml b/instances.yaml index a1e4098c..fc2f5af3 100644 --- a/instances.yaml +++ b/instances.yaml @@ -22,22 +22,26 @@ instances: # country: FI # status: # url: https://status.example.com - # display_content: https://status-image.example.com - # display_content_is_image: True - # display_content_image_fallback: uptime status + # image: https://status-image.example.com + # text: Status Page # privacy_policy: example.com/privacy - # ddos_mitm_protection: null + # ddos_mitm_protection: # owner: https://github.com/example - # is_modified: false - # source: null + # is_modified: + # source: + # notes: + # _ Hi I am an example! + # + # *Image attribute in status has higher prioirty than text. Thus, if this attribute is filled out + # The text attribute would only be used as a fallback. + - url: https://invidious.snopyta.org country: FI status: url: https://status.unixfox.eu/783898765 - display_content: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d + text: Uptime Robot status privacy_policy: https://snopyta.org/privacy_policy ddos_mitm_protection: null owner: https://github.com/Perflyst @@ -59,9 +63,8 @@ instances: country: IN status: url: https://status.kavin.rocks/786132664 - display_content: https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71 - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71 + text: Uptime Robot status privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK @@ -73,9 +76,8 @@ instances: country: US status: url: https://status.kavin.rocks/788216947 - display_content: https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a + text: Uptime Robot status privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK @@ -87,9 +89,8 @@ instances: country: US status: url: https://stats.uptimerobot.com/n7A08HGVl6/786947233 - display_content: https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3 - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3 + text: Uptime Robot status privacy_policy: ddos_mitm_protection: owner: https://github.com/ItsSt0ne @@ -111,9 +112,8 @@ instances: country: FI status: url: https://status.silkky.cloud/787784614 - display_content: https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793 - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793 + text: Uptime Robot status privacy_policy: ddos_mitm_protection: owner: https://github.com/TheSilkky @@ -126,8 +126,7 @@ instances: country: DE status: url: https://status.exonip.de/ - display_content: Status Page - display_content_is_image: + text: Status Page privacy_policy: ddos_mitm_protection: owner: https://github.com/Exonip @@ -180,9 +179,8 @@ instances: country: FI status: url: https://stats.uptimerobot.com/JlM0qH8Ygn - display_content: https://img.shields.io/uptimerobot/status/m788432154-c8801112193f349268ea6104 - display_content_is_image: True - display_content_image_fallback: Uptime Robot status + image: https://img.shields.io/uptimerobot/status/m788432154-c8801112193f349268ea6104 + text: Uptime Robot status privacy_policy: ddos_mitm_protection: owner: https://github.com/cyberhost-uk @@ -236,6 +234,9 @@ instances: - url: http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion country: FI associated_clearnet_instance: https://invidious.snopyta.org + status: + image: https://status-image.example.com + text: Status Page privacy_policy: owner: https://github.com/Perflyst is_modified: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index 9e189011..fa4a1456 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -46,14 +46,13 @@ def _create_status_column(status_dict): return "" status_url = status_dict["url"] - display_content = status_dict["display_content"] + image = status_dict.get("image") + text = status_dict.get("text", "Status Page") - if status_dict.get("display_content_is_image"): - fallback = status_dict["display_content_image_fallback"] - - return f"[![{fallback}]({display_content})]({status_url})" + if image: + return f"[![{text}]({image})]({status_url})" else: - return f"[{display_content}]({status_url})" + return f"[{text}]({status_url})" @staticmethod def _create_modified_column(is_modified, source): From fe2d211a5b22321f9415d9d34bbe0a2c589d1158 Mon Sep 17 00:00:00 2001 From: syeopite Date: Fri, 16 Jul 2021 02:32:30 -0700 Subject: [PATCH 14/23] Upstream changes --- instances.yaml | 109 +++++++++++++++++++++++++------------- src/create-instance-md.py | 1 - 2 files changed, 72 insertions(+), 38 deletions(-) diff --git a/instances.yaml b/instances.yaml index fc2f5af3..a68bfa0b 100644 --- a/instances.yaml +++ b/instances.yaml @@ -8,6 +8,7 @@ adding_instance: - Instances using any type of anti-bot protection are marked as such. - "Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it." - Instances running a modified source code must respect the AGPL by publishing their source code and stating their changes before they are be added to the list, and must publish any later modification in a timely manner. + - - The instance must also contain a link to *both* the modified and original source code of Invidious. Ideally in the footer. - Instances should be up and functional at least 90% of the time. directions: - Fork the documentation repo. @@ -51,7 +52,10 @@ instances: - url: https://yewtu.be country: FR - status: null + status: + url: https://uptime.invidious.io/784257752 + image: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d + text: Uptime Robot status privacy_policy: null ddos_mitm_protection: null owner: https://github.com/unixfox @@ -85,6 +89,19 @@ instances: source: notes: + - url: https://invidious-jp.kavin.rocks + country: JP + status: + url: https://status.kavin.rocks/788866642 + image: https://img.shields.io/uptimerobot/status/m788866642-8a4478b8853722e98b7634e9 + text: Uptime Robot status + privacy_policy: + ddos_mitm_protection: Cloudflare + owner: https://github.com/FireMasterK + is_modified: + source: + notes: + - url: https://vid.puffyan.us country: US status: @@ -98,6 +115,19 @@ instances: source: notes: + - url: https://ytprivate.com + country: US + status: + url: https://status.ytprivate.com/786947505 + image: https://img.shields.io/uptimerobot/status/m786947505-2a50cf3262906bb28c6cf8fc + text: Uptime Robot status + privacy_policy: + ddos_mitm_protection: DDoS-Guard + owner: https://github.com/ytprivatecom + is_modified: true + source: https://github.com/ytprivatecom/invidious + notes: + - url: https://invidious.namazso.eu country: DE status: @@ -155,38 +185,14 @@ instances: source: notes: - - url: https://invidious.moomoo.me - country: DE - status: - privacy_policy: - ddos_mitm_protection: Cloudflare - owner: https://github.com/moom0o - is_modified: - source: - notes: - - url: https://ytb.trom.tf country: DE status: privacy_policy: ddos_mitm_protection: owner: https://github.com/TROMsite - is_modified: - source: - notes: - - - url: https://yt.cyberhost.uk/ - country: FI - status: - url: https://stats.uptimerobot.com/JlM0qH8Ygn - image: https://img.shields.io/uptimerobot/status/m788432154-c8801112193f349268ea6104 - text: Uptime Robot status - privacy_policy: - ddos_mitm_protection: - owner: https://github.com/cyberhost-uk - modified: - is_modified: - source: + is_modified: True + source: https://gitlab.com/TioTrom/trom.tf-invidious notes: - url: https://y.com.cm/ @@ -202,6 +208,8 @@ instances: - url: https://invidious.s1gm4.eu country: FR status: + url: https://status.s1gm4.eu/ + text: Status Page privacy_policy: ddos_mitm_protection: owner: https://github.com/OrnithOrtion @@ -219,6 +227,42 @@ instances: source: notes: + - url: https://invidious.noho.st + country: GB + status: + url: https://img.shields.io/uptimerobot/status/m788769382-1b3bca2509f1d891c4620dbe + image: https://img.shields.io/uptimerobot/status/m788769382-1b3bca2509f1d891c4620dbe + text: Uptime Robot status + privacy_policy: + ddos_mitm_protection: null + owner: https://github.com/tomaytotomato + is_modified: + source: + notes: + + - url: https://invidio.xamh.de + country: DE + status: + url: https://img.shields.io/uptimerobot/status/m788804183-a33a0af7fb40e3bafa617cd8 + image: https://img.shields.io/uptimerobot/status/m788804183-a33a0af7fb40e3bafa617cd8 + text: Uptime Robot status + privacy_policy: + ddos_mitm_protection: null + owner: https://github.com/11Tuvork28 + is_modified: + source: + notes: + + - url: https://youtube.076.ne.jp + country: JP + status: + privacy_policy: + ddos_mitm_protection: null + owner: https://github.com/TechnicalSuwako + is_modified: True + source: https://git.076.ne.jp/TechnicalSuwako/invidious-mod + notes: + onion: # Template onion instance @@ -279,15 +323,6 @@ instances: source: notes: - - url: http://xinzguzyta7riddeoygku6btmm3mdryxtfzwwjxy3zqpoxk3xg5qq6ad.onion - country: DE - associated_clearnet_instance: https://invidious.moomoo.me - privacy_policy: - owner: https://github.com/moom0o - is_modified: - source: - notes: - - url: http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/ country: DE associated_clearnet_instance: https://invidious.exonip.de @@ -297,7 +332,7 @@ instances: source: https://github.com/exonip-de/invidious-source-modifications notes: - - url: http://vrg2a4cdxlngik5fkx6hbkslmd6yybsnot5bcegx6cfc7xja2t4r4zqd.onion + - url: http://pwo2md4lgxs3hvroqi6wg33h6a3pv47euax6km3alke7letglieokyd.onion country: SG associated_clearnet_instance: https://invidious.hub.ne.kr privacy_policy: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index fa4a1456..dd70d8b7 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -88,7 +88,6 @@ def _create_notes_column(notes, is_modified, source): return '
'.join(notes_list) - class MDInstanceListBuilder: def __init__(self, instance_list_config): From c28e0ec6f310f7df9bf89fc7d07a4768b8fb95bf Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 12 Aug 2021 00:26:31 -0700 Subject: [PATCH 15/23] Add new mirrors column --- instances.yaml | 51 +++++++++++++++++++-------------------- src/create-instance-md.py | 45 +++++++++++++++++++++++----------- 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/instances.yaml b/instances.yaml index a68bfa0b..78e08330 100644 --- a/instances.yaml +++ b/instances.yaml @@ -32,6 +32,9 @@ instances: # source: # notes: # _ Hi I am an example! + # mirrors: # Mirrors should follow a reduced syntax of the base instance + # - url: https://us.example.com + # - country: US # # *Image attribute in status has higher prioirty than text. Thus, if this attribute is filled out # The text attribute would only be used as a fallback. @@ -49,6 +52,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://yewtu.be country: FR @@ -62,6 +66,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidious.kavin.rocks country: IN @@ -75,32 +80,12 @@ instances: is_modified: source: notes: + mirrors: + - url: https://invidious-us.kavin.rocks + country: US - - url: https://invidious-us.kavin.rocks - country: US - status: - url: https://status.kavin.rocks/788216947 - image: https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a - text: Uptime Robot status - privacy_policy: - ddos_mitm_protection: Cloudflare - owner: https://github.com/FireMasterK - is_modified: - source: - notes: - - - url: https://invidious-jp.kavin.rocks - country: JP - status: - url: https://status.kavin.rocks/788866642 - image: https://img.shields.io/uptimerobot/status/m788866642-8a4478b8853722e98b7634e9 - text: Uptime Robot status - privacy_policy: - ddos_mitm_protection: Cloudflare - owner: https://github.com/FireMasterK - is_modified: - source: - notes: + - url: https://invidious-jp.kavin.rocks + country: JP - url: https://vid.puffyan.us country: US @@ -114,6 +99,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://ytprivate.com country: US @@ -127,6 +113,7 @@ instances: is_modified: true source: https://github.com/ytprivatecom/invidious notes: + mirrors: - url: https://invidious.namazso.eu country: DE @@ -137,6 +124,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidious.silkky.cloud country: FI @@ -151,6 +139,7 @@ instances: source: notes: - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" + mirrors: - url: https://invidious.exonip.de country: DE @@ -164,6 +153,7 @@ instances: source: https://github.com/exonip-de/invidious-source-modifications notes: - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" + mirrors: - url: https://inv.riverside.rocks country: US @@ -174,6 +164,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidious.blamefran.net country: US @@ -184,6 +175,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://ytb.trom.tf country: DE @@ -194,6 +186,7 @@ instances: is_modified: True source: https://gitlab.com/TioTrom/trom.tf-invidious notes: + mirrors: - url: https://y.com.cm/ country: DE @@ -204,6 +197,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidious.s1gm4.eu country: FR @@ -216,7 +210,8 @@ instances: is_modified: source: notes: - + mirrors: + - url: https://invidious.hub.ne.kr country: SG status: @@ -226,6 +221,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidious.noho.st country: GB @@ -239,6 +235,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://invidio.xamh.de country: DE @@ -252,6 +249,7 @@ instances: is_modified: source: notes: + mirrors: - url: https://youtube.076.ne.jp country: JP @@ -262,6 +260,7 @@ instances: is_modified: True source: https://git.076.ne.jp/TechnicalSuwako/invidious-mod notes: + mirrors: onion: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index dd70d8b7..ecfecaae 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -17,28 +17,33 @@ def route(self, name): "privacy_policy": self._create_privacy_policy_column, "ddos_mitm_protection": self.ddos_protection, "owner": self._create_owner_column, - "notes": self._create_notes_column + "notes": self._create_notes_column, + "mirrors": self._create_mirror_column } return router[name] + @staticmethod + def get_country_name_and_flag_from_code(code): + name = pycountry.countries.get(alpha_2=code).name + # https://stackoverflow.com/a/42235254 + flag = (lambda s, e: chr(ord(s.upper()) - 0x41 + 0x1F1E6) + + chr(ord(e.upper()) - 0x41 + 0x1F1E6))(*list(code)) + + return name, flag + + @staticmethod def _create_url_column(url): if not url: return "" hostname = urlparse(url).hostname - return f"[{hostname}]({url})" + return f"[{hostname[:35] + (hostname[35:] and '...')}]({url})" - @staticmethod - def _create_country_column(country_code): - country_name = pycountry.countries.get(alpha_2=country_code).name - # https://stackoverflow.com/a/42235254 - flag = (lambda s, e: chr(ord(s.upper()) - 0x41 + 0x1F1E6) + - chr(ord(e.upper()) - 0x41 + 0x1F1E6) - )(*list(country_code)) - - return f"{flag} {country_name}" + def _create_country_column(self, country_code, mirrors=None): + main_name, main_flag = self.get_country_name_and_flag_from_code(country_code) + return f"{main_name} {main_flag}" @staticmethod def _create_status_column(status_dict): @@ -84,10 +89,21 @@ def _create_notes_column(notes, is_modified, source): notes_list.append(f" - [Instance is running a modified source code]({source})") if notes: [notes_list.append(f" - {note}") for note in notes] - return '
'.join(notes_list) + def _create_mirror_column(self, mirrors): + if not mirrors: + return "" + + country_column = [] + + for mirror in mirrors: + name, flag = self.get_country_name_and_flag_from_code(mirror["country"]) + country_column.append(f"[{name} {flag}]({mirror['url']})") + + return "
".join(country_column) + class MDInstanceListBuilder: def __init__(self, instance_list_config): @@ -103,11 +119,11 @@ def _generate_heading(self): def _create_instance_tables(self): # HTTPS self.md.new_header(level=1, title='Instances list') - rows = ["Address", "Country", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Notes"] + rows = ["Address", "Country", "Mirrors", "Status", "Privacy policy", "DDos Protection / MITM", "Owner", "Notes"] for instance in self.config["instances"]["https"]: rows.extend(self._create_http_row(instance)) - self.md.new_table(columns=7, rows=len(self.config["instances"]["https"]) + 1, text=rows, text_align='center') + self.md.new_table(columns=8, rows=len(self.config["instances"]["https"]) + 1, text=rows, text_align='center') self.md.new_line() @@ -132,6 +148,7 @@ def _create_http_row(self, instance): return [ self.builder.route("url")(instance["url"]), self.builder.route("country")(instance["country"]), + self.builder.route("mirrors")(instance["mirrors"]), self.builder.route("status")(instance["status"]), self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("ddos_mitm_protection")(instance["ddos_mitm_protection"]), From ee8f3bbefb1a93085b2c2fbff504a436f6d2d670 Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 12 Aug 2021 00:45:29 -0700 Subject: [PATCH 16/23] Add missing data and set default values Closes syeopite/documentation#3 Closes syeopite/documentation#2 --- instances.yaml | 6 +++--- src/create-instance-md.py | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/instances.yaml b/instances.yaml index 78e08330..dcfcda8d 100644 --- a/instances.yaml +++ b/instances.yaml @@ -132,9 +132,9 @@ instances: url: https://status.silkky.cloud/787784614 image: https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793 text: Uptime Robot status - privacy_policy: + privacy_policy: https://silkky.cloud/privacy ddos_mitm_protection: - owner: https://github.com/TheSilkky + owner: https://github.com/silkkycloud is_modified: source: notes: @@ -215,7 +215,7 @@ instances: - url: https://invidious.hub.ne.kr country: SG status: - privacy_policy: + privacy_policy: https://privacy.osbusiness.net/ ddos_mitm_protection: null owner: https://github.com/hys0star is_modified: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index ecfecaae..1fba21f6 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -41,7 +41,7 @@ def _create_url_column(url): hostname = urlparse(url).hostname return f"[{hostname[:35] + (hostname[35:] and '...')}]({url})" - def _create_country_column(self, country_code, mirrors=None): + def _create_country_column(self, country_code): main_name, main_flag = self.get_country_name_and_flag_from_code(country_code) return f"{main_name} {main_flag}" @@ -67,10 +67,15 @@ def _create_modified_column(is_modified, source): @staticmethod def _create_privacy_policy_column(privacy): + if not privacy: + return "" + return f"[Here]({privacy})" @staticmethod def ddos_protection(ddos): + if not ddos: + return "" return f"{ddos}" @staticmethod From fa97d1550403e97cc860f313dc0eb0cc01d0625f Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 12 Aug 2021 00:57:51 -0700 Subject: [PATCH 17/23] Add onion mirror for invidious-jp.kavin.rocks --- instances.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/instances.yaml b/instances.yaml index dcfcda8d..2150a05d 100644 --- a/instances.yaml +++ b/instances.yaml @@ -340,3 +340,12 @@ instances: source: notes: + - url: http://p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion/ + country: JP + associated_clearnet_instance: https://invidious-jp.kavin.rocks + privacy_policy: + owner: https://github.com/FireMasterK + is_modified: + source: + notes: + From 4a14ba146fa516407352deb20a15143c1e768538 Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 12 Aug 2021 01:09:00 -0700 Subject: [PATCH 18/23] Rename some notes and add mirrors column to onion --- instances.yaml | 34 +++++++++++++--------------------- src/create-instance-md.py | 7 ++++--- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/instances.yaml b/instances.yaml index 2150a05d..9dad9960 100644 --- a/instances.yaml +++ b/instances.yaml @@ -138,7 +138,7 @@ instances: is_modified: source: notes: - - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" + - "[Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" mirrors: - url: https://invidious.exonip.de @@ -152,7 +152,7 @@ instances: is_modified: True source: https://github.com/exonip-de/invidious-source-modifications notes: - - "[Uses anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" + - "[Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" mirrors: - url: https://inv.riverside.rocks @@ -285,6 +285,7 @@ instances: is_modified: source: notes: + mirrors: - url: http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/ country: IN @@ -294,6 +295,12 @@ instances: is_modified: source: notes: + mirrors: + - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ + country: US + + - url: http://p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion/ + country: JP - url: http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/ country: NL @@ -303,6 +310,7 @@ instances: is_modified: source: notes: + mirrors: - url: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/ country: US @@ -312,15 +320,7 @@ instances: is_modified: source: notes: - - - url: http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/ - country: US - associated_clearnet_instance: https://invidious-us.kavin.rocks/ - privacy_policy: - owner: https://github.com/FireMasterK - is_modified: - source: - notes: + mirrors: - url: http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/ country: DE @@ -330,6 +330,7 @@ instances: is_modified: True source: https://github.com/exonip-de/invidious-source-modifications notes: + mirrors: - url: http://pwo2md4lgxs3hvroqi6wg33h6a3pv47euax6km3alke7letglieokyd.onion country: SG @@ -339,13 +340,4 @@ instances: is_modified: source: notes: - - - url: http://p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion/ - country: JP - associated_clearnet_instance: https://invidious-jp.kavin.rocks - privacy_policy: - owner: https://github.com/FireMasterK - is_modified: - source: - notes: - + mirrors: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index 1fba21f6..53ca8d88 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -91,7 +91,7 @@ def _create_notes_column(notes, is_modified, source): notes_list = [] if is_modified: - notes_list.append(f" - [Instance is running a modified source code]({source})") + notes_list.append(f" - [Modified source code]({source})") if notes: [notes_list.append(f" - {note}") for note in notes] @@ -134,10 +134,10 @@ def _create_instance_tables(self): # Onion self.md.new_header(level=1, title='Onion instances list') - rows = ["Address", "Country", "Associated clearnet instance", "Privacy policy", "Owner", "Notes"] + rows = ["Address", "Country", "Mirrors", "Associated clearnet instance", "Privacy policy", "Owner", "Notes"] for instance in self.config["instances"]["onion"]: rows.extend(self._create_onion_row(instance)) - self.md.new_table(columns=6, rows=len(self.config["instances"]["onion"]) + 1, text=rows, text_align='center') + self.md.new_table(columns=7, rows=len(self.config["instances"]["onion"]) + 1, text=rows, text_align='center') def _create_prerequisite_list(self): self.md.new_header(level=2, title='Prerequisites') @@ -165,6 +165,7 @@ def _create_onion_row(self, instance): return [ self.builder.route("url")(instance["url"]), self.builder.route("country")(instance["country"]), + self.builder.route("mirrors")(instance["mirrors"]), self.builder.route("associated_clearnet_instance")(instance["associated_clearnet_instance"]), self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("owner")(instance["owner"]), From 991ca1e108eab25da4a579c6c1560b56f7709690 Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 12 Aug 2021 01:14:59 -0700 Subject: [PATCH 19/23] Add privacy policy to onion snopyta instance --- instances.yaml | 2 +- src/create-instance-md.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/instances.yaml b/instances.yaml index 9dad9960..53bcc2bf 100644 --- a/instances.yaml +++ b/instances.yaml @@ -280,7 +280,7 @@ instances: status: image: https://status-image.example.com text: Status Page - privacy_policy: + privacy_policy: https://snopyta.org/privacy_policy owner: https://github.com/Perflyst is_modified: source: diff --git a/src/create-instance-md.py b/src/create-instance-md.py index 53ca8d88..3468be64 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -39,7 +39,7 @@ def _create_url_column(url): return "" hostname = urlparse(url).hostname - return f"[{hostname[:35] + (hostname[35:] and '...')}]({url})" + return f"[{hostname[:30] + (hostname[30:] and '...')}]({url})" def _create_country_column(self, country_code): main_name, main_flag = self.get_country_name_and_flag_from_code(country_code) From ea9648a41d38b4feb1b1e8048347c9fe2d724a87 Mon Sep 17 00:00:00 2001 From: syeopite Date: Sat, 14 Aug 2021 18:58:06 -0700 Subject: [PATCH 20/23] Add source code "changes" to notes --- instances.yaml | 68 +++++++++++++++++++-------------------- src/create-instance-md.py | 20 ++++-------- 2 files changed, 41 insertions(+), 47 deletions(-) diff --git a/instances.yaml b/instances.yaml index 53bcc2bf..85d53d28 100644 --- a/instances.yaml +++ b/instances.yaml @@ -49,8 +49,7 @@ instances: privacy_policy: https://snopyta.org/privacy_policy ddos_mitm_protection: null owner: https://github.com/Perflyst - is_modified: - source: + modified: notes: mirrors: @@ -63,8 +62,7 @@ instances: privacy_policy: null ddos_mitm_protection: null owner: https://github.com/unixfox - is_modified: - source: + modified: notes: mirrors: @@ -77,8 +75,7 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/FireMasterK - is_modified: - source: + modified: notes: mirrors: - url: https://invidious-us.kavin.rocks @@ -96,8 +93,7 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/ItsSt0ne - is_modified: - source: + modified: notes: mirrors: @@ -110,8 +106,9 @@ instances: privacy_policy: ddos_mitm_protection: DDoS-Guard owner: https://github.com/ytprivatecom - is_modified: true - source: https://github.com/ytprivatecom/invidious + modified: + source: https://github.com/ytprivatecom/invidious + changes: https://github.com/ytprivatecom/invidious#source-changes notes: mirrors: @@ -121,7 +118,7 @@ instances: privacy_policy: https://namazso.eu/privacy.html ddos_mitm_protection: owner: https://github.com/namazso - is_modified: + modified: source: notes: mirrors: @@ -135,7 +132,7 @@ instances: privacy_policy: https://silkky.cloud/privacy ddos_mitm_protection: owner: https://github.com/silkkycloud - is_modified: + modified: source: notes: - "[Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" @@ -149,8 +146,9 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/Exonip - is_modified: True - source: https://github.com/exonip-de/invidious-source-modifications + modified: + source: https://github.com/exonip-de/invidious-source-modifications + changes: https://github.com/exonip-de/invidious-source-modifications notes: - "[Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)" mirrors: @@ -161,7 +159,7 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/RiversideRocks - is_modified: + modified: source: notes: mirrors: @@ -172,7 +170,7 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/Aidan16 - is_modified: + modified: source: notes: mirrors: @@ -183,8 +181,9 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/TROMsite - is_modified: True - source: https://gitlab.com/TioTrom/trom.tf-invidious + modified: + source: https://gitlab.com/TioTrom/trom.tf-invidious + changes: https://gitlab.com/TioTrom/trom.tf-invidious notes: mirrors: @@ -194,8 +193,7 @@ instances: privacy_policy: ddos_mitm_protection: Cloudflare owner: https://github.com/Showfom - is_modified: - source: + modified: notes: mirrors: @@ -207,7 +205,7 @@ instances: privacy_policy: ddos_mitm_protection: owner: https://github.com/OrnithOrtion - is_modified: + modified: source: notes: mirrors: @@ -218,7 +216,7 @@ instances: privacy_policy: https://privacy.osbusiness.net/ ddos_mitm_protection: null owner: https://github.com/hys0star - is_modified: + modified: source: notes: mirrors: @@ -232,7 +230,7 @@ instances: privacy_policy: ddos_mitm_protection: null owner: https://github.com/tomaytotomato - is_modified: + modified: source: notes: mirrors: @@ -246,7 +244,7 @@ instances: privacy_policy: ddos_mitm_protection: null owner: https://github.com/11Tuvork28 - is_modified: + modified: source: notes: mirrors: @@ -257,8 +255,9 @@ instances: privacy_policy: ddos_mitm_protection: null owner: https://github.com/TechnicalSuwako - is_modified: True - source: https://git.076.ne.jp/TechnicalSuwako/invidious-mod + modified: + source: https://git.076.ne.jp/TechnicalSuwako/invidious-mod + changes: https://git.076.ne.jp/TechnicalSuwako/invidious-mod#change notes: mirrors: @@ -282,7 +281,7 @@ instances: text: Status Page privacy_policy: https://snopyta.org/privacy_policy owner: https://github.com/Perflyst - is_modified: + modified: source: notes: mirrors: @@ -292,7 +291,7 @@ instances: associated_clearnet_instance: https://invidious.kavin.rocks privacy_policy: owner: https://github.com/FireMasterK - is_modified: + modified: source: notes: mirrors: @@ -307,7 +306,7 @@ instances: associated_clearnet_instance: privacy_policy: owner: https://github.com/tirz - is_modified: + modified: source: notes: mirrors: @@ -317,7 +316,7 @@ instances: associated_clearnet_instance: https://vid.puffyan.us privacy_policy: owner: https://github.com/ItsSt0ne - is_modified: + modified: source: notes: mirrors: @@ -327,8 +326,9 @@ instances: associated_clearnet_instance: https://invidious.exonip.de privacy_policy: owner: https://github.com/Exonip - is_modified: True - source: https://github.com/exonip-de/invidious-source-modifications + modified: + source: https://github.com/exonip-de/invidious-source-modifications + changes: https://github.com/exonip-de/invidious-source-modifications notes: mirrors: @@ -337,7 +337,7 @@ instances: associated_clearnet_instance: https://invidious.hub.ne.kr privacy_policy: owner: https://github.com/hys0star - is_modified: + modified: source: notes: - mirrors: + mirrors: \ No newline at end of file diff --git a/src/create-instance-md.py b/src/create-instance-md.py index 3468be64..30e4ab82 100644 --- a/src/create-instance-md.py +++ b/src/create-instance-md.py @@ -13,7 +13,6 @@ def route(self, name): "associated_clearnet_instance": self._create_url_column, "country": self._create_country_column, "status": self._create_status_column, - "is_modified": self._create_modified_column, "privacy_policy": self._create_privacy_policy_column, "ddos_mitm_protection": self.ddos_protection, "owner": self._create_owner_column, @@ -59,12 +58,6 @@ def _create_status_column(status_dict): else: return f"[{text}]({status_url})" - @staticmethod - def _create_modified_column(is_modified, source): - if is_modified: - return f"[Yes]({source})" - return f"No" - @staticmethod def _create_privacy_policy_column(privacy): if not privacy: @@ -84,14 +77,15 @@ def _create_owner_column(owner): return f"[@{author_name[-1]}]({owner})" @staticmethod - def _create_notes_column(notes, is_modified, source): + def _create_notes_column(notes, modified): # It is possible for both the notes and is_modified data to be falsey - if not notes and not is_modified: + if not notes and not modified: return "" notes_list = [] - if is_modified: - notes_list.append(f" - [Modified source code]({source})") + if modified: + notes_list.append(f" - [Modified source code]({modified['source']})") + notes_list.append(f" - [Changes]({modified['changes']})") if notes: [notes_list.append(f" - {note}") for note in notes] @@ -158,7 +152,7 @@ def _create_http_row(self, instance): self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("ddos_mitm_protection")(instance["ddos_mitm_protection"]), self.builder.route("owner")(instance["owner"]), - self.builder.route("notes")(instance["notes"], instance["is_modified"], instance["source"]), + self.builder.route("notes")(instance["notes"], instance["modified"]), ] def _create_onion_row(self, instance): @@ -169,7 +163,7 @@ def _create_onion_row(self, instance): self.builder.route("associated_clearnet_instance")(instance["associated_clearnet_instance"]), self.builder.route("privacy_policy")(instance["privacy_policy"]), self.builder.route("owner")(instance["owner"]), - self.builder.route("notes")(instance["notes"], instance["is_modified"], instance["source"]), + self.builder.route("notes")(instance["notes"], instance["modified"]), ] def create(self): From 7a53fac13d1c2e2b4a7a3f9917b24a0c816267bd Mon Sep 17 00:00:00 2001 From: syeopite Date: Mon, 13 Sep 2021 13:12:39 -0700 Subject: [PATCH 21/23] Upstream changes --- instances.yaml | 65 +++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/instances.yaml b/instances.yaml index 85d53d28..b350c654 100644 --- a/instances.yaml +++ b/instances.yaml @@ -54,7 +54,7 @@ instances: mirrors: - url: https://yewtu.be - country: FR + country: NE status: url: https://uptime.invidious.io/784257752 image: https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d @@ -164,12 +164,14 @@ instances: notes: mirrors: - - url: https://invidious.blamefran.net - country: US - status: + - url: https://vid.mint.lgbt/ + country: CA + status: + url: https://status.mint.lgbt/service/lesvidious + text: Status Page privacy_policy: ddos_mitm_protection: - owner: https://github.com/Aidan16 + owner: https://github.com/mintphin modified: source: notes: @@ -197,21 +199,8 @@ instances: notes: mirrors: - - url: https://invidious.s1gm4.eu - country: FR - status: - url: https://status.s1gm4.eu/ - text: Status Page - privacy_policy: - ddos_mitm_protection: - owner: https://github.com/OrnithOrtion - modified: - source: - notes: - mirrors: - - url: https://invidious.hub.ne.kr - country: SG + country: KR status: privacy_policy: https://privacy.osbusiness.net/ ddos_mitm_protection: null @@ -221,20 +210,6 @@ instances: notes: mirrors: - - url: https://invidious.noho.st - country: GB - status: - url: https://img.shields.io/uptimerobot/status/m788769382-1b3bca2509f1d891c4620dbe - image: https://img.shields.io/uptimerobot/status/m788769382-1b3bca2509f1d891c4620dbe - text: Uptime Robot status - privacy_policy: - ddos_mitm_protection: null - owner: https://github.com/tomaytotomato - modified: - source: - notes: - mirrors: - - url: https://invidio.xamh.de country: DE status: @@ -251,7 +226,7 @@ instances: - url: https://youtube.076.ne.jp country: JP - status: + status: privacy_policy: ddos_mitm_protection: null owner: https://github.com/TechnicalSuwako @@ -261,6 +236,16 @@ instances: notes: mirrors: + - url: https://yt.didw.to/ + country: SE + status: + privacy_policy: + ddos_mitm_protection: null + owner: https://github.com/didw-to + modified: + notes: + mirrors: + onion: # Template onion instance @@ -333,11 +318,21 @@ instances: mirrors: - url: http://pwo2md4lgxs3hvroqi6wg33h6a3pv47euax6km3alke7letglieokyd.onion - country: SG + country: KR associated_clearnet_instance: https://invidious.hub.ne.kr privacy_policy: owner: https://github.com/hys0star modified: source: notes: + mirrors: + + - url: http://k7mnd6gyelynroxoncodxjz44fd5ch2ewfjl2a6ozmg3jy6fwyxq3cyd.onion/ + country: SE + associated_clearnet_instance: https://yt.didw.to/ + privacy_policy: + owner: https://github.com/didw-to + modified: + source: + notes: mirrors: \ No newline at end of file From 3a95c885890e9c1b8f94b2a36dad7894e104fa49 Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 16 Sep 2021 02:07:01 -0700 Subject: [PATCH 22/23] Upstream changes --- instances.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/instances.yaml b/instances.yaml index b350c654..892d563a 100644 --- a/instances.yaml +++ b/instances.yaml @@ -246,6 +246,16 @@ instances: notes: mirrors: + - url: https://yt.artemislena.eu + country: DE + status: + privacy_policy: https://artemislena.eu/privacy.html + ddos_mitm_protection: null + owner: https://github.com/artemislena + modified: + notes: + mirrors: + onion: # Template onion instance From 232b9ea3736d136e892baf223d54e7c3524fca7a Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 16 Sep 2021 09:08:56 +0000 Subject: [PATCH 23/23] Update Invidious-Instances.md --- Invidious-Instances.md | 144 +++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 78 deletions(-) diff --git a/Invidious-Instances.md b/Invidious-Instances.md index 560f75ac..e4bd3ac0 100644 --- a/Invidious-Instances.md +++ b/Invidious-Instances.md @@ -1,82 +1,70 @@ ---- -title: Invidious-Instances -description: -published: true -date: 2021-05-23T16:58:51.441Z -tags: -editor: markdown -dateCreated: 2021-05-23T16:58:48.431Z ---- -# Public Invidious Instances: -[Uptime History provided by Uptimerobot](https://stats.uptimerobot.com/89VnzSKAn) -[Instances API](https://instances.invidio.us/) - -**Note:** - -Instances using Cloudflare are marked as such. Instances using any type of anti-bot protection are marked as such. - -Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it. - -To be in this list, instances must have been updated in the last month. An instance that hasn't been updated in the last month is considered unmaintained and will be removed from the list. - -**Warning: Any public instance that isn't in this list is considered untrustworthy. Use them at your own risk.** - -## List of public Invidious Instances (sorted from oldest to newest): - -* [invidious.snopyta.org](https://invidious.snopyta.org/) 🇫🇮 - -* [yewtu.be](https://yewtu.be) 🇳🇱 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d)](https://uptime.invidious.io/784257752) - -* [invidious.kavin.rocks](https://invidious.kavin.rocks) 🇮🇳 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71)](https://status.kavin.rocks/786132664) [invidious-us.kavin.rocks](https://invidious-us.kavin.rocks) 🇺🇸 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m788216947-f3f63d30899a10dbe9a0338a)](https://status.kavin.rocks/788216947) [invidious-jp.kavin.rocks](https://invidious-jp.kavin.rocks) 🇯🇵 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m788866642-8a4478b8853722e98b7634e9)](https://status.kavin.rocks/788866642) (uses Cloudflare) - -* [vid.puffyan.us](https://vid.puffyan.us) 🇺🇸 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3?style=plastic)](https://stats.uptimerobot.com/n7A08HGVl6/786947233) - -* [ytprivate.com](https://ytprivate.com) 🇺🇸 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786947505-2a50cf3262906bb28c6cf8fc)](https://status.ytprivate.com/786947505) (uses DDoS-Guard) (is running a modified source code) - Source Code: https://github.com/ytprivatecom/invidious - Changes: https://github.com/ytprivatecom/invidious#source-changes - -* [invidious.namazso.eu](https://invidious.namazso.eu) 🇩🇪 - -* [invidious.silkky.cloud](https://invidious.silkky.cloud) 🇫🇮 [![Uptime Robot status](https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793)](https://status.silkky.cloud/787784614) - Uses anti-bot protection by bunkerized-nginx: https://github.com/bunkerity/bunkerized-nginx - -* [invidious.exonip.de](https://invidious.exonip.de) 🇩🇪 [Status Page](https://status.exonip.de/) - Source code/changes: https://github.com/exonip-de/invidious-source-modifications - Uses anti-bot protection by bunkerized-nginx: https://github.com/bunkerity/bunkerized-nginx - -* [inv.riverside.rocks](https://inv.riverside.rocks) 🇺🇸 - -* [vid.mint.lgbt](https://vid.mint.lgbt) 🇨🇦 [Status Page](https://status.mint.lgbt/service/lesvidious) - -* [ytb.trom.tf](https://ytb.trom.tf) 🇩🇪 Source code/changes (just CSS additions): https://gitlab.com/TioTrom/trom.tf-invidious - -* [y.com.cm](https://y.com.cm) 🇩🇪 (uses Cloudflare) - -* [invidious.hub.ne.kr](https://invidious.hub.ne.kr) 🇰🇷 - -* [invidio.xamh.de](https://invidio.xamh.de) 🇩🇪 ![Uptime Robot status](https://img.shields.io/uptimerobot/status/m788804183-a33a0af7fb40e3bafa617cd8) - -* [youtube.076.ne.jp](https://youtube.076.ne.jp) 🇯🇵 - Source code/changes: https://git.076.ne.jp/TechnicalSuwako/invidious-mod - -* [yt.didw.to](https://yt.didw.to/) 🇸🇪 - -* [yt.artemislena.eu](https://yt.artemislena.eu) 🇩🇪 - - -### Tor Onion Services: -* [c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion](http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion) - -* [w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion](http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/) - -* [kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion](http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/) 🇳🇱 - -* [grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion](http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion) 🇺🇸 - -* [hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion](http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion) 🇺🇸 (Onion of invidious-us.kavin.rocks) - -* [invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion](http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion) 🇩🇪 (Onion of invidious.exonip.de) - -* [osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion](http://osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion) 🇰🇷 (Onion of invidious.hub.ne.kr) - -* [p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion](http://p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion) 🇯🇵 (Onion of invidious-jp.kavin.rocks) - -* [k7mnd6gyelynroxoncodxjz44fd5ch2ewfjl2a6ozmg3jy6fwyxq3cyd.onion](http://k7mnd6gyelynroxoncodxjz44fd5ch2ewfjl2a6ozmg3jy6fwyxq3cyd.onion/) 🇸🇪 (Onion of yt.didw.to) +# Public Instances + + +Uptime History: [uptime.invidious.io](https://uptime.invidious.io) + +Instances API: [api.invidious.io](api.invidious.io) + +# Instances list + +|Address|Country|Mirrors|Status|Privacy policy|DDos Protection / MITM|Owner|Notes| +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +|[invidious.snopyta.org](https://invidious.snopyta.org)|Finland 🇫🇮||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d)](https://status.unixfox.eu/783898765)|[Here](https://snopyta.org/privacy_policy)||[@Perflyst](https://github.com/Perflyst)|| +|[yewtu.be](https://yewtu.be)|Niger 🇳🇪||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m783898765-2a4efa67aa8d1c7be6b1dd9d)](https://uptime.invidious.io/784257752)|||[@unixfox](https://github.com/unixfox)|| +|[invidious.kavin.rocks](https://invidious.kavin.rocks)|India 🇮🇳|[United States 🇺🇸](https://invidious-us.kavin.rocks)
[Japan 🇯🇵](https://invidious-jp.kavin.rocks)|[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786132664-f9fa738fba1c4dc2f7364f71)](https://status.kavin.rocks/786132664)||Cloudflare|[@FireMasterK](https://github.com/FireMasterK)|| +|[vid.puffyan.us](https://vid.puffyan.us)|United States 🇺🇸||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786947233-1131c3f67b9a20621b1926d3)](https://stats.uptimerobot.com/n7A08HGVl6/786947233)|||[@ItsSt0ne](https://github.com/ItsSt0ne)|| +|[ytprivate.com](https://ytprivate.com)|United States 🇺🇸||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m786947505-2a50cf3262906bb28c6cf8fc)](https://status.ytprivate.com/786947505)||DDoS-Guard|[@ytprivatecom](https://github.com/ytprivatecom)| - [Modified source code](https://github.com/ytprivatecom/invidious)
- [Changes](https://github.com/ytprivatecom/invidious#source-changes)| +|[invidious.namazso.eu](https://invidious.namazso.eu)|Germany 🇩🇪|||[Here](https://namazso.eu/privacy.html)||[@namazso](https://github.com/namazso)|| +|[invidious.silkky.cloud](https://invidious.silkky.cloud)|Finland 🇫🇮||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m787784614-79d1acc4b425d1ed813fc793)](https://status.silkky.cloud/787784614)|[Here](https://silkky.cloud/privacy)||[@silkkycloud](https://github.com/silkkycloud)| - [Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)| +|[invidious.exonip.de](https://invidious.exonip.de)|Germany 🇩🇪||[Status Page](https://status.exonip.de/)|||[@Exonip](https://github.com/Exonip)| - [Modified source code](https://github.com/exonip-de/invidious-source-modifications)
- [Changes](https://github.com/exonip-de/invidious-source-modifications)
- [Anti-bot protection](https://github.com/bunkerity/bunkerized-nginx)| +|[inv.riverside.rocks](https://inv.riverside.rocks)|United States 🇺🇸|||||[@RiversideRocks](https://github.com/RiversideRocks)|| +|[vid.mint.lgbt](https://vid.mint.lgbt/)|Canada 🇨🇦||[Status Page](https://status.mint.lgbt/service/lesvidious)|||[@mintphin](https://github.com/mintphin)|| +|[ytb.trom.tf](https://ytb.trom.tf)|Germany 🇩🇪|||||[@TROMsite](https://github.com/TROMsite)| - [Modified source code](https://gitlab.com/TioTrom/trom.tf-invidious)
- [Changes](https://gitlab.com/TioTrom/trom.tf-invidious)| +|[y.com.cm](https://y.com.cm/)|Germany 🇩🇪||||Cloudflare|[@Showfom](https://github.com/Showfom)|| +|[invidious.hub.ne.kr](https://invidious.hub.ne.kr)|Korea, Republic of 🇰🇷|||[Here](https://privacy.osbusiness.net/)||[@hys0star](https://github.com/hys0star)|| +|[invidio.xamh.de](https://invidio.xamh.de)|Germany 🇩🇪||[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m788804183-a33a0af7fb40e3bafa617cd8)](https://img.shields.io/uptimerobot/status/m788804183-a33a0af7fb40e3bafa617cd8)|||[@11Tuvork28](https://github.com/11Tuvork28)|| +|[youtube.076.ne.jp](https://youtube.076.ne.jp)|Japan 🇯🇵|||||[@TechnicalSuwako](https://github.com/TechnicalSuwako)| - [Modified source code](https://git.076.ne.jp/TechnicalSuwako/invidious-mod)
- [Changes](https://git.076.ne.jp/TechnicalSuwako/invidious-mod#change)| +|[yt.didw.to](https://yt.didw.to/)|Sweden 🇸🇪|||||[@didw-to](https://github.com/didw-to)|| +|[yt.artemislena.eu](https://yt.artemislena.eu)|Germany 🇩🇪|||[Here](https://artemislena.eu/privacy.html)||[@artemislena](https://github.com/artemislena)|| + + +# Onion instances list + +|Address|Country|Mirrors|Associated clearnet instance|Privacy policy|Owner|Notes| +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +|[c7hqkpkpemu6e7emz5b4vyz7idjgdv...](http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion)|Finland 🇫🇮||[invidious.snopyta.org](https://invidious.snopyta.org)|[Here](https://snopyta.org/privacy_policy)|[@Perflyst](https://github.com/Perflyst)|| +|[w6ijuptxiku4xpnnaetxvnkc5vqcdu...](http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/)|India 🇮🇳|[United States 🇺🇸](http://hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid.onion/)
[Japan 🇯🇵](http://p4ozd76i5zmqepf6xavtehswcve2taptxbwpswkq5osfvncwylavllid.onion/)|[invidious.kavin.rocks](https://invidious.kavin.rocks)||[@FireMasterK](https://github.com/FireMasterK)|| +|[kbjggqkzv65ivcqj6bumvp337z6264...](http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion/)|Netherlands 🇳🇱||||[@tirz](https://github.com/tirz)|| +|[grwp24hodrefzvjjuccrkw3mjq4tzh...](http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/)|United States 🇺🇸||[vid.puffyan.us](https://vid.puffyan.us)||[@ItsSt0ne](https://github.com/ItsSt0ne)|| +|[invidc4i7i5uci6cledxsao6w7ng5e...](http://invidc4i7i5uci6cledxsao6w7ng5etpflagdzoxj3yhipztwzvqjryd.onion/)|Germany 🇩🇪||[invidious.exonip.de](https://invidious.exonip.de)||[@Exonip](https://github.com/Exonip)| - [Modified source code](https://github.com/exonip-de/invidious-source-modifications)
- [Changes](https://github.com/exonip-de/invidious-source-modifications)| +|[pwo2md4lgxs3hvroqi6wg33h6a3pv4...](http://pwo2md4lgxs3hvroqi6wg33h6a3pv47euax6km3alke7letglieokyd.onion)|Korea, Republic of 🇰🇷||[invidious.hub.ne.kr](https://invidious.hub.ne.kr)||[@hys0star](https://github.com/hys0star)|| +|[k7mnd6gyelynroxoncodxjz44fd5ch...](http://k7mnd6gyelynroxoncodxjz44fd5ch2ewfjl2a6ozmg3jy6fwyxq3cyd.onion/)|Sweden 🇸🇪||[yt.didw.to](https://yt.didw.to/)||[@didw-to](https://github.com/didw-to)|| + + +# Adding your instance + +## Prerequisites + +- Instances must have been updated in the last month. An instance that hasn't been updated in the last month is considered unmaintained and is removed from the list. +- Instances must have statistics (/api/v1/stats) enabled (statistics_enabled:true in the configuration file) +- Instances must be served via domain name. +- Instances must be served via HTTPS. +- Instances using any DDoS Protection / MITM are marked as such. +- Instances using any type of anti-bot protection are marked as such. +- Instances using any type of analytics are marked as such, must be GDPR compliant (if it's usable in the EU), must be CCPA compliant (if it's usable in California), and must respect the AGPL by explaining their changes and by publishing their source code. In short: instances shouldn't run analytics, because it's not worth it. +- Instances running a modified source code must respect the AGPL by publishing their source code and stating their changes before they are be added to the list, and must publish any later modification in a timely manner. + - The instance must also contain a link to *both* the modified and original source code of Invidious. Ideally in the footer. +- Instances should be up and functional at least 90% of the time. + + + +## Directions + +1. Fork the documentation repo. +2. Open `instances.yaml` for editing. +3. Append your instance to the bottom of the HTTPS (or onion) list. See the examples in the yaml file for more info. +4. Make a pull request.