{"id":17008732,"url":"https://github.com/i-e-b/webjony","last_synced_at":"2025-03-22T12:29:08.260Z","repository":{"id":139826549,"uuid":"142444029","full_name":"i-e-b/WebJony","owner":"i-e-b","description":"An API version control and hosting solution for ASP.Net","archived":false,"fork":false,"pushed_at":"2018-08-13T11:55:02.000Z","size":194,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-27T12:11:11.815Z","etag":null,"topics":["api-wrapper","asp-net","iis","old","server","version-manager","working"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/i-e-b.png","metadata":{"files":{"readme":"Readme.txt","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2018-07-26T13:21:48.000Z","updated_at":"2023-08-30T12:46:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"6bbae62c-efb0-4937-bce5-aba9f0eae020","html_url":"https://github.com/i-e-b/WebJony","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/i-e-b%2FWebJony","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-e-b%2FWebJony/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-e-b%2FWebJony/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i-e-b%2FWebJony/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i-e-b","download_url":"https://codeload.github.com/i-e-b/WebJony/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244958790,"owners_count":20538620,"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":["api-wrapper","asp-net","iis","old","server","version-manager","working"],"created_at":"2024-10-14T05:29:08.418Z","updated_at":"2025-03-22T12:29:08.239Z","avatar_url":"https://github.com/i-e-b.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"Wrapper Test\r\n============\r\n\r\nExample of a web app that loads various other MVC Web API sites, and provides various security, logging and API versioning tools.\r\n\r\nFeatures:\r\n---------\r\n\r\n* [x] Global error handling\r\n* [x] AAD security unwrapping\r\n* [x] watcher/loader\r\n* [x] Real routing to services\r\n* [x] Expose SwaggerUI calls\r\n* [x] Signed-binary upload tool, require signed binaries on host. (note: the cert used is found by fixed name: \"WrapperSigning.pfx.cer\")\r\n* [x] Handle differing versions of `System.Web.Http` in different versions of hosted site\r\n* [x] Ensure that redirects work (change `localhost` bounces up to proxy parent)\r\n* [x] Edit target site version to set \u003cconfiguration\u003e,  \u003csystem.web\u003e, \u003ccustomErrors mode=\"Off\" /\u003e\r\n* [x] Collect security and version header in Swagger\r\n* [x] Keep old versions running until new version is warm (plus pre-warm with a call to '/health')\r\n* [x] Delete failed updates\r\n* [x] Root-level health check (call to all versions' /health endpoint and display)\r\n* [x] Error/failure statistics (parent gathers failures and provides them on the health endpoint)\r\n* [x] Optional force HTTPS upgrade\r\n* [x] Ensure upload tool works if given a http endpoint and the target auto-upgrades\r\n* [x] Rapid call test in JwtEndpointCaller (multithread calls)\r\n* [x] Reject known dll names from the file system scan (speed up start-up)\r\n* [x] Remove hard-coding, push account keys to a non-committed file\r\n* [x] Simple hosting on IIS (Custom version of RawIsapi project)\r\n* [x] Some graphs -- one that shows % proportion of versions over time, and the other where you pick a version and it shows % errors over time\r\n\r\nTODO:\r\n-----\r\n\r\nNext up:\r\n* [ ] Analytics integration point, including an Azure App Insights example\r\n\r\nApproximate priority order:\r\n* [ ] Centralised package data store (for Azure hosting)\r\n* [ ] Status API (add to management tool, and retire the test page?)\r\n* [ ] Ability to change logging level on the fly\r\n* [ ] Stats API (including graph output urls)\r\n* [ ] Removal of specific versions? (delete by major \u0026 minor)\r\n* [ ] New version feed-in mode? (newer minor versions get progressively more traffic?)\r\n* [ ] Automatic A/B testing (50% feed, watch error rates)\r\n* [ ] Version limit / retiring (limit on how many major versions can be active at once, with oldest being inaccessible)\r\n* [ ] Options for CORS header support\r\n* [ ] Gasconade version page\r\n* [ ] Automatic result compression\r\n* [ ] Sample Service Fabric deployment\r\n\r\nPotential features:\r\n-------------------\r\n\r\n* [ ] Ability to point different versions at different web.config transforms (i.e. latest version can be set to test db until stabilised)\r\n* [ ] Ability to host function dlls (not using Huygens?)\r\n* [ ] Static 'oops' result for 500-class errors in hosted site?\r\n* [ ] Delete uploads that are out-of-date (if the version table rejects them)\r\n* [ ] Optional service bus trace listener, or configurable listener injection\r\n* [ ] Optional default version (that can we switched while live) -- for websites.\r\n* [ ] Per-client rate limiting (rate limit how much any single IP can push/pull)\r\n* [ ] White list upload IPs\r\n\r\nNotes:\r\n------\r\n\r\nRequest versioning is done with a header, with a major version only:\r\n```\r\nGET /user/1 HTTP/1.1\r\n    Host: myapplication.com\r\n    Accept: application/json\r\n    Version: 1\r\n```\r\n\r\nUsing AAD security requires supplying your own `security.json` file. An example is provided.\r\n\r\nApplication versioning is done with a combination of build number and API major version.\r\nSo like `[ApplicationSetupPoint(Major:3)]` and a build number of `2018.2.10.1`, the entire build number would be the minor.\r\nYou would see it described in the system as `3-2018.2.10.1`\r\n\r\nOnly the latest of each major version is kept, any earlier ones are rejected.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi-e-b%2Fwebjony","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi-e-b%2Fwebjony","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi-e-b%2Fwebjony/lists"}