{"id":18337895,"url":"https://github.com/mrquackduck/colirbackend","last_synced_at":"2025-04-13T08:26:19.120Z","repository":{"id":252131867,"uuid":"822676677","full_name":"MrQuackDuck/ColirBackend","owner":"MrQuackDuck","description":"Fancy messaging platform with client end-to-end encryption and ability to speak in voice channels.","archived":false,"fork":false,"pushed_at":"2025-01-28T18:23:32.000Z","size":734,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-13T08:26:09.026Z","etag":null,"topics":["aspnet","colir","csharp","dotnet","signalr"],"latest_commit_sha":null,"homepage":"https://colir.net","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MrQuackDuck.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2024-07-01T15:33:48.000Z","updated_at":"2025-03-23T08:41:11.000Z","dependencies_parsed_at":"2024-08-29T22:13:05.646Z","dependency_job_id":"e915d67b-cc9a-411d-aacb-0e923d9fb446","html_url":"https://github.com/MrQuackDuck/ColirBackend","commit_stats":null,"previous_names":["mrquackduck/colirbackend"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrQuackDuck%2FColirBackend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrQuackDuck%2FColirBackend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrQuackDuck%2FColirBackend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrQuackDuck%2FColirBackend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrQuackDuck","download_url":"https://codeload.github.com/MrQuackDuck/ColirBackend/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248682630,"owners_count":21144820,"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":["aspnet","colir","csharp","dotnet","signalr"],"created_at":"2024-11-05T20:12:42.342Z","updated_at":"2025-04-13T08:26:19.094Z","avatar_url":"https://github.com/MrQuackDuck.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e\u003cimg src=\"https://i.imgur.com/oXZ9m9E.png\" height=80 /\u003e\u003cdiv\u003eColir (BackEnd)\u003c/div\u003e\u003c/h1\u003e\n\u003cp\u003e\n  \u003ca href=\"https://dotnet.microsoft.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/.NET-gray?color=6B47C1\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9IndoaXRlIiBkPSJNMS4xOTQgNy41NDN2OC45MTNjMCAxLjEwMy41ODggMi4xMjIgMS41NDQgMi42NzRsNy43MTggNC40NTZhMy4wOSAzLjA5IDAgMCAwIDMuMDg4IDBsNy43MTgtNC40NTZhMy4wOSAzLjA5IDAgMCAwIDEuNTQ0LTIuNjc0VjcuNTQzYTMuMDggMy4wOCAwIDAgMC0xLjU0NC0yLjY3M0wxMy41NDQuNDE0YTMuMDkgMy4wOSAwIDAgMC0zLjA4OCAwTDIuNzM4IDQuODdhMy4wOSAzLjA5IDAgMCAwLTEuNTQ0IDIuNjczbTUuNDAzIDIuOTE0djMuMDg3YS43Ny43NyAwIDAgMCAuNzcyLjc3MmEuNzczLjc3MyAwIDAgMCAuNzcyLS43NzJhLjc3My43NzMgMCAwIDEgMS4zMTctLjU0NmEuNzguNzggMCAwIDEgLjIyNi41NDZhMi4zMTQgMi4zMTQgMCAxIDEtNC42MzEgMHYtMy4wODdjMC0uNjE1LjI0NC0xLjIwMy42NzktMS42MzdhMi4zMSAyLjMxIDAgMCAxIDMuMjc0IDBjLjQzNC40MzQuNjc4IDEuMDIzLjY3OCAxLjYzN2EuNzcuNzcgMCAwIDEtLjIyNi41NDVhLjc2Ny43NjcgMCAwIDEtMS4wOTEgMGEuNzcuNzcgMCAwIDEtLjIyNi0uNTQ1YS43Ny43NyAwIDAgMC0uNzcyLS43NzJhLjc3Ljc3IDAgMCAwLS43NzIuNzcybTEyLjM1IDMuMDg3YS43Ny43NyAwIDAgMS0uNzcyLjc3MmgtLjc3MnYuNzcyYS43NzMuNzczIDAgMCAxLTEuNTQ0IDB2LS43NzJoLTEuNTQ0di43NzJhLjc3My43NzMgMCAwIDEtMS4zMTcuNTQ2YS43OC43OCAwIDAgMS0uMjI2LS41NDZ2LS43NzJIMTJhLjc3MS43NzEgMCAxIDEgMC0xLjU0NGguNzcydi0xLjU0M0gxMmEuNzcuNzcgMCAxIDEgMC0xLjU0NGguNzcydi0uNzcyYS43NzMuNzczIDAgMCAxIDEuMzE3LS41NDZhLjc4Ljc4IDAgMCAxIC4yMjYuNTQ2di43NzJoMS41NDR2LS43NzJhLjc3My43NzMgMCAwIDEgMS41NDQgMHYuNzcyaC43NzJhLjc3Mi43NzIgMCAwIDEgMCAxLjU0NGgtLjc3MnYxLjU0M2guNzcyYS43NzYuNzc2IDAgMCAxIC43NzIuNzcybS0zLjA4OC0yLjMxNWgtMS41NDR2MS41NDNoMS41NDR6Ii8+PC9zdmc+\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://dotnet.microsoft.com/en-us/apps/aspnet\"\u003e\u003cimg src=\"https://img.shields.io/badge/ASP.NET-gray?color=2A4FBD\u0026logo=dotnet\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.docker.com/get-docker/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-gray?color=1C90ED\u0026logo=docker\u0026logoColor=FFFFFF\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.postgresql.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/PostgreSQL-gray?color=2A92CA\u0026logo=postgresql\u0026logoColor=FFFFFF\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://learn.microsoft.com/en-us/ef/core/\"\u003e\u003cimg src=\"https://img.shields.io/badge/EF_Core-gray?color=F07427\u0026logo=dotnet\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://dotnet.microsoft.com/en-us/apps/aspnet/signalr\"\u003e\u003cimg src=\"https://img.shields.io/badge/SignalR-gray?color=8BBE1B\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iNzUwIiBoZWlnaHQ9Ijc1MCIgdmlld0JveD0iMCAwIDc1MCA3NTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0zMDUuNjgyIDU0NS40NTVMMzQ3LjcyNyA0NDMuMTgySDQ0Mi4wNDVDNDc5LjU0NiA0NDMuMTgyIDUxMC4yMjcgNDEyLjUgNTEwLjIyNyAzNzVDNTEwLjIyNyAzMzcuNSA0NzkuNTQ2IDMwNi44MTggNDQyLjA0NSAzMDYuODE4SDEzNS4yMjdMMzA1LjY4MiAxMzYuMzY0VjIwNC41NDVINDQyLjA0NUM1MzYuMzYzIDIwNC41NDUgNjEyLjUgMjgwLjY4MSA2MTIuNSAzNzVDNjEyLjUgNDY3LjA0NSA1MzkuNzczIDU0MC45MDkgNDUwIDU0NC4zMThMNTg4LjYzNyA2ODIuOTU0QzY4Ni4zNjQgNjE0Ljc3MiA3NTAgNTAyLjI3MyA3NTAgMzc1Qzc1MCAxNjguMTgyIDU4MS44MTggMCAzNzUgMEMxNjguMTgyIDAgMCAxNjguMTgyIDAgMzc1QzAgNTgxLjgxOCAxNjguMTgyIDc1MCAzNzUgNzUwQzQxNS45MDkgNzUwIDQ1NS42ODIgNzQzLjE4MiA0OTIuMDQ2IDczMC42ODFMMzA1LjY4MiA1NDUuNDU1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cb\u003eColir — fast \u0026 secure \u003cins\u003emessaging platform\u003c/ins\u003e \u003c/b\u003ewith\u003cb\u003e end-to-end\u003c/b\u003e encryption. \u003cbr\u003e\n\n\u003cb\u003eWeb Client\u003c/b\u003e can be found \u003ca href=\"https://github.com/MrQuackDuck/ColirWebClient/\"\u003ehere\u003c/a\u003e.\n\n## 🌈 The idea\nThe main goal of **Colir** is to provide an ability to **communicate securely**. \u003cbr\u003e\n\nTo implement that, **end-to-end encryption** was chosen. Before using the application, **users should discuss a secret key** that will be **used to encrypt \u0026 decrypt** the data.\u003cbr\u003e\n\u003e [!NOTE]\n\u003e The **encryption keys** for rooms are stored **on the client only**. They're **not being sent to the server**.\n\nThis **API's role** is **to transfer** and **store** the encrypted data.\n\n## 🌠 Features\nBesides that, **Colir** **has** a couple of **features**, which can interest you in:\n- **Rooms** are places where the encrypted communication happens. When a user **creates** a room, he/she chooses an **encryption key** (which will be stored at the client) and receives a **room GUID**. **They can share that GUID** with someone else so they **can join** that room. **Anyone** who has **the GUID** of a certain room **can join** it, but it will be **impossible to decrypt** the data **if** the **wrong encryption** key was provided.\n- **Expiry date** can be provided for **rooms**. **When** the **expiry date comes**, all **data won't be accessible** and **will be deleted** forever.\n- There's only **one voice channel** per room.\n- **Passwordless authentication**. There are **three ways to authenticate**: **anonymous** (gives you a one-time JWT), **GitHub** account, and **Google** account.\n- Each user has a unique **\"Colir ID\"**, which is a **6 symbol-length hexadecimal number** to identify a user.\n\u003e [!CAUTION]\n\u003e If you authenticate as **anonymous**, you **won't be able to login** into that account again.\u003cbr\u003e\n\u003e **Therefore**, use **3rd party providers** such as **GitHub** and **Google** to be able to login as much as you want.\n\n## 🐳 Deployment\n1. Install \u003ca href=\"https://docs.docker.com/get-docker/\"\u003eDocker\u003c/a\u003e\n2. Clone this repo \u003cbr\u003e\n   **\u003e** `git clone https://github.com/MrQuackDuck/ColirBackend.git`\n3. Jump into the folder \u003cbr\u003e\n   **\u003e** `cd .\\ColirBackend\\`\n4. Run the container \u003cbr\u003e\n   **\u003e** `docker compose up`\n\n\u003e [!IMPORTANT]\n\u003e When you've cloned the repository, make sure to configure these variables in `appsettings.json`:\u003cbr\u003e\n\u003e - `Authentication:JwtKey` - a **secret key** used to sign **JWT tokens**\n\u003e - `Authentication:RefreshTokenKey` - a **secret key** used to sign **refresh tokens**\n\u003e - `OAuth2:GitHubClientId` - **GitHub Client Id** (see \u003ca href=\"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps\"\u003eAuthorizing OAuth apps\u003c/a\u003e)\n\u003e - `OAuth2:GitHubSecret` - **GitHub Client Secret** (see \u003ca href=\"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps\"\u003eAuthorizing OAuth apps\u003c/a\u003e)\n\u003e - `OAuth2:GoogleClientId` - **Google Client Id** (see \u003ca href=\"https://developers.google.com/identity/protocols/oauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name-.\"\u003eUsing OAuth 2.0 to Access Google APIs\u003c/a\u003e)\n\u003e - `OAuth2:GoogleClientSecret` - **Google Client Secret** (see \u003ca href=\"https://developers.google.com/identity/protocols/oauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name-.\"\u003eUsing OAuth 2.0 to Access Google APIs\u003c/a\u003e)\n\u003e - `OAuth2:GoogleRedirectLink` - **Google Redirect Link** (the callback-link after **Google OAuth2** consent you've configured in \u003ca href=\"https://console.cloud.google.com\"\u003eGoogle Cloud Console\u003c/a\u003e)\n\u003e - `DatabaseEncryption:EncryptionPassword` - The **16-char password** that will be used to encrypt some data on writing/reading into/from the database.\n\u003e - `DatabaseEncryption:InitializationVector` - The **16-char initialization vector** that will be used to encrypt some data on writing/reading into/from the database.\n\n## 🖥 Development server\n\n1. Install \u003ca href=\"https://dotnet.microsoft.com/en-us/download/dotnet/8.0\"\u003e.NET 8\u003c/a\u003e\n2. Clone this repo\n3. Run `dotnet run --project Colir.WebApi` command\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrquackduck%2Fcolirbackend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrquackduck%2Fcolirbackend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrquackduck%2Fcolirbackend/lists"}