diff --git a/test/Basic/Basic.csproj b/test/Basic/Basic.csproj index 727545a..b872dee 100644 --- a/test/Basic/Basic.csproj +++ b/test/Basic/Basic.csproj @@ -8,6 +8,7 @@ + diff --git a/test/Basic/Startup.cs b/test/Basic/Startup.cs index 09536c3..64c9007 100644 --- a/test/Basic/Startup.cs +++ b/test/Basic/Startup.cs @@ -99,9 +99,14 @@ namespace Basic app.UseSwagger(c => { - }); + app.UseSwaggerUI(c => + { + c.RoutePrefix = ""; // serve the UI at root + c.SwaggerEndpoint("/v1/api-docs", "V1 Docs"); + c.SwaggerEndpoint("/gp/api-docs", "µÇ¼ģ¿é"); + }); app.UseKnife4UI(c => { //c.RoutePrefix = ""; // serve the UI at root diff --git a/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs b/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs index f276bbb..335eec8 100644 --- a/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs +++ b/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs @@ -4,6 +4,8 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using IdentityServer4; using IdentityServer4.Test; +using NCaptcha.Abstractions; +using NCaptcha.AspNetCore.Extensions; namespace OAuth2Integration.AuthServer.Controllers { @@ -26,8 +28,9 @@ namespace OAuth2Integration.AuthServer.Controllers return View("/AuthServer/Views/Login.cshtml", viewModel); } + [HttpPost("login")] - public async Task Login([FromForm]LoginViewModel viewModel) + public async Task Login([FromForm] LoginViewModel viewModel) { if (!_userStore.ValidateCredentials(viewModel.Username, viewModel.Password)) { @@ -43,6 +46,7 @@ namespace OAuth2Integration.AuthServer.Controllers return Redirect(viewModel.ReturnUrl); } + } public class LoginViewModel diff --git a/test/WebSites/OAuth2Integration/OAuth2Integration.csproj b/test/WebSites/OAuth2Integration/OAuth2Integration.csproj index f370bf6..a2a2ce0 100644 --- a/test/WebSites/OAuth2Integration/OAuth2Integration.csproj +++ b/test/WebSites/OAuth2Integration/OAuth2Integration.csproj @@ -1,17 +1,19 @@ - - netcoreapp3.0 - + + netcoreapp3.0 + - - - - + + + + + + + + - - - - - + + + diff --git a/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs b/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs new file mode 100644 index 0000000..c3c19d9 --- /dev/null +++ b/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using NCaptcha.Abstractions; +using NCaptcha.AspNetCore.Extensions; + +namespace OAuth2Integration.ResourceServer.Controllers +{ + [Route("captcha")] + public class CaptchaController : Controller + { + private readonly ICaptchaGenerator _captchaGenerator; + + public CaptchaController(ICaptchaGenerator captchaGenerator) + { + _captchaGenerator = captchaGenerator; + } + + [Produces("image/gif", Type = typeof(FileContentResult))] + [HttpGet] + public async Task OnGetCaptchaAsync() => await _captchaGenerator.GetCaptchaFileResultAsync(); + } +} diff --git a/test/WebSites/OAuth2Integration/Startup.cs b/test/WebSites/OAuth2Integration/Startup.cs index a6ba309..d5b5ca5 100644 --- a/test/WebSites/OAuth2Integration/Startup.cs +++ b/test/WebSites/OAuth2Integration/Startup.cs @@ -7,6 +7,9 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; +using NCaptcha.AspNetCore.SessionImages; +using IGeekFan.AspNetCore.Knife4jUI; +using Microsoft.AspNetCore.Mvc.Controllers; namespace OAuth2Integration { @@ -50,6 +53,9 @@ namespace OAuth2Integration services.AddControllersWithViews(); + services.AddSession(); + services.AddSessionBasedImageCaptcha(); + services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Test API V1" }); @@ -73,6 +79,12 @@ namespace OAuth2Integration } }); + c.CustomOperationIds(apiDesc => + { + var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor; + return controllerAction.ControllerName + "-" + controllerAction.ActionName; + }); + c.AddSecurityRequirement(new OpenApiSecurityRequirement { { @@ -97,6 +109,8 @@ namespace OAuth2Integration app.UseDeveloperExceptionPage(); } + app.UseSession(); + app.Map("/auth-server", authServer => { authServer.UseRouting(); @@ -126,8 +140,22 @@ namespace OAuth2Integration }); resourceServer.UseSwagger(); + + app.UseKnife4UI(c => + { + c.RoutePrefix = ""; //http://localhost:5000/index.html#/home + c.SwaggerEndpoint("/resource-server/swagger/v1/swagger.json", "My API V1"); + c.EnableDeepLinking(); + c.OAuthClientId("test-id"); + c.OAuthClientSecret("test-secret"); + c.OAuthAppName("test-app"); + c.OAuthScopeSeparator(" "); + c.OAuthUsePkce(); + }); + resourceServer.UseSwaggerUI(c => { + //http://localhost:5000/resource-server/swagger/index.html c.SwaggerEndpoint("/resource-server/swagger/v1/swagger.json", "My API V1"); c.EnableDeepLinking();