{"id":26723439,"url":"https://github.com/hexxone/TeleJelly","last_synced_at":"2025-03-27T21:02:01.787Z","repository":{"id":74906794,"uuid":"602276374","full_name":"hexxone/TeleJelly","owner":"hexxone","description":"Telegram Login Widget Authentication Plugin for Jellyfin","archived":false,"fork":false,"pushed_at":"2025-02-15T13:02:12.000Z","size":1405,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-26T16:58:03.149Z","etag":null,"topics":["authentication","c-sharp","jellyfin","jellyfin-plugin","jellyfin-sso","sso","sso-client","telegram","telegram-bot","telegram-login-widget"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hexxone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-15T21:39:04.000Z","updated_at":"2025-03-24T23:57:17.000Z","dependencies_parsed_at":"2024-12-07T01:20:55.374Z","dependency_job_id":"ca9f20f2-24d6-4c13-9b01-df407fb15a2d","html_url":"https://github.com/hexxone/TeleJelly","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexxone%2FTeleJelly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexxone%2FTeleJelly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexxone%2FTeleJelly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexxone%2FTeleJelly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hexxone","download_url":"https://codeload.github.com/hexxone/TeleJelly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245924497,"owners_count":20694727,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","c-sharp","jellyfin","jellyfin-plugin","jellyfin-sso","sso","sso-client","telegram","telegram-bot","telegram-login-widget"],"created_at":"2025-03-27T21:01:05.346Z","updated_at":"2025-03-27T21:02:01.716Z","avatar_url":"https://github.com/hexxone.png","language":"C#","funding_links":[],"categories":["🧩 Plugins"],"sub_categories":["🔐 Authentication"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg alt=\"Logo\" src=\"https://raw.githubusercontent.com/hexxone/TeleJelly/main/TeleJelly/thumb.jpg\" height=256 /\u003e\n\u003cbr/\u003e\n\u003cbr/\u003e\n\u003ca href=\"https://github.com/hexxone/TeleJelly/blob/main/LICENSE\"\u003e\n\u003cimg alt=\"GPL 3.0 License\" src=\"https://img.shields.io/github/license/hexxone/TeleJelly\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/hexxone/TeleJelly/releases\"\u003e\n\u003cimg alt=\"Current Release\" src=\"https://img.shields.io/github/release/hexxone/TeleJelly\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/hexxone/TeleJelly/releases\"\u003e\n\u003cimg alt=\"Current Release Date\" src=\"https://img.shields.io/github/release-date/hexxone/TeleJelly?color=blue\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/hexxone/TeleJelly/releases\"\u003e\n\u003cimg alt=\"GitHub Downloads\" src=\"https://img.shields.io/github/downloads/hexxone/telejelly/total\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/hexxone/TeleJelly/stargazers\"\u003e\n\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/hexxone/TeleJelly\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eTeleJelly Plugin\u003c/h1\u003e\n\nA Plugin for logging into [Jellyfin](https://jellyfin.org/) using the [Telegram Login Widget](https://core.telegram.org/widgets/login) as \"SSO\" provider.\n\nAllows for simple Group creation/editing/deleting in order to manage Admins/Users/Library-access.\n\nInspired by [jellyfin-plugin-ldapauth](https://github.com/jellyfin/jellyfin-plugin-ldapauth) and [jellyfin-plugin-sso](https://github.com/9p4/jellyfin-plugin-sso).\n\nCreated from [jellyfin-plugin-template](https://github.com/jellyfin/jellyfin-plugin-template).\n\n## Contents\n\n- [Usage](#usage)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Known issues](#known-issues)\n- [Demo Video](#demo-video)\n- [Screenshots](#screenshots)\n- [Making Changes](#making-changes)\n\n## Usage\n\n1. User clicks the `Sign in with Telegram` Disclaimer Link on the Jellyfin Login Page\n2. User lands on the page `/sso/Telegram`\n3. Plugin shows a Page with embedded Telegram Login Widget.\n4. When the button is clicked, Plugin validates User credentials using bot token.\n    - On Success -\u003e Authenticate \u0026 redirect User to Jellyfin Dashboard\n    - On Failure -\u003e Show Error Message (e.g. Invalid Data, not Whitelisted)\n\n### Features\n\n- SSO Login page (at `/sso/Telegram`)\n    - styled similar to the regular login page\n    - responsive / mobile capable\n    - shows a \"Back to Normal Login\" button\n    - shows the Telegram Login Widget\n    - checks the Telegram Auth data against the backend\n    - if data is invalid -\u003e show error message\n    - if data is valid -\u003e takes the Jellyfin Auth Response and authenticates the user\n    - loading animation\n    - supports custom CSS\n\n- Config page (reachable via Jellyfin Plugin Page)\n    - requires setting the Telegram Bot Token\n    - allows setting a List of Administrator Telegram Usernames (get full Access)\n    - allows forcing an external Protocol Scheme (for reverse proxies like Traefik)\n    - allows Creating/Editing/Deleting a \"virtual\" management Group\n        - Grants access to all OR specific Libraries for non-Administrators.\n        - _Note: A user needs to be Admin OR part of at least ONE Group to Log-in._\n\n### Requirements\n\n1. A Telegram Username is mandatory for all users who wish to use this Login method.\n2. A valid, public SSL certificate is needed for the Login Widget to work (e.g. LetsEncrypt).\n3. A Telegram Bot (token) is required to cryptograhpically validate the User Login credentials.\n\n## Installation\n\nYou can choose between 3 options below.\n\n### Option 1: Plugin Repository (easy way)\n\n1. Add the repository: \u003chttps://raw.githubusercontent.com/hexxone/TeleJelly/dist/manifest.json\u003e\n2. install `TeleJelly` from the Plugin catalogue\n3. restart jellyfin\n\n### Option 2: Download manually\n\n1. Download the 'latest' [Release](https://github.com/hexxone/TeleJelly/releases)\n2. Unzip files into `config/plugins/TeleJelly` folder (create it if non-existing)\n3. restart jellyfin\n\n### Option 3: Compile by yourself\n\nDon't trust the downloads?\n\n1. `git clone https://github.com/hexxone/TeleJelly.git` or download as zip.\n2. install [.NET6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) / [.NET8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) (see Tools section below)\n3. run `publish.ps1`\n4. put `./publish/` files into `config/plugins/TeleJelly` folder\n5. restart jellyfin\n\n## Configuration\n\n1. Make a new Bot \u0026 get the Token via [@Botfather](https://t.me/BotFather)\n2. Make sure to use the `/setdomain` command to link your jellyfin domain (needs valid SSL cert).\n3. Go to the Plugin configuration page and fill in the Bot-Token.\n4. Add yourself into the \"Administrators\" list for full access, or create an Administrator Group.\n5. Now you should be able to log in via Telegram by visiting `jelly.fin/sso/Telegram`.\n6. You may also include this link in the Login \"Branding\" via Markdown or HTML.\n\nE.g.: `[Telegram-Login](https://jelly.fin/sso/telegram)` or screenshots below.\n\n## Known issues\n\n- This Login-method is intended for Desktop/Browser usage. It has not been tested to be working with official Jellyfin Apps.\n  If you encounter problems, try signing in on a \"real\" browser instead and use the `Quick Connect` feature when possible.\n  Besides that, there is very little you or I can do.\n\n- The `Sign in with Telegram` button will sometimes get hidden by Browser Plugins like \"I don't like Cookies\" or \"UBlock Origin\".\n  Try disabling these on your Jellyfin domain and inform your users.\n\n- If a User's profile picture fails to download even though the url is given (err 404), he has probably set it to private.\n  In this case, the plugin will fall back to its default icon.\n\n- If a User were to change/sell his Username, a random person would possibly be able to use this Service.\n  However, having Names over ID's is much more convenient for Management.\n\n- If your server is publicly reachable, make sure to take care of rate limiting with your reverse proxy,\n  otherwise adversaries might be able to lag the system.\n\n## Demo Video\n\n_Note: Video \u0026 Screenshots are taken with [my custom css theme](https://gist.github.com/hexxone/f00eecb130fa1ca12b3a4bc43d54e587) applied. The Logo is AI-generated._\n\nhttps://github.com/user-attachments/assets/48b908e7-c08e-4669-9d61-079c30cd229f\n\n## Screenshots\n\n\u003cdetails\u003e\n\n\u003csummary\u003eLogin Disclaimer\u003c/summary\u003e\n\n![Login Disclaimer](./screenshots/00.png)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003eLogin Page\u003c/summary\u003e\n\n![Login Page](./screenshots/01.png)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003eConfig Page\u003c/summary\u003e\n\n![Config Page 1](./screenshots/02.png)\n\n\u003c/details\u003e\n\n## Making Changes\n\n### Tools\n\n- [git](https://git-scm.com/downloads)\n- [Visual Studio](https://visualstudio.microsoft.com/de/downloads/) or Rider IDE\n- [.NET6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) for Jellyfin \u003c= 10.8\n- [.NET8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) for Jellyfin \u003e= 10.9\n- [JellyFin Server](https://repo.jellyfin.org/?path=/server/windows) for debugging on Windows. Keep the default path.\n\n### Dependencies\n\n- [Telegram.Bot](https://github.com/TelegramBots/telegram.bot) library for validating bot token \u0026 determining bot username\n- [ILRepack](https://github.com/gluck/il-repack) for packing all dependency dlls into one single plugin dll\n- [MinVer](https://github.com/adamralph/minver) for automated Release-versioning via git tags\n\n### Getting Started\n\n1. Run `git clone https://github.com/hexxone/TeleJelly.git`\n2. Open `TeleJelly.sln` file with VS or Rider, restore Nuget packages\n3. Build `TeleJelly` Plugin in Release mode\n4. First run `HttpsReverseProxy` AND then `jellyfin` (server) at the same time.\n5. The plugin gets copied to the server and the browser opens automatically.\n\n### Contributing\n\nWhen implementing a new feature, please name your commit messages in a meaningful way and refer to git best practices.\n\nThe plugin uses \"MinVer\" and git-tags for semantic versioning.\n\nMost of the Versions (meta.json and manifest.json) get incremented automatically on release build,\n**but** there are some places which have to be done manually - for example in the `config.html`.\n\nWhen targeting an updated version of Jellyfin, remember to set the correct `TargetAbi` version in `JellyfinPluginHelper`!\n\n\u003e Feel free to open a new Pull-Requests for useful additions and fixes.\n\n## Licensing\n\nLicensing is a complex topic. This repository features a GPLv3 license template that can be used to provide a good default license for your plugin.\nYou may alter this if you like, but if you do a permissive license must be chosen.\n\nDue to how plugins in Jellyfin work, when your plugin is compiled into a binary, it will link against the various Jellyfin binary NuGet packages.\nThese packages are licensed under the GPLv3. Thus, due to the nature and restrictions of the GPL, the binary plugin you get will also be licensed under the GPLv3.\n\nIf you accept the default GPLv3 license from this template, all will be good. If you however choose a different license, please keep this fact in mind,\nas it might not always be obvious that a, e.g. MIT-licensed plugin would become GPLv3 when compiled.\n\nPlease note that this also means making \"proprietary\", source-unavailable, or otherwise \"hidden\" plugins for public consumption is not permitted.\nTo build a Jellyfin plugin for distribution to others, it must be under the GPLv3 or a permissive open-source license that can be linked against the GPLv3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexxone%2FTeleJelly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhexxone%2FTeleJelly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexxone%2FTeleJelly/lists"}