From 0c2c828ca09668f76ef6dfd00dc6c30f67183e5d Mon Sep 17 00:00:00 2001 From: Jason Von Ruden Date: Tue, 2 May 2017 22:13:04 -0500 Subject: [PATCH] Add .Net Core 1.1 basicWebApp Sample and fixed Form Controller on Login View on basic.WebApp --- .../basic.WebApp.Core11.sln | 22 ++++ .../basic.WebApp.Core11/.bowerrc | 3 + .../Controllers/HomeController.cs | 31 +++++ .../basic.WebApp.Core11/Program.cs | 21 ++++ .../Properties/launchSettings.json | 27 +++++ .../basic.WebApp.Core11/Startup.cs | 100 ++++++++++++++++ .../Views/Home/About.cshtml | 7 ++ .../Views/Home/Contact.cshtml | 17 +++ .../Views/Home/Index.cshtml | 108 ++++++++++++++++++ .../Views/Login/HashPassword.cshtml | 72 ++++++++++++ .../Views/Login/Index.cshtml | 69 +++++++++++ .../Views/Shared/Error.cshtml | 14 +++ .../Views/Shared/_Layout.cshtml | 74 ++++++++++++ .../Views/Shared/_LoginPartial.cshtml | 20 ++++ .../Shared/_ValidationScriptsPartial.cshtml | 18 +++ .../Views/_ViewImports.cshtml | 5 + .../Views/_ViewStart.cshtml | 3 + .../appsettings.Development.json | 10 ++ .../basic.WebApp.Core11/appsettings.json | 8 ++ .../basic.WebApp.Core11.csproj | 26 +++++ .../basic.WebApp.Core11/bower.json | 10 ++ .../basic.WebApp.Core11/bundleconfig.json | 24 ++++ .../simpleauthsettings.json | 55 +++++++++ .../basic.WebApp.Core11/wwwroot/css/site.css | 37 ++++++ .../wwwroot/css/site.min.css | 1 + .../basic.WebApp.Core11/wwwroot/favicon.ico | Bin 0 -> 32038 bytes .../wwwroot/images/banner1.svg | 1 + .../wwwroot/images/banner2.svg | 1 + .../wwwroot/images/banner3.svg | 1 + .../wwwroot/images/banner4.svg | 1 + .../basic.WebApp.Core11/wwwroot/js/site.js | 1 + .../wwwroot/js/site.min.js | 0 .../src/basic.WebApp/Views/Login/Index.cshtml | 2 +- 33 files changed, 788 insertions(+), 1 deletion(-) create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11.sln create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/.bowerrc create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Controllers/HomeController.cs create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Program.cs create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Properties/launchSettings.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Startup.cs create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/About.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Contact.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Index.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/HashPassword.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/Index.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/Error.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_Layout.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_LoginPartial.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewImports.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewStart.cshtml create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.Development.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/basic.WebApp.Core11.csproj create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/bower.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/bundleconfig.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/simpleauthsettings.json create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.css create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.min.css create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/favicon.ico create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner1.svg create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner2.svg create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner3.svg create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner4.svg create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.js create mode 100644 samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.min.js diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11.sln b/samples/basic.WebApp.Core11/basic.WebApp.Core11.sln new file mode 100644 index 0000000..3188aff --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26403.7 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "basic.WebApp.Core11", "basic.WebApp.Core11\basic.WebApp.Core11.csproj", "{8F776E38-C5E0-4C75-9A40-4127113B1A46}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8F776E38-C5E0-4C75-9A40-4127113B1A46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F776E38-C5E0-4C75-9A40-4127113B1A46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F776E38-C5E0-4C75-9A40-4127113B1A46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F776E38-C5E0-4C75-9A40-4127113B1A46}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/.bowerrc b/samples/basic.WebApp.Core11/basic.WebApp.Core11/.bowerrc new file mode 100644 index 0000000..6406626 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "wwwroot/lib" +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Controllers/HomeController.cs b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Controllers/HomeController.cs new file mode 100644 index 0000000..8976aed --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Controllers/HomeController.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Mvc; + +namespace basic.WebApp.Core11.Controllers +{ + public class HomeController : Controller + { + public IActionResult Index() + { + return View(); + } + + public IActionResult About() + { + ViewData["Message"] = "Your application description page."; + + return View(); + } + + public IActionResult Contact() + { + ViewData["Message"] = "Your contact page."; + + return View(); + } + + public IActionResult Error() + { + return View(); + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Program.cs b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Program.cs new file mode 100644 index 0000000..56b5994 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Program.cs @@ -0,0 +1,21 @@ +using System.IO; +using Microsoft.AspNetCore.Hosting; + +namespace basic.WebApp.Core11 +{ + public class Program + { + public static void Main(string[] args) + { + var host = new WebHostBuilder() + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup() + .UseApplicationInsights() + .Build(); + + host.Run(); + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Properties/launchSettings.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Properties/launchSettings.json new file mode 100644 index 0000000..7563bef --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:56048/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "basic.WebApp.Core11": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:56049" + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Startup.cs b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Startup.cs new file mode 100644 index 0000000..8e097a3 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Startup.cs @@ -0,0 +1,100 @@ +using System.Collections.Generic; +using cloudscribe.Web.SimpleAuth.Models; +using cloudscribe.Web.SimpleAuth.Services; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace basic.WebApp.Core11 +{ + public class Startup + { + public Startup(IHostingEnvironment env) + { + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + .AddEnvironmentVariables(); + + // you can use whatever file name you like and it is probably a good idea to use a custom file name + // just an a small extra protection in case hackers try some kind of attack based on knowing the name of the file + // it should not be possible for anyone to get files outside of wwwroot using http requests + // but every little thing you can do for stronger security is a good idea + builder.AddJsonFile("simpleauthsettings.json", optional: true); + + if (env.IsDevelopment()) + { + // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 + builder.AddUserSecrets(); + } + + builder.AddEnvironmentVariables(); + + Configuration = builder.Build(); + } + + public IConfigurationRoot Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.Configure(Configuration.GetSection("SimpleAuthSettings")); + services.Configure>(Configuration.GetSection("Users")); + services.AddScoped, PasswordHasher>(); + services.AddScoped(); + services.AddScoped(); // single tenant + services.AddScoped(); + + + services.AddMvc(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions authSettingsAccessor) + { + loggerFactory.AddConsole(Configuration.GetSection("Logging")); + loggerFactory.AddDebug(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + app.UseBrowserLink(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + } + + app.UseStaticFiles(); + + // Add cookie-based authentication to the request pipeline + + SimpleAuthSettings authSettings = authSettingsAccessor.Value; + + var ApplicationCookie = new CookieAuthenticationOptions + { + AuthenticationScheme = authSettings.AuthenticationScheme, + CookieName = authSettings.AuthenticationScheme, + AutomaticAuthenticate = true, + AutomaticChallenge = true, + LoginPath = new PathString("/Login/Index") + + }; + + app.UseCookieAuthentication(ApplicationCookie); + + app.UseMvc(routes => + { + routes.MapRoute( + name: "default", + template: "{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/About.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/About.cshtml new file mode 100644 index 0000000..50476d1 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/About.cshtml @@ -0,0 +1,7 @@ +@{ + ViewData["Title"] = "About"; +} +

@ViewData["Title"].

+

@ViewData["Message"]

+ +

Use this area to provide additional information.

diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Contact.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Contact.cshtml new file mode 100644 index 0000000..15c12c6 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Contact.cshtml @@ -0,0 +1,17 @@ +@{ + ViewData["Title"] = "Contact"; +} +

@ViewData["Title"].

+

@ViewData["Message"]

+ +
+ One Microsoft Way
+ Redmond, WA 98052-6399
+ P: + 425.555.0100 +
+ +
+ Support: Support@example.com
+ Marketing: Marketing@example.com +
diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Index.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Index.cshtml new file mode 100644 index 0000000..e3f313d --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Home/Index.cshtml @@ -0,0 +1,108 @@ +@{ + ViewData["Title"] = "Home Page"; +} + + + + diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/HashPassword.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/HashPassword.cshtml new file mode 100644 index 0000000..56695c5 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/HashPassword.cshtml @@ -0,0 +1,72 @@ +@model cloudscribe.Web.SimpleAuth.ViewModels.HashPasswordViewModel + + +@{ + ViewData["Title"] = "Password Hasher"; +} + +

@ViewData["Title"]

+ + +

Hash Password Form

+

+ Simple auth user account information is stored in a simple json file. You could define users with clear text passwords, + but that means anyone who can access the file, such as employees at your web host etc, could access your password. + It would be better to store the passwords as hashed since it would be extremely difficult if not impossible for someone to + determine the password from the hash. This utility uses the ASP.NET Identity PasswordHasher to generate the hashes. + Hashes are one way encryption, they are designed to be impossible to decrypt. + When you login, the password you enter is hashed and validated against the hash in storage, and if it matches authorization is granted. +

+

+ Note however, that if you enter the same password into the hash generator, a different hash will be generated each time, so it is not possible + to just try generating hashes to see if it matches a hash that has been leaked. This makes it very hard for a hacker to get your password from + the hash even if he manages to find out the hash. There is a complex algorythm with + salt added to make sure the hashes are not deterministic. +

+

+ Keep in mind that use of this utility should only be done either from a localhost installation, or from an SSL/TLS protected endpoint. + Don't hash your password while using public wifi. +

+

+ Don't use a password that is the same or following any pattern similar to your other passwords at other web sites. + If you do that and a hacker manages to get your password from any site, he can try to guess passwords for your other website accounts. +

+

+ Be sure to use a password of at least 8 characters, more is better, and use upper and lower case letters as well as numbers and + special characters to make sure you start with a strong password. Don't use dictionary words. We are not masking the password here so make sure no-one is + shoulder surfing when you create your password hash. +

+

+ Once all your users have generated their hashes and their hashes have been added to the simpleauthsettings.json file, you probably should disable this page by setting + EnablePasswordHasherUi as false. + +

+
+
+
+ +
+ + +
+
+ @if (Model.OutputHash.Length > 0) + { + +
+ +
+ + +
+
+ + } + + +
+
+ +
+
+
\ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/Index.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/Index.cshtml new file mode 100644 index 0000000..25173b9 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Login/Index.cshtml @@ -0,0 +1,69 @@ +@model cloudscribe.Web.SimpleAuth.ViewModels.LoginViewModel + +@if (!string.IsNullOrEmpty(Model.RecaptchaSiteKey)) +{ + +} + +@{ + ViewData["Title"] = "Log in"; +} + +

@ViewData["Title"].

+

There are 2 pre-configured example users in simpleauthsettings.json. + You can login with admin/admin or demo/demo +

+

You can of course edit that file to configure your own user accounts and remove the samples.

+
+
+
+
+

Use a local account to log in.

+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+ @if (Model.RecaptchaSiteKey.Length > 0) + { +
+
+
+ @Html.ValidationMessage("recaptchaerror", new { @class = "text-danger" }) +
+
+ + } +
+
+ +
+
+ +
+
+
+
+ +@section Scripts { + @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/Error.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/Error.cshtml new file mode 100644 index 0000000..e514139 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/Error.cshtml @@ -0,0 +1,14 @@ +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. +

diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_Layout.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..e61b373 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_Layout.cshtml @@ -0,0 +1,74 @@ +@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet + + + + + + @ViewData["Title"] - basic.WebApp.Core11 + + + + + + + + + + @Html.Raw(JavaScriptSnippet.FullScript) + + + +
+ @RenderBody() +
+
+

© 2017 - basic.WebApp.Core11

+
+
+ + + + + + + + + + + + + @RenderSection("Scripts", required: false) + + diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_LoginPartial.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_LoginPartial.cshtml new file mode 100644 index 0000000..7356b84 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_LoginPartial.cshtml @@ -0,0 +1,20 @@ +@using System.Security.Claims +@using cloudscribe.Web.SimpleAuth.Extensions + +@if (User.Identity.IsAuthenticated) +{ + +} +else +{ + +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_ValidationScriptsPartial.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..27e0ea7 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewImports.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewImports.cshtml new file mode 100644 index 0000000..0a50bb5 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewImports.cshtml @@ -0,0 +1,5 @@ +@using basic.WebApp.Core11 +@using Microsoft.AspNetCore.Http +@using Microsoft.AspNetCore.Http.Authentication +@using Microsoft.AspNetCore.Identity +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewStart.cshtml b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.Development.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.Development.json new file mode 100644 index 0000000..fa8ce71 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.json new file mode 100644 index 0000000..5fff67b --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Warning" + } + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/basic.WebApp.Core11.csproj b/samples/basic.WebApp.Core11/basic.WebApp.Core11/basic.WebApp.Core11.csproj new file mode 100644 index 0000000..ff04d16 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/basic.WebApp.Core11.csproj @@ -0,0 +1,26 @@ + + + + basic.WebApp.Core11-59f3c1ef-f9bb-40a1-b788-7dcd123eff7d + netcoreapp1.1 + + + + $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; + + + + + + + + + + + + + + + + + diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/bower.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/bower.json new file mode 100644 index 0000000..b07e3cc --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/bower.json @@ -0,0 +1,10 @@ +{ + "name": "asp.net", + "private": true, + "dependencies": { + "bootstrap": "3.3.7", + "jquery": "2.2.0", + "jquery-validation": "1.14.0", + "jquery-validation-unobtrusive": "3.2.6" + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/bundleconfig.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/bundleconfig.json new file mode 100644 index 0000000..6d3f9a5 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/bundleconfig.json @@ -0,0 +1,24 @@ +// Configure bundling and minification for the project. +// More info at https://go.microsoft.com/fwlink/?LinkId=808241 +[ + { + "outputFileName": "wwwroot/css/site.min.css", + // An array of relative input file paths. Globbing patterns supported + "inputFiles": [ + "wwwroot/css/site.css" + ] + }, + { + "outputFileName": "wwwroot/js/site.min.js", + "inputFiles": [ + "wwwroot/js/site.js" + ], + // Optionally specify minification options + "minify": { + "enabled": true, + "renameLocals": true + }, + // Optionally generate .map file + "sourceMap": false + } +] diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/simpleauthsettings.json b/samples/basic.WebApp.Core11/basic.WebApp.Core11/simpleauthsettings.json new file mode 100644 index 0000000..4d588e3 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/simpleauthsettings.json @@ -0,0 +1,55 @@ +{ + "SimpleAuthSettings": { + "EnablePasswordHasherUi": "true", + "Comment-Recaptcha": "get your recaptcha keys here https://www.google.com/recaptcha/intro/index.html", + "RecaptchaPublicKey": "", + "RecaptchaPrivateKey": "", + "AuthenticationScheme": "application" + + }, + + "Users": [ + { + "UserName": "admin", + "Password": "admin", + "PasswordIsHashed": "false", + "Claims": [ + { + "ClaimType": "DisplayName", + "ClaimValue": "Mr Cool!" + }, + { + "ClaimType": "Email", + "ClaimValue": "foo@foo.org" + }, + { + "ClaimType": "Role", + "ClaimValue": "Admins" + } + + ] + }, + { + "UserName": "demo", + "Password": "demo", + "PasswordIsHashed": "false", + "Claims": [ + { + "ClaimType": "DisplayName", + "ClaimValue": "Mr Awesome" + }, + { + "ClaimType": "Email", + "ClaimValue": "demo@demo.com" + }, + { + "ClaimType": "Role", + "ClaimValue": "Admins" + } + + ] + } + ] + + +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.css b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.css new file mode 100644 index 0000000..e31abde --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.css @@ -0,0 +1,37 @@ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Wrapping element */ +/* Set some basic padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Set widths on the form inputs since otherwise they're 100% wide */ +input, +select, +textarea { + max-width: 280px; +} + +/* Carousel */ +.carousel-caption p { + font-size: 20px; + line-height: 1.4; +} + +/* Make .svg files in the carousel display properly in older browsers */ +.carousel-inner .item img[src$=".svg"] { + width: 100%; +} + +/* Hide/rearrange for smaller screens */ +@media screen and (max-width: 767px) { + /* Hide captions */ + .carousel-caption { + display: none; + } +} diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.min.css b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.min.css new file mode 100644 index 0000000..3beb45f --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/css/site.min.css @@ -0,0 +1 @@ +body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}@media screen and (max-width:767px){.carousel-caption{display:none}} \ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/favicon.ico b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 \ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner2.svg b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner2.svg new file mode 100644 index 0000000..9679c60 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner3.svg b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner3.svg new file mode 100644 index 0000000..9be2c25 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner3.svg @@ -0,0 +1 @@ +banner3b \ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner4.svg b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner4.svg new file mode 100644 index 0000000..38b3d7c --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/images/banner4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.js b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.js new file mode 100644 index 0000000..82ecce7 --- /dev/null +++ b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.js @@ -0,0 +1 @@ +// Write your Javascript code. diff --git a/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.min.js b/samples/basic.WebApp.Core11/basic.WebApp.Core11/wwwroot/js/site.min.js new file mode 100644 index 0000000..e69de29 diff --git a/samples/basic.WebApp/src/basic.WebApp/Views/Login/Index.cshtml b/samples/basic.WebApp/src/basic.WebApp/Views/Login/Index.cshtml index 4a734ab..b7aa1a0 100644 --- a/samples/basic.WebApp/src/basic.WebApp/Views/Login/Index.cshtml +++ b/samples/basic.WebApp/src/basic.WebApp/Views/Login/Index.cshtml @@ -20,7 +20,7 @@
-
+

Use a local account to log in.