├── README.md ├── tokenserver ├── .vs │ ├── restore.dg │ └── tokenserver │ │ └── v14 │ │ └── .suo ├── global.json ├── src │ └── tokenserver │ │ ├── .bowerrc │ │ ├── ApplicationDbContext.cs │ │ ├── Configs │ │ ├── Clients.cs │ │ ├── Resources.cs │ │ └── Users.cs │ │ ├── Controllers │ │ ├── AccountController.cs │ │ ├── ConsentController.cs │ │ └── HomeController.cs │ │ ├── Migrations │ │ ├── 20170216070441_InitialIdentityServerMigration.Designer.cs │ │ ├── 20170216070441_InitialIdentityServerMigration.cs │ │ ├── ApplicationDb │ │ │ ├── 20170216071031_InitialIdentityServerMigration.Designer.cs │ │ │ ├── 20170216071031_InitialIdentityServerMigration.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── ConfigurationDb │ │ │ ├── 20170216070751_InitialIdentityServerMigration.Designer.cs │ │ │ ├── 20170216070751_InitialIdentityServerMigration.cs │ │ │ └── ConfigurationDbContextModelSnapshot.cs │ │ └── PersistedGrantDbContextModelSnapshot.cs │ │ ├── Program.cs │ │ ├── Project_Readme.html │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── ViewModels │ │ ├── ErrorViewModel.cs │ │ └── LoginViewModel.cs │ │ ├── Views │ │ ├── Account │ │ │ └── Login.cshtml │ │ ├── Consent │ │ │ └── Index.cshtml │ │ ├── Home │ │ │ ├── About.cshtml │ │ │ ├── Contact.cshtml │ │ │ └── Index.cshtml │ │ ├── Shared │ │ │ ├── Error.cshtml │ │ │ └── _Layout.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ │ ├── appsettings.json │ │ ├── bin │ │ └── Debug │ │ │ └── netcoreapp1.0 │ │ │ ├── 7d5ec1ed-b121-4ce0-863f-9e0cbd8c625c_tokenserver.dll │ │ │ ├── tokenserver.deps.json │ │ │ ├── tokenserver.dll │ │ │ ├── tokenserver.pdb │ │ │ ├── tokenserver.runtimeconfig.dev.json │ │ │ └── tokenserver.runtimeconfig.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── obj │ │ └── Debug │ │ │ └── netcoreapp1.0 │ │ │ ├── .IncrementalCache │ │ │ ├── .SDKVersion │ │ │ ├── dotnet-compile-csc.rsp │ │ │ ├── dotnet-compile.assemblyinfo.cs │ │ │ ├── dotnet-compile.rsp │ │ │ └── tokenserverdotnet-compile.deps.json │ │ ├── project.json │ │ ├── project.lock.json │ │ ├── tokenserver.xproj │ │ ├── tokenserver.xproj.user │ │ ├── web.config │ │ └── wwwroot │ │ ├── _references.js │ │ ├── css │ │ ├── site.css │ │ └── site.min.css │ │ ├── favicon.ico │ │ ├── images │ │ ├── banner1.svg │ │ ├── banner2.svg │ │ ├── banner3.svg │ │ └── banner4.svg │ │ ├── js │ │ ├── site.js │ │ └── site.min.js │ │ └── lib │ │ ├── bootstrap │ │ ├── .bower.json │ │ ├── LICENSE │ │ └── dist │ │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap-theme.min.css.map │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ └── npm.js │ │ ├── jquery-validation-unobtrusive │ │ ├── .bower.json │ │ ├── jquery.validate.unobtrusive.js │ │ └── jquery.validate.unobtrusive.min.js │ │ ├── jquery-validation │ │ ├── .bower.json │ │ ├── LICENSE.md │ │ └── dist │ │ │ ├── additional-methods.js │ │ │ ├── additional-methods.min.js │ │ │ ├── jquery.validate.js │ │ │ └── jquery.validate.min.js │ │ └── jquery │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ └── dist │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ └── jquery.min.map └── tokenserver.sln └── webclient ├── .vs ├── config │ └── applicationhost.config ├── restore.dg └── webclient │ └── v14 │ └── .suo ├── global.json ├── src └── webclient │ ├── .bowerrc │ ├── Controllers │ └── HomeController.cs │ ├── Program.cs │ ├── Project_Readme.html │ ├── Properties │ └── launchSettings.json │ ├── Startup.cs │ ├── Views │ ├── Home │ │ ├── About.cshtml │ │ ├── Contact.cshtml │ │ └── Index.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ └── _Layout.cshtml │ ├── _ViewImports.cshtml │ └── _ViewStart.cshtml │ ├── appsettings.json │ ├── bin │ └── Debug │ │ └── netcoreapp1.0 │ │ ├── webclient.deps.json │ │ ├── webclient.dll │ │ ├── webclient.pdb │ │ ├── webclient.runtimeconfig.dev.json │ │ └── webclient.runtimeconfig.json │ ├── bower.json │ ├── bundleconfig.json │ ├── obj │ └── Debug │ │ └── netcoreapp1.0 │ │ ├── .IncrementalCache │ │ ├── .SDKVersion │ │ ├── dotnet-compile-csc.rsp │ │ ├── dotnet-compile.assemblyinfo.cs │ │ ├── dotnet-compile.rsp │ │ └── webclientdotnet-compile.deps.json │ ├── project.json │ ├── project.lock.json │ ├── web.config │ ├── webclient.xproj │ ├── webclient.xproj.user │ └── wwwroot │ ├── _references.js │ ├── css │ ├── site.css │ └── site.min.css │ ├── favicon.ico │ ├── images │ ├── banner1.svg │ ├── banner2.svg │ ├── banner3.svg │ └── banner4.svg │ ├── js │ ├── site.js │ └── site.min.js │ └── lib │ ├── bootstrap │ ├── .bower.json │ ├── LICENSE │ └── dist │ │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── jquery-validation-unobtrusive │ ├── .bower.json │ ├── jquery.validate.unobtrusive.js │ └── jquery.validate.unobtrusive.min.js │ ├── jquery-validation │ ├── .bower.json │ ├── LICENSE.md │ └── dist │ │ ├── additional-methods.js │ │ ├── additional-methods.min.js │ │ ├── jquery.validate.js │ │ └── jquery.validate.min.js │ └── jquery │ ├── .bower.json │ ├── LICENSE.txt │ └── dist │ ├── jquery.js │ ├── jquery.min.js │ └── jquery.min.map └── webclient.sln /README.md: -------------------------------------------------------------------------------- 1 | # ASP.NETCoreSecurity 2 | Design security for ASP.NET Core web application with self managed, centralized Identity Server 4 authorization server 3 | If you want find more about Identity Server 4, check this article, 4 | 5 | https://social.technet.microsoft.com/wiki/contents/articles/37169.secure-your-netcore-web-applications-using-identityserver-4.aspx 6 | 7 | http://hansamaligamage.blogspot.com/2017/02/secure-your-netcore-web-applications.html 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tokenserver/.vs/restore.dg: -------------------------------------------------------------------------------- 1 | #:C:\Users\ham\Desktop\security\demo\test6\tokenserver\src\tokenserver\tokenserver.xproj 2 | -------------------------------------------------------------------------------- /tokenserver/.vs/tokenserver/v14/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/.vs/tokenserver/v14/.suo -------------------------------------------------------------------------------- /tokenserver/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "projects": [ "src", "test" ], 3 | "sdk": { 4 | "version": "1.0.0-preview2-003131" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/ApplicationDbContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 2 | using Microsoft.EntityFrameworkCore; 3 | 4 | namespace tokenserver 5 | { 6 | internal class ApplicationDbContext : IdentityDbContext 7 | { 8 | 9 | public ApplicationDbContext(DbContextOptions options) : base(options) 10 | { 11 | 12 | } 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Configs/Clients.cs: -------------------------------------------------------------------------------- 1 | using IdentityServer4; 2 | using IdentityServer4.Models; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace tokenserver.Configs 9 | { 10 | internal class Clients 11 | { 12 | public static List GetClients() 13 | { 14 | return new List 15 | { 16 | new Client 17 | { 18 | ClientId = "testWebClient", 19 | ClientName = "testWebClient", 20 | AllowedGrantTypes = GrantTypes.Implicit, 21 | RedirectUris = new List { "http://localhost:63204/signin-oidc" }, 22 | PostLogoutRedirectUris = new List { "http://localhost:63204/" }, 23 | AllowedScopes = new List 24 | { 25 | IdentityServerConstants.StandardScopes.OpenId, 26 | IdentityServerConstants.StandardScopes.Profile, 27 | IdentityServerConstants.StandardScopes.Email 28 | } 29 | }, 30 | 31 | new Client 32 | { 33 | ClientName = "client", 34 | ClientId = "client", 35 | AllowedGrantTypes = GrantTypes.ClientCredentials, 36 | ClientSecrets = { new Secret("secret".Sha256()) }, 37 | AllowedScopes = { "customAPI.read"} 38 | } 39 | 40 | }; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Configs/Resources.cs: -------------------------------------------------------------------------------- 1 | using IdentityServer4.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace tokenserver.Configs 8 | { 9 | internal class Resources 10 | { 11 | public static List GetApiResources() 12 | { 13 | return new List 14 | { 15 | new ApiResource 16 | { 17 | Name = "customAPI", 18 | DisplayName = "Custom API", 19 | Description = "Custom API Access", 20 | Scopes = {new Scope("customAPI.read")} 21 | } 22 | }; 23 | } 24 | 25 | public static List GetIdentityResources() 26 | { 27 | return new List 28 | { 29 | new IdentityResources.OpenId(), 30 | new IdentityResources.Profile(), 31 | new IdentityResources.Email(), 32 | new IdentityResource 33 | { 34 | Name = "role", 35 | UserClaims = new List {"role" } 36 | } 37 | }; 38 | } 39 | 40 | 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Configs/Users.cs: -------------------------------------------------------------------------------- 1 | using IdentityServer4.Services.InMemory; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace tokenserver.Configs 8 | { 9 | internal class Users 10 | { 11 | 12 | public static List GetUsers() 13 | { 14 | return new List 15 | { 16 | new InMemoryUser 17 | { 18 | Username = "hansamali", 19 | Password = "123456" 20 | } 21 | }; 22 | } 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Controllers/AccountController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Identity; 6 | using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 7 | using Microsoft.AspNetCore.Mvc; 8 | using IdentityServer4.Services; 9 | using tokenserver.ViewModels; 10 | using Microsoft.AspNetCore.Http.Authentication; 11 | 12 | // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 13 | 14 | namespace tokenserver.Controllers 15 | { 16 | public class AccountController : Controller 17 | { 18 | 19 | private UserManager _userManager; 20 | private IIdentityServerInteractionService _interaction; 21 | 22 | public AccountController(UserManager userManager, IIdentityServerInteractionService interaction) 23 | { 24 | _userManager = userManager; 25 | _interaction = interaction; 26 | } 27 | 28 | 29 | [HttpPost] 30 | public async Task Login(LoginViewModel loginViewModel) 31 | { 32 | if (ModelState.IsValid) 33 | { 34 | var identityUser = await _userManager.FindByNameAsync(loginViewModel.UserName); 35 | 36 | if (identityUser != null 37 | && await _userManager.CheckPasswordAsync(identityUser, loginViewModel.Password)) 38 | { 39 | AuthenticationProperties properties = null; 40 | if (loginViewModel.RememberMe) 41 | { 42 | properties = new AuthenticationProperties 43 | { 44 | IsPersistent = true 45 | }; 46 | } 47 | 48 | await HttpContext.Authentication.SignInAsync(identityUser.Id, identityUser.UserName); 49 | 50 | if (_interaction.IsValidReturnUrl(loginViewModel.ReturnUrl)) 51 | return Redirect(loginViewModel.ReturnUrl); 52 | 53 | return Redirect("~/"); 54 | } 55 | 56 | ModelState.AddModelError("", "Invalid username or password."); 57 | } 58 | 59 | return View(loginViewModel); 60 | } 61 | 62 | 63 | // GET: // 64 | public IActionResult Index() 65 | { 66 | return View(); 67 | } 68 | 69 | [HttpGet] 70 | public IActionResult Login(string returnUrl) 71 | { 72 | return View(); 73 | } 74 | 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Controllers/ConsentController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | 7 | // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 8 | 9 | namespace tokenserver.Controllers 10 | { 11 | public class ConsentController : Controller 12 | { 13 | // GET: // 14 | public IActionResult Index() 15 | { 16 | return View(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using IdentityServer4.Services; 7 | using tokenserver.ViewModels; 8 | 9 | namespace tokenserver.Controllers 10 | { 11 | public class HomeController : Controller 12 | { 13 | 14 | private IIdentityServerInteractionService _interaction; 15 | 16 | public HomeController(IIdentityServerInteractionService interaction) 17 | { 18 | _interaction = interaction; 19 | 20 | } 21 | 22 | public IActionResult Index() 23 | { 24 | return View(); 25 | } 26 | 27 | //public IActionResult About() 28 | //{ 29 | // ViewData["Message"] = "Your application description page."; 30 | 31 | // return View(); 32 | //} 33 | 34 | //public IActionResult Contact() 35 | //{ 36 | // ViewData["Message"] = "Your contact page."; 37 | 38 | // return View(); 39 | //} 40 | 41 | public async Task Error(string errorId) 42 | { 43 | //return View(); 44 | ErrorViewModel errorViewModel = new ErrorViewModel(); 45 | var message = await _interaction.GetErrorContextAsync(errorId); 46 | if (message != null) 47 | errorViewModel.Error = message; 48 | return View("Error", errorViewModel); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/20170216070441_InitialIdentityServerMigration.Designer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.EntityFrameworkCore; 3 | using Microsoft.EntityFrameworkCore.Infrastructure; 4 | using Microsoft.EntityFrameworkCore.Metadata; 5 | using Microsoft.EntityFrameworkCore.Migrations; 6 | using IdentityServer4.EntityFramework.DbContexts; 7 | 8 | namespace tokenserver.Migrations 9 | { 10 | [DbContext(typeof(PersistedGrantDbContext))] 11 | [Migration("20170216070441_InitialIdentityServerMigration")] 12 | partial class InitialIdentityServerMigration 13 | { 14 | protected override void BuildTargetModel(ModelBuilder modelBuilder) 15 | { 16 | modelBuilder 17 | .HasAnnotation("ProductVersion", "1.1.0-rtm-22752") 18 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 19 | 20 | modelBuilder.Entity("IdentityServer4.EntityFramework.Entities.PersistedGrant", b => 21 | { 22 | b.Property("Key") 23 | .HasMaxLength(200); 24 | 25 | b.Property("Type") 26 | .HasMaxLength(50); 27 | 28 | b.Property("ClientId") 29 | .IsRequired() 30 | .HasMaxLength(200); 31 | 32 | b.Property("CreationTime"); 33 | 34 | b.Property("Data") 35 | .IsRequired(); 36 | 37 | b.Property("Expiration"); 38 | 39 | b.Property("SubjectId") 40 | .HasMaxLength(200); 41 | 42 | b.HasKey("Key", "Type"); 43 | 44 | b.HasIndex("SubjectId"); 45 | 46 | b.HasIndex("SubjectId", "ClientId"); 47 | 48 | b.HasIndex("SubjectId", "ClientId", "Type"); 49 | 50 | b.ToTable("PersistedGrants"); 51 | }); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/20170216070441_InitialIdentityServerMigration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.EntityFrameworkCore.Migrations; 4 | 5 | namespace tokenserver.Migrations 6 | { 7 | public partial class InitialIdentityServerMigration : Migration 8 | { 9 | protected override void Up(MigrationBuilder migrationBuilder) 10 | { 11 | migrationBuilder.CreateTable( 12 | name: "PersistedGrants", 13 | columns: table => new 14 | { 15 | Key = table.Column(maxLength: 200, nullable: false), 16 | Type = table.Column(maxLength: 50, nullable: false), 17 | ClientId = table.Column(maxLength: 200, nullable: false), 18 | CreationTime = table.Column(nullable: false), 19 | Data = table.Column(nullable: false), 20 | Expiration = table.Column(nullable: false), 21 | SubjectId = table.Column(maxLength: 200, nullable: true) 22 | }, 23 | constraints: table => 24 | { 25 | table.PrimaryKey("PK_PersistedGrants", x => new { x.Key, x.Type }); 26 | }); 27 | 28 | migrationBuilder.CreateIndex( 29 | name: "IX_PersistedGrants_SubjectId", 30 | table: "PersistedGrants", 31 | column: "SubjectId"); 32 | 33 | migrationBuilder.CreateIndex( 34 | name: "IX_PersistedGrants_SubjectId_ClientId", 35 | table: "PersistedGrants", 36 | columns: new[] { "SubjectId", "ClientId" }); 37 | 38 | migrationBuilder.CreateIndex( 39 | name: "IX_PersistedGrants_SubjectId_ClientId_Type", 40 | table: "PersistedGrants", 41 | columns: new[] { "SubjectId", "ClientId", "Type" }); 42 | } 43 | 44 | protected override void Down(MigrationBuilder migrationBuilder) 45 | { 46 | migrationBuilder.DropTable( 47 | name: "PersistedGrants"); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/ApplicationDb/20170216071031_InitialIdentityServerMigration.Designer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.EntityFrameworkCore; 3 | using Microsoft.EntityFrameworkCore.Infrastructure; 4 | using Microsoft.EntityFrameworkCore.Metadata; 5 | using Microsoft.EntityFrameworkCore.Migrations; 6 | using tokenserver; 7 | 8 | namespace tokenserver.Migrations.ApplicationDb 9 | { 10 | [DbContext(typeof(ApplicationDbContext))] 11 | [Migration("20170216071031_InitialIdentityServerMigration")] 12 | partial class InitialIdentityServerMigration 13 | { 14 | protected override void BuildTargetModel(ModelBuilder modelBuilder) 15 | { 16 | modelBuilder 17 | .HasAnnotation("ProductVersion", "1.1.0-rtm-22752") 18 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 19 | 20 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b => 21 | { 22 | b.Property("Id") 23 | .ValueGeneratedOnAdd(); 24 | 25 | b.Property("ConcurrencyStamp") 26 | .IsConcurrencyToken(); 27 | 28 | b.Property("Name") 29 | .HasMaxLength(256); 30 | 31 | b.Property("NormalizedName") 32 | .HasMaxLength(256); 33 | 34 | b.HasKey("Id"); 35 | 36 | b.HasIndex("NormalizedName") 37 | .IsUnique() 38 | .HasName("RoleNameIndex"); 39 | 40 | b.ToTable("AspNetRoles"); 41 | }); 42 | 43 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim", b => 44 | { 45 | b.Property("Id") 46 | .ValueGeneratedOnAdd(); 47 | 48 | b.Property("ClaimType"); 49 | 50 | b.Property("ClaimValue"); 51 | 52 | b.Property("RoleId") 53 | .IsRequired(); 54 | 55 | b.HasKey("Id"); 56 | 57 | b.HasIndex("RoleId"); 58 | 59 | b.ToTable("AspNetRoleClaims"); 60 | }); 61 | 62 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser", b => 63 | { 64 | b.Property("Id") 65 | .ValueGeneratedOnAdd(); 66 | 67 | b.Property("AccessFailedCount"); 68 | 69 | b.Property("ConcurrencyStamp") 70 | .IsConcurrencyToken(); 71 | 72 | b.Property("Email") 73 | .HasMaxLength(256); 74 | 75 | b.Property("EmailConfirmed"); 76 | 77 | b.Property("LockoutEnabled"); 78 | 79 | b.Property("LockoutEnd"); 80 | 81 | b.Property("NormalizedEmail") 82 | .HasMaxLength(256); 83 | 84 | b.Property("NormalizedUserName") 85 | .HasMaxLength(256); 86 | 87 | b.Property("PasswordHash"); 88 | 89 | b.Property("PhoneNumber"); 90 | 91 | b.Property("PhoneNumberConfirmed"); 92 | 93 | b.Property("SecurityStamp"); 94 | 95 | b.Property("TwoFactorEnabled"); 96 | 97 | b.Property("UserName") 98 | .HasMaxLength(256); 99 | 100 | b.HasKey("Id"); 101 | 102 | b.HasIndex("NormalizedEmail") 103 | .HasName("EmailIndex"); 104 | 105 | b.HasIndex("NormalizedUserName") 106 | .IsUnique() 107 | .HasName("UserNameIndex"); 108 | 109 | b.ToTable("AspNetUsers"); 110 | }); 111 | 112 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim", b => 113 | { 114 | b.Property("Id") 115 | .ValueGeneratedOnAdd(); 116 | 117 | b.Property("ClaimType"); 118 | 119 | b.Property("ClaimValue"); 120 | 121 | b.Property("UserId") 122 | .IsRequired(); 123 | 124 | b.HasKey("Id"); 125 | 126 | b.HasIndex("UserId"); 127 | 128 | b.ToTable("AspNetUserClaims"); 129 | }); 130 | 131 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin", b => 132 | { 133 | b.Property("LoginProvider"); 134 | 135 | b.Property("ProviderKey"); 136 | 137 | b.Property("ProviderDisplayName"); 138 | 139 | b.Property("UserId") 140 | .IsRequired(); 141 | 142 | b.HasKey("LoginProvider", "ProviderKey"); 143 | 144 | b.HasIndex("UserId"); 145 | 146 | b.ToTable("AspNetUserLogins"); 147 | }); 148 | 149 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole", b => 150 | { 151 | b.Property("UserId"); 152 | 153 | b.Property("RoleId"); 154 | 155 | b.HasKey("UserId", "RoleId"); 156 | 157 | b.HasIndex("RoleId"); 158 | 159 | b.ToTable("AspNetUserRoles"); 160 | }); 161 | 162 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken", b => 163 | { 164 | b.Property("UserId"); 165 | 166 | b.Property("LoginProvider"); 167 | 168 | b.Property("Name"); 169 | 170 | b.Property("Value"); 171 | 172 | b.HasKey("UserId", "LoginProvider", "Name"); 173 | 174 | b.ToTable("AspNetUserTokens"); 175 | }); 176 | 177 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim", b => 178 | { 179 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 180 | .WithMany("Claims") 181 | .HasForeignKey("RoleId") 182 | .OnDelete(DeleteBehavior.Cascade); 183 | }); 184 | 185 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim", b => 186 | { 187 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 188 | .WithMany("Claims") 189 | .HasForeignKey("UserId") 190 | .OnDelete(DeleteBehavior.Cascade); 191 | }); 192 | 193 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin", b => 194 | { 195 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 196 | .WithMany("Logins") 197 | .HasForeignKey("UserId") 198 | .OnDelete(DeleteBehavior.Cascade); 199 | }); 200 | 201 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole", b => 202 | { 203 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 204 | .WithMany("Users") 205 | .HasForeignKey("RoleId") 206 | .OnDelete(DeleteBehavior.Cascade); 207 | 208 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 209 | .WithMany("Roles") 210 | .HasForeignKey("UserId") 211 | .OnDelete(DeleteBehavior.Cascade); 212 | }); 213 | } 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/ApplicationDb/20170216071031_InitialIdentityServerMigration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.EntityFrameworkCore.Migrations; 4 | using Microsoft.EntityFrameworkCore.Metadata; 5 | 6 | namespace tokenserver.Migrations.ApplicationDb 7 | { 8 | public partial class InitialIdentityServerMigration : Migration 9 | { 10 | protected override void Up(MigrationBuilder migrationBuilder) 11 | { 12 | migrationBuilder.CreateTable( 13 | name: "AspNetRoles", 14 | columns: table => new 15 | { 16 | Id = table.Column(nullable: false), 17 | ConcurrencyStamp = table.Column(nullable: true), 18 | Name = table.Column(maxLength: 256, nullable: true), 19 | NormalizedName = table.Column(maxLength: 256, nullable: true) 20 | }, 21 | constraints: table => 22 | { 23 | table.PrimaryKey("PK_AspNetRoles", x => x.Id); 24 | }); 25 | 26 | migrationBuilder.CreateTable( 27 | name: "AspNetUsers", 28 | columns: table => new 29 | { 30 | Id = table.Column(nullable: false), 31 | AccessFailedCount = table.Column(nullable: false), 32 | ConcurrencyStamp = table.Column(nullable: true), 33 | Email = table.Column(maxLength: 256, nullable: true), 34 | EmailConfirmed = table.Column(nullable: false), 35 | LockoutEnabled = table.Column(nullable: false), 36 | LockoutEnd = table.Column(nullable: true), 37 | NormalizedEmail = table.Column(maxLength: 256, nullable: true), 38 | NormalizedUserName = table.Column(maxLength: 256, nullable: true), 39 | PasswordHash = table.Column(nullable: true), 40 | PhoneNumber = table.Column(nullable: true), 41 | PhoneNumberConfirmed = table.Column(nullable: false), 42 | SecurityStamp = table.Column(nullable: true), 43 | TwoFactorEnabled = table.Column(nullable: false), 44 | UserName = table.Column(maxLength: 256, nullable: true) 45 | }, 46 | constraints: table => 47 | { 48 | table.PrimaryKey("PK_AspNetUsers", x => x.Id); 49 | }); 50 | 51 | migrationBuilder.CreateTable( 52 | name: "AspNetUserTokens", 53 | columns: table => new 54 | { 55 | UserId = table.Column(nullable: false), 56 | LoginProvider = table.Column(nullable: false), 57 | Name = table.Column(nullable: false), 58 | Value = table.Column(nullable: true) 59 | }, 60 | constraints: table => 61 | { 62 | table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); 63 | }); 64 | 65 | migrationBuilder.CreateTable( 66 | name: "AspNetRoleClaims", 67 | columns: table => new 68 | { 69 | Id = table.Column(nullable: false) 70 | .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 71 | ClaimType = table.Column(nullable: true), 72 | ClaimValue = table.Column(nullable: true), 73 | RoleId = table.Column(nullable: false) 74 | }, 75 | constraints: table => 76 | { 77 | table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); 78 | table.ForeignKey( 79 | name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", 80 | column: x => x.RoleId, 81 | principalTable: "AspNetRoles", 82 | principalColumn: "Id", 83 | onDelete: ReferentialAction.Cascade); 84 | }); 85 | 86 | migrationBuilder.CreateTable( 87 | name: "AspNetUserClaims", 88 | columns: table => new 89 | { 90 | Id = table.Column(nullable: false) 91 | .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 92 | ClaimType = table.Column(nullable: true), 93 | ClaimValue = table.Column(nullable: true), 94 | UserId = table.Column(nullable: false) 95 | }, 96 | constraints: table => 97 | { 98 | table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); 99 | table.ForeignKey( 100 | name: "FK_AspNetUserClaims_AspNetUsers_UserId", 101 | column: x => x.UserId, 102 | principalTable: "AspNetUsers", 103 | principalColumn: "Id", 104 | onDelete: ReferentialAction.Cascade); 105 | }); 106 | 107 | migrationBuilder.CreateTable( 108 | name: "AspNetUserLogins", 109 | columns: table => new 110 | { 111 | LoginProvider = table.Column(nullable: false), 112 | ProviderKey = table.Column(nullable: false), 113 | ProviderDisplayName = table.Column(nullable: true), 114 | UserId = table.Column(nullable: false) 115 | }, 116 | constraints: table => 117 | { 118 | table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); 119 | table.ForeignKey( 120 | name: "FK_AspNetUserLogins_AspNetUsers_UserId", 121 | column: x => x.UserId, 122 | principalTable: "AspNetUsers", 123 | principalColumn: "Id", 124 | onDelete: ReferentialAction.Cascade); 125 | }); 126 | 127 | migrationBuilder.CreateTable( 128 | name: "AspNetUserRoles", 129 | columns: table => new 130 | { 131 | UserId = table.Column(nullable: false), 132 | RoleId = table.Column(nullable: false) 133 | }, 134 | constraints: table => 135 | { 136 | table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); 137 | table.ForeignKey( 138 | name: "FK_AspNetUserRoles_AspNetRoles_RoleId", 139 | column: x => x.RoleId, 140 | principalTable: "AspNetRoles", 141 | principalColumn: "Id", 142 | onDelete: ReferentialAction.Cascade); 143 | table.ForeignKey( 144 | name: "FK_AspNetUserRoles_AspNetUsers_UserId", 145 | column: x => x.UserId, 146 | principalTable: "AspNetUsers", 147 | principalColumn: "Id", 148 | onDelete: ReferentialAction.Cascade); 149 | }); 150 | 151 | migrationBuilder.CreateIndex( 152 | name: "RoleNameIndex", 153 | table: "AspNetRoles", 154 | column: "NormalizedName", 155 | unique: true); 156 | 157 | migrationBuilder.CreateIndex( 158 | name: "IX_AspNetRoleClaims_RoleId", 159 | table: "AspNetRoleClaims", 160 | column: "RoleId"); 161 | 162 | migrationBuilder.CreateIndex( 163 | name: "EmailIndex", 164 | table: "AspNetUsers", 165 | column: "NormalizedEmail"); 166 | 167 | migrationBuilder.CreateIndex( 168 | name: "UserNameIndex", 169 | table: "AspNetUsers", 170 | column: "NormalizedUserName", 171 | unique: true); 172 | 173 | migrationBuilder.CreateIndex( 174 | name: "IX_AspNetUserClaims_UserId", 175 | table: "AspNetUserClaims", 176 | column: "UserId"); 177 | 178 | migrationBuilder.CreateIndex( 179 | name: "IX_AspNetUserLogins_UserId", 180 | table: "AspNetUserLogins", 181 | column: "UserId"); 182 | 183 | migrationBuilder.CreateIndex( 184 | name: "IX_AspNetUserRoles_RoleId", 185 | table: "AspNetUserRoles", 186 | column: "RoleId"); 187 | } 188 | 189 | protected override void Down(MigrationBuilder migrationBuilder) 190 | { 191 | migrationBuilder.DropTable( 192 | name: "AspNetRoleClaims"); 193 | 194 | migrationBuilder.DropTable( 195 | name: "AspNetUserClaims"); 196 | 197 | migrationBuilder.DropTable( 198 | name: "AspNetUserLogins"); 199 | 200 | migrationBuilder.DropTable( 201 | name: "AspNetUserRoles"); 202 | 203 | migrationBuilder.DropTable( 204 | name: "AspNetUserTokens"); 205 | 206 | migrationBuilder.DropTable( 207 | name: "AspNetRoles"); 208 | 209 | migrationBuilder.DropTable( 210 | name: "AspNetUsers"); 211 | } 212 | } 213 | } 214 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/ApplicationDb/ApplicationDbContextModelSnapshot.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.EntityFrameworkCore; 3 | using Microsoft.EntityFrameworkCore.Infrastructure; 4 | using Microsoft.EntityFrameworkCore.Metadata; 5 | using Microsoft.EntityFrameworkCore.Migrations; 6 | using tokenserver; 7 | 8 | namespace tokenserver.Migrations.ApplicationDb 9 | { 10 | [DbContext(typeof(ApplicationDbContext))] 11 | partial class ApplicationDbContextModelSnapshot : ModelSnapshot 12 | { 13 | protected override void BuildModel(ModelBuilder modelBuilder) 14 | { 15 | modelBuilder 16 | .HasAnnotation("ProductVersion", "1.1.0-rtm-22752") 17 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 18 | 19 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b => 20 | { 21 | b.Property("Id") 22 | .ValueGeneratedOnAdd(); 23 | 24 | b.Property("ConcurrencyStamp") 25 | .IsConcurrencyToken(); 26 | 27 | b.Property("Name") 28 | .HasMaxLength(256); 29 | 30 | b.Property("NormalizedName") 31 | .HasMaxLength(256); 32 | 33 | b.HasKey("Id"); 34 | 35 | b.HasIndex("NormalizedName") 36 | .IsUnique() 37 | .HasName("RoleNameIndex"); 38 | 39 | b.ToTable("AspNetRoles"); 40 | }); 41 | 42 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim", b => 43 | { 44 | b.Property("Id") 45 | .ValueGeneratedOnAdd(); 46 | 47 | b.Property("ClaimType"); 48 | 49 | b.Property("ClaimValue"); 50 | 51 | b.Property("RoleId") 52 | .IsRequired(); 53 | 54 | b.HasKey("Id"); 55 | 56 | b.HasIndex("RoleId"); 57 | 58 | b.ToTable("AspNetRoleClaims"); 59 | }); 60 | 61 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser", b => 62 | { 63 | b.Property("Id") 64 | .ValueGeneratedOnAdd(); 65 | 66 | b.Property("AccessFailedCount"); 67 | 68 | b.Property("ConcurrencyStamp") 69 | .IsConcurrencyToken(); 70 | 71 | b.Property("Email") 72 | .HasMaxLength(256); 73 | 74 | b.Property("EmailConfirmed"); 75 | 76 | b.Property("LockoutEnabled"); 77 | 78 | b.Property("LockoutEnd"); 79 | 80 | b.Property("NormalizedEmail") 81 | .HasMaxLength(256); 82 | 83 | b.Property("NormalizedUserName") 84 | .HasMaxLength(256); 85 | 86 | b.Property("PasswordHash"); 87 | 88 | b.Property("PhoneNumber"); 89 | 90 | b.Property("PhoneNumberConfirmed"); 91 | 92 | b.Property("SecurityStamp"); 93 | 94 | b.Property("TwoFactorEnabled"); 95 | 96 | b.Property("UserName") 97 | .HasMaxLength(256); 98 | 99 | b.HasKey("Id"); 100 | 101 | b.HasIndex("NormalizedEmail") 102 | .HasName("EmailIndex"); 103 | 104 | b.HasIndex("NormalizedUserName") 105 | .IsUnique() 106 | .HasName("UserNameIndex"); 107 | 108 | b.ToTable("AspNetUsers"); 109 | }); 110 | 111 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim", b => 112 | { 113 | b.Property("Id") 114 | .ValueGeneratedOnAdd(); 115 | 116 | b.Property("ClaimType"); 117 | 118 | b.Property("ClaimValue"); 119 | 120 | b.Property("UserId") 121 | .IsRequired(); 122 | 123 | b.HasKey("Id"); 124 | 125 | b.HasIndex("UserId"); 126 | 127 | b.ToTable("AspNetUserClaims"); 128 | }); 129 | 130 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin", b => 131 | { 132 | b.Property("LoginProvider"); 133 | 134 | b.Property("ProviderKey"); 135 | 136 | b.Property("ProviderDisplayName"); 137 | 138 | b.Property("UserId") 139 | .IsRequired(); 140 | 141 | b.HasKey("LoginProvider", "ProviderKey"); 142 | 143 | b.HasIndex("UserId"); 144 | 145 | b.ToTable("AspNetUserLogins"); 146 | }); 147 | 148 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole", b => 149 | { 150 | b.Property("UserId"); 151 | 152 | b.Property("RoleId"); 153 | 154 | b.HasKey("UserId", "RoleId"); 155 | 156 | b.HasIndex("RoleId"); 157 | 158 | b.ToTable("AspNetUserRoles"); 159 | }); 160 | 161 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken", b => 162 | { 163 | b.Property("UserId"); 164 | 165 | b.Property("LoginProvider"); 166 | 167 | b.Property("Name"); 168 | 169 | b.Property("Value"); 170 | 171 | b.HasKey("UserId", "LoginProvider", "Name"); 172 | 173 | b.ToTable("AspNetUserTokens"); 174 | }); 175 | 176 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim", b => 177 | { 178 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 179 | .WithMany("Claims") 180 | .HasForeignKey("RoleId") 181 | .OnDelete(DeleteBehavior.Cascade); 182 | }); 183 | 184 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim", b => 185 | { 186 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 187 | .WithMany("Claims") 188 | .HasForeignKey("UserId") 189 | .OnDelete(DeleteBehavior.Cascade); 190 | }); 191 | 192 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin", b => 193 | { 194 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 195 | .WithMany("Logins") 196 | .HasForeignKey("UserId") 197 | .OnDelete(DeleteBehavior.Cascade); 198 | }); 199 | 200 | modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole", b => 201 | { 202 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 203 | .WithMany("Users") 204 | .HasForeignKey("RoleId") 205 | .OnDelete(DeleteBehavior.Cascade); 206 | 207 | b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser") 208 | .WithMany("Roles") 209 | .HasForeignKey("UserId") 210 | .OnDelete(DeleteBehavior.Cascade); 211 | }); 212 | } 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Migrations/PersistedGrantDbContextModelSnapshot.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.EntityFrameworkCore; 3 | using Microsoft.EntityFrameworkCore.Infrastructure; 4 | using Microsoft.EntityFrameworkCore.Metadata; 5 | using Microsoft.EntityFrameworkCore.Migrations; 6 | using IdentityServer4.EntityFramework.DbContexts; 7 | 8 | namespace tokenserver.Migrations 9 | { 10 | [DbContext(typeof(PersistedGrantDbContext))] 11 | partial class PersistedGrantDbContextModelSnapshot : ModelSnapshot 12 | { 13 | protected override void BuildModel(ModelBuilder modelBuilder) 14 | { 15 | modelBuilder 16 | .HasAnnotation("ProductVersion", "1.1.0-rtm-22752") 17 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 18 | 19 | modelBuilder.Entity("IdentityServer4.EntityFramework.Entities.PersistedGrant", b => 20 | { 21 | b.Property("Key") 22 | .HasMaxLength(200); 23 | 24 | b.Property("Type") 25 | .HasMaxLength(50); 26 | 27 | b.Property("ClientId") 28 | .IsRequired() 29 | .HasMaxLength(200); 30 | 31 | b.Property("CreationTime"); 32 | 33 | b.Property("Data") 34 | .IsRequired(); 35 | 36 | b.Property("Expiration"); 37 | 38 | b.Property("SubjectId") 39 | .HasMaxLength(200); 40 | 41 | b.HasKey("Key", "Type"); 42 | 43 | b.HasIndex("SubjectId"); 44 | 45 | b.HasIndex("SubjectId", "ClientId"); 46 | 47 | b.HasIndex("SubjectId", "ClientId", "Type"); 48 | 49 | b.ToTable("PersistedGrants"); 50 | }); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Hosting; 7 | 8 | namespace tokenserver 9 | { 10 | public class Program 11 | { 12 | public static void Main(string[] args) 13 | { 14 | var host = new WebHostBuilder() 15 | .UseKestrel() 16 | .UseContentRoot(Directory.GetCurrentDirectory()) 17 | .UseIISIntegration() 18 | .UseStartup() 19 | .Build(); 20 | 21 | host.Run(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Project_Readme.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Welcome to ASP.NET Core 6 | 127 | 128 | 129 | 130 | 138 | 139 |
140 |
141 |

