From 67e0a87fcd25c5b72e8ae2975305ba62f4d91ef9 Mon Sep 17 00:00:00 2001 From: Mohammed Ahmed Hussien Date: Sun, 1 Oct 2023 18:35:50 +0300 Subject: [PATCH] Update_The_OAuth_Server --- .../OauthResponse/TokenRecovationResponse.cs | 10 ----- .../Services/ITokenIntrospectionService.cs | 11 ----- .../Services/ITokenRevocationService.cs | 11 ----- .../ITokenIntrospectionValidation.cs | 11 ----- .../Validations/ITokenRevocationValidation.cs | 11 ----- .../TokenIntrospectionValidationResponse.cs | 12 ------ .../TokenRevocationValidationResponse.cs | 9 ---- OAuth20.sln | 42 ++++++++++++------- .../ClientApp_OpenId}/ClientApp_OpenId.csproj | 0 .../Controllers/HomeController.cs | 0 .../ClientApp_OpenId}/Program.cs | 0 .../Properties/launchSettings.json | 0 .../ClientApp_OpenId}/Views/Home/Index.cshtml | 0 .../Views/Shared/_Layout.cshtml | 0 .../appsettings.Development.json | 0 .../ClientApp_OpenId}/appsettings.json | 0 .../Controllers/ArticlesController.cs | 0 .../Context/AuthenticationFailedContext.cs | 19 +++++++++ ...SendingTokenIntrospectionRequestContext.cs | 2 +- .../Context/TokenValidatedContext.cs | 2 +- .../OAuth2IntrospectionJwtBearerDefaults.cs | 2 +- .../OAuth2Scheme/OAuth2JwtBearerExtensions.cs | 0 .../OAuth2Scheme/OAuth2ServerHandler.cs | 31 ++++++++++---- .../OAuth2Scheme/OAuth2ServerOptions.cs | 31 +++++++++++++- .../OAuth2TokenIntrospectionEvent.cs | 14 ++++++- .../TokenIntrospectionResponse.cs | 2 +- .../Program.cs | 2 - .../Properties/launchSettings.json | 0 .../ProtectedResourceApp_JwtBearer.csproj | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 .../src/OAuth20.Server}/Common/Constants.cs | 0 .../Common/ExtensionMethods.cs | 0 .../Common}/OAuth2ServerHelpers.cs | 3 +- .../Configuration/OAuthServerOptions.cs | 0 .../Controllers/AccountsController.cs | 0 .../DiscoveryEndpointController.cs | 2 +- .../Controllers/HomeController.cs | 0 .../Controllers/IntrospectionsController.cs | 0 .../Controllers/TokenRevocationController.cs | 0 .../20221126172819_init.Designer.cs | 0 .../Migrations/20221126172819_init.cs | 0 ...20221210065757_update_entities.Designer.cs | 0 .../20221210065757_update_entities.cs | 0 ...21210071423_update_entities_v2.Designer.cs | 0 .../20221210071423_update_entities_v2.cs | 0 ...511091915_add_revoked_property.Designer.cs | 0 .../20230511091915_add_revoked_property.cs | 0 ...0511104559_add_token_type_hint.Designer.cs | 0 .../20230511104559_add_token_type_hint.cs | 0 .../Migrations/BaseDBContextModelSnapshot.cs | 0 .../Models/AuthorizationCode.cs | 0 .../Models/AuthorizationGrantTypesEnum.cs | 0 .../Models/CheckClientResult.cs | 0 .../src/OAuth20.Server}/Models/Client.cs | 0 .../src/OAuth20.Server}/Models/ClientStore.cs | 0 .../Models/Context/BaseDBContext.cs | 0 .../Models/Entities/AppUser.cs | 0 .../Models/Entities/OAuthApplicationEntity.cs | 0 .../Models/Entities/OAuthTokenEntity.cs | 0 .../src/OAuth20.Server}/Models/GrantTypes.cs | 0 .../OAuth20.Server}/Models/TokenTypeEnum.cs | 0 .../src/OAuth20.Server}/OAuth20.Server.csproj | 0 .../OauthRequest/AuthorizationRequest.cs | 0 .../OauthRequest/CreateUserRequest.cs | 0 .../OauthRequest/LoginRequest.cs | 0 .../OauthRequest/OpenIdConnectLoginRequest.cs | 0 .../OauthRequest/TokenIntrospectionRequest.cs | 1 - .../OauthRequest/TokenRequest.cs | 0 .../OauthResponse/AuthorizeResponse.cs | 0 .../OauthResponse/CreateUserResponse.cs | 0 .../OauthResponse}/DiscoveryResponse.cs | 4 +- .../OauthResponse/ErrorTypeEnum.cs | 0 .../OauthResponse/LoginResponse.cs | 0 .../OpenIdConnectLoginResponse.cs | 0 .../TokenIntrospectionResponse.cs | 0 .../OauthResponse/TokenRecovationResponse.cs | 18 ++++++++ .../OauthResponse/TokenResponse.cs | 0 .../OauthResponse/TokenResult.cs | 10 ++++- .../src/OAuth20.Server}/Program.cs | 0 .../Properties/launchSettings.json | 0 .../src/OAuth20.Server}/PublicPrivateKey.xml | 0 .../Services/AuthorizeResultService.cs | 2 - .../Services/CodeServce/CodeStoreService.cs | 0 .../Services/CodeServce/ICodeStoreService.cs | 0 .../Services/IAuthorizeResultService.cs | 0 .../Services/ITokenIntrospectionService.cs | 19 +++++++++ .../Services/ITokenRevocationService.cs | 19 +++++++++ .../Services/TokenIntrospectionService.cs | 12 +++++- .../Services/TokenRevocationService.cs | 11 ++++- .../Services/Users/IUserManagerService.cs | 0 .../Services/Users/UserManagerService.cs | 0 .../ITokenIntrospectionValidation.cs | 19 +++++++++ .../Validations/ITokenRevocationValidation.cs | 19 +++++++++ .../Response/BaseValidationResponse.cs | 0 .../TokenIntrospectionValidationResponse.cs | 20 +++++++++ .../TokenRevocationValidationResponse.cs | 17 ++++++++ .../TokenIntrospectionValidation.cs | 10 ++++- .../Validations/TokenRequestValidation.cs | 0 .../Validations/TokenRevocationValidation.cs | 10 ++++- .../Views/Accounts/AccessDenied.cshtml | 0 .../Views/Accounts/Login.cshtml | 0 .../Views/Accounts/Register.cshtml | 0 .../Views/Home/Authorize.cshtml | 0 .../OAuth20.Server}/Views/Home/Error.cshtml | 0 .../OAuth20.Server}/Views/Home/Index.cshtml | 0 .../OAuth20.Server}/Views/Home/Login.cshtml | 0 .../Views/Shared/_Layout.cshtml | 0 .../OAuth20.Server}/Views/_ViewImports.cshtml | 0 .../appsettings.Development.json | 0 .../src/OAuth20.Server/appsettings.json | 5 ++- .../src/OAuth20.Server}/libman.json | 0 .../OAuth20.Server}/wwwroot/bootstrap/LICENSE | 0 .../wwwroot/bootstrap/README.md | 0 .../bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../wwwroot/bootstrap/dist/css/bootstrap.css | 0 .../bootstrap/dist/css/bootstrap.css.map | 0 .../bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../wwwroot/bootstrap/dist/js/bootstrap.js | 0 .../bootstrap/dist/js/bootstrap.js.map | 0 .../bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../wwwroot/bootstrap/js/dist/alert.js | 0 .../wwwroot/bootstrap/js/dist/alert.js.map | 0 .../bootstrap/js/dist/base-component.js | 0 .../bootstrap/js/dist/base-component.js.map | 0 .../wwwroot/bootstrap/js/dist/button.js | 0 .../wwwroot/bootstrap/js/dist/button.js.map | 0 .../wwwroot/bootstrap/js/dist/carousel.js | 0 .../wwwroot/bootstrap/js/dist/carousel.js.map | 0 .../wwwroot/bootstrap/js/dist/collapse.js | 0 .../wwwroot/bootstrap/js/dist/collapse.js.map | 0 .../wwwroot/bootstrap/js/dist/dom/data.js | 0 .../wwwroot/bootstrap/js/dist/dom/data.js.map | 0 .../bootstrap/js/dist/dom/event-handler.js | 0 .../js/dist/dom/event-handler.js.map | 0 .../bootstrap/js/dist/dom/manipulator.js | 0 .../bootstrap/js/dist/dom/manipulator.js.map | 0 .../bootstrap/js/dist/dom/selector-engine.js | 0 .../js/dist/dom/selector-engine.js.map | 0 .../wwwroot/bootstrap/js/dist/dropdown.js | 0 .../wwwroot/bootstrap/js/dist/dropdown.js.map | 0 .../wwwroot/bootstrap/js/dist/modal.js | 0 .../wwwroot/bootstrap/js/dist/modal.js.map | 0 .../wwwroot/bootstrap/js/dist/offcanvas.js | 0 .../bootstrap/js/dist/offcanvas.js.map | 0 .../wwwroot/bootstrap/js/dist/popover.js | 0 .../wwwroot/bootstrap/js/dist/popover.js.map | 0 .../wwwroot/bootstrap/js/dist/scrollspy.js | 0 .../bootstrap/js/dist/scrollspy.js.map | 0 .../wwwroot/bootstrap/js/dist/tab.js | 0 .../wwwroot/bootstrap/js/dist/tab.js.map | 0 .../wwwroot/bootstrap/js/dist/toast.js | 0 .../wwwroot/bootstrap/js/dist/toast.js.map | 0 .../wwwroot/bootstrap/js/dist/tooltip.js | 0 .../wwwroot/bootstrap/js/dist/tooltip.js.map | 0 .../bootstrap/js/dist/util/backdrop.js | 0 .../bootstrap/js/dist/util/backdrop.js.map | 0 .../js/dist/util/component-functions.js | 0 .../js/dist/util/component-functions.js.map | 0 .../wwwroot/bootstrap/js/dist/util/config.js | 0 .../bootstrap/js/dist/util/config.js.map | 0 .../bootstrap/js/dist/util/focustrap.js | 0 .../bootstrap/js/dist/util/focustrap.js.map | 0 .../wwwroot/bootstrap/js/dist/util/index.js | 0 .../bootstrap/js/dist/util/index.js.map | 0 .../bootstrap/js/dist/util/sanitizer.js | 0 .../bootstrap/js/dist/util/sanitizer.js.map | 0 .../bootstrap/js/dist/util/scrollbar.js | 0 .../bootstrap/js/dist/util/scrollbar.js.map | 0 .../wwwroot/bootstrap/js/dist/util/swipe.js | 0 .../bootstrap/js/dist/util/swipe.js.map | 0 .../js/dist/util/template-factory.js | 0 .../js/dist/util/template-factory.js.map | 0 .../wwwroot/bootstrap/js/src/alert.js | 0 .../bootstrap/js/src/base-component.js | 0 .../wwwroot/bootstrap/js/src/button.js | 0 .../wwwroot/bootstrap/js/src/carousel.js | 0 .../wwwroot/bootstrap/js/src/collapse.js | 0 .../wwwroot/bootstrap/js/src/dom/data.js | 0 .../bootstrap/js/src/dom/event-handler.js | 0 .../bootstrap/js/src/dom/manipulator.js | 0 .../bootstrap/js/src/dom/selector-engine.js | 0 .../wwwroot/bootstrap/js/src/dropdown.js | 0 .../wwwroot/bootstrap/js/src/modal.js | 0 .../wwwroot/bootstrap/js/src/offcanvas.js | 0 .../wwwroot/bootstrap/js/src/popover.js | 0 .../wwwroot/bootstrap/js/src/scrollspy.js | 0 .../wwwroot/bootstrap/js/src/tab.js | 0 .../wwwroot/bootstrap/js/src/toast.js | 0 .../wwwroot/bootstrap/js/src/tooltip.js | 0 .../wwwroot/bootstrap/js/src/util/backdrop.js | 0 .../js/src/util/component-functions.js | 0 .../wwwroot/bootstrap/js/src/util/config.js | 0 .../bootstrap/js/src/util/focustrap.js | 0 .../wwwroot/bootstrap/js/src/util/index.js | 0 .../bootstrap/js/src/util/sanitizer.js | 0 .../bootstrap/js/src/util/scrollbar.js | 0 .../wwwroot/bootstrap/js/src/util/swipe.js | 0 .../bootstrap/js/src/util/template-factory.js | 0 .../wwwroot/bootstrap/package.json | 0 .../wwwroot/bootstrap/scss/_accordion.scss | 0 .../wwwroot/bootstrap/scss/_alert.scss | 0 .../wwwroot/bootstrap/scss/_badge.scss | 0 .../wwwroot/bootstrap/scss/_breadcrumb.scss | 0 .../wwwroot/bootstrap/scss/_button-group.scss | 0 .../wwwroot/bootstrap/scss/_buttons.scss | 0 .../wwwroot/bootstrap/scss/_card.scss | 0 .../wwwroot/bootstrap/scss/_carousel.scss | 0 .../wwwroot/bootstrap/scss/_close.scss | 0 .../wwwroot/bootstrap/scss/_containers.scss | 0 .../wwwroot/bootstrap/scss/_dropdown.scss | 0 .../wwwroot/bootstrap/scss/_forms.scss | 0 .../wwwroot/bootstrap/scss/_functions.scss | 0 .../wwwroot/bootstrap/scss/_grid.scss | 0 .../wwwroot/bootstrap/scss/_helpers.scss | 0 .../wwwroot/bootstrap/scss/_images.scss | 0 .../wwwroot/bootstrap/scss/_list-group.scss | 0 .../wwwroot/bootstrap/scss/_maps.scss | 0 .../wwwroot/bootstrap/scss/_mixins.scss | 0 .../wwwroot/bootstrap/scss/_modal.scss | 0 .../wwwroot/bootstrap/scss/_nav.scss | 0 .../wwwroot/bootstrap/scss/_navbar.scss | 0 .../wwwroot/bootstrap/scss/_offcanvas.scss | 0 .../wwwroot/bootstrap/scss/_pagination.scss | 0 .../wwwroot/bootstrap/scss/_placeholders.scss | 0 .../wwwroot/bootstrap/scss/_popover.scss | 0 .../wwwroot/bootstrap/scss/_progress.scss | 0 .../wwwroot/bootstrap/scss/_reboot.scss | 0 .../wwwroot/bootstrap/scss/_root.scss | 0 .../wwwroot/bootstrap/scss/_spinners.scss | 0 .../wwwroot/bootstrap/scss/_tables.scss | 0 .../wwwroot/bootstrap/scss/_toasts.scss | 0 .../wwwroot/bootstrap/scss/_tooltip.scss | 0 .../wwwroot/bootstrap/scss/_transitions.scss | 0 .../wwwroot/bootstrap/scss/_type.scss | 0 .../wwwroot/bootstrap/scss/_utilities.scss | 0 .../wwwroot/bootstrap/scss/_variables.scss | 0 .../bootstrap/scss/bootstrap-grid.scss | 0 .../bootstrap/scss/bootstrap-reboot.scss | 0 .../bootstrap/scss/bootstrap-utilities.scss | 0 .../wwwroot/bootstrap/scss/bootstrap.scss | 0 .../scss/forms/_floating-labels.scss | 0 .../bootstrap/scss/forms/_form-check.scss | 0 .../bootstrap/scss/forms/_form-control.scss | 0 .../bootstrap/scss/forms/_form-range.scss | 0 .../bootstrap/scss/forms/_form-select.scss | 0 .../bootstrap/scss/forms/_form-text.scss | 0 .../bootstrap/scss/forms/_input-group.scss | 0 .../wwwroot/bootstrap/scss/forms/_labels.scss | 0 .../bootstrap/scss/forms/_validation.scss | 0 .../bootstrap/scss/helpers/_clearfix.scss | 0 .../bootstrap/scss/helpers/_color-bg.scss | 0 .../scss/helpers/_colored-links.scss | 0 .../bootstrap/scss/helpers/_position.scss | 0 .../bootstrap/scss/helpers/_ratio.scss | 0 .../bootstrap/scss/helpers/_stacks.scss | 0 .../scss/helpers/_stretched-link.scss | 0 .../scss/helpers/_text-truncation.scss | 0 .../scss/helpers/_visually-hidden.scss | 0 .../wwwroot/bootstrap/scss/helpers/_vr.scss | 0 .../wwwroot/bootstrap/scss/mixins/_alert.scss | 0 .../bootstrap/scss/mixins/_backdrop.scss | 0 .../bootstrap/scss/mixins/_banner.scss | 0 .../bootstrap/scss/mixins/_border-radius.scss | 0 .../bootstrap/scss/mixins/_box-shadow.scss | 0 .../bootstrap/scss/mixins/_breakpoints.scss | 0 .../bootstrap/scss/mixins/_buttons.scss | 0 .../wwwroot/bootstrap/scss/mixins/_caret.scss | 0 .../bootstrap/scss/mixins/_clearfix.scss | 0 .../bootstrap/scss/mixins/_color-scheme.scss | 0 .../bootstrap/scss/mixins/_container.scss | 0 .../bootstrap/scss/mixins/_deprecate.scss | 0 .../wwwroot/bootstrap/scss/mixins/_forms.scss | 0 .../bootstrap/scss/mixins/_gradients.scss | 0 .../wwwroot/bootstrap/scss/mixins/_grid.scss | 0 .../wwwroot/bootstrap/scss/mixins/_image.scss | 0 .../bootstrap/scss/mixins/_list-group.scss | 0 .../wwwroot/bootstrap/scss/mixins/_lists.scss | 0 .../bootstrap/scss/mixins/_pagination.scss | 0 .../bootstrap/scss/mixins/_reset-text.scss | 0 .../bootstrap/scss/mixins/_resize.scss | 0 .../scss/mixins/_table-variants.scss | 0 .../bootstrap/scss/mixins/_text-truncate.scss | 0 .../bootstrap/scss/mixins/_transition.scss | 0 .../bootstrap/scss/mixins/_utilities.scss | 0 .../scss/mixins/_visually-hidden.scss | 0 .../bootstrap/scss/utilities/_api.scss | 0 .../wwwroot/bootstrap/scss/vendor/_rfs.scss | 0 .../OAuth20.Server}/wwwroot/css/custom.css | 0 .../src/OAuth20.Server}/wwwroot/jwks.json | 0 327 files changed, 300 insertions(+), 123 deletions(-) delete mode 100644 OAuth20.Server/OauthResponse/TokenRecovationResponse.cs delete mode 100644 OAuth20.Server/Services/ITokenIntrospectionService.cs delete mode 100644 OAuth20.Server/Services/ITokenRevocationService.cs delete mode 100644 OAuth20.Server/Validations/ITokenIntrospectionValidation.cs delete mode 100644 OAuth20.Server/Validations/ITokenRevocationValidation.cs delete mode 100644 OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs delete mode 100644 OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/ClientApp_OpenId.csproj (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/Controllers/HomeController.cs (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/Program.cs (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/Properties/launchSettings.json (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/Views/Home/Index.cshtml (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/Views/Shared/_Layout.cshtml (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/appsettings.Development.json (100%) rename {ClientApp_OpenId => Sample/ClientApp_OpenId}/appsettings.json (100%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Controllers/ArticlesController.cs (100%) create mode 100644 Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/AuthenticationFailedContext.cs rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs (90%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs (89%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs (89%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/OAuth2JwtBearerExtensions.cs (100%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs (79%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs (67%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs (67%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs (97%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Program.cs (92%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/Properties/launchSettings.json (100%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/ProtectedResourceApp_JwtBearer.csproj (100%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/appsettings.Development.json (100%) rename {ProtectedResourceApp_JwtBearer => Sample/ProtectedResourceApp_JwtBearer}/appsettings.json (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Common/Constants.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Common/ExtensionMethods.cs (100%) rename {OAuth20.Server/Helpers => Server/src/OAuth20.Server/Common}/OAuth2ServerHelpers.cs (93%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Configuration/OAuthServerOptions.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Controllers/AccountsController.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Controllers/DiscoveryEndpointController.cs (98%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Controllers/HomeController.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Controllers/IntrospectionsController.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Controllers/TokenRevocationController.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221126172819_init.Designer.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221126172819_init.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221210065757_update_entities.Designer.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221210065757_update_entities.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221210071423_update_entities_v2.Designer.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20221210071423_update_entities_v2.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20230511091915_add_revoked_property.Designer.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20230511091915_add_revoked_property.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20230511104559_add_token_type_hint.Designer.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/20230511104559_add_token_type_hint.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Migrations/BaseDBContextModelSnapshot.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/AuthorizationCode.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/AuthorizationGrantTypesEnum.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/CheckClientResult.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/Client.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/ClientStore.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/Context/BaseDBContext.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/Entities/AppUser.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/Entities/OAuthApplicationEntity.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/Entities/OAuthTokenEntity.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/GrantTypes.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Models/TokenTypeEnum.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OAuth20.Server.csproj (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/AuthorizationRequest.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/CreateUserRequest.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/LoginRequest.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/OpenIdConnectLoginRequest.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/TokenIntrospectionRequest.cs (96%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthRequest/TokenRequest.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/AuthorizeResponse.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/CreateUserResponse.cs (100%) rename {OAuth20.Server/Endpoints => Server/src/OAuth20.Server/OauthResponse}/DiscoveryResponse.cs (97%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/ErrorTypeEnum.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/LoginResponse.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/OpenIdConnectLoginResponse.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/TokenIntrospectionResponse.cs (100%) create mode 100644 Server/src/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/TokenResponse.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/OauthResponse/TokenResult.cs (59%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Program.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Properties/launchSettings.json (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/PublicPrivateKey.xml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/AuthorizeResultService.cs (99%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/CodeServce/CodeStoreService.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/CodeServce/ICodeStoreService.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/IAuthorizeResultService.cs (100%) create mode 100644 Server/src/OAuth20.Server/Services/ITokenIntrospectionService.cs create mode 100644 Server/src/OAuth20.Server/Services/ITokenRevocationService.cs rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/TokenIntrospectionService.cs (93%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/TokenRevocationService.cs (79%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/Users/IUserManagerService.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Services/Users/UserManagerService.cs (100%) create mode 100644 Server/src/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs create mode 100644 Server/src/OAuth20.Server/Validations/ITokenRevocationValidation.cs rename {OAuth20.Server => Server/src/OAuth20.Server}/Validations/Response/BaseValidationResponse.cs (100%) create mode 100644 Server/src/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs create mode 100644 Server/src/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs rename {OAuth20.Server => Server/src/OAuth20.Server}/Validations/TokenIntrospectionValidation.cs (93%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Validations/TokenRequestValidation.cs (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Validations/TokenRevocationValidation.cs (93%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Accounts/AccessDenied.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Accounts/Login.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Accounts/Register.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Home/Authorize.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Home/Error.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Home/Index.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Home/Login.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/Shared/_Layout.cshtml (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/Views/_ViewImports.cshtml (100%) rename OAuth20.Server/appsettings.json => Server/src/OAuth20.Server/appsettings.Development.json (100%) rename OAuth20.Server/appsettings.Development.json => Server/src/OAuth20.Server/appsettings.json (56%) rename {OAuth20.Server => Server/src/OAuth20.Server}/libman.json (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/LICENSE (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/README.md (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.esm.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.min.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/alert.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/alert.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/base-component.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/base-component.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/button.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/button.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/carousel.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/carousel.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/collapse.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/collapse.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/data.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/data.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/event-handler.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/event-handler.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/manipulator.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/manipulator.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/selector-engine.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dom/selector-engine.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dropdown.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/dropdown.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/modal.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/modal.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/offcanvas.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/offcanvas.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/popover.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/popover.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/scrollspy.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/scrollspy.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/tab.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/tab.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/toast.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/toast.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/tooltip.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/tooltip.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/backdrop.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/backdrop.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/component-functions.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/component-functions.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/config.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/config.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/focustrap.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/focustrap.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/index.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/index.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/sanitizer.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/sanitizer.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/scrollbar.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/scrollbar.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/swipe.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/swipe.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/template-factory.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/dist/util/template-factory.js.map (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/alert.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/base-component.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/button.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/carousel.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/collapse.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/dom/data.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/dom/event-handler.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/dom/manipulator.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/dom/selector-engine.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/dropdown.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/modal.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/offcanvas.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/popover.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/scrollspy.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/tab.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/toast.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/tooltip.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/backdrop.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/component-functions.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/config.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/focustrap.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/index.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/sanitizer.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/scrollbar.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/swipe.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/js/src/util/template-factory.js (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/package.json (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_accordion.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_alert.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_badge.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_breadcrumb.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_button-group.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_buttons.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_card.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_carousel.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_close.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_containers.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_dropdown.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_forms.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_functions.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_grid.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_helpers.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_images.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_list-group.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_maps.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_mixins.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_modal.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_nav.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_navbar.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_offcanvas.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_pagination.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_placeholders.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_popover.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_progress.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_reboot.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_root.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_spinners.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_tables.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_toasts.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_tooltip.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_transitions.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_type.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_utilities.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/_variables.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/bootstrap-grid.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/bootstrap-reboot.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/bootstrap-utilities.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/bootstrap.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_floating-labels.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_form-check.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_form-control.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_form-range.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_form-select.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_form-text.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_input-group.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_labels.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/forms/_validation.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_clearfix.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_color-bg.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_colored-links.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_position.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_ratio.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_stacks.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_stretched-link.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_text-truncation.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_visually-hidden.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/helpers/_vr.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_alert.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_backdrop.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_banner.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_border-radius.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_box-shadow.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_breakpoints.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_buttons.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_caret.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_clearfix.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_color-scheme.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_container.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_deprecate.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_forms.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_gradients.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_grid.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_image.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_list-group.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_lists.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_pagination.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_reset-text.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_resize.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_table-variants.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_text-truncate.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_transition.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_utilities.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/mixins/_visually-hidden.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/utilities/_api.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/bootstrap/scss/vendor/_rfs.scss (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/css/custom.css (100%) rename {OAuth20.Server => Server/src/OAuth20.Server}/wwwroot/jwks.json (100%) diff --git a/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs b/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs deleted file mode 100644 index d4ef2f8..0000000 --- a/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace OAuth20.Server.OauthResponse -{ - public class TokenRecovationResponse - { - public bool Succeeded { get; set; } - public string Error { get; set; } = string.Empty; - public string ErrorDescription { get; set; } - public bool HasError => !string.IsNullOrEmpty(Error); - } -} diff --git a/OAuth20.Server/Services/ITokenIntrospectionService.cs b/OAuth20.Server/Services/ITokenIntrospectionService.cs deleted file mode 100644 index 45b8e64..0000000 --- a/OAuth20.Server/Services/ITokenIntrospectionService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using OAuth20.Server.OauthRequest; -using OAuth20.Server.OauthResponse; -using System.Threading.Tasks; - -namespace OAuth20.Server.Services -{ - public interface ITokenIntrospectionService - { - Task IntrospectTokenAsync(TokenIntrospectionRequest tokenIntrospectionRequest); - } -} diff --git a/OAuth20.Server/Services/ITokenRevocationService.cs b/OAuth20.Server/Services/ITokenRevocationService.cs deleted file mode 100644 index 65fce2d..0000000 --- a/OAuth20.Server/Services/ITokenRevocationService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Microsoft.AspNetCore.Http; -using OAuth20.Server.OauthResponse; -using System.Threading.Tasks; - -namespace OAuth20.Server.Services -{ - public interface ITokenRevocationService - { - Task RevokeTokenAsync(HttpContext httpContext, string clientId); - } -} diff --git a/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs b/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs deleted file mode 100644 index 799e04c..0000000 --- a/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs +++ /dev/null @@ -1,11 +0,0 @@ -using OAuth20.Server.OauthRequest; -using OAuth20.Server.Validations.Response; -using System.Threading.Tasks; - -namespace OAuth20.Server.Validations -{ - public interface ITokenIntrospectionValidation - { - Task ValidateAsync(TokenIntrospectionRequest tokenIntrospectionReques); - } -} diff --git a/OAuth20.Server/Validations/ITokenRevocationValidation.cs b/OAuth20.Server/Validations/ITokenRevocationValidation.cs deleted file mode 100644 index a7aa3ca..0000000 --- a/OAuth20.Server/Validations/ITokenRevocationValidation.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Microsoft.AspNetCore.Http; -using OAuth20.Server.Validations.Response; -using System.Threading.Tasks; - -namespace OAuth20.Server.Validations -{ - public interface ITokenRevocationValidation - { - Task ValidateAsync(HttpContext context); - } -} diff --git a/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs b/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs deleted file mode 100644 index 7560dce..0000000 --- a/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs +++ /dev/null @@ -1,12 +0,0 @@ -using OAuth20.Server.Models; - -namespace OAuth20.Server.Validations.Response -{ - public class TokenIntrospectionValidationResponse : BaseValidationResponse - { - /// - /// Get or set client. - /// - public Client Client { get; set; } - } -} diff --git a/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs b/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs deleted file mode 100644 index 9f85e52..0000000 --- a/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -using OAuth20.Server.Models; - -namespace OAuth20.Server.Validations.Response -{ - public class TokenRevocationValidationResponse : BaseValidationResponse - { - public Client Client { get; set; } - } -} diff --git a/OAuth20.sln b/OAuth20.sln index e97605c..5298333 100644 --- a/OAuth20.sln +++ b/OAuth20.sln @@ -3,11 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.3.32901.215 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OAuth20.Server", "OAuth20.Server\OAuth20.Server.csproj", "{AE594E56-E074-4842-AF6D-4D51F0B85514}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{47E8F0DC-9DEE-44A1-B528-9FE19D17C5BD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientApp_OpenId", "ClientApp_OpenId\ClientApp_OpenId.csproj", "{5344278D-1221-4822-BC46-B617A0888F73}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{634F7193-1EB7-4E4E-A91E-44F544125BBD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtectedResourceApp_JwtBearer", "ProtectedResourceApp_JwtBearer\ProtectedResourceApp_JwtBearer.csproj", "{4E5368EB-E479-4934-9453-99E54DBB91B2}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample", "Sample", "{F6D9EFD5-E13B-4339-B29F-B3F077FEC21F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientApp_OpenId", "Sample\ClientApp_OpenId\ClientApp_OpenId.csproj", "{6A2C0C72-021B-4CB0-9EC0-D9169EE4F076}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtectedResourceApp_JwtBearer", "Sample\ProtectedResourceApp_JwtBearer\ProtectedResourceApp_JwtBearer.csproj", "{E7E57FF9-355C-452C-AC2F-B41A2E727235}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OAuth20.Server", "Server\src\OAuth20.Server\OAuth20.Server.csproj", "{9650FBCA-54A6-4B1E-AA32-22D82C444DC2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,22 +21,28 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AE594E56-E074-4842-AF6D-4D51F0B85514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE594E56-E074-4842-AF6D-4D51F0B85514}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE594E56-E074-4842-AF6D-4D51F0B85514}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE594E56-E074-4842-AF6D-4D51F0B85514}.Release|Any CPU.Build.0 = Release|Any CPU - {5344278D-1221-4822-BC46-B617A0888F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5344278D-1221-4822-BC46-B617A0888F73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5344278D-1221-4822-BC46-B617A0888F73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5344278D-1221-4822-BC46-B617A0888F73}.Release|Any CPU.Build.0 = Release|Any CPU - {4E5368EB-E479-4934-9453-99E54DBB91B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E5368EB-E479-4934-9453-99E54DBB91B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E5368EB-E479-4934-9453-99E54DBB91B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E5368EB-E479-4934-9453-99E54DBB91B2}.Release|Any CPU.Build.0 = Release|Any CPU + {6A2C0C72-021B-4CB0-9EC0-D9169EE4F076}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A2C0C72-021B-4CB0-9EC0-D9169EE4F076}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A2C0C72-021B-4CB0-9EC0-D9169EE4F076}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A2C0C72-021B-4CB0-9EC0-D9169EE4F076}.Release|Any CPU.Build.0 = Release|Any CPU + {E7E57FF9-355C-452C-AC2F-B41A2E727235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7E57FF9-355C-452C-AC2F-B41A2E727235}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7E57FF9-355C-452C-AC2F-B41A2E727235}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7E57FF9-355C-452C-AC2F-B41A2E727235}.Release|Any CPU.Build.0 = Release|Any CPU + {9650FBCA-54A6-4B1E-AA32-22D82C444DC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9650FBCA-54A6-4B1E-AA32-22D82C444DC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9650FBCA-54A6-4B1E-AA32-22D82C444DC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9650FBCA-54A6-4B1E-AA32-22D82C444DC2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {634F7193-1EB7-4E4E-A91E-44F544125BBD} = {47E8F0DC-9DEE-44A1-B528-9FE19D17C5BD} + {6A2C0C72-021B-4CB0-9EC0-D9169EE4F076} = {F6D9EFD5-E13B-4339-B29F-B3F077FEC21F} + {E7E57FF9-355C-452C-AC2F-B41A2E727235} = {F6D9EFD5-E13B-4339-B29F-B3F077FEC21F} + {9650FBCA-54A6-4B1E-AA32-22D82C444DC2} = {634F7193-1EB7-4E4E-A91E-44F544125BBD} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7D43B27E-F863-4832-9539-CCBFBB619BB6} EndGlobalSection diff --git a/ClientApp_OpenId/ClientApp_OpenId.csproj b/Sample/ClientApp_OpenId/ClientApp_OpenId.csproj similarity index 100% rename from ClientApp_OpenId/ClientApp_OpenId.csproj rename to Sample/ClientApp_OpenId/ClientApp_OpenId.csproj diff --git a/ClientApp_OpenId/Controllers/HomeController.cs b/Sample/ClientApp_OpenId/Controllers/HomeController.cs similarity index 100% rename from ClientApp_OpenId/Controllers/HomeController.cs rename to Sample/ClientApp_OpenId/Controllers/HomeController.cs diff --git a/ClientApp_OpenId/Program.cs b/Sample/ClientApp_OpenId/Program.cs similarity index 100% rename from ClientApp_OpenId/Program.cs rename to Sample/ClientApp_OpenId/Program.cs diff --git a/ClientApp_OpenId/Properties/launchSettings.json b/Sample/ClientApp_OpenId/Properties/launchSettings.json similarity index 100% rename from ClientApp_OpenId/Properties/launchSettings.json rename to Sample/ClientApp_OpenId/Properties/launchSettings.json diff --git a/ClientApp_OpenId/Views/Home/Index.cshtml b/Sample/ClientApp_OpenId/Views/Home/Index.cshtml similarity index 100% rename from ClientApp_OpenId/Views/Home/Index.cshtml rename to Sample/ClientApp_OpenId/Views/Home/Index.cshtml diff --git a/ClientApp_OpenId/Views/Shared/_Layout.cshtml b/Sample/ClientApp_OpenId/Views/Shared/_Layout.cshtml similarity index 100% rename from ClientApp_OpenId/Views/Shared/_Layout.cshtml rename to Sample/ClientApp_OpenId/Views/Shared/_Layout.cshtml diff --git a/ClientApp_OpenId/appsettings.Development.json b/Sample/ClientApp_OpenId/appsettings.Development.json similarity index 100% rename from ClientApp_OpenId/appsettings.Development.json rename to Sample/ClientApp_OpenId/appsettings.Development.json diff --git a/ClientApp_OpenId/appsettings.json b/Sample/ClientApp_OpenId/appsettings.json similarity index 100% rename from ClientApp_OpenId/appsettings.json rename to Sample/ClientApp_OpenId/appsettings.json diff --git a/ProtectedResourceApp_JwtBearer/Controllers/ArticlesController.cs b/Sample/ProtectedResourceApp_JwtBearer/Controllers/ArticlesController.cs similarity index 100% rename from ProtectedResourceApp_JwtBearer/Controllers/ArticlesController.cs rename to Sample/ProtectedResourceApp_JwtBearer/Controllers/ArticlesController.cs diff --git a/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/AuthenticationFailedContext.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/AuthenticationFailedContext.cs new file mode 100644 index 0000000..a5df6f3 --- /dev/null +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/AuthenticationFailedContext.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Authentication; + +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme +{ + public class AuthenticationFailedContext : ResultContext + { + public AuthenticationFailedContext(HttpContext context, + AuthenticationScheme scheme, + OAuth2ServerOptions options) + : base(context, scheme, options) + { + } + + /// + /// Error message + /// + public string? ErrorMessage { get; set; } + } +} diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs similarity index 90% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs index 31b1082..3794cbb 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/SendingTokenIntrospectionRequestContext.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Authentication; -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { public class SendingTokenIntrospectionRequestContext : BaseContext { diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs similarity index 89% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs index 9a0c6e0..f65dbce 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/Context/TokenValidatedContext.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Authentication; -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { /// /// Define the context for validated token. diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs similarity index 89% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs index 0d8f401..bff1815 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2IntrospectionJwtBearerDefaults.cs @@ -1,4 +1,4 @@ -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { /// /// Define default value to use in the for JWT bearer authentication. diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2JwtBearerExtensions.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2JwtBearerExtensions.cs similarity index 100% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2JwtBearerExtensions.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2JwtBearerExtensions.cs diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs similarity index 79% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs index d7031f5..db427db 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerHandler.cs @@ -1,11 +1,12 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.Options; using ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme; +using System.Diagnostics; using System.Security.Claims; using System.Text; using System.Text.Encodings.Web; -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { // Made in love by Mohammed Ahmed Hussien public class OAuth2ServerHandler : AuthenticationHandler @@ -61,7 +62,6 @@ protected override async Task HandleAuthenticateAsync() }; await Events.SendingTokenIntrospectionRequest(requestSendingContext); - var client = _httpClientFactory.CreateClient(OAuth2IntrospectionJwtBearerDefaults.NamedBackChannelHttpClient); var values = new List> { @@ -81,15 +81,14 @@ protected override async Task HandleAuthenticateAsync() if (res.IsSuccessStatusCode == false) { - return AuthenticateResult.Fail($"Calling introspection endpoint is faild with this status code: {res.StatusCode}"); + return await AuthenticationFailedAsync(Context, Scheme, Options, Events, + $"Calling introspection endpoint is faild with this status code: {res.StatusCode}"); } - string responseBody = await res.Content.ReadAsStringAsync(); TokenIntrospectionResponse? result = System.Text.Json.JsonSerializer.Deserialize( responseBody, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }); - if (result?.Active ?? false) { // Create ticket @@ -97,7 +96,6 @@ protected override async Task HandleAuthenticateAsync() var claimIdentity = new ClaimsIdentity(result.Claims, authenticationType, "name", "role"); var claimPrinciple = new ClaimsPrincipal(claimIdentity); - // TODO: here I need token vaidation context TokenValidatedContext tokenValidatedContext = new TokenValidatedContext(Context, Scheme, Options) { Principal = claimPrinciple, @@ -122,18 +120,33 @@ protected override async Task HandleAuthenticateAsync() } else { - return AuthenticateResult.Fail($"The token is not active"); + return await AuthenticationFailedAsync(Context, Scheme, Options, Events, "The token is not active"); } } catch (Exception ex) { - return AuthenticateResult.Fail($"There is an exception {ex}"); + return await AuthenticationFailedAsync(Context, Scheme, Options, Events, $"There is an exception {ex}"); } + } + private static async Task AuthenticationFailedAsync(HttpContext context, + AuthenticationScheme authenticationScheme, + OAuth2ServerOptions options, + OAuth2TokenIntrospectionEvent tokenIntrospectionEvent, + string message) + { + AuthenticationFailedContext authenticationFailedContext = new AuthenticationFailedContext(context, authenticationScheme, options) + { + ErrorMessage = message + }; + await tokenIntrospectionEvent.AuthenticationFailed(authenticationFailedContext); - + return authenticationFailedContext.Result != null + ? authenticationFailedContext.Result + : AuthenticateResult.Fail(message); } + } } diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs similarity index 67% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs index 19c531e..60892f5 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2ServerOptions.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Authentication; -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { public class OAuth2ServerOptions : AuthenticationSchemeOptions { @@ -53,6 +53,33 @@ public class OAuth2ServerOptions : AuthenticationSchemeOptions /// /// Get or set the required scheme type for /// - // public bool RequireHttpsMetadata { get; set; } + // public bool RequireHttpsMetadata { get; set; } + + public new OAuth2TokenIntrospectionEvent Events + { + get => (OAuth2TokenIntrospectionEvent)base.Events!; + set => base.Events = value; + } + + public override void Validate() + { + // Call the base validation to combine it with the custom validation. + base.Validate(); + + if (string.IsNullOrWhiteSpace(Authority)) + { + throw new ArgumentException(nameof(Authority)); + } + + if (string.IsNullOrWhiteSpace(ClientId)) + { + throw new ArgumentException(nameof(ClientId)); + } + + if (string.IsNullOrWhiteSpace(ClientSecret)) + { + throw new ArgumentException(nameof(ClientSecret)); + } + } } } diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs similarity index 67% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs index ba18408..42a08b5 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/OAuth2TokenIntrospectionEvent.cs @@ -1,4 +1,6 @@ -namespace ProtectedResourceApp_JwtBearer.Infrastructure +using ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme; + +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { /// /// Specifies events which the invokes to enable developer control over the authentication process. @@ -15,6 +17,11 @@ public class OAuth2TokenIntrospectionEvent /// public Func OnSendingTokenIntrospectionRequest { get; set; } = context => Task.CompletedTask; + /// + /// Invoked when the authentication failed. + /// + public Func OnAuthenticationFailed { get; set; } = context => Task.CompletedTask; + /// /// Invoked when sending token introspection request. /// @@ -25,5 +32,10 @@ public virtual Task SendingTokenIntrospectionRequest(SendingTokenIntrospectionRe /// Invoked after the token passed validation sucssefully. /// public virtual Task TokenValidated(TokenValidatedContext context) => OnTokenValidated(context); + + /// + /// Invoked when the authentication failed. + /// + public virtual Task AuthenticationFailed(AuthenticationFailedContext context) => OnAuthenticationFailed(context); } } diff --git a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs similarity index 97% rename from ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs rename to Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs index c4a69e0..a572f27 100644 --- a/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Infrastructure/OAuth2Scheme/TokenIntrospectionResponse.cs @@ -1,7 +1,7 @@ using System.Security.Claims; using System.Text.Json.Serialization; -namespace ProtectedResourceApp_JwtBearer.Infrastructure +namespace ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme { public class TokenIntrospectionResponse { diff --git a/ProtectedResourceApp_JwtBearer/Program.cs b/Sample/ProtectedResourceApp_JwtBearer/Program.cs similarity index 92% rename from ProtectedResourceApp_JwtBearer/Program.cs rename to Sample/ProtectedResourceApp_JwtBearer/Program.cs index b0dfe82..b6e2419 100644 --- a/ProtectedResourceApp_JwtBearer/Program.cs +++ b/Sample/ProtectedResourceApp_JwtBearer/Program.cs @@ -1,5 +1,3 @@ -using Microsoft.AspNetCore.Authentication.JwtBearer; -using ProtectedResourceApp_JwtBearer.Infrastructure; using ProtectedResourceApp_JwtBearer.Infrastructure.OAuth2Scheme; var builder = WebApplication.CreateBuilder(args); diff --git a/ProtectedResourceApp_JwtBearer/Properties/launchSettings.json b/Sample/ProtectedResourceApp_JwtBearer/Properties/launchSettings.json similarity index 100% rename from ProtectedResourceApp_JwtBearer/Properties/launchSettings.json rename to Sample/ProtectedResourceApp_JwtBearer/Properties/launchSettings.json diff --git a/ProtectedResourceApp_JwtBearer/ProtectedResourceApp_JwtBearer.csproj b/Sample/ProtectedResourceApp_JwtBearer/ProtectedResourceApp_JwtBearer.csproj similarity index 100% rename from ProtectedResourceApp_JwtBearer/ProtectedResourceApp_JwtBearer.csproj rename to Sample/ProtectedResourceApp_JwtBearer/ProtectedResourceApp_JwtBearer.csproj diff --git a/ProtectedResourceApp_JwtBearer/appsettings.Development.json b/Sample/ProtectedResourceApp_JwtBearer/appsettings.Development.json similarity index 100% rename from ProtectedResourceApp_JwtBearer/appsettings.Development.json rename to Sample/ProtectedResourceApp_JwtBearer/appsettings.Development.json diff --git a/ProtectedResourceApp_JwtBearer/appsettings.json b/Sample/ProtectedResourceApp_JwtBearer/appsettings.json similarity index 100% rename from ProtectedResourceApp_JwtBearer/appsettings.json rename to Sample/ProtectedResourceApp_JwtBearer/appsettings.json diff --git a/OAuth20.Server/Common/Constants.cs b/Server/src/OAuth20.Server/Common/Constants.cs similarity index 100% rename from OAuth20.Server/Common/Constants.cs rename to Server/src/OAuth20.Server/Common/Constants.cs diff --git a/OAuth20.Server/Common/ExtensionMethods.cs b/Server/src/OAuth20.Server/Common/ExtensionMethods.cs similarity index 100% rename from OAuth20.Server/Common/ExtensionMethods.cs rename to Server/src/OAuth20.Server/Common/ExtensionMethods.cs diff --git a/OAuth20.Server/Helpers/OAuth2ServerHelpers.cs b/Server/src/OAuth20.Server/Common/OAuth2ServerHelpers.cs similarity index 93% rename from OAuth20.Server/Helpers/OAuth2ServerHelpers.cs rename to Server/src/OAuth20.Server/Common/OAuth2ServerHelpers.cs index b994b89..16d10c5 100644 --- a/OAuth20.Server/Helpers/OAuth2ServerHelpers.cs +++ b/Server/src/OAuth20.Server/Common/OAuth2ServerHelpers.cs @@ -6,10 +6,9 @@ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. */ -using OAuth20.Server.Common; using System.Collections.Generic; -namespace OAuth20.Server.Helpers +namespace OAuth20.Server.Common { public class OAuth2ServerHelpers { diff --git a/OAuth20.Server/Configuration/OAuthServerOptions.cs b/Server/src/OAuth20.Server/Configuration/OAuthServerOptions.cs similarity index 100% rename from OAuth20.Server/Configuration/OAuthServerOptions.cs rename to Server/src/OAuth20.Server/Configuration/OAuthServerOptions.cs diff --git a/OAuth20.Server/Controllers/AccountsController.cs b/Server/src/OAuth20.Server/Controllers/AccountsController.cs similarity index 100% rename from OAuth20.Server/Controllers/AccountsController.cs rename to Server/src/OAuth20.Server/Controllers/AccountsController.cs diff --git a/OAuth20.Server/Controllers/DiscoveryEndpointController.cs b/Server/src/OAuth20.Server/Controllers/DiscoveryEndpointController.cs similarity index 98% rename from OAuth20.Server/Controllers/DiscoveryEndpointController.cs rename to Server/src/OAuth20.Server/Controllers/DiscoveryEndpointController.cs index d3d84bc..a28e1a5 100644 --- a/OAuth20.Server/Controllers/DiscoveryEndpointController.cs +++ b/Server/src/OAuth20.Server/Controllers/DiscoveryEndpointController.cs @@ -7,7 +7,7 @@ Everyone is permitted to copy and distribute verbatim copies */ using Microsoft.AspNetCore.Mvc; -using OAuth20.Server.Endpoints; +using OAuth20.Server.OauthResponse; namespace OAuth20.Server.Controllers { diff --git a/OAuth20.Server/Controllers/HomeController.cs b/Server/src/OAuth20.Server/Controllers/HomeController.cs similarity index 100% rename from OAuth20.Server/Controllers/HomeController.cs rename to Server/src/OAuth20.Server/Controllers/HomeController.cs diff --git a/OAuth20.Server/Controllers/IntrospectionsController.cs b/Server/src/OAuth20.Server/Controllers/IntrospectionsController.cs similarity index 100% rename from OAuth20.Server/Controllers/IntrospectionsController.cs rename to Server/src/OAuth20.Server/Controllers/IntrospectionsController.cs diff --git a/OAuth20.Server/Controllers/TokenRevocationController.cs b/Server/src/OAuth20.Server/Controllers/TokenRevocationController.cs similarity index 100% rename from OAuth20.Server/Controllers/TokenRevocationController.cs rename to Server/src/OAuth20.Server/Controllers/TokenRevocationController.cs diff --git a/OAuth20.Server/Migrations/20221126172819_init.Designer.cs b/Server/src/OAuth20.Server/Migrations/20221126172819_init.Designer.cs similarity index 100% rename from OAuth20.Server/Migrations/20221126172819_init.Designer.cs rename to Server/src/OAuth20.Server/Migrations/20221126172819_init.Designer.cs diff --git a/OAuth20.Server/Migrations/20221126172819_init.cs b/Server/src/OAuth20.Server/Migrations/20221126172819_init.cs similarity index 100% rename from OAuth20.Server/Migrations/20221126172819_init.cs rename to Server/src/OAuth20.Server/Migrations/20221126172819_init.cs diff --git a/OAuth20.Server/Migrations/20221210065757_update_entities.Designer.cs b/Server/src/OAuth20.Server/Migrations/20221210065757_update_entities.Designer.cs similarity index 100% rename from OAuth20.Server/Migrations/20221210065757_update_entities.Designer.cs rename to Server/src/OAuth20.Server/Migrations/20221210065757_update_entities.Designer.cs diff --git a/OAuth20.Server/Migrations/20221210065757_update_entities.cs b/Server/src/OAuth20.Server/Migrations/20221210065757_update_entities.cs similarity index 100% rename from OAuth20.Server/Migrations/20221210065757_update_entities.cs rename to Server/src/OAuth20.Server/Migrations/20221210065757_update_entities.cs diff --git a/OAuth20.Server/Migrations/20221210071423_update_entities_v2.Designer.cs b/Server/src/OAuth20.Server/Migrations/20221210071423_update_entities_v2.Designer.cs similarity index 100% rename from OAuth20.Server/Migrations/20221210071423_update_entities_v2.Designer.cs rename to Server/src/OAuth20.Server/Migrations/20221210071423_update_entities_v2.Designer.cs diff --git a/OAuth20.Server/Migrations/20221210071423_update_entities_v2.cs b/Server/src/OAuth20.Server/Migrations/20221210071423_update_entities_v2.cs similarity index 100% rename from OAuth20.Server/Migrations/20221210071423_update_entities_v2.cs rename to Server/src/OAuth20.Server/Migrations/20221210071423_update_entities_v2.cs diff --git a/OAuth20.Server/Migrations/20230511091915_add_revoked_property.Designer.cs b/Server/src/OAuth20.Server/Migrations/20230511091915_add_revoked_property.Designer.cs similarity index 100% rename from OAuth20.Server/Migrations/20230511091915_add_revoked_property.Designer.cs rename to Server/src/OAuth20.Server/Migrations/20230511091915_add_revoked_property.Designer.cs diff --git a/OAuth20.Server/Migrations/20230511091915_add_revoked_property.cs b/Server/src/OAuth20.Server/Migrations/20230511091915_add_revoked_property.cs similarity index 100% rename from OAuth20.Server/Migrations/20230511091915_add_revoked_property.cs rename to Server/src/OAuth20.Server/Migrations/20230511091915_add_revoked_property.cs diff --git a/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.Designer.cs b/Server/src/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.Designer.cs similarity index 100% rename from OAuth20.Server/Migrations/20230511104559_add_token_type_hint.Designer.cs rename to Server/src/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.Designer.cs diff --git a/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.cs b/Server/src/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.cs similarity index 100% rename from OAuth20.Server/Migrations/20230511104559_add_token_type_hint.cs rename to Server/src/OAuth20.Server/Migrations/20230511104559_add_token_type_hint.cs diff --git a/OAuth20.Server/Migrations/BaseDBContextModelSnapshot.cs b/Server/src/OAuth20.Server/Migrations/BaseDBContextModelSnapshot.cs similarity index 100% rename from OAuth20.Server/Migrations/BaseDBContextModelSnapshot.cs rename to Server/src/OAuth20.Server/Migrations/BaseDBContextModelSnapshot.cs diff --git a/OAuth20.Server/Models/AuthorizationCode.cs b/Server/src/OAuth20.Server/Models/AuthorizationCode.cs similarity index 100% rename from OAuth20.Server/Models/AuthorizationCode.cs rename to Server/src/OAuth20.Server/Models/AuthorizationCode.cs diff --git a/OAuth20.Server/Models/AuthorizationGrantTypesEnum.cs b/Server/src/OAuth20.Server/Models/AuthorizationGrantTypesEnum.cs similarity index 100% rename from OAuth20.Server/Models/AuthorizationGrantTypesEnum.cs rename to Server/src/OAuth20.Server/Models/AuthorizationGrantTypesEnum.cs diff --git a/OAuth20.Server/Models/CheckClientResult.cs b/Server/src/OAuth20.Server/Models/CheckClientResult.cs similarity index 100% rename from OAuth20.Server/Models/CheckClientResult.cs rename to Server/src/OAuth20.Server/Models/CheckClientResult.cs diff --git a/OAuth20.Server/Models/Client.cs b/Server/src/OAuth20.Server/Models/Client.cs similarity index 100% rename from OAuth20.Server/Models/Client.cs rename to Server/src/OAuth20.Server/Models/Client.cs diff --git a/OAuth20.Server/Models/ClientStore.cs b/Server/src/OAuth20.Server/Models/ClientStore.cs similarity index 100% rename from OAuth20.Server/Models/ClientStore.cs rename to Server/src/OAuth20.Server/Models/ClientStore.cs diff --git a/OAuth20.Server/Models/Context/BaseDBContext.cs b/Server/src/OAuth20.Server/Models/Context/BaseDBContext.cs similarity index 100% rename from OAuth20.Server/Models/Context/BaseDBContext.cs rename to Server/src/OAuth20.Server/Models/Context/BaseDBContext.cs diff --git a/OAuth20.Server/Models/Entities/AppUser.cs b/Server/src/OAuth20.Server/Models/Entities/AppUser.cs similarity index 100% rename from OAuth20.Server/Models/Entities/AppUser.cs rename to Server/src/OAuth20.Server/Models/Entities/AppUser.cs diff --git a/OAuth20.Server/Models/Entities/OAuthApplicationEntity.cs b/Server/src/OAuth20.Server/Models/Entities/OAuthApplicationEntity.cs similarity index 100% rename from OAuth20.Server/Models/Entities/OAuthApplicationEntity.cs rename to Server/src/OAuth20.Server/Models/Entities/OAuthApplicationEntity.cs diff --git a/OAuth20.Server/Models/Entities/OAuthTokenEntity.cs b/Server/src/OAuth20.Server/Models/Entities/OAuthTokenEntity.cs similarity index 100% rename from OAuth20.Server/Models/Entities/OAuthTokenEntity.cs rename to Server/src/OAuth20.Server/Models/Entities/OAuthTokenEntity.cs diff --git a/OAuth20.Server/Models/GrantTypes.cs b/Server/src/OAuth20.Server/Models/GrantTypes.cs similarity index 100% rename from OAuth20.Server/Models/GrantTypes.cs rename to Server/src/OAuth20.Server/Models/GrantTypes.cs diff --git a/OAuth20.Server/Models/TokenTypeEnum.cs b/Server/src/OAuth20.Server/Models/TokenTypeEnum.cs similarity index 100% rename from OAuth20.Server/Models/TokenTypeEnum.cs rename to Server/src/OAuth20.Server/Models/TokenTypeEnum.cs diff --git a/OAuth20.Server/OAuth20.Server.csproj b/Server/src/OAuth20.Server/OAuth20.Server.csproj similarity index 100% rename from OAuth20.Server/OAuth20.Server.csproj rename to Server/src/OAuth20.Server/OAuth20.Server.csproj diff --git a/OAuth20.Server/OauthRequest/AuthorizationRequest.cs b/Server/src/OAuth20.Server/OauthRequest/AuthorizationRequest.cs similarity index 100% rename from OAuth20.Server/OauthRequest/AuthorizationRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/AuthorizationRequest.cs diff --git a/OAuth20.Server/OauthRequest/CreateUserRequest.cs b/Server/src/OAuth20.Server/OauthRequest/CreateUserRequest.cs similarity index 100% rename from OAuth20.Server/OauthRequest/CreateUserRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/CreateUserRequest.cs diff --git a/OAuth20.Server/OauthRequest/LoginRequest.cs b/Server/src/OAuth20.Server/OauthRequest/LoginRequest.cs similarity index 100% rename from OAuth20.Server/OauthRequest/LoginRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/LoginRequest.cs diff --git a/OAuth20.Server/OauthRequest/OpenIdConnectLoginRequest.cs b/Server/src/OAuth20.Server/OauthRequest/OpenIdConnectLoginRequest.cs similarity index 100% rename from OAuth20.Server/OauthRequest/OpenIdConnectLoginRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/OpenIdConnectLoginRequest.cs diff --git a/OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs b/Server/src/OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs similarity index 96% rename from OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs index ddfb564..f3b825d 100644 --- a/OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs +++ b/Server/src/OAuth20.Server/OauthRequest/TokenIntrospectionRequest.cs @@ -15,7 +15,6 @@ public class TokenIntrospectionRequest /// /// Get or set token type hint. /// - [JsonInclude] [JsonPropertyName("token_type_hint")] public string TokenTypeHint { get; set; } } diff --git a/OAuth20.Server/OauthRequest/TokenRequest.cs b/Server/src/OAuth20.Server/OauthRequest/TokenRequest.cs similarity index 100% rename from OAuth20.Server/OauthRequest/TokenRequest.cs rename to Server/src/OAuth20.Server/OauthRequest/TokenRequest.cs diff --git a/OAuth20.Server/OauthResponse/AuthorizeResponse.cs b/Server/src/OAuth20.Server/OauthResponse/AuthorizeResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/AuthorizeResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/AuthorizeResponse.cs diff --git a/OAuth20.Server/OauthResponse/CreateUserResponse.cs b/Server/src/OAuth20.Server/OauthResponse/CreateUserResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/CreateUserResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/CreateUserResponse.cs diff --git a/OAuth20.Server/Endpoints/DiscoveryResponse.cs b/Server/src/OAuth20.Server/OauthResponse/DiscoveryResponse.cs similarity index 97% rename from OAuth20.Server/Endpoints/DiscoveryResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/DiscoveryResponse.cs index fc17088..da63497 100644 --- a/OAuth20.Server/Endpoints/DiscoveryResponse.cs +++ b/Server/src/OAuth20.Server/OauthResponse/DiscoveryResponse.cs @@ -8,7 +8,7 @@ Everyone is permitted to copy and distribute verbatim copies using System.Collections.Generic; -namespace OAuth20.Server.Endpoints +namespace OAuth20.Server.OauthResponse { public class DiscoveryResponse { @@ -27,7 +27,7 @@ public class DiscoveryResponse public IList acr_values_supported { get; set; } public IList subject_types_supported { get; set; } public IList userinfo_signing_alg_values_supported { get; set; } - public IList userinfo_encryption_alg_values_supported { get; set; } + public IList userinfo_encryption_alg_values_supported { get; set; } public IList userinfo_encryption_enc_values_supported { get; set; } public IList id_token_signing_alg_values_supported { get; set; } public IList id_token_encryption_alg_values_supported { get; set; } diff --git a/OAuth20.Server/OauthResponse/ErrorTypeEnum.cs b/Server/src/OAuth20.Server/OauthResponse/ErrorTypeEnum.cs similarity index 100% rename from OAuth20.Server/OauthResponse/ErrorTypeEnum.cs rename to Server/src/OAuth20.Server/OauthResponse/ErrorTypeEnum.cs diff --git a/OAuth20.Server/OauthResponse/LoginResponse.cs b/Server/src/OAuth20.Server/OauthResponse/LoginResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/LoginResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/LoginResponse.cs diff --git a/OAuth20.Server/OauthResponse/OpenIdConnectLoginResponse.cs b/Server/src/OAuth20.Server/OauthResponse/OpenIdConnectLoginResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/OpenIdConnectLoginResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/OpenIdConnectLoginResponse.cs diff --git a/OAuth20.Server/OauthResponse/TokenIntrospectionResponse.cs b/Server/src/OAuth20.Server/OauthResponse/TokenIntrospectionResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/TokenIntrospectionResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/TokenIntrospectionResponse.cs diff --git a/Server/src/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs b/Server/src/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs new file mode 100644 index 0000000..d5be6ed --- /dev/null +++ b/Server/src/OAuth20.Server/OauthResponse/TokenRecovationResponse.cs @@ -0,0 +1,18 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +namespace OAuth20.Server.OauthResponse +{ + public class TokenRecovationResponse + { + public bool Succeeded { get; set; } + public string Error { get; set; } = string.Empty; + public string ErrorDescription { get; set; } + public bool HasError => !string.IsNullOrEmpty(Error); + } +} diff --git a/OAuth20.Server/OauthResponse/TokenResponse.cs b/Server/src/OAuth20.Server/OauthResponse/TokenResponse.cs similarity index 100% rename from OAuth20.Server/OauthResponse/TokenResponse.cs rename to Server/src/OAuth20.Server/OauthResponse/TokenResponse.cs diff --git a/OAuth20.Server/OauthResponse/TokenResult.cs b/Server/src/OAuth20.Server/OauthResponse/TokenResult.cs similarity index 59% rename from OAuth20.Server/OauthResponse/TokenResult.cs rename to Server/src/OAuth20.Server/OauthResponse/TokenResult.cs index 2480725..88c88f8 100644 --- a/OAuth20.Server/OauthResponse/TokenResult.cs +++ b/Server/src/OAuth20.Server/OauthResponse/TokenResult.cs @@ -1,4 +1,12 @@ -using System; +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using System; namespace OAuth20.Server.OauthResponse { diff --git a/OAuth20.Server/Program.cs b/Server/src/OAuth20.Server/Program.cs similarity index 100% rename from OAuth20.Server/Program.cs rename to Server/src/OAuth20.Server/Program.cs diff --git a/OAuth20.Server/Properties/launchSettings.json b/Server/src/OAuth20.Server/Properties/launchSettings.json similarity index 100% rename from OAuth20.Server/Properties/launchSettings.json rename to Server/src/OAuth20.Server/Properties/launchSettings.json diff --git a/OAuth20.Server/PublicPrivateKey.xml b/Server/src/OAuth20.Server/PublicPrivateKey.xml similarity index 100% rename from OAuth20.Server/PublicPrivateKey.xml rename to Server/src/OAuth20.Server/PublicPrivateKey.xml diff --git a/OAuth20.Server/Services/AuthorizeResultService.cs b/Server/src/OAuth20.Server/Services/AuthorizeResultService.cs similarity index 99% rename from OAuth20.Server/Services/AuthorizeResultService.cs rename to Server/src/OAuth20.Server/Services/AuthorizeResultService.cs index 0465c6d..b218233 100644 --- a/OAuth20.Server/Services/AuthorizeResultService.cs +++ b/Server/src/OAuth20.Server/Services/AuthorizeResultService.cs @@ -7,12 +7,10 @@ Everyone is permitted to copy and distribute verbatim copies */ using Microsoft.AspNetCore.Http; -using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; using OAuth20.Server.Common; using OAuth20.Server.Configuration; -using OAuth20.Server.Helpers; using OAuth20.Server.Models; using OAuth20.Server.Models.Context; using OAuth20.Server.Models.Entities; diff --git a/OAuth20.Server/Services/CodeServce/CodeStoreService.cs b/Server/src/OAuth20.Server/Services/CodeServce/CodeStoreService.cs similarity index 100% rename from OAuth20.Server/Services/CodeServce/CodeStoreService.cs rename to Server/src/OAuth20.Server/Services/CodeServce/CodeStoreService.cs diff --git a/OAuth20.Server/Services/CodeServce/ICodeStoreService.cs b/Server/src/OAuth20.Server/Services/CodeServce/ICodeStoreService.cs similarity index 100% rename from OAuth20.Server/Services/CodeServce/ICodeStoreService.cs rename to Server/src/OAuth20.Server/Services/CodeServce/ICodeStoreService.cs diff --git a/OAuth20.Server/Services/IAuthorizeResultService.cs b/Server/src/OAuth20.Server/Services/IAuthorizeResultService.cs similarity index 100% rename from OAuth20.Server/Services/IAuthorizeResultService.cs rename to Server/src/OAuth20.Server/Services/IAuthorizeResultService.cs diff --git a/Server/src/OAuth20.Server/Services/ITokenIntrospectionService.cs b/Server/src/OAuth20.Server/Services/ITokenIntrospectionService.cs new file mode 100644 index 0000000..13e2962 --- /dev/null +++ b/Server/src/OAuth20.Server/Services/ITokenIntrospectionService.cs @@ -0,0 +1,19 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using OAuth20.Server.OauthRequest; +using OAuth20.Server.OauthResponse; +using System.Threading.Tasks; + +namespace OAuth20.Server.Services +{ + public interface ITokenIntrospectionService + { + Task IntrospectTokenAsync(TokenIntrospectionRequest tokenIntrospectionRequest); + } +} diff --git a/Server/src/OAuth20.Server/Services/ITokenRevocationService.cs b/Server/src/OAuth20.Server/Services/ITokenRevocationService.cs new file mode 100644 index 0000000..bae825e --- /dev/null +++ b/Server/src/OAuth20.Server/Services/ITokenRevocationService.cs @@ -0,0 +1,19 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using Microsoft.AspNetCore.Http; +using OAuth20.Server.OauthResponse; +using System.Threading.Tasks; + +namespace OAuth20.Server.Services +{ + public interface ITokenRevocationService + { + Task RevokeTokenAsync(HttpContext httpContext, string clientId); + } +} diff --git a/OAuth20.Server/Services/TokenIntrospectionService.cs b/Server/src/OAuth20.Server/Services/TokenIntrospectionService.cs similarity index 93% rename from OAuth20.Server/Services/TokenIntrospectionService.cs rename to Server/src/OAuth20.Server/Services/TokenIntrospectionService.cs index 46326a9..9fd1400 100644 --- a/OAuth20.Server/Services/TokenIntrospectionService.cs +++ b/Server/src/OAuth20.Server/Services/TokenIntrospectionService.cs @@ -1,4 +1,11 @@ -using Microsoft.AspNetCore.Http; +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; @@ -10,7 +17,6 @@ using OAuth20.Server.Validations; using System; using System.Collections.Generic; -using System.Drawing.Imaging; using System.IdentityModel.Tokens.Jwt; using System.IO; using System.Linq; @@ -109,6 +115,8 @@ private AudienceValidator ValidateAudienceHandler(IEnumerable audiences, if (tokenInDb == null) return false; + if (tokenInDb.Revoked) + return false; return true; }; diff --git a/OAuth20.Server/Services/TokenRevocationService.cs b/Server/src/OAuth20.Server/Services/TokenRevocationService.cs similarity index 79% rename from OAuth20.Server/Services/TokenRevocationService.cs rename to Server/src/OAuth20.Server/Services/TokenRevocationService.cs index 6454bc1..7d3a517 100644 --- a/OAuth20.Server/Services/TokenRevocationService.cs +++ b/Server/src/OAuth20.Server/Services/TokenRevocationService.cs @@ -1,4 +1,12 @@ -using Microsoft.AspNetCore.Http; +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using Microsoft.AspNetCore.Http; using OAuth20.Server.Models.Context; using OAuth20.Server.OauthResponse; using System.Threading.Tasks; @@ -35,6 +43,7 @@ public async Task RevokeTokenAsync(HttpContext httpCont .FirstOrDefaultAsync(); if (oauthToken != null) { + oauthToken.Revoked = true; var res = _dbContext.OAuthTokens.Update(oauthToken); await _dbContext.SaveChangesAsync(); } diff --git a/OAuth20.Server/Services/Users/IUserManagerService.cs b/Server/src/OAuth20.Server/Services/Users/IUserManagerService.cs similarity index 100% rename from OAuth20.Server/Services/Users/IUserManagerService.cs rename to Server/src/OAuth20.Server/Services/Users/IUserManagerService.cs diff --git a/OAuth20.Server/Services/Users/UserManagerService.cs b/Server/src/OAuth20.Server/Services/Users/UserManagerService.cs similarity index 100% rename from OAuth20.Server/Services/Users/UserManagerService.cs rename to Server/src/OAuth20.Server/Services/Users/UserManagerService.cs diff --git a/Server/src/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs b/Server/src/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs new file mode 100644 index 0000000..71ad853 --- /dev/null +++ b/Server/src/OAuth20.Server/Validations/ITokenIntrospectionValidation.cs @@ -0,0 +1,19 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using OAuth20.Server.OauthRequest; +using OAuth20.Server.Validations.Response; +using System.Threading.Tasks; + +namespace OAuth20.Server.Validations +{ + public interface ITokenIntrospectionValidation + { + Task ValidateAsync(TokenIntrospectionRequest tokenIntrospectionReques); + } +} diff --git a/Server/src/OAuth20.Server/Validations/ITokenRevocationValidation.cs b/Server/src/OAuth20.Server/Validations/ITokenRevocationValidation.cs new file mode 100644 index 0000000..8e8c6fa --- /dev/null +++ b/Server/src/OAuth20.Server/Validations/ITokenRevocationValidation.cs @@ -0,0 +1,19 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using Microsoft.AspNetCore.Http; +using OAuth20.Server.Validations.Response; +using System.Threading.Tasks; + +namespace OAuth20.Server.Validations +{ + public interface ITokenRevocationValidation + { + Task ValidateAsync(HttpContext context); + } +} diff --git a/OAuth20.Server/Validations/Response/BaseValidationResponse.cs b/Server/src/OAuth20.Server/Validations/Response/BaseValidationResponse.cs similarity index 100% rename from OAuth20.Server/Validations/Response/BaseValidationResponse.cs rename to Server/src/OAuth20.Server/Validations/Response/BaseValidationResponse.cs diff --git a/Server/src/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs b/Server/src/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs new file mode 100644 index 0000000..9d5c2fb --- /dev/null +++ b/Server/src/OAuth20.Server/Validations/Response/TokenIntrospectionValidationResponse.cs @@ -0,0 +1,20 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using OAuth20.Server.Models; + +namespace OAuth20.Server.Validations.Response +{ + public class TokenIntrospectionValidationResponse : BaseValidationResponse + { + /// + /// Get or set client. + /// + public Client Client { get; set; } + } +} diff --git a/Server/src/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs b/Server/src/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs new file mode 100644 index 0000000..29c95dd --- /dev/null +++ b/Server/src/OAuth20.Server/Validations/Response/TokenRevocationValidationResponse.cs @@ -0,0 +1,17 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using OAuth20.Server.Models; + +namespace OAuth20.Server.Validations.Response +{ + public class TokenRevocationValidationResponse : BaseValidationResponse + { + public Client Client { get; set; } + } +} diff --git a/OAuth20.Server/Validations/TokenIntrospectionValidation.cs b/Server/src/OAuth20.Server/Validations/TokenIntrospectionValidation.cs similarity index 93% rename from OAuth20.Server/Validations/TokenIntrospectionValidation.cs rename to Server/src/OAuth20.Server/Validations/TokenIntrospectionValidation.cs index ae1a3d8..0b75995 100644 --- a/OAuth20.Server/Validations/TokenIntrospectionValidation.cs +++ b/Server/src/OAuth20.Server/Validations/TokenIntrospectionValidation.cs @@ -1,4 +1,12 @@ -using Microsoft.AspNetCore.Http; +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using Microsoft.AspNetCore.Http; using OAuth20.Server.Models; using OAuth20.Server.OauthResponse; using System.Linq; diff --git a/OAuth20.Server/Validations/TokenRequestValidation.cs b/Server/src/OAuth20.Server/Validations/TokenRequestValidation.cs similarity index 100% rename from OAuth20.Server/Validations/TokenRequestValidation.cs rename to Server/src/OAuth20.Server/Validations/TokenRequestValidation.cs diff --git a/OAuth20.Server/Validations/TokenRevocationValidation.cs b/Server/src/OAuth20.Server/Validations/TokenRevocationValidation.cs similarity index 93% rename from OAuth20.Server/Validations/TokenRevocationValidation.cs rename to Server/src/OAuth20.Server/Validations/TokenRevocationValidation.cs index 27699f0..c39ff7f 100644 --- a/OAuth20.Server/Validations/TokenRevocationValidation.cs +++ b/Server/src/OAuth20.Server/Validations/TokenRevocationValidation.cs @@ -1,4 +1,12 @@ -using OAuth20.Server.Models.Context; +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2022 Mohammed Ahmed Hussien babiker Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + */ + +using OAuth20.Server.Models.Context; using OAuth20.Server.Models; using Microsoft.AspNetCore.Http; using System.Threading.Tasks; diff --git a/OAuth20.Server/Views/Accounts/AccessDenied.cshtml b/Server/src/OAuth20.Server/Views/Accounts/AccessDenied.cshtml similarity index 100% rename from OAuth20.Server/Views/Accounts/AccessDenied.cshtml rename to Server/src/OAuth20.Server/Views/Accounts/AccessDenied.cshtml diff --git a/OAuth20.Server/Views/Accounts/Login.cshtml b/Server/src/OAuth20.Server/Views/Accounts/Login.cshtml similarity index 100% rename from OAuth20.Server/Views/Accounts/Login.cshtml rename to Server/src/OAuth20.Server/Views/Accounts/Login.cshtml diff --git a/OAuth20.Server/Views/Accounts/Register.cshtml b/Server/src/OAuth20.Server/Views/Accounts/Register.cshtml similarity index 100% rename from OAuth20.Server/Views/Accounts/Register.cshtml rename to Server/src/OAuth20.Server/Views/Accounts/Register.cshtml diff --git a/OAuth20.Server/Views/Home/Authorize.cshtml b/Server/src/OAuth20.Server/Views/Home/Authorize.cshtml similarity index 100% rename from OAuth20.Server/Views/Home/Authorize.cshtml rename to Server/src/OAuth20.Server/Views/Home/Authorize.cshtml diff --git a/OAuth20.Server/Views/Home/Error.cshtml b/Server/src/OAuth20.Server/Views/Home/Error.cshtml similarity index 100% rename from OAuth20.Server/Views/Home/Error.cshtml rename to Server/src/OAuth20.Server/Views/Home/Error.cshtml diff --git a/OAuth20.Server/Views/Home/Index.cshtml b/Server/src/OAuth20.Server/Views/Home/Index.cshtml similarity index 100% rename from OAuth20.Server/Views/Home/Index.cshtml rename to Server/src/OAuth20.Server/Views/Home/Index.cshtml diff --git a/OAuth20.Server/Views/Home/Login.cshtml b/Server/src/OAuth20.Server/Views/Home/Login.cshtml similarity index 100% rename from OAuth20.Server/Views/Home/Login.cshtml rename to Server/src/OAuth20.Server/Views/Home/Login.cshtml diff --git a/OAuth20.Server/Views/Shared/_Layout.cshtml b/Server/src/OAuth20.Server/Views/Shared/_Layout.cshtml similarity index 100% rename from OAuth20.Server/Views/Shared/_Layout.cshtml rename to Server/src/OAuth20.Server/Views/Shared/_Layout.cshtml diff --git a/OAuth20.Server/Views/_ViewImports.cshtml b/Server/src/OAuth20.Server/Views/_ViewImports.cshtml similarity index 100% rename from OAuth20.Server/Views/_ViewImports.cshtml rename to Server/src/OAuth20.Server/Views/_ViewImports.cshtml diff --git a/OAuth20.Server/appsettings.json b/Server/src/OAuth20.Server/appsettings.Development.json similarity index 100% rename from OAuth20.Server/appsettings.json rename to Server/src/OAuth20.Server/appsettings.Development.json diff --git a/OAuth20.Server/appsettings.Development.json b/Server/src/OAuth20.Server/appsettings.json similarity index 56% rename from OAuth20.Server/appsettings.Development.json rename to Server/src/OAuth20.Server/appsettings.json index 7e90585..3f0295b 100644 --- a/OAuth20.Server/appsettings.Development.json +++ b/Server/src/OAuth20.Server/appsettings.json @@ -5,8 +5,11 @@ "Microsoft.AspNetCore": "Warning" } }, + "ConnectionStrings": { + "BaseDBConnection": "Data Source=DEV01\\SQLEXPRESS;Initial Catalog=OAuth20_Db;Trusted_Connection=True;MultipleActiveResultSets=true" + }, "AllowedHosts": "*", - "OAuthOptions": { + "OAuthOption": { "Provider": "InMemory", "IsAvaliable": true, "IDPUri": "https://localhost:7275" diff --git a/OAuth20.Server/libman.json b/Server/src/OAuth20.Server/libman.json similarity index 100% rename from OAuth20.Server/libman.json rename to Server/src/OAuth20.Server/libman.json diff --git a/OAuth20.Server/wwwroot/bootstrap/LICENSE b/Server/src/OAuth20.Server/wwwroot/bootstrap/LICENSE similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/LICENSE rename to Server/src/OAuth20.Server/wwwroot/bootstrap/LICENSE diff --git a/OAuth20.Server/wwwroot/bootstrap/README.md b/Server/src/OAuth20.Server/wwwroot/bootstrap/README.md similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/README.md rename to Server/src/OAuth20.Server/wwwroot/bootstrap/README.md diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/css/bootstrap.rtl.min.css.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.bundle.min.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.esm.min.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js diff --git a/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/dist/js/bootstrap.min.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/alert.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/base-component.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/button.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/button.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/button.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/carousel.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/collapse.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/data.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/event-handler.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/manipulator.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dom/selector-engine.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/dropdown.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/modal.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/offcanvas.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/popover.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/scrollspy.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tab.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/toast.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/tooltip.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/backdrop.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/component-functions.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/config.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/focustrap.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/index.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/sanitizer.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/scrollbar.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/swipe.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js.map b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js.map similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js.map rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/dist/util/template-factory.js.map diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/alert.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/alert.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/alert.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/alert.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/base-component.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/base-component.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/base-component.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/base-component.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/button.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/button.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/button.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/button.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/carousel.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/carousel.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/carousel.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/carousel.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/collapse.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/collapse.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/collapse.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/collapse.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/dom/data.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/data.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/dom/data.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/data.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/dom/event-handler.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/event-handler.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/dom/event-handler.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/event-handler.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/dom/manipulator.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/manipulator.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/dom/manipulator.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/manipulator.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/dom/selector-engine.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/selector-engine.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/dom/selector-engine.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dom/selector-engine.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/dropdown.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dropdown.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/dropdown.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/dropdown.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/modal.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/modal.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/modal.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/modal.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/offcanvas.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/offcanvas.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/offcanvas.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/offcanvas.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/popover.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/popover.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/popover.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/popover.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/scrollspy.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/scrollspy.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/scrollspy.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/scrollspy.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/tab.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/tab.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/tab.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/tab.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/toast.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/toast.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/toast.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/toast.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/tooltip.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/tooltip.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/tooltip.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/tooltip.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/backdrop.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/backdrop.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/backdrop.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/backdrop.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/component-functions.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/component-functions.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/component-functions.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/component-functions.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/config.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/config.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/config.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/config.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/focustrap.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/focustrap.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/focustrap.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/focustrap.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/index.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/index.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/index.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/index.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/sanitizer.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/sanitizer.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/sanitizer.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/sanitizer.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/scrollbar.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/scrollbar.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/scrollbar.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/scrollbar.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/swipe.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/swipe.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/swipe.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/swipe.js diff --git a/OAuth20.Server/wwwroot/bootstrap/js/src/util/template-factory.js b/Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/template-factory.js similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/js/src/util/template-factory.js rename to Server/src/OAuth20.Server/wwwroot/bootstrap/js/src/util/template-factory.js diff --git a/OAuth20.Server/wwwroot/bootstrap/package.json b/Server/src/OAuth20.Server/wwwroot/bootstrap/package.json similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/package.json rename to Server/src/OAuth20.Server/wwwroot/bootstrap/package.json diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_accordion.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_accordion.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_accordion.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_accordion.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_alert.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_alert.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_alert.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_alert.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_badge.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_badge.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_badge.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_badge.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_breadcrumb.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_breadcrumb.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_breadcrumb.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_breadcrumb.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_button-group.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_button-group.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_button-group.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_button-group.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_buttons.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_buttons.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_buttons.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_buttons.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_card.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_card.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_card.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_card.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_carousel.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_carousel.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_carousel.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_carousel.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_close.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_close.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_close.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_close.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_containers.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_containers.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_containers.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_containers.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_dropdown.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_dropdown.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_dropdown.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_dropdown.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_forms.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_forms.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_forms.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_forms.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_functions.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_functions.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_functions.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_functions.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_grid.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_grid.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_grid.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_grid.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_helpers.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_helpers.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_helpers.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_helpers.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_images.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_images.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_images.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_images.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_list-group.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_list-group.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_list-group.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_list-group.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_maps.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_maps.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_maps.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_maps.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_mixins.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_mixins.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_mixins.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_mixins.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_modal.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_modal.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_modal.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_modal.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_nav.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_nav.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_nav.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_nav.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_navbar.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_navbar.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_navbar.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_navbar.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_offcanvas.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_offcanvas.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_offcanvas.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_offcanvas.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_pagination.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_pagination.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_pagination.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_pagination.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_placeholders.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_placeholders.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_placeholders.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_placeholders.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_popover.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_popover.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_popover.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_popover.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_progress.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_progress.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_progress.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_progress.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_reboot.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_reboot.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_reboot.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_reboot.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_root.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_root.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_root.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_root.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_spinners.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_spinners.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_spinners.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_spinners.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_tables.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_tables.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_tables.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_tables.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_toasts.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_toasts.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_toasts.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_toasts.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_tooltip.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_tooltip.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_tooltip.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_tooltip.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_transitions.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_transitions.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_transitions.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_transitions.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_type.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_type.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_type.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_type.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_utilities.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_utilities.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_utilities.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_utilities.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/_variables.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_variables.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/_variables.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/_variables.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-grid.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-grid.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-grid.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-grid.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-reboot.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-reboot.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-reboot.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-reboot.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-utilities.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-utilities.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-utilities.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap-utilities.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/bootstrap.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/bootstrap.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_floating-labels.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_floating-labels.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_floating-labels.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_floating-labels.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-check.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-check.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-check.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-check.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-control.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-control.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-control.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-control.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-range.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-range.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-range.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-range.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-select.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-select.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-select.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-select.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-text.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-text.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-text.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_form-text.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_input-group.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_input-group.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_input-group.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_input-group.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_labels.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_labels.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_labels.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_labels.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/forms/_validation.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_validation.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/forms/_validation.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/forms/_validation.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_clearfix.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_clearfix.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_clearfix.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_clearfix.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_color-bg.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_color-bg.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_color-bg.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_color-bg.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_colored-links.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_colored-links.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_colored-links.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_colored-links.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_position.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_position.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_position.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_position.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_ratio.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_ratio.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_ratio.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_ratio.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stacks.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stacks.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stacks.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stacks.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stretched-link.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stretched-link.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stretched-link.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_stretched-link.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_text-truncation.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_text-truncation.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_text-truncation.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_text-truncation.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_visually-hidden.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_visually-hidden.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_visually-hidden.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_visually-hidden.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_vr.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_vr.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/helpers/_vr.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/helpers/_vr.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_alert.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_alert.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_alert.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_alert.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_backdrop.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_backdrop.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_backdrop.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_backdrop.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_banner.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_banner.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_banner.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_banner.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_border-radius.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_border-radius.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_border-radius.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_border-radius.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_box-shadow.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_box-shadow.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_box-shadow.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_box-shadow.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_breakpoints.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_breakpoints.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_breakpoints.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_breakpoints.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_buttons.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_buttons.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_buttons.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_buttons.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_caret.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_caret.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_caret.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_caret.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_clearfix.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_clearfix.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_clearfix.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_clearfix.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_color-scheme.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_color-scheme.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_color-scheme.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_color-scheme.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_container.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_container.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_container.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_container.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_deprecate.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_deprecate.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_deprecate.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_deprecate.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_forms.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_forms.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_forms.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_forms.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_gradients.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_gradients.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_gradients.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_gradients.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_grid.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_grid.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_grid.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_grid.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_image.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_image.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_image.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_image.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_list-group.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_list-group.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_list-group.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_list-group.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_lists.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_lists.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_lists.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_lists.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_pagination.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_pagination.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_pagination.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_pagination.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_reset-text.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_reset-text.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_reset-text.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_reset-text.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_resize.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_resize.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_resize.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_resize.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_table-variants.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_table-variants.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_table-variants.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_table-variants.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_text-truncate.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_text-truncate.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_text-truncate.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_text-truncate.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_transition.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_transition.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_transition.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_transition.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_utilities.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_utilities.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_utilities.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_utilities.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_visually-hidden.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_visually-hidden.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/mixins/_visually-hidden.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/mixins/_visually-hidden.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/utilities/_api.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/utilities/_api.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/utilities/_api.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/utilities/_api.scss diff --git a/OAuth20.Server/wwwroot/bootstrap/scss/vendor/_rfs.scss b/Server/src/OAuth20.Server/wwwroot/bootstrap/scss/vendor/_rfs.scss similarity index 100% rename from OAuth20.Server/wwwroot/bootstrap/scss/vendor/_rfs.scss rename to Server/src/OAuth20.Server/wwwroot/bootstrap/scss/vendor/_rfs.scss diff --git a/OAuth20.Server/wwwroot/css/custom.css b/Server/src/OAuth20.Server/wwwroot/css/custom.css similarity index 100% rename from OAuth20.Server/wwwroot/css/custom.css rename to Server/src/OAuth20.Server/wwwroot/css/custom.css diff --git a/OAuth20.Server/wwwroot/jwks.json b/Server/src/OAuth20.Server/wwwroot/jwks.json similarity index 100% rename from OAuth20.Server/wwwroot/jwks.json rename to Server/src/OAuth20.Server/wwwroot/jwks.json