public static string GetHtml(DittoOptions dittoOptions) { StringBuilder stringBuilder = new StringBuilder(); foreach (var transform in dittoOptions.Transforms) { stringBuilder.Append($@"<li><a href=""{dittoOptions.Path+ "?key=" + transform.TransformName}"">{transform.TransformName}</a></li>"); } var html = $@"<!DOCTYPE html> <html> <head> <meta charset=""UTF-8""> <title>Ditto Transform</title> <style> </style> </head> <body> <div > <h2>Please select a user to continue authentication.</h2> <ul> {stringBuilder} </ul> </div> </body> </html>"; return(html); }
public async Task InvokeAsync(HttpContext context) { DittoOptions dittoOptions = context.RequestServices.GetRequiredService <DittoOptions>(); if (!context.Request.PathBase.ToString().ToLower().Equals(dittoOptions.Path.ToString().ToLower())) { await _next(context); return; } string transformName = context.Request.Query["key"].ToString().ToLower(); Transform transform = dittoOptions?.Transforms?.FirstOrDefault(t => t.TransformName.Equals(transformName)); if (transform == null) { await context.Response.WriteAsync(Resources.GetHtml(dittoOptions)); } else { IIdentity identity = new ClaimsIdentity(transform.Claims, dittoOptions.AuthenticationType); ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(identity); AuthenticationProperties authenticationProperties = new AuthenticationProperties(); await context.SignInAsync(dittoOptions.AuthenticationType, claimsPrincipal, authenticationProperties); await context.Response.WriteAsync($"You are logged in with profile: {JsonConvert.SerializeObject(transform)}"); } }
public static void UseDitto(this IApplicationBuilder app) { app.UseAuthentication(); DittoOptions dittoOptions = app.ApplicationServices.GetRequiredService <DittoOptions>(); app.Map(dittoOptions.Path, configuration => configuration.UseMiddleware <DittoMiddleware>()); }
public static IServiceCollection AddDitto(this IServiceCollection serviceCollection, DittoOptions dittoOptions) { serviceCollection.AddSingleton(dittoOptions); return(serviceCollection); }