This application consists of:

142 |
    143 |
  • Sample pages using ASP.NET Core MVC
  • 144 |
  • Bower for managing client-side libraries
  • 145 |
  • Theming using Bootstrap
  • 146 |
147 |
148 | 160 | 172 |
173 |

Run & Deploy

174 | 179 |
180 | 181 | 184 |
185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:62500/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "tokenserver": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "launchUrl": "http://localhost:5000", 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | } 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Startup.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Builder; 6 | using Microsoft.AspNetCore.Hosting; 7 | using Microsoft.Extensions.Configuration; 8 | using Microsoft.Extensions.DependencyInjection; 9 | using Microsoft.Extensions.Logging; 10 | using tokenserver.Configs; 11 | using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 12 | using Microsoft.EntityFrameworkCore; 13 | using System.Reflection; 14 | using IdentityServer4.EntityFramework.DbContexts; 15 | using IdentityServer4.EntityFramework.Mappers; 16 | using Microsoft.AspNetCore.Identity; 17 | 18 | namespace tokenserver 19 | { 20 | public class Startup 21 | { 22 | public Startup(IHostingEnvironment env) 23 | { 24 | var builder = new ConfigurationBuilder() 25 | .SetBasePath(env.ContentRootPath) 26 | .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 27 | .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 28 | .AddEnvironmentVariables(); 29 | 30 | if (env.IsDevelopment()) 31 | { 32 | // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. 33 | builder.AddApplicationInsightsSettings(developerMode: true); 34 | } 35 | Configuration = builder.Build(); 36 | } 37 | 38 | public IConfigurationRoot Configuration { get; } 39 | 40 | // This method gets called by the runtime. Use this method to add services to the container. 41 | public void ConfigureServices(IServiceCollection services) 42 | { 43 | 44 | string connectionString 45 | = @"Data Source=(LocalDb)\MSSQLLocalDB;database=test6tokenserver;trusted_connection=yes;"; 46 | 47 | var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; 48 | 49 | // Add framework services. 50 | services.AddApplicationInsightsTelemetry(Configuration); 51 | 52 | services.AddIdentity().AddEntityFrameworkStores(); 53 | 54 | 55 | services.AddDbContext(options => options.UseSqlServer(connectionString)); 56 | 57 | services.AddIdentityServer() 58 | //.AddInMemoryClients(Clients.GetClients()) 59 | //.AddInMemoryApiResources(Resources.GetApiResources()) 60 | //.AddInMemoryIdentityResources(Resources.GetIdentityResources()) 61 | //.AddInMemoryUsers(Users.GetUsers()) 62 | .AddOperationalStore(store => store.UseSqlServer(connectionString, options => options.MigrationsAssembly(migrationsAssembly))) 63 | .AddConfigurationStore(store => store.UseSqlServer(connectionString, options => options.MigrationsAssembly(migrationsAssembly))) 64 | .AddTemporarySigningCredential(); 65 | 66 | services.AddMvc(); 67 | } 68 | 69 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 70 | public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 71 | { 72 | loggerFactory.AddConsole(Configuration.GetSection("Logging")); 73 | loggerFactory.AddDebug(); 74 | 75 | app.UseApplicationInsightsRequestTelemetry(); 76 | 77 | if (env.IsDevelopment()) 78 | { 79 | app.UseDeveloperExceptionPage(); 80 | app.UseBrowserLink(); 81 | } 82 | else 83 | { 84 | app.UseExceptionHandler("/Home/Error"); 85 | } 86 | 87 | app.UseApplicationInsightsExceptionTelemetry(); 88 | 89 | app.UseIdentity(); 90 | app.UseIdentityServer(); 91 | 92 | InitializeDbTestData(app); 93 | 94 | app.UseStaticFiles(); 95 | 96 | app.UseMvc(routes => 97 | { 98 | routes.MapRoute( 99 | name: "default", 100 | template: "{controller=Home}/{action=Index}/{id?}"); 101 | }); 102 | } 103 | 104 | private static void InitializeDbTestData(IApplicationBuilder app) 105 | { 106 | using (var scope = app.ApplicationServices 107 | .GetService().CreateScope()) 108 | { 109 | scope.ServiceProvider.GetRequiredService() 110 | .Database.Migrate(); 111 | scope.ServiceProvider.GetRequiredService() 112 | .Database.Migrate(); 113 | scope.ServiceProvider.GetRequiredService() 114 | .Database.Migrate(); 115 | 116 | 117 | var context = scope.ServiceProvider.GetRequiredService(); 118 | 119 | foreach (var client in Clients.GetClients()) 120 | { 121 | if (context.Clients.FirstOrDefault(c => c.ClientId == client.ClientId) == null) 122 | context.Clients.Add(client.ToEntity()); 123 | } 124 | context.SaveChanges(); 125 | 126 | if (!context.IdentityResources.Any()) 127 | { 128 | foreach (var resource in Resources.GetIdentityResources()) 129 | { 130 | context.IdentityResources.Add(resource.ToEntity()); 131 | } 132 | context.SaveChanges(); 133 | } 134 | 135 | if (!context.ApiResources.Any()) 136 | { 137 | foreach (var resource in Resources.GetApiResources()) 138 | { 139 | context.ApiResources.Add(resource.ToEntity()); 140 | } 141 | context.SaveChanges(); 142 | } 143 | 144 | var usermanager = scope.ServiceProvider.GetRequiredService>(); 145 | 146 | if (!usermanager.Users.Any()) 147 | { 148 | foreach (var inMemoryUser in Users.GetUsers()) 149 | { 150 | var identityUser = new IdentityUser(inMemoryUser.Username) 151 | { 152 | Id = inMemoryUser.Subject 153 | }; 154 | 155 | foreach (var claim in inMemoryUser.Claims) 156 | { 157 | identityUser.Claims.Add(new IdentityUserClaim 158 | { 159 | UserId = identityUser.Id, 160 | ClaimType = claim.Type, 161 | ClaimValue = claim.Value, 162 | }); 163 | } 164 | 165 | usermanager.CreateAsync(identityUser, "Password123!").Wait(); 166 | } 167 | } 168 | 169 | } 170 | 171 | 172 | } 173 | 174 | 175 | 176 | 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/ViewModels/ErrorViewModel.cs: -------------------------------------------------------------------------------- 1 | using IdentityServer4.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace tokenserver.ViewModels 8 | { 9 | public class ErrorViewModel 10 | { 11 | 12 | public ErrorMessage Error { get; set; } 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/ViewModels/LoginViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace tokenserver.ViewModels 8 | { 9 | public class LoginViewModel 10 | { 11 | 12 | [Required] 13 | public string UserName { get; set; } 14 | 15 | [Required] 16 | [DataType(DataType.Password)] 17 | public string Password { get; set; } 18 | 19 | [Display(Name = "Remember me?")] 20 | public bool RememberMe { get; set; } 21 | public string ReturnUrl { get; set; } 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Account/Login.cshtml: -------------------------------------------------------------------------------- 1 | @model tokenserver.ViewModels.LoginViewModel 2 | 3 | 4 |
5 |
6 |
7 |
10 |

Use a local account to log in.

11 |
12 |
13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 |
21 |
22 | 23 |
24 | 25 | 26 |
27 |
28 |
29 |
30 |
31 | 35 |
36 |
37 |
38 |
39 |
40 | 41 |
42 |
43 |

44 | 46 | Register as a new user? 47 | 48 |

49 |

50 | Forgot your password? 51 |

52 |
53 |
54 |
55 |
-------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Consent/Index.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 3 | *@ 4 | @{ 5 | } 6 | 7 |

Consent View

-------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "About"; 3 | } 4 |

@ViewData["Title"].

5 |

@ViewData["Message"]

6 | 7 |

Use this area to provide additional information.

8 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Contact"; 3 | } 4 |

@ViewData["Title"].

5 |

@ViewData["Message"]

6 | 7 |
8 | One Microsoft Way
9 | Redmond, WA 98052-6399
10 | P: 11 | 425.555.0100 12 |
13 | 14 |
15 | Support: Support@example.com
16 | Marketing: Marketing@example.com 17 |
18 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Home Page"; 3 | } 4 | 5 | 67 | 68 | 110 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model tokenserver.ViewModels.ErrorViewModel 2 | 3 | @{ 4 | ViewData["Title"] = "Error"; 5 | } 6 | 7 |

Error.

8 | 9 |

Display Mode : @Model.Error.DisplayMode

10 |

Error : @Model.Error.Error

11 |

Request Id : @Model.Error.RequestId

12 |

Ui Locales : @Model.Error.UiLocales

13 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | @ViewData["Title"] - tokenserver 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | @Html.ApplicationInsightsJavaScript(TelemetryConfiguration) 19 | 20 | 21 | 41 |
42 | @RenderBody() 43 |
44 |
45 |

© 2017 - tokenserver

46 |
47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 59 | 63 | 64 | 65 | 66 | @RenderSection("scripts", required: false) 67 | 68 | 69 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using tokenserver 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | @inject Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration TelemetryConfiguration 4 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ApplicationInsights": { 3 | "InstrumentationKey": "" 4 | }, 5 | "Logging": { 6 | "IncludeScopes": false, 7 | "LogLevel": { 8 | "Default": "Debug", 9 | "System": "Information", 10 | "Microsoft": "Information" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/7d5ec1ed-b121-4ce0-863f-9e0cbd8c625c_tokenserver.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/7d5ec1ed-b121-4ce0-863f-9e0cbd8c625c_tokenserver.dll -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.dll -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.pdb -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.runtimeconfig.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "additionalProbingPaths": [ 4 | "C:\\Users\\ham\\.nuget\\packages" 5 | ] 6 | } 7 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bin/Debug/netcoreapp1.0/tokenserver.runtimeconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "framework": { 4 | "name": "Microsoft.NETCore.App", 5 | "version": "1.0.1" 6 | }, 7 | "configProperties": { 8 | "System.GC.Server": true 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asp.net", 3 | "private": true, 4 | "dependencies": { 5 | "bootstrap": "3.3.6", 6 | "jquery": "2.2.0", 7 | "jquery-validation": "1.14.0", 8 | "jquery-validation-unobtrusive": "3.2.6" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/bundleconfig.json: -------------------------------------------------------------------------------- 1 | // Configure bundling and minification for the project. 2 | // More info at https://go.microsoft.com/fwlink/?LinkId=808241 3 | [ 4 | { 5 | "outputFileName": "wwwroot/css/site.min.css", 6 | // An array of relative input file paths. Globbing patterns supported 7 | "inputFiles": [ 8 | "wwwroot/css/site.css" 9 | ] 10 | }, 11 | { 12 | "outputFileName": "wwwroot/js/site.min.js", 13 | "inputFiles": [ 14 | "wwwroot/js/site.js" 15 | ], 16 | // Optionally specify minification options 17 | "minify": { 18 | "enabled": true, 19 | "renameLocals": true 20 | }, 21 | // Optinally generate .map file 22 | "sourceMap": false 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/obj/Debug/netcoreapp1.0/.IncrementalCache: -------------------------------------------------------------------------------- 1 | {"inputs":["C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\project.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\project.lock.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\ApplicationDbContext.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Program.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Startup.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Configs\\Clients.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Configs\\Resources.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Configs\\Users.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Controllers\\AccountController.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Controllers\\ConsentController.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Controllers\\HomeController.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\20170216070441_InitialIdentityServerMigration.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\20170216070441_InitialIdentityServerMigration.Designer.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\PersistedGrantDbContextModelSnapshot.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ApplicationDb\\20170216071031_InitialIdentityServerMigration.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ApplicationDb\\20170216071031_InitialIdentityServerMigration.Designer.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ApplicationDb\\ApplicationDbContextModelSnapshot.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ConfigurationDb\\20170216070751_InitialIdentityServerMigration.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ConfigurationDb\\20170216070751_InitialIdentityServerMigration.Designer.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\Migrations\\ConfigurationDb\\ConfigurationDbContextModelSnapshot.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\ViewModels\\ErrorViewModel.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\ViewModels\\LoginViewModel.cs"],"outputs":["C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\bin\\Debug\\netcoreapp1.0\\tokenserver.dll","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\bin\\Debug\\netcoreapp1.0\\tokenserver.pdb","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\bin\\Debug\\netcoreapp1.0\\tokenserver.deps.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\tokenserver\\src\\tokenserver\\bin\\Debug\\netcoreapp1.0\\tokenserver.runtimeconfig.json"],"buildArguments":{"version-suffix":null}} -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/obj/Debug/netcoreapp1.0/.SDKVersion: -------------------------------------------------------------------------------- 1 | 635cf40e58ede8a53e8b9555e19a6e1ccd6f9fbe 2 | 1.0.0-preview2-003131 3 | 4 | win10-x64 -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/obj/Debug/netcoreapp1.0/dotnet-compile.assemblyinfo.cs: -------------------------------------------------------------------------------- 1 | // This file has been auto generated. 2 | [assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] 3 | [assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.0")] 4 | [assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] 5 | [assembly:System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v1.0")] -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "IdentityServer4": "1.0.0-rc5", 4 | "IdentityServer4.EntityFramework": "1.0.0-rc5", 5 | "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", 6 | "Microsoft.ApplicationInsights.AspNetCore": "1.0.0", 7 | "Microsoft.AspNetCore.Diagnostics": "1.0.0", 8 | "Microsoft.AspNetCore.Identity": "1.1.0", 9 | "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0", 10 | "Microsoft.AspNetCore.Mvc": "1.0.1", 11 | "Microsoft.AspNetCore.Razor.Tools": { 12 | "version": "1.0.0-preview2-final", 13 | "type": "build" 14 | }, 15 | "Microsoft.AspNetCore.Routing": "1.0.1", 16 | "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 17 | "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 18 | "Microsoft.AspNetCore.StaticFiles": "1.0.0", 19 | "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0", 20 | "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 21 | "Microsoft.Extensions.Configuration.Json": "1.0.0", 22 | "Microsoft.Extensions.Logging": "1.1.0", 23 | "Microsoft.Extensions.Logging.Console": "1.0.0", 24 | "Microsoft.Extensions.Logging.Debug": "1.0.0", 25 | "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 26 | "Microsoft.NETCore.App": { 27 | "version": "1.0.1", 28 | "type": "platform" 29 | }, 30 | "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0" 31 | }, 32 | 33 | "tools": { 34 | "BundlerMinifier.Core": "2.0.238", 35 | "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 36 | "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 37 | "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final" 38 | 39 | }, 40 | 41 | "frameworks": { 42 | "netcoreapp1.0": { 43 | "imports": [ 44 | "dotnet5.6", 45 | "portable-net45+win8" 46 | ] 47 | } 48 | }, 49 | 50 | "buildOptions": { 51 | "emitEntryPoint": true, 52 | "preserveCompilationContext": true 53 | }, 54 | 55 | "runtimeOptions": { 56 | "configProperties": { 57 | "System.GC.Server": true 58 | } 59 | }, 60 | 61 | "publishOptions": { 62 | "include": [ 63 | "wwwroot", 64 | "**/*.cshtml", 65 | "appsettings.json", 66 | "web.config" 67 | ] 68 | }, 69 | 70 | "scripts": { 71 | "prepublish": [ "bower install", "dotnet bundle" ], 72 | "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/tokenserver.xproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 14.0 5 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 6 | 7 | 8 | 9 | a53efe18-5101-4cab-a67d-cfcc229351c3 10 | tokenserver 11 | .\obj 12 | .\bin\ 13 | v4.5.2 14 | 15 | 16 | 2.0 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/tokenserver.xproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | tokenserver 5 | 6 | 7 | ProjectDebugger 8 | 9 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/_references.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Wrapping element */ 7 | /* Set some basic padding to keep content from hitting the edges */ 8 | .body-content { 9 | padding-left: 15px; 10 | padding-right: 15px; 11 | } 12 | 13 | /* Set widths on the form inputs since otherwise they're 100% wide */ 14 | input, 15 | select, 16 | textarea { 17 | max-width: 280px; 18 | } 19 | 20 | /* Carousel */ 21 | .carousel-caption p { 22 | font-size: 20px; 23 | line-height: 1.4; 24 | } 25 | 26 | /* Make .svg files in the carousel display properly in older browsers */ 27 | .carousel-inner .item img[src$=".svg"] 28 | { 29 | width: 100%; 30 | } 31 | 32 | /* Hide/rearrange for smaller screens */ 33 | @media screen and (max-width: 767px) { 34 | /* Hide captions */ 35 | .carousel-caption { 36 | display: none 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 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}} -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/favicon.ico -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/images/banner1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/images/banner2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | }, 34 | "version": "3.3.6", 35 | "_release": "3.3.6", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.3.6", 39 | "commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a" 40 | }, 41 | "_source": "git://github.com/twbs/bootstrap.git", 42 | "_target": "3.3.6", 43 | "_originalSource": "bootstrap" 44 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2015 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery-validation-unobtrusive/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation-unobtrusive", 3 | "version": "3.2.6", 4 | "homepage": "https://github.com/aspnet/jquery-validation-unobtrusive", 5 | "description": "Add-on to jQuery Validation to enable unobtrusive validation options in data-* attributes.", 6 | "main": [ 7 | "jquery.validate.unobtrusive.js" 8 | ], 9 | "ignore": [ 10 | "**/.*", 11 | "*.json", 12 | "*.md", 13 | "*.txt", 14 | "gulpfile.js" 15 | ], 16 | "keywords": [ 17 | "jquery", 18 | "asp.net", 19 | "mvc", 20 | "validation", 21 | "unobtrusive" 22 | ], 23 | "authors": [ 24 | "Microsoft" 25 | ], 26 | "license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm", 27 | "repository": { 28 | "type": "git", 29 | "url": "git://github.com/aspnet/jquery-validation-unobtrusive.git" 30 | }, 31 | "dependencies": { 32 | "jquery-validation": ">=1.8", 33 | "jquery": ">=1.8" 34 | }, 35 | "_release": "3.2.6", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.2.6", 39 | "commit": "13386cd1b5947d8a5d23a12b531ce3960be1eba7" 40 | }, 41 | "_source": "git://github.com/aspnet/jquery-validation-unobtrusive.git", 42 | "_target": "3.2.6", 43 | "_originalSource": "jquery-validation-unobtrusive" 44 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | ** Unobtrusive validation support library for jQuery and jQuery Validate 3 | ** Copyright (C) Microsoft Corporation. All rights reserved. 4 | */ 5 | !function(a){function e(a,e,n){a.rules[e]=n,a.message&&(a.messages[e]=a.message)}function n(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function t(a){return a.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function r(a){return a.substr(0,a.lastIndexOf(".")+1)}function i(a,e){return 0===a.indexOf("*.")&&(a=a.replace("*.",e)),a}function o(e,n){var r=a(this).find("[data-valmsg-for='"+t(n[0].name)+"']"),i=r.attr("data-valmsg-replace"),o=i?a.parseJSON(i)!==!1:null;r.removeClass("field-validation-valid").addClass("field-validation-error"),e.data("unobtrusiveContainer",r),o?(r.empty(),e.removeClass("input-validation-error").appendTo(r)):e.hide()}function d(e,n){var t=a(this).find("[data-valmsg-summary=true]"),r=t.find("ul");r&&r.length&&n.errorList.length&&(r.empty(),t.addClass("validation-summary-errors").removeClass("validation-summary-valid"),a.each(n.errorList,function(){a("
  • ").html(this.message).appendTo(r)}))}function s(e){var n=e.data("unobtrusiveContainer");if(n){var t=n.attr("data-valmsg-replace"),r=t?a.parseJSON(t):null;n.addClass("field-validation-valid").removeClass("field-validation-error"),e.removeData("unobtrusiveContainer"),r&&n.empty()}}function l(e){var n=a(this),t="__jquery_unobtrusive_validation_form_reset";if(!n.data(t)){n.data(t,!0);try{n.data("validator").resetForm()}finally{n.removeData(t)}n.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"),n.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}}function m(e){var n=a(e),t=n.data(v),r=a.proxy(l,e),i=p.unobtrusive.options||{},m=function(n,t){var r=i[n];r&&a.isFunction(r)&&r.apply(e,t)};return t||(t={options:{errorClass:i.errorClass||"input-validation-error",errorElement:i.errorElement||"span",errorPlacement:function(){o.apply(e,arguments),m("errorPlacement",arguments)},invalidHandler:function(){d.apply(e,arguments),m("invalidHandler",arguments)},messages:{},rules:{},success:function(){s.apply(e,arguments),m("success",arguments)}},attachValidation:function(){n.off("reset."+v,r).on("reset."+v,r).validate(this.options)},validate:function(){return n.validate(),n.valid()}},n.data(v,t)),t}var u,p=a.validator,v="unobtrusiveValidation";p.unobtrusive={adapters:[],parseElement:function(e,n){var t,r,i,o=a(e),d=o.parents("form")[0];d&&(t=m(d),t.options.rules[e.name]=r={},t.options.messages[e.name]=i={},a.each(this.adapters,function(){var n="data-val-"+this.name,t=o.attr(n),s={};void 0!==t&&(n+="-",a.each(this.params,function(){s[this]=o.attr(n+this)}),this.adapt({element:e,form:d,message:t,params:s,rules:r,messages:i}))}),a.extend(r,{__dummy__:!0}),n||t.attachValidation())},parse:function(e){var n=a(e),t=n.parents().addBack().filter("form").add(n.find("form")).has("[data-val=true]");n.find("[data-val=true]").each(function(){p.unobtrusive.parseElement(this,!0)}),t.each(function(){var a=m(this);a&&a.attachValidation()})}},u=p.unobtrusive.adapters,u.add=function(a,e,n){return n||(n=e,e=[]),this.push({name:a,params:e,adapt:n}),this},u.addBool=function(a,n){return this.add(a,function(t){e(t,n||a,!0)})},u.addMinMax=function(a,n,t,r,i,o){return this.add(a,[i||"min",o||"max"],function(a){var i=a.params.min,o=a.params.max;i&&o?e(a,r,[i,o]):i?e(a,n,i):o&&e(a,t,o)})},u.addSingleVal=function(a,n,t){return this.add(a,[n||"val"],function(r){e(r,t||a,r.params[n])})},p.addMethod("__dummy__",function(a,e,n){return!0}),p.addMethod("regex",function(a,e,n){var t;return this.optional(e)?!0:(t=new RegExp(n).exec(a),t&&0===t.index&&t[0].length===a.length)}),p.addMethod("nonalphamin",function(a,e,n){var t;return n&&(t=a.match(/\W/g),t=t&&t.length>=n),t}),p.methods.extension?(u.addSingleVal("accept","mimtype"),u.addSingleVal("extension","extension")):u.addSingleVal("extension","extension","accept"),u.addSingleVal("regex","pattern"),u.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),u.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),u.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),u.add("equalto",["other"],function(n){var o=r(n.element.name),d=n.params.other,s=i(d,o),l=a(n.form).find(":input").filter("[name='"+t(s)+"']")[0];e(n,"equalTo",l)}),u.add("required",function(a){("INPUT"!==a.element.tagName.toUpperCase()||"CHECKBOX"!==a.element.type.toUpperCase())&&e(a,"required",!0)}),u.add("remote",["url","type","additionalfields"],function(o){var d={url:o.params.url,type:o.params.type||"GET",data:{}},s=r(o.element.name);a.each(n(o.params.additionalfields||o.element.name),function(e,n){var r=i(n,s);d.data[r]=function(){var e=a(o.form).find(":input").filter("[name='"+t(r)+"']");return e.is(":checkbox")?e.filter(":checked").val()||e.filter(":hidden").val()||"":e.is(":radio")?e.filter(":checked").val()||"":e.val()}}),e(o,"remote",d)}),u.add("password",["min","nonalphamin","regex"],function(a){a.params.min&&e(a,"minlength",a.params.min),a.params.nonalphamin&&e(a,"nonalphamin",a.params.nonalphamin),a.params.regex&&e(a,"regex",a.params.regex)}),a(function(){p.unobtrusive.parse(document)})}(jQuery); -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery-validation/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation", 3 | "homepage": "http://jqueryvalidation.org/", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/jzaefferer/jquery-validation.git" 7 | }, 8 | "authors": [ 9 | "Jörn Zaefferer " 10 | ], 11 | "description": "Form validation made easy", 12 | "main": "dist/jquery.validate.js", 13 | "keywords": [ 14 | "forms", 15 | "validation", 16 | "validate" 17 | ], 18 | "license": "MIT", 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "demo", 25 | "lib" 26 | ], 27 | "dependencies": { 28 | "jquery": ">= 1.7.2" 29 | }, 30 | "version": "1.14.0", 31 | "_release": "1.14.0", 32 | "_resolution": { 33 | "type": "version", 34 | "tag": "1.14.0", 35 | "commit": "c1343fb9823392aa9acbe1c3ffd337b8c92fed48" 36 | }, 37 | "_source": "git://github.com/jzaefferer/jquery-validation.git", 38 | "_target": ">=1.8", 39 | "_originalSource": "jquery-validation" 40 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery-validation/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright Jörn Zaefferer 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "2.2.0", 16 | "_release": "2.2.0", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "2.2.0", 20 | "commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5" 21 | }, 22 | "_source": "git://github.com/jquery/jquery-dist.git", 23 | "_target": "2.2.0", 24 | "_originalSource": "jquery" 25 | } -------------------------------------------------------------------------------- /tokenserver/src/tokenserver/wwwroot/lib/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /tokenserver/tokenserver.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{73411F81-BA19-4918-BE86-C321376A21E7}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F330D486-1CB2-4CF9-B484-3D66F7CB372B}" 9 | ProjectSection(SolutionItems) = preProject 10 | global.json = global.json 11 | EndProjectSection 12 | EndProject 13 | Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "tokenserver", "src\tokenserver\tokenserver.xproj", "{A53EFE18-5101-4CAB-A67D-CFCC229351C3}" 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Release|Any CPU = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 21 | {A53EFE18-5101-4CAB-A67D-CFCC229351C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {A53EFE18-5101-4CAB-A67D-CFCC229351C3}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {A53EFE18-5101-4CAB-A67D-CFCC229351C3}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {A53EFE18-5101-4CAB-A67D-CFCC229351C3}.Release|Any CPU.Build.0 = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(SolutionProperties) = preSolution 27 | HideSolutionNode = FALSE 28 | EndGlobalSection 29 | GlobalSection(NestedProjects) = preSolution 30 | {A53EFE18-5101-4CAB-A67D-CFCC229351C3} = {73411F81-BA19-4918-BE86-C321376A21E7} 31 | EndGlobalSection 32 | EndGlobal 33 | -------------------------------------------------------------------------------- /webclient/.vs/restore.dg: -------------------------------------------------------------------------------- 1 | #:C:\Users\ham\Desktop\security\demo\test6\webclient\src\webclient\webclient.xproj 2 | -------------------------------------------------------------------------------- /webclient/.vs/webclient/v14/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/.vs/webclient/v14/.suo -------------------------------------------------------------------------------- /webclient/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "projects": [ "src", "test" ], 3 | "sdk": { 4 | "version": "1.0.0-preview2-003131" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /webclient/src/webclient/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /webclient/src/webclient/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Authorization; 7 | 8 | namespace webclient.Controllers 9 | { 10 | public class HomeController : Controller 11 | { 12 | public IActionResult Index() 13 | { 14 | return View(); 15 | } 16 | 17 | public IActionResult About() 18 | { 19 | ViewData["Message"] = "Your application description page."; 20 | 21 | return View(); 22 | } 23 | 24 | [Authorize] 25 | public IActionResult Contact() 26 | { 27 | ViewData["Message"] = "Your contact page."; 28 | 29 | return View(); 30 | } 31 | 32 | public IActionResult Error() 33 | { 34 | return View(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /webclient/src/webclient/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Hosting; 7 | 8 | namespace webclient 9 | { 10 | public class Program 11 | { 12 | public static void Main(string[] args) 13 | { 14 | var host = new WebHostBuilder() 15 | .UseKestrel() 16 | .UseContentRoot(Directory.GetCurrentDirectory()) 17 | .UseIISIntegration() 18 | .UseStartup() 19 | .Build(); 20 | 21 | host.Run(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webclient/src/webclient/Project_Readme.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Welcome to ASP.NET Core 6 | 127 | 128 | 129 | 130 | 138 | 139 |
    140 |
    141 |

    This application consists of:

    142 |
      143 |
    • Sample pages using ASP.NET Core MVC
    • 144 |
    • Bower for managing client-side libraries
    • 145 |
    • Theming using Bootstrap
    • 146 |
    147 |
    148 | 160 | 172 |
    173 |

    Run & Deploy

    174 | 179 |
    180 | 181 | 184 |
    185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /webclient/src/webclient/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:63204/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "webclient": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "launchUrl": "http://localhost:5000", 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | } 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /webclient/src/webclient/Startup.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IdentityModel.Tokens.Jwt; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Builder; 7 | using Microsoft.AspNetCore.Hosting; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.DependencyInjection; 10 | using Microsoft.Extensions.Logging; 11 | 12 | namespace webclient 13 | { 14 | public class Startup 15 | { 16 | public Startup(IHostingEnvironment env) 17 | { 18 | var builder = new ConfigurationBuilder() 19 | .SetBasePath(env.ContentRootPath) 20 | .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 21 | .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 22 | .AddEnvironmentVariables(); 23 | 24 | if (env.IsDevelopment()) 25 | { 26 | // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. 27 | builder.AddApplicationInsightsSettings(developerMode: true); 28 | } 29 | Configuration = builder.Build(); 30 | } 31 | 32 | public IConfigurationRoot Configuration { get; } 33 | 34 | // This method gets called by the runtime. Use this method to add services to the container. 35 | public void ConfigureServices(IServiceCollection services) 36 | { 37 | // Add framework services. 38 | services.AddApplicationInsightsTelemetry(Configuration); 39 | 40 | services.AddMvc(); 41 | } 42 | 43 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 44 | public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 45 | { 46 | loggerFactory.AddConsole(Configuration.GetSection("Logging")); 47 | loggerFactory.AddDebug(); 48 | 49 | app.UseApplicationInsightsRequestTelemetry(); 50 | 51 | if (env.IsDevelopment()) 52 | { 53 | app.UseDeveloperExceptionPage(); 54 | app.UseBrowserLink(); 55 | } 56 | else 57 | { 58 | app.UseExceptionHandler("/Home/Error"); 59 | } 60 | 61 | app.UseApplicationInsightsExceptionTelemetry(); 62 | 63 | JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 64 | 65 | app.UseCookieAuthentication(new CookieAuthenticationOptions 66 | { 67 | AuthenticationScheme = "cookie" 68 | }); 69 | 70 | app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 71 | { 72 | ClientId = "testWebClient", 73 | SignInScheme = "cookie", 74 | Authority = "http://localhost:5000/", 75 | RequireHttpsMetadata = false 76 | }); 77 | 78 | app.UseStaticFiles(); 79 | 80 | app.UseMvc(routes => 81 | { 82 | routes.MapRoute( 83 | name: "default", 84 | template: "{controller=Home}/{action=Index}/{id?}"); 85 | }); 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "About"; 3 | } 4 |

    @ViewData["Title"].

    5 |

    @ViewData["Message"]

    6 | 7 |

    Use this area to provide additional information.

    8 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Contact"; 3 | } 4 |

    @ViewData["Title"].

    5 |

    @ViewData["Message"]

    6 | 7 |
    8 | One Microsoft Way
    9 | Redmond, WA 98052-6399
    10 | P: 11 | 425.555.0100 12 |
    13 | 14 |
    15 | Support: Support@example.com
    16 | Marketing: Marketing@example.com 17 |
    18 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Home Page"; 3 | } 4 | 5 | 67 | 68 | 110 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Error"; 3 | } 4 | 5 |

    Error.

    6 |

    An error occurred while processing your request.

    7 | 8 |

    Development Mode

    9 |

    10 | Swapping to Development environment will display more detailed information about the error that occurred. 11 |

    12 |

    13 | 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. 14 |

    15 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | @ViewData["Title"] - webclient 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | @Html.ApplicationInsightsJavaScript(TelemetryConfiguration) 19 | 20 | 21 | 41 |
    42 | @RenderBody() 43 |
    44 |
    45 |

    © 2017 - webclient

    46 |
    47 |
    48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 59 | 63 | 64 | 65 | 66 | @RenderSection("scripts", required: false) 67 | 68 | 69 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using webclient 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | @inject Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration TelemetryConfiguration 4 | -------------------------------------------------------------------------------- /webclient/src/webclient/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /webclient/src/webclient/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ApplicationInsights": { 3 | "InstrumentationKey": "" 4 | }, 5 | "Logging": { 6 | "IncludeScopes": false, 7 | "LogLevel": { 8 | "Default": "Debug", 9 | "System": "Information", 10 | "Microsoft": "Information" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.dll -------------------------------------------------------------------------------- /webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.pdb -------------------------------------------------------------------------------- /webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.runtimeconfig.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "additionalProbingPaths": [ 4 | "C:\\Users\\ham\\.nuget\\packages" 5 | ] 6 | } 7 | } -------------------------------------------------------------------------------- /webclient/src/webclient/bin/Debug/netcoreapp1.0/webclient.runtimeconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "framework": { 4 | "name": "Microsoft.NETCore.App", 5 | "version": "1.0.1" 6 | }, 7 | "configProperties": { 8 | "System.GC.Server": true 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /webclient/src/webclient/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asp.net", 3 | "private": true, 4 | "dependencies": { 5 | "bootstrap": "3.3.6", 6 | "jquery": "2.2.0", 7 | "jquery-validation": "1.14.0", 8 | "jquery-validation-unobtrusive": "3.2.6" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webclient/src/webclient/bundleconfig.json: -------------------------------------------------------------------------------- 1 | // Configure bundling and minification for the project. 2 | // More info at https://go.microsoft.com/fwlink/?LinkId=808241 3 | [ 4 | { 5 | "outputFileName": "wwwroot/css/site.min.css", 6 | // An array of relative input file paths. Globbing patterns supported 7 | "inputFiles": [ 8 | "wwwroot/css/site.css" 9 | ] 10 | }, 11 | { 12 | "outputFileName": "wwwroot/js/site.min.js", 13 | "inputFiles": [ 14 | "wwwroot/js/site.js" 15 | ], 16 | // Optionally specify minification options 17 | "minify": { 18 | "enabled": true, 19 | "renameLocals": true 20 | }, 21 | // Optinally generate .map file 22 | "sourceMap": false 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /webclient/src/webclient/obj/Debug/netcoreapp1.0/.IncrementalCache: -------------------------------------------------------------------------------- 1 | {"inputs":["C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\project.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\project.lock.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\Program.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\Startup.cs","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\Controllers\\HomeController.cs"],"outputs":["C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\bin\\Debug\\netcoreapp1.0\\webclient.dll","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\bin\\Debug\\netcoreapp1.0\\webclient.pdb","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\bin\\Debug\\netcoreapp1.0\\webclient.deps.json","C:\\Users\\ham\\Desktop\\security\\demo\\test6\\webclient\\src\\webclient\\bin\\Debug\\netcoreapp1.0\\webclient.runtimeconfig.json"],"buildArguments":{"version-suffix":null}} -------------------------------------------------------------------------------- /webclient/src/webclient/obj/Debug/netcoreapp1.0/.SDKVersion: -------------------------------------------------------------------------------- 1 | 635cf40e58ede8a53e8b9555e19a6e1ccd6f9fbe 2 | 1.0.0-preview2-003131 3 | 4 | win10-x64 -------------------------------------------------------------------------------- /webclient/src/webclient/obj/Debug/netcoreapp1.0/dotnet-compile.assemblyinfo.cs: -------------------------------------------------------------------------------- 1 | // This file has been auto generated. 2 | [assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] 3 | [assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.0")] 4 | [assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] 5 | [assembly:System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v1.0")] -------------------------------------------------------------------------------- /webclient/src/webclient/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "Microsoft.NETCore.App": { 4 | "version": "1.0.1", 5 | "type": "platform" 6 | }, 7 | "Microsoft.ApplicationInsights.AspNetCore": "1.0.0", 8 | "Microsoft.AspNetCore.Diagnostics": "1.0.0", 9 | "Microsoft.AspNetCore.Mvc": "1.0.1", 10 | "Microsoft.AspNetCore.Razor.Tools": { 11 | "version": "1.0.0-preview2-final", 12 | "type": "build" 13 | }, 14 | "Microsoft.AspNetCore.Routing": "1.0.1", 15 | "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 16 | "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 17 | "Microsoft.AspNetCore.StaticFiles": "1.0.0", 18 | "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 19 | "Microsoft.Extensions.Configuration.Json": "1.0.0", 20 | "Microsoft.Extensions.Logging": "1.0.0", 21 | "Microsoft.Extensions.Logging.Console": "1.0.0", 22 | "Microsoft.Extensions.Logging.Debug": "1.0.0", 23 | "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 24 | "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 25 | "System.IdentityModel.Tokens.Jwt": "5.1.2", 26 | "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.1.0", 27 | "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0" 28 | }, 29 | 30 | "tools": { 31 | "BundlerMinifier.Core": "2.0.238", 32 | "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 33 | "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 34 | }, 35 | 36 | "frameworks": { 37 | "netcoreapp1.0": { 38 | "imports": [ 39 | "dotnet5.6", 40 | "portable-net45+win8" 41 | ] 42 | } 43 | }, 44 | 45 | "buildOptions": { 46 | "emitEntryPoint": true, 47 | "preserveCompilationContext": true 48 | }, 49 | 50 | "runtimeOptions": { 51 | "configProperties": { 52 | "System.GC.Server": true 53 | } 54 | }, 55 | 56 | "publishOptions": { 57 | "include": [ 58 | "wwwroot", 59 | "**/*.cshtml", 60 | "appsettings.json", 61 | "web.config" 62 | ] 63 | }, 64 | 65 | "scripts": { 66 | "prepublish": [ "bower install", "dotnet bundle" ], 67 | "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /webclient/src/webclient/web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /webclient/src/webclient/webclient.xproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 14.0 5 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 6 | 7 | 8 | 9 | 9cd135b1-6df4-4820-8977-47c635f4a5a0 10 | webclient 11 | .\obj 12 | .\bin\ 13 | v4.5.2 14 | 15 | 16 | 2.0 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /webclient/src/webclient/webclient.xproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | IIS Express 5 | 6 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/_references.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Wrapping element */ 7 | /* Set some basic padding to keep content from hitting the edges */ 8 | .body-content { 9 | padding-left: 15px; 10 | padding-right: 15px; 11 | } 12 | 13 | /* Set widths on the form inputs since otherwise they're 100% wide */ 14 | input, 15 | select, 16 | textarea { 17 | max-width: 280px; 18 | } 19 | 20 | /* Carousel */ 21 | .carousel-caption p { 22 | font-size: 20px; 23 | line-height: 1.4; 24 | } 25 | 26 | /* Make .svg files in the carousel display properly in older browsers */ 27 | .carousel-inner .item img[src$=".svg"] 28 | { 29 | width: 100%; 30 | } 31 | 32 | /* Hide/rearrange for smaller screens */ 33 | @media screen and (max-width: 767px) { 34 | /* Hide captions */ 35 | .carousel-caption { 36 | display: none 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 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}} -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/favicon.ico -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/images/banner1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/images/banner2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/images/banner3.svg: -------------------------------------------------------------------------------- 1 | banner3b -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | }, 34 | "version": "3.3.6", 35 | "_release": "3.3.6", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.3.6", 39 | "commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a" 40 | }, 41 | "_source": "git://github.com/twbs/bootstrap.git", 42 | "_target": "3.3.6", 43 | "_originalSource": "bootstrap" 44 | } -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2015 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hansamaligamage/ASP.NETCoreSecurity/87e1f32bad210076f1dec3298cf8c684711d3644/webclient/src/webclient/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery-validation-unobtrusive/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation-unobtrusive", 3 | "version": "3.2.6", 4 | "homepage": "https://github.com/aspnet/jquery-validation-unobtrusive", 5 | "description": "Add-on to jQuery Validation to enable unobtrusive validation options in data-* attributes.", 6 | "main": [ 7 | "jquery.validate.unobtrusive.js" 8 | ], 9 | "ignore": [ 10 | "**/.*", 11 | "*.json", 12 | "*.md", 13 | "*.txt", 14 | "gulpfile.js" 15 | ], 16 | "keywords": [ 17 | "jquery", 18 | "asp.net", 19 | "mvc", 20 | "validation", 21 | "unobtrusive" 22 | ], 23 | "authors": [ 24 | "Microsoft" 25 | ], 26 | "license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm", 27 | "repository": { 28 | "type": "git", 29 | "url": "git://github.com/aspnet/jquery-validation-unobtrusive.git" 30 | }, 31 | "dependencies": { 32 | "jquery-validation": ">=1.8", 33 | "jquery": ">=1.8" 34 | }, 35 | "_release": "3.2.6", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.2.6", 39 | "commit": "13386cd1b5947d8a5d23a12b531ce3960be1eba7" 40 | }, 41 | "_source": "git://github.com/aspnet/jquery-validation-unobtrusive.git", 42 | "_target": "3.2.6", 43 | "_originalSource": "jquery-validation-unobtrusive" 44 | } -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | ** Unobtrusive validation support library for jQuery and jQuery Validate 3 | ** Copyright (C) Microsoft Corporation. All rights reserved. 4 | */ 5 | !function(a){function e(a,e,n){a.rules[e]=n,a.message&&(a.messages[e]=a.message)}function n(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function t(a){return a.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function r(a){return a.substr(0,a.lastIndexOf(".")+1)}function i(a,e){return 0===a.indexOf("*.")&&(a=a.replace("*.",e)),a}function o(e,n){var r=a(this).find("[data-valmsg-for='"+t(n[0].name)+"']"),i=r.attr("data-valmsg-replace"),o=i?a.parseJSON(i)!==!1:null;r.removeClass("field-validation-valid").addClass("field-validation-error"),e.data("unobtrusiveContainer",r),o?(r.empty(),e.removeClass("input-validation-error").appendTo(r)):e.hide()}function d(e,n){var t=a(this).find("[data-valmsg-summary=true]"),r=t.find("ul");r&&r.length&&n.errorList.length&&(r.empty(),t.addClass("validation-summary-errors").removeClass("validation-summary-valid"),a.each(n.errorList,function(){a("
  • ").html(this.message).appendTo(r)}))}function s(e){var n=e.data("unobtrusiveContainer");if(n){var t=n.attr("data-valmsg-replace"),r=t?a.parseJSON(t):null;n.addClass("field-validation-valid").removeClass("field-validation-error"),e.removeData("unobtrusiveContainer"),r&&n.empty()}}function l(e){var n=a(this),t="__jquery_unobtrusive_validation_form_reset";if(!n.data(t)){n.data(t,!0);try{n.data("validator").resetForm()}finally{n.removeData(t)}n.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"),n.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}}function m(e){var n=a(e),t=n.data(v),r=a.proxy(l,e),i=p.unobtrusive.options||{},m=function(n,t){var r=i[n];r&&a.isFunction(r)&&r.apply(e,t)};return t||(t={options:{errorClass:i.errorClass||"input-validation-error",errorElement:i.errorElement||"span",errorPlacement:function(){o.apply(e,arguments),m("errorPlacement",arguments)},invalidHandler:function(){d.apply(e,arguments),m("invalidHandler",arguments)},messages:{},rules:{},success:function(){s.apply(e,arguments),m("success",arguments)}},attachValidation:function(){n.off("reset."+v,r).on("reset."+v,r).validate(this.options)},validate:function(){return n.validate(),n.valid()}},n.data(v,t)),t}var u,p=a.validator,v="unobtrusiveValidation";p.unobtrusive={adapters:[],parseElement:function(e,n){var t,r,i,o=a(e),d=o.parents("form")[0];d&&(t=m(d),t.options.rules[e.name]=r={},t.options.messages[e.name]=i={},a.each(this.adapters,function(){var n="data-val-"+this.name,t=o.attr(n),s={};void 0!==t&&(n+="-",a.each(this.params,function(){s[this]=o.attr(n+this)}),this.adapt({element:e,form:d,message:t,params:s,rules:r,messages:i}))}),a.extend(r,{__dummy__:!0}),n||t.attachValidation())},parse:function(e){var n=a(e),t=n.parents().addBack().filter("form").add(n.find("form")).has("[data-val=true]");n.find("[data-val=true]").each(function(){p.unobtrusive.parseElement(this,!0)}),t.each(function(){var a=m(this);a&&a.attachValidation()})}},u=p.unobtrusive.adapters,u.add=function(a,e,n){return n||(n=e,e=[]),this.push({name:a,params:e,adapt:n}),this},u.addBool=function(a,n){return this.add(a,function(t){e(t,n||a,!0)})},u.addMinMax=function(a,n,t,r,i,o){return this.add(a,[i||"min",o||"max"],function(a){var i=a.params.min,o=a.params.max;i&&o?e(a,r,[i,o]):i?e(a,n,i):o&&e(a,t,o)})},u.addSingleVal=function(a,n,t){return this.add(a,[n||"val"],function(r){e(r,t||a,r.params[n])})},p.addMethod("__dummy__",function(a,e,n){return!0}),p.addMethod("regex",function(a,e,n){var t;return this.optional(e)?!0:(t=new RegExp(n).exec(a),t&&0===t.index&&t[0].length===a.length)}),p.addMethod("nonalphamin",function(a,e,n){var t;return n&&(t=a.match(/\W/g),t=t&&t.length>=n),t}),p.methods.extension?(u.addSingleVal("accept","mimtype"),u.addSingleVal("extension","extension")):u.addSingleVal("extension","extension","accept"),u.addSingleVal("regex","pattern"),u.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),u.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),u.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),u.add("equalto",["other"],function(n){var o=r(n.element.name),d=n.params.other,s=i(d,o),l=a(n.form).find(":input").filter("[name='"+t(s)+"']")[0];e(n,"equalTo",l)}),u.add("required",function(a){("INPUT"!==a.element.tagName.toUpperCase()||"CHECKBOX"!==a.element.type.toUpperCase())&&e(a,"required",!0)}),u.add("remote",["url","type","additionalfields"],function(o){var d={url:o.params.url,type:o.params.type||"GET",data:{}},s=r(o.element.name);a.each(n(o.params.additionalfields||o.element.name),function(e,n){var r=i(n,s);d.data[r]=function(){var e=a(o.form).find(":input").filter("[name='"+t(r)+"']");return e.is(":checkbox")?e.filter(":checked").val()||e.filter(":hidden").val()||"":e.is(":radio")?e.filter(":checked").val()||"":e.val()}}),e(o,"remote",d)}),u.add("password",["min","nonalphamin","regex"],function(a){a.params.min&&e(a,"minlength",a.params.min),a.params.nonalphamin&&e(a,"nonalphamin",a.params.nonalphamin),a.params.regex&&e(a,"regex",a.params.regex)}),a(function(){p.unobtrusive.parse(document)})}(jQuery); -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery-validation/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation", 3 | "homepage": "http://jqueryvalidation.org/", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/jzaefferer/jquery-validation.git" 7 | }, 8 | "authors": [ 9 | "Jörn Zaefferer " 10 | ], 11 | "description": "Form validation made easy", 12 | "main": "dist/jquery.validate.js", 13 | "keywords": [ 14 | "forms", 15 | "validation", 16 | "validate" 17 | ], 18 | "license": "MIT", 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "demo", 25 | "lib" 26 | ], 27 | "dependencies": { 28 | "jquery": ">= 1.7.2" 29 | }, 30 | "version": "1.14.0", 31 | "_release": "1.14.0", 32 | "_resolution": { 33 | "type": "version", 34 | "tag": "1.14.0", 35 | "commit": "c1343fb9823392aa9acbe1c3ffd337b8c92fed48" 36 | }, 37 | "_source": "git://github.com/jzaefferer/jquery-validation.git", 38 | "_target": ">=1.8", 39 | "_originalSource": "jquery-validation" 40 | } -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery-validation/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright Jörn Zaefferer 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "2.2.0", 16 | "_release": "2.2.0", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "2.2.0", 20 | "commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5" 21 | }, 22 | "_source": "git://github.com/jquery/jquery-dist.git", 23 | "_target": "2.2.0", 24 | "_originalSource": "jquery" 25 | } -------------------------------------------------------------------------------- /webclient/src/webclient/wwwroot/lib/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /webclient/webclient.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9073DF09-F767-4193-89CB-CF26630F7410}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{83022C74-3C86-4EC9-B831-E389D1EEA615}" 9 | ProjectSection(SolutionItems) = preProject 10 | global.json = global.json 11 | EndProjectSection 12 | EndProject 13 | Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "webclient", "src\webclient\webclient.xproj", "{9CD135B1-6DF4-4820-8977-47C635F4A5A0}" 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Release|Any CPU = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 21 | {9CD135B1-6DF4-4820-8977-47C635F4A5A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {9CD135B1-6DF4-4820-8977-47C635F4A5A0}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {9CD135B1-6DF4-4820-8977-47C635F4A5A0}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {9CD135B1-6DF4-4820-8977-47C635F4A5A0}.Release|Any CPU.Build.0 = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(SolutionProperties) = preSolution 27 | HideSolutionNode = FALSE 28 | EndGlobalSection 29 | GlobalSection(NestedProjects) = preSolution 30 | {9CD135B1-6DF4-4820-8977-47C635F4A5A0} = {9073DF09-F767-4193-89CB-CF26630F7410} 31 | EndGlobalSection 32 | EndGlobal 33 | --------------------------------------------------------------------------------