{"id":25452538,"url":"https://github.com/pippinmole/illusive","last_synced_at":"2025-05-16T12:14:01.113Z","repository":{"id":55984509,"uuid":"304167584","full_name":"pippinmole/Illusive","owner":"pippinmole","description":"An ASP.NET Core C# back-end application for a forum website.","archived":false,"fork":false,"pushed_at":"2022-11-12T17:48:29.000Z","size":3861,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-17T23:06:17.308Z","etag":null,"topics":["asp-net-core","backend-service","forum","forum-website","razor-pages","webapi","webapp","website"],"latest_commit_sha":null,"homepage":"https://illusive.azurewebsites.net/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pippinmole.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}},"created_at":"2020-10-15T00:27:10.000Z","updated_at":"2023-09-27T06:05:21.000Z","dependencies_parsed_at":"2022-08-15T10:50:27.083Z","dependency_job_id":null,"html_url":"https://github.com/pippinmole/Illusive","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pippinmole%2FIllusive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pippinmole%2FIllusive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pippinmole%2FIllusive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pippinmole%2FIllusive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pippinmole","download_url":"https://codeload.github.com/pippinmole/Illusive/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254527093,"owners_count":22085919,"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":["asp-net-core","backend-service","forum","forum-website","razor-pages","webapi","webapp","website"],"created_at":"2025-02-17T23:06:24.492Z","updated_at":"2025-05-16T12:14:01.096Z","avatar_url":"https://github.com/pippinmole.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub repo size](https://img.shields.io/github/repo-size/pippinmole/Illusive)\n![GitHub issues](https://img.shields.io/github/issues/pippinmole/Illusive)\n![GitHub](https://img.shields.io/github/license/pippinmole/Illusive)\n![GitHub Workflow Status](https://img.shields.io/github/workflow/status/pippinmole/Illusive/Build%20and%20deploy%20ASP.Net%20Core%20app%20to%20Azure%20Web%20App%20-%20illusive)\n![Twitter Follow](https://img.shields.io/twitter/follow/pippinmole?style=social)\n\n[API Documentation](https://forum.ruffles.pw/api/v1)\n\n# Illusive\n\nA forum website and REST API made on the [ASP.NET Core framework](https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-3.1) using [Razor pages](https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0\u0026tabs=visual-studio) and [.NET WebAPI](https://dotnet.microsoft.com/apps/aspnet/apis).\n\n## Installation\n\nClone the repo using Git terminal\n```cli\ngh repo clone pippinmole/Illusive\n```\n\n*or* download [*here*](https://github.com/pippinmole/Illusive/archive/main.zip).\n\n## Usage\n\nYou will need to set up some services to obtain connection strings so the application can interact with things like a database.\n\n###### MongoDB\n1. Create an account and cluster using [this](https://docs.mongodb.com/guides/cloud/account/) tutorial.\n2. Obtain the connection string which should be formatted as such:\n\n    ```cli\n    mongodb+srv://\u003cusername\u003e:\u003cpassword\u003e@cluster0.builj.azure.mongodb.net/\u003cdbname\u003e?retryWrites=true\u0026w=majority\n    ```\n\n3. Add the app secret to the [appsettings.json](https://github.com/pippinmole/Illusive/blob/main/appsettings.json) file:\n    ```json\n    \"ConnectionStrings\": {\n      \"DatabaseConnectionString\": \"\u003capi key\u003e\"\n    }\n    ```\n\n###### Serilog\n\n1. Add the app secret to the [appsettings.json](https://github.com/pippinmole/Illusive/blob/main/appsettings.json) file:\n    ```json\n    \"Serilog\": {\n      \"DataDog\": {\n       \"ApiKey\": \"\u003capi key\u003e\"\n      }\n    }\n    ```\n\n###### Content Delivery\n\n###### Mail Handling\nYou will need access to an SMTP server for password resetting to work, since an email does get sent out to users' accounts in the scenario that they have forgotten their credentials.\n\nTo set up email services:\n1. Register an SMTP server and obtain the relevant credentials\n2. Enter the credentials into the appsettings.json\n    ```json\n    \"MailSenderOptions\": {\n      \"AddressFrom\": \"\",\n      \"Password\": \"\",\n      \"SmtpHostAddress\": \"\",\n      \"Port\": \"\"\n    }\n    ```\n\n#### Example appsettings.json\n```json\n{\n  \"AllowedHosts\": \"*\",\n  \"ConnectionStrings\": {\n    \"ConnectionStrings\": \"\u003capi key\u003e\",\n    \"CdnConnectionString\": \"\u003capi key\u003e\"\n  },\n  \"RecaptchaSettings\": {\n    \"ContentSecurityPolicy\": \"\u003cpolicy key\u003e\",\n    \"SecretKey\": \"\u003capi key\u003e\",\n    \"SiteKey\": \"\u003capi key\u003e\"\n  },\n  \"Serilog\": {\n    \"Using\": [ \"Serilog.Sinks.Console\", \"Serilog.Sinks.Datadog.Logs\", \"Serilog.Sinks.File\" ],\n    \"MinimumLevel\": {\n      \"Default\": \"Debug\",\n      \"Override\": {\n        \"Microsoft\": \"Warning\",\n        \"Microsoft.Hosting.Lifetime\": \"Information\",\n        \"System.Net.Http.HttpClient\": \"Warning\"\n      }\n    },\n    \"Enrich\": [\n      \"FromLogContext\"\n    ],\n    \"DataDog\": {\n      \"OverrideLogLevel\": \"Information\"\n    },\n    \"WriteTo\": [\n      {\n        \"Name\": \"Console\"\n      }\n    ]\n  }\n}\n```\n\n## WebAPI\n\nThe WebAPI allows for both anonymous and registered users to interact with the forum using GET, POST, DELETE and PUT requests. The [Illusive Public API Documentation](https://forum.ruffles.pw/api/v1/index.html) is automatically generated using [Swagger](https://swagger.io/).\nTo easily create requests, you can use tools such as [PostMaster](https://www.postmaster.co.uk/) or [Fiddler](https://www.telerik.com/fiddler).\n\nThe API can be seen in action here:\n[![Image from Gyazo](https://i.gyazo.com/782d545c24bef29bd7dfd396ad9784f5.gif)](https://gyazo.com/782d545c24bef29bd7dfd396ad9784f5)\n\n### Authorization\n\nSome of the requests require account authorization. Thankfully, Illusive offers an secret JWT API token which can be used to identify a user. It can be found under the Account section of the forum.\nIf you are using one of the tools suggested above, you can add the authorization header as so:\n\n [![Image from Gyazo](https://i.gyazo.com/feb34909d5b11f4cae8b008744c3ebe1.gif)](https://gyazo.com/feb34909d5b11f4cae8b008744c3ebe1)\n \nIf you are using the API token elsewhere, simply use the dictionary key-value pair in your header (you may be required to explicitly state the request format is in JSON):\n \n ```\n    \"Authorization: Bearer \u003capi token\u003e\",\n    \"Content-Type: application/json\"\n```\n\n## Contributing\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -am 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :D\n\n## Dependencies\n\n| Dependency                                                                                   \t| Description                                                                                                                                  \t|\n|----------------------------------------------------------------------------------------------\t|----------------------------------------------------------------------------------------------------------------------------------------------\t|\n| [Simplmds-markdown-editor](https://github.com/sparksuite/simplemde-markdown-editor)          \t| A drop-in JavaScript textarea replacement for writing beautiful and understandable markdown.                                                 \t|\n| [MongoDB.Driver](https://www.nuget.org/packages/MongoDB.Driver/2.11.3)                       \t| A driver for C# application to connect to a [MongoDB](https://www.mongodb.com/) instance                                                     \t|\n| [Westwind.AspNetCore.Markdown](https://www.nuget.org/packages/Westwind.AspNetCore.Markdown/) \t| A C# library that parses markdown string into HTMLStrings for rendering on HTML pages.                                                       \t|\n| [BCrypt.Net-Next](https://www.nuget.org/packages/BCrypt.Net-Next/)                           \t| A C# encryption library.                                                                                                                     \t|\n| [Humanizer.Core](https://www.nuget.org/packages/Humanizer.Core)                              \t| Extension methods for the DateTime and TimeSpan datatypes in C# to be parsed to human-readable/user interface strings.                       \t|\n| [Azure.Storage.Blobs](https://www.nuget.org/packages/Azure.Storage.Blobs)                    \t| A driver for C# applications to connect to an [Azure Blob](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction). \t|\n| [jQuery.AJAX](https://api.jquery.com/Jquery.ajax/)                                           \t| A JavaScript library that allows for easy POST, GET, DELETE and PUT requests on client-side webpage.                                         \t|\n| [party.js](https://partyjs.yiliansource.dev/)                                                \t| A JavaScript library to brighten up your user's site experience with visual effects!                                                         \t|\n| [Serilog.AspNetCore](https://www.nuget.org/packages/Serilog.AspNetCore)                      \t| A C# driver for application logging.                                                                                                         \t|\n| [Serilog.Sinks.Async](https://www.nuget.org/packages/Serilog.Sinks.Async/1.4.1-dev-00073)    \t| A C# driver that works with Serilog.AspNetCore to connect to external logging sinks.                                                         \t|\n| [Serilog.Sinks.Datadog.Logs](https://www.nuget.org/packages/Serilog.Sinks.Datadog.Logs/)     \t| A C# driver that works with Serilog.Sinks.Async.                                                                                             \t|\n\n## Licence\nCopyright © 2020 [pippin_mole](https://github.com/pippinmole).  \nIllusive is licensed under [MIT](https://github.com/pippinmole/Illusive/blob/main/LICENSE). Do what you want.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpippinmole%2Fillusive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpippinmole%2Fillusive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpippinmole%2Fillusive/lists"}