using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.Data.Entity; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.OptionsModel; using Newtonsoft.Json; using Yavsc; using Yavsc.Models; using Microsoft.AspNet.Identity; using Microsoft.Extensions.Configuration; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Extensions.PlatformAbstractions; using System; using System.Threading; using Yavsc.Server.Helpers; using Microsoft.Extensions.Logging; using Microsoft.AspNet.Http; public class Startup { private RequestDelegate app; public Startup(string hostingFullName, IConfigurationRoot configuration, string connectionString) { this.HostingFullName = hostingFullName; this.Configuration = configuration; this.ConnectionString = connectionString; } public string HostingFullName { get; private set; } public static SiteSettings SiteSetup { get; private set; } public static SmtpSettings SmtpSettup { get; private set; } public IConfigurationRoot Configuration { get; set; } public string ConnectionString { get { return DbHelpers.ConnectionString; } private set { DbHelpers.ConnectionString = value; } } public static IdentityOptions AppIdentityOptions { get; private set; } public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) { var devtag = env.IsDevelopment() ? "D" : ""; var prodtag = env.IsProduction() ? "P" : ""; var stagetag = env.IsStaging() ? "S" : ""; var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); builder.AddEnvironmentVariables(); HostingFullName = $" [{env.EnvironmentName}:{prodtag}{devtag}{stagetag}]"; // Set up configuration sources. if (env.IsDevelopment()) { // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 // builder.AddUserSecrets(); } Configuration = builder.Build(); ConnectionString = Configuration["Data:DefaultConnection:ConnectionString"]; } // Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddLogging(); var siteSettings = Configuration.GetSection("Site"); services.Configure(siteSettings); var smtpSettings = Configuration.GetSection("Smtp"); services.Configure(smtpSettings); services.AddEntityFramework() .AddNpgsql() .AddDbContext(options => options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"])) ; services.AddLocalization(options => { options.ResourcesPath = "Resources"; }); services.AddOptions(); services.Configure((o) => JsonConvert.PopulateObject(Configuration["Site"], o)); services.Configure((o) => JsonConvert.PopulateObject(Configuration["Smtp"], o)); services.AddIdentity( option => { option.User.AllowedUserNameCharacters += " "; option.User.RequireUniqueEmail = true; // option.Cookies.ApplicationCookieAuthenticationScheme = Constants.ApplicationAuthenticationSheme; option.Cookies.ApplicationCookie.LoginPath = "/signin"; // option.Cookies.ApplicationCookie.AuthenticationScheme = Constants.ApplicationAuthenticationSheme; /* option.Cookies.ApplicationCookie.DataProtectionProvider = protector; option.Cookies.ApplicationCookie.LoginPath = new PathString(Constants.LoginPath.Substring(1)); option.Cookies.ApplicationCookie.AccessDeniedPath = new PathString(Constants.AccessDeniedPath.Substring(1)); option.Cookies.ApplicationCookie.AutomaticAuthenticate = true; option.Cookies.ApplicationCookie.AuthenticationScheme = Constants.ApplicationAuthenticationSheme; option.Cookies.ApplicationCookieAuthenticationScheme = Constants.ApplicationAuthenticationSheme; option.Cookies.TwoFactorRememberMeCookie.ExpireTimeSpan = TimeSpan.FromDays(30); option.Cookies.TwoFactorRememberMeCookie.DataProtectionProvider = protector; option.Cookies.ExternalCookieAuthenticationScheme = Constants.ExternalAuthenticationSheme; option.Cookies.ExternalCookie.AutomaticAuthenticate = true; option.Cookies.ExternalCookie.AuthenticationScheme = Constants.ExternalAuthenticationSheme; option.Cookies.ExternalCookie.DataProtectionProvider = protector; */ } ).AddEntityFrameworkStores() .AddTokenProvider>(Yavsc.Constants.DefaultFactor) // .AddTokenProvider(Constants.DefaultFactor) // .AddTokenProvider(Constants.SMSFactor) // .AddTokenProvider(Constants.EMailFactor) // .AddTokenProvider(Constants.AppFactor) // .AddDefaultTokenProviders() ; } // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder builder, ILoggerFactory loggerFactory, IOptions siteSettingsOptions, IOptions smtpSettingsOptions) { var logger = loggerFactory.CreateLogger(); logger.LogInformation("Configuring application startup ..."); SiteSetup = siteSettingsOptions.Value; SmtpSettup = smtpSettingsOptions.Value; DbHelpers.ConnectionString = Configuration["Data:DefaultConnection:ConnectionString"]; logger.LogInformation("done"); } public void Main(string[] args) { var dbContext = new ApplicationDbContext(); foreach (var user in dbContext.Users) { Console.WriteLine($"UserName/{user.UserName} FullName/{user.FullName} Email/{user.Email} "); } } } internal class TerminalHost { private Action _inputDelegate; public TerminalHost() { // Initializes the first delegate to be invoked in the chain. _inputDelegate = Console.Write; } internal void Start() { CancellationTokenSource tokenSource = new CancellationTokenSource(); while (!tokenSource.IsCancellationRequested) { ConsoleKeyInfo keyInfo = Console.ReadKey(); _inputDelegate(keyInfo.KeyChar); } } /// /// Adds the middleware to the invocation chain. /// /// The middleware to be invoked. /// /// The middleware function takes an instance of delegate that was previously invoked as an input and returns the currently invoked delegate instance as an output. /// internal void Use(Func, Action> middleware) { // Keeps a reference to the currently invoked delegate instance. _inputDelegate = middleware(_inputDelegate); } }