├── .dockerignore ├── .gitattributes ├── .gitignore ├── Blog.IdentityServer.Publish.Docker.sh ├── Blog.IdentityServer.Publish.Linux.sh ├── Blog.IdentityServer.sln ├── Blog.IdentityServer ├── Authorization │ ├── ClaimRequirement.cs │ └── ClaimsRequirementHandler.cs ├── Blog.IdentityServer.csproj ├── Config.cs ├── Controllers │ ├── Account │ │ ├── AccountController.cs │ │ ├── AccountOptions.cs │ │ ├── EditViewModel.cs │ │ ├── ExternalController.cs │ │ ├── ExternalProvider.cs │ │ ├── ForgotPasswordViewModel.cs │ │ ├── LoggedOutViewModel.cs │ │ ├── LoginInputModel.cs │ │ ├── LoginViewModel.cs │ │ ├── LogoutInputModel.cs │ │ ├── LogoutViewModel.cs │ │ ├── RedirectViewModel.cs │ │ ├── RegisterViewModel.cs │ │ ├── ResetPasswordViewModel.cs │ │ ├── RoleEditViewModel.cs │ │ ├── RoleRegisterViewModel.cs │ │ └── UrlHelperExtensions.cs │ ├── ApiResource │ │ ├── ApiResourceDto.cs │ │ └── ApiResourcesManager.cs │ ├── Client │ │ ├── ClientDto.cs │ │ └── ClientsManagerController.cs │ ├── Consent │ │ ├── ConsentController.cs │ │ ├── ConsentInputModel.cs │ │ ├── ConsentOptions.cs │ │ ├── ConsentViewModel.cs │ │ ├── ProcessConsentResult.cs │ │ └── ScopeViewModel.cs │ ├── Device │ │ ├── DeviceAuthorizationInputModel.cs │ │ ├── DeviceAuthorizationViewModel.cs │ │ └── DeviceController.cs │ ├── Diagnostics │ │ ├── DiagnosticsController.cs │ │ └── DiagnosticsViewModel.cs │ ├── Extensions.cs │ ├── Grants │ │ ├── GrantsController.cs │ │ └── GrantsViewModel.cs │ ├── Home │ │ ├── ErrorViewModel.cs │ │ ├── HomeController.cs │ │ └── Is4ApiController.cs │ ├── SecurityHeadersAttribute.cs │ └── TestUsers.cs ├── Data │ ├── ApplicationDbContext.cs │ └── MigrationsMySql │ │ ├── 20200509165505_AppDbMigration.Designer.cs │ │ ├── 20200509165505_AppDbMigration.cs │ │ ├── 20210808045732_addQuestion.Designer.cs │ │ ├── 20210808045732_addQuestion.cs │ │ ├── ApplicationDbContextModelSnapshot.cs │ │ └── IdentityServer │ │ ├── ConfigurationDb │ │ ├── 20200509165153_InitialIdentityServerConfigurationDbMigrationMysql.Designer.cs │ │ ├── 20200509165153_InitialIdentityServerConfigurationDbMigrationMysql.cs │ │ ├── 20200715033226_InitConfigurationDbV4.Designer.cs │ │ ├── 20200715033226_InitConfigurationDbV4.cs │ │ └── ConfigurationDbContextModelSnapshot.cs │ │ └── PersistedGrantDb │ │ ├── 20200509165052_InitialIdentityServerPersistedGrantDbMigrationMysql.Designer.cs │ │ ├── 20200509165052_InitialIdentityServerPersistedGrantDbMigrationMysql.cs │ │ ├── 20200715032957_InitPersistedGrantDbV4.Designer.cs │ │ ├── 20200715032957_InitPersistedGrantDbV4.cs │ │ └── PersistedGrantDbContextModelSnapshot.cs ├── Dockerfile ├── Extensions │ ├── GrantTypeCustom.cs │ ├── IpLimitMildd.cs │ ├── IpPolicyRateLimitSetup.cs │ ├── ResourceOwnerPasswordValidator.cs │ └── WeiXinOpenGrantValidator.cs ├── Helper │ ├── Appsettings.cs │ ├── FileHelper.cs │ ├── GetNetData.cs │ ├── HtmlHelper.cs │ ├── JsonHelper.cs │ ├── MD5Hepler.cs │ ├── RecursionHelper.cs │ ├── SerializeHelper.cs │ ├── UnicodeHelper.cs │ └── UtilConvert.cs ├── InMemoryConfig.cs ├── LICENSE ├── Models │ ├── ApplicationRole.cs │ ├── ApplicationUser.cs │ ├── ApplicationUserRole.cs │ ├── Bak │ │ ├── Role.cs │ │ ├── RootEntity.cs │ │ ├── UserRole.cs │ │ └── sysUserInfo.cs │ ├── Dtos │ │ └── MessageModel.cs │ └── ViewModel │ │ └── AccessApiDateView.cs ├── Program.cs ├── Properties │ ├── PublishProfiles │ │ └── FolderProfile.pubxml │ └── launchSettings.json ├── SameSiteHandlingExtensions.cs ├── SeedData.cs ├── Startup.cs ├── Views │ ├── Account │ │ ├── AccessDenied.cshtml │ │ ├── ConfirmEmail.cshtml │ │ ├── Edit.cshtml │ │ ├── ForgotPassword.cshtml │ │ ├── ForgotPasswordConfirmation.cshtml │ │ ├── LoggedOut.cshtml │ │ ├── Login.cshtml │ │ ├── Logout.cshtml │ │ ├── My.cshtml │ │ ├── Register.cshtml │ │ ├── ResetPassword.cshtml │ │ ├── ResetPasswordConfirmation.cshtml │ │ ├── RoleEdit.cshtml │ │ ├── RoleRegister.cshtml │ │ ├── Roles.cshtml │ │ └── Users.cshtml │ ├── ApiResourcesManager │ │ ├── CreateOrEdit.cshtml │ │ └── Index.cshtml │ ├── ClientsManager │ │ ├── CreateOrEdit.cshtml │ │ └── Index.cshtml │ ├── Consent │ │ └── Index.cshtml │ ├── Device │ │ ├── Success.cshtml │ │ ├── UserCodeCapture.cshtml │ │ └── UserCodeConfirmation.cshtml │ ├── Diagnostics │ │ └── Index.cshtml │ ├── Grants │ │ ├── Config.cshtml │ │ └── Index.cshtml │ ├── Home │ │ └── Index.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ ├── Redirect.cshtml │ │ ├── _Layout.cshtml │ │ ├── _ScopeListItem.cshtml │ │ └── _ValidationSummary.cshtml │ ├── _ViewImports.cshtml │ └── _ViewStart.cshtml ├── appsettings.Development.json ├── appsettings.json ├── tempkey.jwk ├── tempkey.rsa └── wwwroot │ ├── css │ ├── bundle.min.css │ ├── fluhrq6tzzclqej-vdg-iuiadsnc.woff2 │ ├── login_styles.css │ ├── showtip.css │ ├── site.css │ ├── site.less │ ├── site.min.css │ ├── web.css │ └── web.min.css │ ├── favicon.ico │ ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── open-iconic.eot │ ├── open-iconic.otf │ ├── open-iconic.svg │ ├── open-iconic.ttf │ └── open-iconic.woff │ ├── icon.jpg │ ├── icon.png │ ├── js │ ├── Role.js │ ├── User.js │ ├── axios.min.js │ ├── bootstrap-show-password.js │ ├── bundle.min.js │ ├── showTip.js │ ├── signin-redirect.js │ ├── signout-redirect.js │ └── vue.min.js │ ├── lib │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ └── bootstrap.min.css │ │ ├── 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 │ ├── jquery-validation-unobtrusive │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ ├── bower.json │ │ ├── jquery.validate.unobtrusive.js │ │ └── jquery.validate.unobtrusive.min.js │ ├── jquery-validation │ │ ├── .bower.json │ │ ├── CONTRIBUTING.md │ │ ├── Gruntfile.js │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── bower.json │ │ ├── changelog.md │ │ ├── dist │ │ │ ├── additional-methods.js │ │ │ ├── additional-methods.min.js │ │ │ ├── jquery.validate.js │ │ │ └── jquery.validate.min.js │ │ ├── package.json │ │ ├── src │ │ │ ├── additional │ │ │ │ ├── accept.js │ │ │ │ ├── additional.js │ │ │ │ ├── alphanumeric.js │ │ │ │ ├── bankaccountNL.js │ │ │ │ ├── bankorgiroaccountNL.js │ │ │ │ ├── bic.js │ │ │ │ ├── cifES.js │ │ │ │ ├── cpfBR.js │ │ │ │ ├── creditcardtypes.js │ │ │ │ ├── currency.js │ │ │ │ ├── dateFA.js │ │ │ │ ├── dateITA.js │ │ │ │ ├── dateNL.js │ │ │ │ ├── extension.js │ │ │ │ ├── giroaccountNL.js │ │ │ │ ├── iban.js │ │ │ │ ├── integer.js │ │ │ │ ├── ipv4.js │ │ │ │ ├── ipv6.js │ │ │ │ ├── lettersonly.js │ │ │ │ ├── letterswithbasicpunc.js │ │ │ │ ├── mobileNL.js │ │ │ │ ├── mobileUK.js │ │ │ │ ├── nieES.js │ │ │ │ ├── nifES.js │ │ │ │ ├── notEqualTo.js │ │ │ │ ├── nowhitespace.js │ │ │ │ ├── pattern.js │ │ │ │ ├── phoneNL.js │ │ │ │ ├── phoneUK.js │ │ │ │ ├── phoneUS.js │ │ │ │ ├── phonesUK.js │ │ │ │ ├── postalCodeCA.js │ │ │ │ ├── postalcodeBR.js │ │ │ │ ├── postalcodeIT.js │ │ │ │ ├── postalcodeNL.js │ │ │ │ ├── postcodeUK.js │ │ │ │ ├── require_from_group.js │ │ │ │ ├── skip_or_fill_minimum.js │ │ │ │ ├── statesUS.js │ │ │ │ ├── strippedminlength.js │ │ │ │ ├── time.js │ │ │ │ ├── time12h.js │ │ │ │ ├── url2.js │ │ │ │ ├── vinUS.js │ │ │ │ ├── zipcodeUS.js │ │ │ │ └── ziprange.js │ │ │ ├── ajax.js │ │ │ ├── core.js │ │ │ └── localization │ │ │ │ ├── messages_ar.js │ │ │ │ ├── messages_bg.js │ │ │ │ ├── messages_bn_BD.js │ │ │ │ ├── messages_ca.js │ │ │ │ ├── messages_cs.js │ │ │ │ ├── messages_da.js │ │ │ │ ├── messages_de.js │ │ │ │ ├── messages_el.js │ │ │ │ ├── messages_es.js │ │ │ │ ├── messages_es_AR.js │ │ │ │ ├── messages_es_PE.js │ │ │ │ ├── messages_et.js │ │ │ │ ├── messages_eu.js │ │ │ │ ├── messages_fa.js │ │ │ │ ├── messages_fi.js │ │ │ │ ├── messages_fr.js │ │ │ │ ├── messages_ge.js │ │ │ │ ├── messages_gl.js │ │ │ │ ├── messages_he.js │ │ │ │ ├── messages_hr.js │ │ │ │ ├── messages_hu.js │ │ │ │ ├── messages_hy_AM.js │ │ │ │ ├── messages_id.js │ │ │ │ ├── messages_is.js │ │ │ │ ├── messages_it.js │ │ │ │ ├── messages_ja.js │ │ │ │ ├── messages_ka.js │ │ │ │ ├── messages_kk.js │ │ │ │ ├── messages_ko.js │ │ │ │ ├── messages_lt.js │ │ │ │ ├── messages_lv.js │ │ │ │ ├── messages_my.js │ │ │ │ ├── messages_nl.js │ │ │ │ ├── messages_no.js │ │ │ │ ├── messages_pl.js │ │ │ │ ├── messages_pt_BR.js │ │ │ │ ├── messages_pt_PT.js │ │ │ │ ├── messages_ro.js │ │ │ │ ├── messages_ru.js │ │ │ │ ├── messages_si.js │ │ │ │ ├── messages_sk.js │ │ │ │ ├── messages_sl.js │ │ │ │ ├── messages_sr.js │ │ │ │ ├── messages_sr_lat.js │ │ │ │ ├── messages_sv.js │ │ │ │ ├── messages_th.js │ │ │ │ ├── messages_tj.js │ │ │ │ ├── messages_tr.js │ │ │ │ ├── messages_uk.js │ │ │ │ ├── messages_vi.js │ │ │ │ ├── messages_zh.js │ │ │ │ ├── messages_zh_TW.js │ │ │ │ ├── methods_de.js │ │ │ │ ├── methods_es_CL.js │ │ │ │ ├── methods_fi.js │ │ │ │ ├── methods_nl.js │ │ │ │ └── methods_pt.js │ │ └── validation.jquery.json │ └── jquery │ │ ├── jquery.min.js │ │ └── jquery.min.map │ ├── logo.png │ └── logofull.png ├── Build.bat ├── Dockerfile └── README.md /.dockerignore: -------------------------------------------------------------------------------- 1 | **/.classpath 2 | **/.dockerignore 3 | **/.env 4 | **/.git 5 | **/.gitignore 6 | **/.project 7 | **/.settings 8 | **/.toolstarget 9 | **/.vs 10 | **/.vscode 11 | **/*.*proj.user 12 | **/*.dbmdl 13 | **/*.jfm 14 | **/azds.yaml 15 | **/bin 16 | **/charts 17 | **/docker-compose* 18 | **/Dockerfile* 19 | **/node_modules 20 | **/npm-debug.log 21 | **/obj 22 | **/secrets.dev.yaml 23 | **/values.dev.yaml 24 | LICENSE 25 | README.md -------------------------------------------------------------------------------- /Blog.IdentityServer.Publish.Docker.sh: -------------------------------------------------------------------------------- 1 | # 停止容器 2 | docker stop idscontainer 3 | # 删除容器 4 | docker rm idscontainer 5 | # 删除镜像 6 | docker rmi laozhangisphi/idsimg 7 | # 切换目录 8 | cd /home/Blog.IdentityServer 9 | # 发布项目 10 | ./Blog.IdentityServer.Publish.Linux.sh 11 | # 进入目录 12 | cd /home/Blog.IdentityServer/.PublishFiles/ 13 | # 编译镜像 14 | docker build -t laozhangisphi/idsimg . 15 | # 生成容器 16 | docker run --name=idscontainer -v /etc/localtime:/etc/localtime -it -p 5004:5004 laozhangisphi/idsimg 17 | # 启动容器 18 | docker start idscontainer 19 | -------------------------------------------------------------------------------- /Blog.IdentityServer.Publish.Linux.sh: -------------------------------------------------------------------------------- 1 | git pull; 2 | rm -rf .PublishFiles; 3 | dotnet build; 4 | dotnet publish -o /home/Blog.IdentityServer/Blog.IdentityServer/bin/Debug/netcoreapp3.1; 5 | cp -r /home/Blog.IdentityServer/Blog.IdentityServer/bin/Debug/netcoreapp3.1 .PublishFiles; 6 | echo "Successfully!!!! ^ please see the file .PublishFiles"; -------------------------------------------------------------------------------- /Blog.IdentityServer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30427.197 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blog.IdentityServer", "Blog.IdentityServer\Blog.IdentityServer.csproj", "{1DB65298-136C-41BC-B2CD-BA5BBA3D7A23}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {1DB65298-136C-41BC-B2CD-BA5BBA3D7A23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {1DB65298-136C-41BC-B2CD-BA5BBA3D7A23}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {1DB65298-136C-41BC-B2CD-BA5BBA3D7A23}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {1DB65298-136C-41BC-B2CD-BA5BBA3D7A23}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {F8CF5BB1-9EC8-44D8-94A3-0A5215DAE293} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Authorization/ClaimRequirement.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Authorization; 2 | 3 | namespace Blog.IdentityServer.Authorization 4 | { 5 | public class ClaimRequirement : IAuthorizationRequirement 6 | { 7 | public ClaimRequirement(string claimName, string claimValue) 8 | { 9 | ClaimName = claimName; 10 | ClaimValue = claimValue; 11 | } 12 | 13 | public string ClaimName { get; set; } 14 | public string ClaimValue { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Authorization/ClaimsRequirementHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading.Tasks; 3 | using Microsoft.AspNetCore.Authorization; 4 | 5 | namespace Blog.IdentityServer.Authorization 6 | { 7 | public class ClaimsRequirementHandler : AuthorizationHandler 8 | { 9 | 10 | protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, 11 | ClaimRequirement requirement) 12 | { 13 | 14 | var claim = context.User.Claims.FirstOrDefault(c => c.Type == requirement.ClaimName); 15 | if (claim != null && claim.Value.Contains(requirement.ClaimValue)) 16 | { 17 | context.Succeed(requirement); 18 | } 19 | 20 | return Task.CompletedTask; 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/AccountOptions.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public class AccountOptions 10 | { 11 | public static bool AllowLocalLogin = true; 12 | public static bool AllowRememberLogin = true; 13 | public static TimeSpan RememberMeLoginDuration = TimeSpan.FromDays(30); 14 | 15 | public static bool ShowLogoutPrompt = true; 16 | public static bool AutomaticRedirectAfterSignOut = true;//自动跳回原项目 17 | 18 | // specify the Windows authentication scheme being used 19 | public static readonly string WindowsAuthenticationSchemeName = Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme; 20 | // if user uses windows auth, should we load the groups from windows 21 | public static bool IncludeWindowsGroups = false; 22 | 23 | public static string InvalidCredentialsErrorMessage = "Invalid username or password"; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/EditViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Security.Claims; 5 | 6 | namespace IdentityServer4.Quickstart.UI 7 | { 8 | public class EditViewModel 9 | { 10 | public EditViewModel() 11 | { 12 | 13 | } 14 | public EditViewModel(string Id, string Name, string LoginName, string Email, IList Claims, string FirstQuestion, string SecondQuestion) 15 | { 16 | this.Id = Id; 17 | this.LoginName = LoginName; 18 | this.Email = Email; 19 | this.UserName = Name; 20 | this.Claims = Claims; 21 | this.FirstQuestion = FirstQuestion; 22 | this.SecondQuestion = SecondQuestion; 23 | } 24 | 25 | public string Id { get; set; } 26 | 27 | [Required] 28 | [Display(Name = "昵称")] 29 | public string UserName { get; set; } 30 | 31 | [Required] 32 | [Display(Name = "登录名")] 33 | public string LoginName { get; set; } 34 | 35 | [Required] 36 | [EmailAddress] 37 | [Display(Name = "邮箱")] 38 | public string Email { get; set; } 39 | 40 | 41 | 42 | 43 | [Display(Name = "性别")] 44 | public int Sex { get; set; } = 0; 45 | 46 | [Display(Name = "生日")] 47 | public DateTime Birth { get; set; } = DateTime.Now; 48 | 49 | public IList Claims { get; set; } 50 | 51 | 52 | [Display(Name = "密保问题一:你喜欢的动漫?")] 53 | public string FirstQuestion { get; set; } 54 | 55 | [Display(Name = "密保问题二:你喜欢的名著?")] 56 | public string SecondQuestion { get; set; } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/ExternalProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class ExternalProvider 8 | { 9 | public string DisplayName { get; set; } 10 | public string AuthenticationScheme { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/ForgotPasswordViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace IdentityServer4.Quickstart.UI 4 | { 5 | public class ForgotPasswordViewModel 6 | { 7 | [Required] 8 | [EmailAddress] 9 | public string Email { get; set; } 10 | 11 | [Display(Name = "密保问题一:你喜欢的动漫?")] 12 | public string FirstQuestion { get; set; } 13 | 14 | [Display(Name = "密保问题二:你喜欢的名著?")] 15 | public string SecondQuestion { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/LoggedOutViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class LoggedOutViewModel 8 | { 9 | public string PostLogoutRedirectUri { get; set; } 10 | public string ClientName { get; set; } 11 | public string SignOutIframeUrl { get; set; } 12 | 13 | public bool AutomaticRedirectAfterSignOut { get; set; } = false; 14 | 15 | public string LogoutId { get; set; } 16 | public bool TriggerExternalSignout => ExternalAuthenticationScheme != null; 17 | public string ExternalAuthenticationScheme { get; set; } 18 | } 19 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/LoginInputModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System.ComponentModel.DataAnnotations; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public class LoginInputModel 10 | { 11 | [Required] 12 | public string Username { get; set; } 13 | [Required] 14 | public string Password { get; set; } 15 | public bool RememberLogin { get; set; } 16 | public string ReturnUrl { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/LoginViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | 9 | namespace IdentityServer4.Quickstart.UI 10 | { 11 | public class LoginViewModel : LoginInputModel 12 | { 13 | public bool AllowRememberLogin { get; set; } = true; 14 | public bool EnableLocalLogin { get; set; } = true; 15 | 16 | public IEnumerable ExternalProviders { get; set; } = Enumerable.Empty(); 17 | public IEnumerable VisibleExternalProviders => ExternalProviders.Where(x => !String.IsNullOrWhiteSpace(x.DisplayName)); 18 | 19 | public bool IsExternalLoginOnly => EnableLocalLogin == false && ExternalProviders?.Count() == 1; 20 | public string ExternalLoginScheme => IsExternalLoginOnly ? ExternalProviders?.SingleOrDefault()?.AuthenticationScheme : null; 21 | } 22 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/LogoutInputModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class LogoutInputModel 8 | { 9 | public string LogoutId { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/LogoutViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class LogoutViewModel : LogoutInputModel 8 | { 9 | public bool ShowLogoutPrompt { get; set; } = true; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/RedirectViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | 6 | namespace IdentityServer4.Quickstart.UI 7 | { 8 | public class RedirectViewModel 9 | { 10 | public string RedirectUrl { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/RegisterViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace IdentityServer4.Quickstart.UI 5 | { 6 | public class RegisterViewModel 7 | { 8 | 9 | [Required] 10 | [Display(Name = "昵称")] 11 | public string RealName { get; set; } 12 | 13 | [Required] 14 | [Display(Name = "登录名")] 15 | public string LoginName { get; set; } 16 | 17 | [Required] 18 | [EmailAddress] 19 | [Display(Name = "邮箱")] 20 | public string Email { get; set; } 21 | 22 | [Required] 23 | [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] 24 | [DataType(DataType.Password)] 25 | [Display(Name = "密码")] 26 | public string Password { get; set; } 27 | 28 | [DataType(DataType.Password)] 29 | [Display(Name = "确认密码")] 30 | [Compare("Password", ErrorMessage = "The 密码 and 确认密码 do not match.")] 31 | public string ConfirmPassword { get; set; } 32 | 33 | 34 | 35 | [Required] 36 | [Display(Name = "密保问题一:你喜欢的动漫?")] 37 | public string FirstQuestion { get; set; } 38 | 39 | [Required] 40 | [Display(Name = "密保问题二:你喜欢的名著?")] 41 | public string SecondQuestion { get; set; } 42 | 43 | [Display(Name = "性别")] 44 | public int Sex { get; set; } = 0; 45 | 46 | [Display(Name = "生日")] 47 | public DateTime Birth { get; set; } = DateTime.Now; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/ResetPasswordViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace IdentityServer4.Quickstart.UI 4 | { 5 | public class ResetPasswordViewModel 6 | { 7 | [Required] 8 | public string userId { get; set; } 9 | 10 | [Required] 11 | [EmailAddress] 12 | public string Email { get; set; } 13 | 14 | [Required] 15 | [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] 16 | [DataType(DataType.Password)] 17 | public string Password { get; set; } 18 | 19 | [DataType(DataType.Password)] 20 | [Display(Name = "Confirm password")] 21 | [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 22 | public string ConfirmPassword { get; set; } 23 | 24 | public string Code { get; set; } 25 | public string AccessCode { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/RoleEditViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace IdentityServer4.Quickstart.UI 5 | { 6 | public class RoleEditViewModel 7 | { 8 | public RoleEditViewModel() 9 | { 10 | 11 | } 12 | public RoleEditViewModel(string Id, string Name) 13 | { 14 | this.Id = Id; 15 | this.RoleName = Name; 16 | } 17 | 18 | public string Id { get; set; } 19 | 20 | [Required] 21 | [Display(Name = "角色名")] 22 | public string RoleName { get; set; } 23 | 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/RoleRegisterViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace IdentityServer4.Quickstart.UI 5 | { 6 | public class RoleRegisterViewModel 7 | { 8 | 9 | [Required] 10 | [Display(Name = "角色名")] 11 | public string RoleName { get; set; } 12 | 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Account/UrlHelperExtensions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | 3 | namespace IdentityServer4.Quickstart.UI 4 | { 5 | public static class UrlHelperExtensions 6 | { 7 | public static string EmailConfirmationLink(this IUrlHelper urlHelper, string userId, string code, string scheme) 8 | { 9 | return urlHelper.Action( 10 | action: nameof(AccountController.ConfirmEmail), 11 | controller: "Account", 12 | values: new { userId, code }, 13 | protocol: scheme); 14 | } 15 | 16 | public static string ResetPasswordCallbackLink(this IUrlHelper urlHelper, string userId, string code, string scheme, string accessCode = "") 17 | { 18 | return urlHelper.Action( 19 | action: nameof(AccountController.ResetPassword), 20 | controller: "Account", 21 | values: new { userId, code, accessCode }, 22 | protocol: scheme); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/ApiResource/ApiResourceDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace Blog.IdentityServer.Controllers.ApiResource 7 | { 8 | public class ApiResourceDto 9 | { 10 | public int Id { get; set; } 11 | public string Name { get; set; } 12 | public string DisplayName { get; set; } 13 | public string Description { get; set; } 14 | public string UserClaims { get; set; } 15 | public string Scopes { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Client/ClientDto.cs: -------------------------------------------------------------------------------- 1 | namespace Blog.IdentityServer.Controllers.Client 2 | { 3 | public class ClientDto 4 | { 5 | public int id { get; set; } 6 | public string ClientId { get; set; } 7 | public string ClientName { get; set; } 8 | public string ClientSecrets { get; set; } 9 | public string Description { get; set; } 10 | public string AllowAccessTokensViaBrowser { get; set; } 11 | public string AllowedGrantTypes { get; set; } 12 | public string AllowedScopes { get; set; } 13 | public string AllowedCorsOrigins { get; set; } 14 | public string RedirectUris { get; set; } 15 | public string PostLogoutRedirectUris { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Consent/ConsentInputModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System.Collections.Generic; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public class ConsentInputModel 10 | { 11 | public string Button { get; set; } 12 | public IEnumerable ScopesConsented { get; set; } 13 | public bool RememberConsent { get; set; } 14 | public string ReturnUrl { get; set; } 15 | public string Description { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Consent/ConsentOptions.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class ConsentOptions 8 | { 9 | public static bool EnableOfflineAccess = true; 10 | public static string OfflineAccessDisplayName = "Offline Access"; 11 | public static string OfflineAccessDescription = "Access to your applications and resources, even when you are offline"; 12 | 13 | public static readonly string MustChooseOneErrorMessage = "You must pick at least one permission"; 14 | public static readonly string InvalidSelectionErrorMessage = "Invalid selection"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Consent/ConsentViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System.Collections.Generic; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public class ConsentViewModel : ConsentInputModel 10 | { 11 | public string ClientName { get; set; } 12 | public string ClientUrl { get; set; } 13 | public string ClientLogoUrl { get; set; } 14 | public bool AllowRememberConsent { get; set; } 15 | 16 | public IEnumerable IdentityScopes { get; set; } 17 | public IEnumerable ApiScopes { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Consent/ProcessConsentResult.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | using IdentityServer4.Models; 5 | 6 | namespace IdentityServer4.Quickstart.UI 7 | { 8 | public class ProcessConsentResult 9 | { 10 | public bool IsRedirect => RedirectUri != null; 11 | public string RedirectUri { get; set; } 12 | public Client Client { get; set; } 13 | 14 | public bool ShowView => ViewModel != null; 15 | public ConsentViewModel ViewModel { get; set; } 16 | 17 | public bool HasValidationError => ValidationError != null; 18 | public string ValidationError { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Consent/ScopeViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI 6 | { 7 | public class ScopeViewModel 8 | { 9 | public string Value { get; set; } 10 | public string DisplayName { get; set; } 11 | public string Description { get; set; } 12 | public bool Emphasize { get; set; } 13 | public bool Required { get; set; } 14 | public bool Checked { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Device/DeviceAuthorizationInputModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI.Device 6 | { 7 | public class DeviceAuthorizationInputModel : ConsentInputModel 8 | { 9 | public string UserCode { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Device/DeviceAuthorizationViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | namespace IdentityServer4.Quickstart.UI.Device 6 | { 7 | public class DeviceAuthorizationViewModel : ConsentViewModel 8 | { 9 | public string UserCode { get; set; } 10 | public bool ConfirmUserCode { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Diagnostics/DiagnosticsController.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using Microsoft.AspNetCore.Authentication; 8 | using Microsoft.AspNetCore.Authorization; 9 | using Microsoft.AspNetCore.Mvc; 10 | 11 | namespace IdentityServer4.Quickstart.UI 12 | { 13 | [SecurityHeaders] 14 | [Authorize] 15 | public class DiagnosticsController : Controller 16 | { 17 | public async Task Index() 18 | { 19 | var localAddresses = new string[] { "127.0.0.1", "::1", HttpContext.Connection.LocalIpAddress.ToString() }; 20 | if (!localAddresses.Contains(HttpContext.Connection.RemoteIpAddress.ToString())) 21 | { 22 | return NotFound(); 23 | } 24 | 25 | var model = new DiagnosticsViewModel(await HttpContext.AuthenticateAsync()); 26 | return View(model); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Diagnostics/DiagnosticsViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using IdentityModel; 6 | using Microsoft.AspNetCore.Authentication; 7 | using Newtonsoft.Json; 8 | using System.Collections.Generic; 9 | using System.Text; 10 | 11 | namespace IdentityServer4.Quickstart.UI 12 | { 13 | public class DiagnosticsViewModel 14 | { 15 | public DiagnosticsViewModel(AuthenticateResult result) 16 | { 17 | AuthenticateResult = result; 18 | 19 | if (result.Properties.Items.ContainsKey("client_list")) 20 | { 21 | var encoded = result.Properties.Items["client_list"]; 22 | var bytes = Base64Url.Decode(encoded); 23 | var value = Encoding.UTF8.GetString(bytes); 24 | 25 | Clients = JsonConvert.DeserializeObject(value); 26 | } 27 | } 28 | 29 | public AuthenticateResult AuthenticateResult { get; } 30 | public IEnumerable Clients { get; } = new List(); 31 | } 32 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using IdentityServer4.Models; 4 | using IdentityServer4.Stores; 5 | using Microsoft.AspNetCore.Mvc; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public static class Extensions 10 | { 11 | /// 12 | /// Determines whether the client is configured to use PKCE. 13 | /// 14 | /// The store. 15 | /// The client identifier. 16 | /// 17 | public static async Task IsPkceClientAsync(this IClientStore store, string client_id) 18 | { 19 | if (!string.IsNullOrWhiteSpace(client_id)) 20 | { 21 | var client = await store.FindEnabledClientByIdAsync(client_id); 22 | return client?.RequirePkce == true; 23 | } 24 | 25 | return false; 26 | } 27 | 28 | /// 29 | /// Checks if the redirect URI is for a native client. 30 | /// 31 | /// 32 | public static bool IsNativeClient(this AuthorizationRequest context) 33 | { 34 | return !context.RedirectUri.StartsWith("https", StringComparison.Ordinal) 35 | && !context.RedirectUri.StartsWith("http", StringComparison.Ordinal); 36 | } 37 | 38 | public static IActionResult LoadingPage(this Controller controller, string viewName, string redirectUri) 39 | { 40 | controller.HttpContext.Response.StatusCode = 200; 41 | controller.HttpContext.Response.Headers["Location"] = ""; 42 | 43 | return controller.View(viewName, new RedirectViewModel { RedirectUrl = redirectUri }); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Grants/GrantsViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using System; 6 | using System.Collections.Generic; 7 | 8 | namespace IdentityServer4.Quickstart.UI 9 | { 10 | public class GrantsViewModel 11 | { 12 | public IEnumerable Grants { get; set; } 13 | } 14 | 15 | public class GrantViewModel 16 | { 17 | public string ClientId { get; set; } 18 | public string ClientName { get; set; } 19 | public string ClientUrl { get; set; } 20 | public string ClientLogoUrl { get; set; } 21 | public string Description { get; set; } 22 | public DateTime Created { get; set; } 23 | public DateTime? Expires { get; set; } 24 | public IEnumerable IdentityGrantNames { get; set; } 25 | public IEnumerable ApiGrantNames { get; set; } 26 | } 27 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Home/ErrorViewModel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. 2 | // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. 3 | 4 | 5 | using IdentityServer4.Models; 6 | 7 | namespace IdentityServer4.Quickstart.UI 8 | { 9 | public class ErrorViewModel 10 | { 11 | public ErrorMessage Error { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Controllers/Home/Is4ApiController.cs: -------------------------------------------------------------------------------- 1 | using Blog.IdentityServer.Models; 2 | using Blog.IdentityServer.Models.ViewModel; 3 | using Microsoft.AspNetCore.Identity; 4 | using Microsoft.AspNetCore.Mvc; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Threading.Tasks; 9 | 10 | namespace Blog.IdentityServer.Controllers 11 | { 12 | [Route("[controller]/[action]")] 13 | [ApiController] 14 | public class Is4ApiController : ControllerBase 15 | { 16 | private readonly UserManager _userManager; 17 | 18 | public Is4ApiController(UserManager userManager) 19 | { 20 | _userManager = userManager; 21 | } 22 | 23 | 24 | [HttpGet] 25 | public MessageModel GetAchieveUsers() 26 | { 27 | List apiDates = new List(); 28 | 29 | var users = _userManager.Users.Where(d => !d.tdIsDelete).OrderByDescending(d => d.Id).ToList(); 30 | 31 | var tadayRegisterUser = users.Where(d => d.birth >= DateTime.Now.Date).Count(); 32 | 33 | apiDates = (from n in users 34 | group n by new { n.birth.Date } into g 35 | select new ApiDate 36 | { 37 | date = g.Key?.Date.ToString("yyyy-MM-dd"), 38 | count = g.Count(), 39 | }).ToList(); 40 | 41 | apiDates = apiDates.OrderByDescending(d => d.date).Take(30).ToList(); 42 | 43 | 44 | if (apiDates.Count == 0) 45 | { 46 | apiDates.Add(new ApiDate() 47 | { 48 | date = "没数据,或未开启相应接口服务", 49 | count = 0 50 | }); 51 | } 52 | return new MessageModel() 53 | { 54 | msg = "获取成功", 55 | success = true, 56 | response = new AccessApiDateView 57 | { 58 | columns = new string[] { "date", "count" }, 59 | rows = apiDates.OrderBy(d => d.date).ToList(), 60 | today = tadayRegisterUser, 61 | } 62 | }; 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Data/ApplicationDbContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 2 | using Microsoft.EntityFrameworkCore; 3 | using Blog.IdentityServer.Models; 4 | using Microsoft.AspNetCore.Identity; 5 | 6 | namespace Blog.IdentityServer.Data 7 | { 8 | //public class ApplicationDbContext : IdentityDbContext 9 | //{ 10 | // public ApplicationDbContext(DbContextOptions options) 11 | // : base(options) 12 | // { 13 | // } 14 | 15 | // protected override void OnModelCreating(ModelBuilder builder) 16 | // { 17 | // base.OnModelCreating(builder); 18 | // // Customize the ASP.NET Identity model and override the defaults if needed. 19 | // // For example, you can rename the ASP.NET Identity table names and more. 20 | // // Add your customizations after calling base.OnModelCreating(builder); 21 | // } 22 | //} 23 | 24 | public class ApplicationDbContext 25 | : IdentityDbContext, 26 | ApplicationUserRole, IdentityUserLogin, 27 | IdentityRoleClaim, IdentityUserToken> 28 | { 29 | public ApplicationDbContext(DbContextOptions options) 30 | : base(options) 31 | { 32 | } 33 | 34 | protected override void OnModelCreating(ModelBuilder builder) 35 | { 36 | base.OnModelCreating(builder); 37 | 38 | //builder.Entity(userRole => 39 | //{ 40 | // userRole.HasKey(ur => new { ur.UserId, ur.RoleId }); 41 | 42 | // userRole.HasOne(ur => ur.Role) 43 | // .WithMany(r => r.UserRoles) 44 | // .HasForeignKey(ur => ur.RoleId) 45 | // .IsRequired(); 46 | 47 | // userRole.HasOne(ur => ur.User) 48 | // .WithMany(r => r.UserRoles) 49 | // .HasForeignKey(ur => ur.UserId) 50 | // .IsRequired(); 51 | //}); 52 | 53 | //// 就是这里,我们可以修改下表名等其他任意操作 54 | //builder.Entity() 55 | // .ToTable("Role"); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Data/MigrationsMySql/20210808045732_addQuestion.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Migrations; 2 | 3 | namespace Blog.IdentityServer.Data.MigrationsMySql 4 | { 5 | public partial class addQuestion : Migration 6 | { 7 | protected override void Up(MigrationBuilder migrationBuilder) 8 | { 9 | migrationBuilder.AddColumn( 10 | name: "FirstQuestion", 11 | table: "AspNetUsers", 12 | nullable: true); 13 | 14 | migrationBuilder.AddColumn( 15 | name: "SecondQuestion", 16 | table: "AspNetUsers", 17 | nullable: true); 18 | } 19 | 20 | protected override void Down(MigrationBuilder migrationBuilder) 21 | { 22 | migrationBuilder.DropColumn( 23 | name: "FirstQuestion", 24 | table: "AspNetUsers"); 25 | 26 | migrationBuilder.DropColumn( 27 | name: "SecondQuestion", 28 | table: "AspNetUsers"); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM swr.cn-south-1.myhuaweicloud.com/mcr/aspnet:3.1-alpine 2 | WORKDIR /app 3 | COPY . . 4 | EXPOSE 5004 5 | ENTRYPOINT ["dotnet", "Blog.IdentityServer.dll","-b","0.0.0.0"] -------------------------------------------------------------------------------- /Blog.IdentityServer/Extensions/GrantTypeCustom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace Blog.IdentityServer.Extensions 7 | { 8 | /// 9 | /// 自定义授权类型 10 | /// 11 | public class GrantTypeCustom 12 | { 13 | /// 14 | /// GrantType - 自定义微信授权 15 | /// 16 | public const string ResourceWeixinOpen = "weixinopen"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Extensions/IpLimitMildd.cs: -------------------------------------------------------------------------------- 1 | using AspNetCoreRateLimit; 2 | using Microsoft.AspNetCore.Builder; 3 | using System; 4 | 5 | namespace Blog.IdentityServer.Extensions 6 | { 7 | public static class IpLimitMildd 8 | { 9 | public static void UseIpLimitMildd(this IApplicationBuilder app) 10 | { 11 | if (app == null) throw new ArgumentNullException(nameof(app)); 12 | 13 | try 14 | { 15 | app.UseIpRateLimiting(); 16 | } 17 | catch (Exception e) 18 | { 19 | throw; 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Extensions/IpPolicyRateLimitSetup.cs: -------------------------------------------------------------------------------- 1 | using AspNetCoreRateLimit; 2 | using Microsoft.AspNetCore.Http; 3 | using Microsoft.Extensions.Configuration; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using System; 6 | 7 | namespace Blog.IdentityServer.Extensions 8 | { 9 | public static class IpPolicyRateLimitSetup 10 | { 11 | public static void AddIpPolicyRateLimitSetup(this IServiceCollection services, IConfiguration Configuration) 12 | { 13 | if (services == null) throw new ArgumentNullException(nameof(services)); 14 | 15 | // needed to store rate limit counters and ip rules 16 | services.AddMemoryCache(); 17 | //load general configuration from appsettings.json 18 | services.Configure(Configuration.GetSection("IpRateLimiting")); 19 | // inject counter and rules stores 20 | services.AddSingleton(); 21 | services.AddSingleton(); 22 | 23 | // inject counter and rules distributed cache stores 24 | //services.AddSingleton(); 25 | //services.AddSingleton(); 26 | 27 | // the clientId/clientIp resolvers use it. 28 | services.AddSingleton(); 29 | // configuration (resolvers, counter key builders) 30 | services.AddSingleton(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Extensions/ResourceOwnerPasswordValidator.cs: -------------------------------------------------------------------------------- 1 | using Blog.IdentityServer.Models; 2 | using IdentityServer4.Validation; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Security.Claims; 7 | using System.Threading.Tasks; 8 | 9 | namespace Blog.IdentityServer.Extensions 10 | { 11 | public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator 12 | { 13 | public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) 14 | { 15 | try 16 | { 17 | var userName = context.UserName; 18 | var password = context.Password; 19 | 20 | //验证用户,这么可以到数据库里面验证用户名和密码是否正确 21 | var claimList = await ValidateUserAsync(userName, password); 22 | 23 | // 验证账号 24 | context.Result = new GrantValidationResult 25 | ( 26 | subject: userName, 27 | authenticationMethod: "custom", 28 | claims: claimList.ToArray() 29 | ); 30 | } 31 | catch (Exception ex) 32 | { 33 | //验证异常结果 34 | context.Result = new GrantValidationResult() 35 | { 36 | IsError = true, 37 | Error = ex.Message 38 | }; 39 | } 40 | } 41 | 42 | /// 43 | /// 验证用户 44 | /// 45 | /// 46 | /// 47 | /// 48 | private async Task> ValidateUserAsync(string loginName, string password) 49 | { 50 | var user = new ApplicationUser(); 51 | 52 | await Task.Run(() => 53 | { 54 | // TODO 55 | }); 56 | 57 | if (user == null) 58 | throw new Exception("登录失败,用户名和密码不正确"); 59 | 60 | return new List() 61 | { 62 | new Claim(ClaimTypes.Name, $"{loginName}"), 63 | }; 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Helper/GetNetData.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Net; 3 | using System.Text; 4 | 5 | namespace Blog.Core.Common.Helper 6 | { 7 | public class GetNetData 8 | { 9 | public static string Get(string serviceAddress) 10 | { 11 | 12 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress); 13 | request.Method = "GET"; 14 | request.ContentType = "text/html;charset=UTF-8"; 15 | HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 16 | Stream myResponseStream = response.GetResponseStream(); 17 | StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); 18 | string retString = myStreamReader.ReadToEnd(); 19 | myStreamReader.Close(); 20 | myResponseStream.Close(); 21 | 22 | return retString; 23 | } 24 | 25 | public static string Post(string serviceAddress) 26 | { 27 | 28 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress); 29 | 30 | request.Method = "POST"; 31 | request.ContentType = "application/json"; 32 | string strContent = @"{ ""mmmm"": ""89e"",""nnnnnn"": ""0101943"",""kkkkkkk"": ""e8sodijf9""}"; 33 | using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream())) 34 | { 35 | dataStream.Write(strContent); 36 | dataStream.Close(); 37 | } 38 | HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 39 | string encoding = response.ContentEncoding; 40 | if (encoding == null || encoding.Length < 1) 41 | { 42 | encoding = "UTF-8"; //默认编码 43 | } 44 | StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding)); 45 | string retString = reader.ReadToEnd(); 46 | 47 | return retString; 48 | 49 | //解析josn 50 | //JObject jo = JObject.Parse(retString); 51 | //Response.Write(jo["message"]["mmmm"].ToString()); 52 | 53 | } 54 | } 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Helper/HtmlHelper.cs: -------------------------------------------------------------------------------- 1 | namespace Blog.Core.Common.Helper 2 | { 3 | public static class HtmlHelper 4 | { 5 | #region 去除富文本中的HTML标签 6 | /// 7 | /// 去除富文本中的HTML标签 8 | /// 9 | /// 10 | /// 11 | /// 12 | public static string ReplaceHtmlTag(string html, int length = 0) 13 | { 14 | string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>", ""); 15 | strText = System.Text.RegularExpressions.Regex.Replace(strText, "&[^;]+;", ""); 16 | 17 | if (length > 0 && strText.Length > length) 18 | return strText.Substring(0, length); 19 | 20 | return strText; 21 | } 22 | #endregion 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Helper/SerializeHelper.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System.Text; 3 | 4 | namespace Blog.Core.Common.Helper 5 | { 6 | public class SerializeHelper 7 | { 8 | /// 9 | /// 序列化 10 | /// 11 | /// 12 | /// 13 | public static byte[] Serialize(object item) 14 | { 15 | var jsonString = JsonConvert.SerializeObject(item); 16 | 17 | return Encoding.UTF8.GetBytes(jsonString); 18 | } 19 | /// 20 | /// 反序列化 21 | /// 22 | /// 23 | /// 24 | /// 25 | public static TEntity Deserialize(byte[] value) 26 | { 27 | if (value == null) 28 | { 29 | return default(TEntity); 30 | } 31 | var jsonString = Encoding.UTF8.GetString(value); 32 | return JsonConvert.DeserializeObject(jsonString); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Helper/UnicodeHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using System.Text.RegularExpressions; 4 | 5 | namespace Blog.Core.Common.Helper 6 | { 7 | public static class UnicodeHelper 8 | { 9 | /// 10 | /// 字符串转Unicode码 11 | /// 12 | /// The to unicode. 13 | /// Value. 14 | public static string StringToUnicode(string value) 15 | { 16 | byte[] bytes = Encoding.Unicode.GetBytes(value); 17 | StringBuilder stringBuilder = new StringBuilder(); 18 | for (int i = 0; i < bytes.Length; i += 2) 19 | { 20 | // 取两个字符,每个字符都是右对齐。 21 | stringBuilder.AppendFormat("u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0')); 22 | } 23 | return stringBuilder.ToString(); 24 | } 25 | 26 | /// 27 | /// Unicode转字符串 28 | /// 29 | /// The to string. 30 | /// Unicode. 31 | public static string UnicodeToString(string unicode) 32 | { 33 | unicode = unicode.Replace("%", "\\"); 34 | 35 | return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace( 36 | unicode, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16))); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Blog.IdentityServer/InMemoryConfig.cs: -------------------------------------------------------------------------------- 1 | using IdentityServer4.Models; 2 | using IdentityServer4.Test; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace Blog.IdentityServer 9 | { 10 | public static class InMemoryConfig 11 | { 12 | // 这个 Authorization Server 保护了哪些 API (资源) 13 | public static IEnumerable GetApiResources() 14 | { 15 | return new[] 16 | { 17 | new ApiResource("blog.core.api", "Blog.Core API") 18 | }; 19 | } 20 | // 哪些客户端 Client(应用) 可以使用这个 Authorization Server 21 | public static IEnumerable GetClients() 22 | { 23 | return new[] 24 | { 25 | new Client 26 | { 27 | ClientId = "blogvuejs",//定义客户端 Id 28 | ClientSecrets = new [] { new Secret("secret".Sha256()) },//Client用来获取token 29 | AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,//这里使用的是通过用户名密码和ClientCredentials来换取token的方式. ClientCredentials允许Client只使用ClientSecrets来获取token. 这比较适合那种没有用户参与的api动作 30 | AllowedScopes = new [] { "blog.core.api" }// 允许访问的 API 资源 31 | } 32 | }; 33 | } 34 | // 指定可以使用 Authorization Server 授权的 Users(用户) 35 | public static IEnumerable Users() 36 | { 37 | return new[] 38 | { 39 | new TestUser 40 | { 41 | SubjectId = "1", 42 | Username = "laozhang", 43 | Password = "laozhang" 44 | } 45 | }; 46 | } 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Blog.IdentityServer/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 ansonzhang 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/ApplicationRole.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Identity; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace Blog.IdentityServer.Models 6 | { 7 | // Add profile data for application roles by adding properties to the ApplicationRole class 8 | public class ApplicationRole : IdentityRole 9 | { 10 | 11 | public bool IsDeleted { get; set; } 12 | public string Description { get; set; } 13 | /// 14 | ///排序 15 | /// 16 | public int OrderSort { get; set; } 17 | /// 18 | /// 是否激活 19 | /// 20 | public bool Enabled { get; set; } 21 | /// 22 | /// 创建ID 23 | /// 24 | public int? CreateId { get; set; } 25 | /// 26 | /// 创建者 27 | /// 28 | public string CreateBy { get; set; } 29 | /// 30 | /// 创建时间 31 | /// 32 | public DateTime? CreateTime { get; set; } = DateTime.Now; 33 | /// 34 | /// 修改ID 35 | /// 36 | public int? ModifyId { get; set; } 37 | /// 38 | /// 修改者 39 | /// 40 | public string ModifyBy { get; set; } 41 | /// 42 | /// 修改时间 43 | /// 44 | public DateTime? ModifyTime { get; set; } = DateTime.Now; 45 | public ICollection UserRoles { get; set; } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/ApplicationUser.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Identity; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace Blog.IdentityServer.Models 6 | { 7 | // Add profile data for application users by adding properties to the ApplicationUser class 8 | public class ApplicationUser : IdentityUser 9 | { 10 | 11 | public string LoginName { get; set; } 12 | 13 | public string RealName { get; set; } 14 | 15 | public int sex { get; set; } = 0; 16 | 17 | public int age { get; set; } 18 | 19 | public DateTime birth { get; set; } = DateTime.Now; 20 | 21 | public string addr { get; set; } 22 | public string FirstQuestion { get; set; } 23 | public string SecondQuestion { get; set; } 24 | 25 | public bool tdIsDelete { get; set; } 26 | 27 | public ICollection UserRoles { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/ApplicationUserRole.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Identity; 2 | 3 | namespace Blog.IdentityServer.Models 4 | { 5 | public class ApplicationUserRole : IdentityUserRole 6 | { 7 | public virtual ApplicationUser User { get; set; } 8 | public virtual ApplicationRole Role { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/Bak/Role.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Blog.IdentityServer.Models 4 | { 5 | /// 6 | /// 角色表 7 | /// 8 | public class Role : RootEntity 9 | { 10 | public Role() 11 | { 12 | OrderSort = 1; 13 | CreateTime = DateTime.Now; 14 | ModifyTime = DateTime.Now; 15 | IsDeleted = false; 16 | } 17 | public Role(string name) 18 | { 19 | Name = name; 20 | Description = ""; 21 | OrderSort = 1; 22 | Enabled = true; 23 | CreateTime = DateTime.Now; 24 | ModifyTime = DateTime.Now; 25 | 26 | } 27 | 28 | /// 29 | ///获取或设置是否禁用,逻辑上的删除,非物理删除 30 | /// 31 | public bool? IsDeleted { get; set; } 32 | /// 33 | /// 角色名 34 | /// 35 | public string Name { get; set; } 36 | /// 37 | ///描述 38 | /// 39 | public string Description { get; set; } 40 | /// 41 | ///排序 42 | /// 43 | public int OrderSort { get; set; } 44 | /// 45 | /// 是否激活 46 | /// 47 | public bool Enabled { get; set; } 48 | /// 49 | /// 创建ID 50 | /// 51 | public int? CreateId { get; set; } 52 | /// 53 | /// 创建者 54 | /// 55 | public string CreateBy { get; set; } 56 | /// 57 | /// 创建时间 58 | /// 59 | public DateTime? CreateTime { get; set; } = DateTime.Now; 60 | /// 61 | /// 修改ID 62 | /// 63 | public int? ModifyId { get; set; } 64 | /// 65 | /// 修改者 66 | /// 67 | public string ModifyBy { get; set; } 68 | /// 69 | /// 修改时间 70 | /// 71 | public DateTime? ModifyTime { get; set; } = DateTime.Now; 72 | 73 | 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/Bak/RootEntity.cs: -------------------------------------------------------------------------------- 1 | namespace Blog.IdentityServer.Models 2 | { 3 | public class RootEntity 4 | { 5 | /// 6 | /// ID 7 | /// 8 | public int Id { get; set; } 9 | 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/Bak/UserRole.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Blog.IdentityServer.Models 4 | { 5 | /// 6 | /// 用户跟角色关联表 7 | /// 8 | public class UserRole : RootEntity 9 | { 10 | public UserRole() { } 11 | 12 | public UserRole(int uid, int rid) 13 | { 14 | UserId = uid; 15 | RoleId = rid; 16 | CreateTime = DateTime.Now; 17 | IsDeleted = false; 18 | CreateId = uid; 19 | CreateTime = DateTime.Now; 20 | } 21 | 22 | 23 | 24 | /// 25 | ///获取或设置是否禁用,逻辑上的删除,非物理删除 26 | /// 27 | public bool? IsDeleted { get; set; } 28 | /// 29 | /// 用户ID 30 | /// 31 | public int UserId { get; set; } 32 | /// 33 | /// 角色ID 34 | /// 35 | public int RoleId { get; set; } 36 | /// 37 | /// 创建ID 38 | /// 39 | public int? CreateId { get; set; } 40 | /// 41 | /// 创建者 42 | /// 43 | public string CreateBy { get; set; } 44 | /// 45 | /// 创建时间 46 | /// 47 | public DateTime? CreateTime { get; set; } 48 | /// 49 | /// 修改ID 50 | /// 51 | public int? ModifyId { get; set; } 52 | /// 53 | /// 修改者 54 | /// 55 | public string ModifyBy { get; set; } 56 | /// 57 | /// 修改时间 58 | /// 59 | public DateTime? ModifyTime { get; set; } 60 | 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/Dtos/MessageModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace Blog.IdentityServer.Models 7 | { 8 | /// 9 | /// 通用返回信息类 10 | /// 11 | public class MessageModel 12 | { 13 | /// 14 | /// 状态码 15 | /// 16 | public int status { get; set; } = 200; 17 | /// 18 | /// 操作是否成功 19 | /// 20 | public bool success { get; set; } = false; 21 | /// 22 | /// 返回信息 23 | /// 24 | public string msg { get; set; } = "服务器异常"; 25 | /// 26 | /// 返回数据集合 27 | /// 28 | public T response { get; set; } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Models/ViewModel/AccessApiDateView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace Blog.IdentityServer.Models.ViewModel 7 | { 8 | public class AccessApiDateView 9 | { 10 | public int today { get; set; } 11 | public string[] columns { get; set; } 12 | public List rows { get; set; } 13 | } 14 | public class ApiDate 15 | { 16 | public string date { get; set; } 17 | public int count { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | FileSystem 9 | FileSystem 10 | Release 11 | Any CPU 12 | 13 | True 14 | False 15 | 1db65298-136c-41bc-b2cd-ba5bba3d7a23 16 | bin\Release\netcoreapp3.0\publish\ 17 | False 18 | 19 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Blog.IdentityServer": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "launchUrl": "http://localhost:5004", 7 | "environmentVariables": { 8 | "ASPNETCORE_ENVIRONMENT": "Development" 9 | } 10 | }, 11 | "Docker": { 12 | "commandName": "Docker", 13 | "launchBrowser": true, 14 | "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/", 15 | "publishAllPorts": true 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/AccessDenied.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Access denied"; 3 | } 4 |
5 |
6 |
7 |

@ViewData["Title"]

8 |
9 |

You do not have access to this resource.

10 |

11 | @Html.Raw(ViewBag.ErrorMsg) 12 |

13 |
14 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/ConfirmEmail.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Confirm email"; 3 | } 4 | 5 |

@ViewData["Title"]

6 |
7 |

8 | Thank you for confirming your email. 9 |

10 |
11 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/Edit.cshtml: -------------------------------------------------------------------------------- 1 | @model EditViewModel 2 | @{ 3 | ViewData["Title"] = "Edit"; 4 | 5 | } 6 | 7 |

@ViewData["Title"]

8 | 9 |
10 |
11 | 12 | @{ 13 | foreach (var item in Model.Claims) 14 | { 15 |

@item

16 | } 17 | 18 | } 19 |
20 |

Create a new account.

21 |
22 | 23 |
24 | 25 | 26 | 27 |
28 |
29 | 30 | 31 | 32 |
33 |
34 | 35 | 36 | 37 |
38 |
39 | 40 | 41 | 42 |
43 |
44 | 45 | 46 | 47 |
48 | 49 | 50 |
51 |
52 |
53 | 54 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/ForgotPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ForgotPasswordViewModel 2 | @{ 3 | ViewData["Title"] = "Forgot your password?"; 4 | } 5 | 6 |

@ViewData["Title"]

7 |

Enter your email.

8 |
9 |
10 |
11 | 12 |
13 |
14 | 15 | 16 | 17 |
18 | 请填写注册时自定义的答案,两个都需要填写 19 |
20 | 如果注册时未填写,暂不支持找回密码,请留空并点击Submit,在下一页的link中,提交人工处理找回密码。 21 |
22 | 23 | 24 | 25 |
26 |
27 | 28 | 29 | 30 |
31 | 32 |
33 |
34 |
35 | 36 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/ForgotPasswordConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Forgot password confirmation"; 3 | } 4 | 5 |

@ViewData["Title"]

6 |

7 | @Html.Raw(ViewBag.ResetPassword) 8 |

9 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/LoggedOut.cshtml: -------------------------------------------------------------------------------- 1 | @model LoggedOutViewModel 2 | 3 | @{ 4 | // set this so the layout rendering sees an anonymous user 5 | ViewData["signed-out"] = true; 6 | } 7 | 8 | 34 | 35 | @section scripts 36 | { 37 | @if (Model.AutomaticRedirectAfterSignOut) 38 | { 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/Logout.cshtml: -------------------------------------------------------------------------------- 1 | @model LogoutViewModel 2 | 3 |
4 | 7 | 8 |
9 |
10 |

Would you like to logout of IdentityServer?

11 |
12 | 13 |
14 |
15 | 16 |
17 |
18 |
19 |
20 |
21 |
-------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/My.cshtml: -------------------------------------------------------------------------------- 1 | @model EditViewModel 2 | @{ 3 | ViewData["Title"] = "个人中心"; 4 | 5 | } 6 | 7 |

@ViewData["Title"]

8 | 9 |
10 |
11 | 12 |
13 |

Create a new account.

14 |
15 | 16 |
17 | 18 | 19 | 20 |
21 |
22 | 23 | 24 | 25 |
26 |
27 | 28 | 29 | 30 |
31 |
32 | 33 | 34 | 35 |
36 |
37 | 38 | 39 | 40 |
41 | 42 | 43 |
44 |
45 |
46 | 47 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/ResetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordViewModel 2 | @{ 3 | ViewData["Title"] = "Reset password"; 4 | } 5 | 6 |

@ViewData["Title"]

7 |

Reset your password.

8 |
9 |
10 |
11 | 12 |
13 | 14 |
15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 |
24 |
25 | 26 | 27 | 28 |
29 |
30 | 31 | 32 | 33 |
34 |
35 | 36 | 37 | 38 |
39 | 40 |
41 |
42 |
43 | 44 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/ResetPasswordConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Reset password confirmation"; 3 | } 4 | 5 |

@ViewData["Title"]

6 |

7 | Your password has been reset. Please click here to log in. 8 |

9 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/RoleEdit.cshtml: -------------------------------------------------------------------------------- 1 | @model RoleEditViewModel 2 | @{ 3 | ViewData["Title"] = "Edit"; 4 | } 5 | 6 |

@ViewData["Title"]

7 | 8 |
9 |
10 | 11 |
12 |

Create a new account.

13 |
14 | 15 |
16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 |
24 |
25 |
26 | 27 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Account/RoleRegister.cshtml: -------------------------------------------------------------------------------- 1 | @model RoleRegisterViewModel 2 | @{ 3 | ViewData["Title"] = "Register"; 4 | } 5 | 6 |

@ViewData["Title"]

7 | 8 |
9 |
10 | 11 |
12 |

Create a new account.

13 |
14 |
15 | 16 | 17 | 18 |
19 | 20 | 21 |
22 |
23 |
24 | 25 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Device/Success.cshtml: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Success

4 |

You have successfully authorized the device

5 |
6 |
-------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Device/UserCodeCapture.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | 3 |
4 |
5 |

User Code

6 |

Please enter the code displayed on your device.

7 |
8 | 9 | 10 | 11 |
12 |
13 |
14 |
15 | 16 | 17 |
18 | 19 | 20 |
21 |
22 |
23 |
-------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Diagnostics/Index.cshtml: -------------------------------------------------------------------------------- 1 | @model DiagnosticsViewModel 2 | 3 |

Authentication cookie

4 | 5 |

Claims

6 |
7 | @foreach (var claim in Model.AuthenticateResult.Principal.Claims) 8 | { 9 |
@claim.Type
10 |
@claim.Value
11 | } 12 |
13 | 14 |

Properties

15 |
16 | @foreach (var prop in Model.AuthenticateResult.Properties.Items) 17 | { 18 |
@prop.Key
19 |
@prop.Value
20 | } 21 |
22 | 23 | @if (Model.Clients.Any()) 24 | { 25 |

Clients

26 |
    27 | @foreach (var client in Model.Clients) 28 | { 29 |
  • @client
  • 30 | } 31 |
32 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model ErrorViewModel 2 | 3 | @{ 4 | var error = Model?.Error?.Error; 5 | var errorDescription = Model?.Error?.ErrorDescription; 6 | var request_id = Model?.Error?.RequestId; 7 | } 8 | 9 |
10 | 13 | 14 |
15 |
16 |
17 | Sorry, there was an error 18 | 19 | @if (error != null) 20 | { 21 | 22 | 23 | : @error 24 | 25 | 26 | 27 | if (errorDescription != null) 28 | { 29 |
@errorDescription
30 | } 31 | } 32 |
33 | 34 | @if (request_id != null) 35 | { 36 |
Request Id: @request_id
37 | } 38 |
39 |
40 |
41 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Shared/Redirect.cshtml: -------------------------------------------------------------------------------- 1 | @model RedirectViewModel 2 | 3 |

You are now being returned to the application.

4 |

Once complete, you may close this tab

5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Shared/_ScopeListItem.cshtml: -------------------------------------------------------------------------------- 1 | @model ScopeViewModel 2 | 3 |
  • 4 | 24 | @if (Model.Required) 25 | { 26 | (required) 27 | } 28 | @if (Model.Description != null) 29 | { 30 | 33 | } 34 |
  • -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/Shared/_ValidationSummary.cshtml: -------------------------------------------------------------------------------- 1 | @if (ViewContext.ModelState.IsValid == false) 2 | { 3 |
    4 | Error 5 |
    6 |
    7 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using IdentityServer4.Quickstart.UI 2 | @using IdentityServer4.Quickstart.UI.Device 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Blog.IdentityServer/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "Debug": { 5 | "LogLevel": { 6 | "Default": "Warning" 7 | } 8 | }, 9 | "Console": { 10 | "LogLevel": { 11 | "Default": "Warning", 12 | "Microsoft.Hosting.Lifetime": "Debug" 13 | } 14 | } 15 | }, 16 | "ConnectionStrings": { 17 | "IsMysql": true,//默认开启mysql 18 | "DefaultConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=BlogIdpPro;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", 19 | "DefaultConnection_file": "c:\\my-file\\dbCountPsw1_ldpxx.txt" 20 | }, 21 | "Certificates": { 22 | "Path": "Certificates\\IS4.pfx", 23 | "Password": "anson7" 24 | }, 25 | "StartUp": { 26 | "IsOnline": false, 27 | "OnlinePath": "https://ids.neters.club" 28 | }, 29 | "IpRateLimiting": { 30 | "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each 31 | "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter 32 | "RealIpHeader": "X-Real-IP", 33 | "ClientIdHeader": "X-ClientId", 34 | "IpWhitelist": [], //白名单 35 | "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], 36 | "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], 37 | "QuotaExceededResponse": { 38 | "Content": "{{\"status\":429,\"msg\":\"访问过于频繁,请一分钟后重试\",\"success\":false}}", 39 | "ContentType": "application/json", 40 | "StatusCode": 429 41 | }, 42 | "HttpStatusCode": 429, //返回状态码 43 | "GeneralRules": [ //api规则,结尾一定要带* 44 | { 45 | "Endpoint": "*:/account/register*", 46 | "Period": "1m", 47 | "Limit": 8 48 | }, 49 | { 50 | "Endpoint": "*:/oauth2/authorize*", 51 | "Period": "1m", 52 | "Limit": 10 53 | }, 54 | { 55 | "Endpoint": "*/api/*", 56 | "Period": "1s", 57 | "Limit": 1 58 | } 59 | ] 60 | 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Blog.IdentityServer/tempkey.jwk: -------------------------------------------------------------------------------- 1 | {"alg":"RS256","d":"HwqpgH1B1efVFfOh8siXQln2Hc3a5jwNv8iO34ApQ2kIMpirKhvuYbgZfIlroPDEPObOLCXgZWbrQgRi-OkoAPgPbn9vkemT0_au9ZVw6aocDR9rt6AguTrSE68cBz5Qx2oarJ8_TAAqNtByAQOUdll2S0OuBRR2hBfdQKI-eemtoMGi95PV27AeJ4U-35iGvrIC665_ypvbRRymjXOup3hWv0Zh1o5gta9isO2mhBG4K1khGqF_XaYDYQ7t1C02Fj9WrEyGdKta9MgtAnagauD51eQsw2m7yknbfAZEd6a2Ck_knLLTzpyDqkF53qXpi53Z689tuBsTyHML_px3cQ","dp":"mzRXEgwfQ0usqs6UJFKKZPdckFdxsWq38iMrpauELgRON2RZlDEa2Ie_BejGC98TwgOnxP3Lh794BFxS11g0-JDQAyhdTvvj-XGJixeeWTdc-azdDumVS3lh-GTv0KoCJ9IuRytrAbjkeIezQ1z5z2sMq0YZlpiWwErsM_jdUo8","dq":"UyQcmL9XkA3Wt3uLQLb4ZMCgTIYk92wfwudU1XvKsBaJubRkdlph9-he4stqWU6sNoFChcrmtWW4fTlARiIbBDYPCKGrCxq0DwXNe3NzF4R7T8s5Ft_hxxGTfWJQ6Ba9G1KaRyKnw98Hu7RqYWyYrm-RyfqEYNu_nA7QxtvBokk","e":"AQAB","kid":"039695D7F0DC6503E128F4FAAB3585B9","kty":"RSA","n":"sSYWLw2EIKwo97ky4R2PW5ouXKT5wqEgGMA3G1pX_7HKlJKKoNaMTB1_KsarQRnihdGzj2HrB5BggAlieEo1MPRT9rOKVDMhvVvRjLcd2edWvi6-FXxlgL9tYA9UlVGWu1Dr6K5SG0X066PRqlhl31GDcvsf2Yjzy-PaYeUNM0gDBfwX6Sg-NViNUQaw4xjuOM65lFnoijEdDEl8MuCJdXB_XICUeXKpfdJbbEW2ytW6jmUkKS4oOHteViFeIsp-TFZY2K8aRlasNiI8rKOdwiFIV-h92TocZ3-KD0nlCmJzXDMnRl8mYqfmq6BCELUdutxTGlNgO-d8_4mip4JsiQ","p":"xNqUonYhPcV88q8I2R25ooTLyKtGSuw-WceZCAv6oxKBhFw3bsoL6Juvgjxk6jYH9lN4lsLM88rT9ZPcXbuj8116W_dDQMj3T8TMriTRiV6vV5kt9gjtzDg_8NBxiyJaYz0fiqXlEEFFQUkIOYMa1ITwAPcIJMC2w1x3g9jyHCM","q":"5l_Z3e02rKFNQGc-WMcUbpXETzZDmX2WnF6jiCrzLvzb8DhvpIy13IYc9HcdiN1hgwZgGnfjQXdA1_izDyKw-CzjXkJ0FKucLoSz8fuRdUeu028leO6PNOYYJaR1AfHE4dIU-StplEU5OLeiX8GXm0zDcqWgcUJ2Rz7fX8XneWM","qi":"rw8bjm_5cp7-ezVUE01Lobi_1h1U8xzMJ8QDt3FycdH8mitCf0pTjChfI_FGzcbWXOjq5jFsHv7DyazkURtKD7n3dsKGiq95-ktNpGMwQFIDyVQD2cuKn0tj6Hgss0YfZA_VnG4Fp5a6u1gfLf0mrnPYQf9OUo4mmUO0ONUYRoY"} -------------------------------------------------------------------------------- /Blog.IdentityServer/tempkey.rsa: -------------------------------------------------------------------------------- 1 | {"KeyId":"rNruJfc3LCx8qbpod8foCA","Parameters":{"D":"V+uOk1wEljBVqO+h+GfgR214tedtVf7rkLArWvAKTdQkBpTxn9xlEqFsCv//FZoVIXyXK3vXgPt/pXZJ6A42muod2cEYblgNSi/noiKLaQGA/PCA29TM5qqKdfU3pey0qKZr6elPzRuDc2MkbGsLkfXahqK9f4QrDHBZETXjx/7H7N6e0N2T3wJ77EAPYAYRr2IYXOuzfhreU9RzHRfQOketB7kIvacBIaiiheQtPBS60aZm5DruC3LTMpWISNNOCKevFWoS6lQixpCfg/K/Y8QDNnxhafasNpY6ZRNUxnqi8BJ5Dlqo68otOo+JSnURO4x/GhNb1MTMRoay7c2D3Q==","DP":"1SnnkdSmvtG9vE+rsCB54uQTuQpNJvopvVNuB+JUFjGiRHHoe8eMh9AEqDI0BsMoTFGz7bePTapFUOFpRTAQfgZPrTFhvuPCOOONK2ceaUC23yYqa3jdWuwIVDzpanifvz5iTHF1PA65NxXfsF2cOK55G+2833jEHP3TF88dQDk=","DQ":"PriWuA/zvGvRyjWCCwDtNXhXiMyauCQscvy28eZVqB4tyfmN2BynOrWP9+YTmM54cwFvJ4TJBjcOx0AL/mzQGiK40+kcAGSh00AZ/rP8JWUlA1IKGSXuCcArYt/F3CAWwZqNw1EzMGvJ2in6uYPlq1HQDoL9Dp0v7uCS5fXLBrs=","Exponent":"AQAB","InverseQ":"8h9ojX//gM7Y1jbWrF+xOFJfsJDE27A9lpDwC0Vb21CosX1Q0F28iihyLapehKCuoh8+ho8EQhgEQIH+tYiZ1eUCisR3Jn6ZDR6+OQsgJB5hTSskhV7sND0M4yp9+zpEiIwSgG4ES4YVrjbgoxCEfIw1sSW3ZcXHkd3L0wHArOs=","Modulus":"7NtqboAxsXFdo5kc4wccRMxyp7i6cg3YEg4facNgvTwDRRMUtTCuFkXBZBD8R/MQZrmzaYx29sK1XlHNJ7SjoMA0kq77sKjU7kKBWkf5eIhnHKDmIHNCPQzcXOVsr53IIreYXsO66JQW7d/m6Glmr7DT8bOflp3FZEUh/v/1M7F7rcwoTvur1ry/viWPsLx5lekYClfYID1jtjmrC5Xt76CY9ZvcNZ981v8qPkVGhNaEyZBi7Pgm7zUt4iRSQSma5Bc/en+8/C0MxE67kwxxnD3HoCAM9GxlTtbG8XxtlHl3XuSO4sFVW4XTAAdUGcbb3BuUWecNdlKcFO8AmxGJoQ==","P":"8sods2xmYT3BdIA9gM96eK+AR+NpPDzLn4gIPJSLtBIeYzcZ/Xka9WVVlVwCCHeogs/Tk+uy7fq1v/+wcblx8Pl+fncfskpJaaWWCTzRbb75CoEjFXWMYFr9PiZ3FxdFCASQDlMv/FDj0ZVJr8w7rmXo4B8lqZIR//kYbH8EW28=","Q":"+b6qUwFpidC4QDH2dTqASz4HU/ok77Ks+e/CwjmC1H5TlqjRcTlONcwfgO0YIz73PC0D40FxewQrFryn5SK1by0DGuQ8L3rk21araldNFy3/ui4Hu7AqTSZrhitoEaMgXNhv1G7oDoreWzxowzW5xyiJ/5SsDMn9ezWkPaqAI+8="}} -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/css/fluhrq6tzzclqej-vdg-iuiadsnc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/css/fluhrq6tzzclqej-vdg-iuiadsnc.woff2 -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/css/showtip.css: -------------------------------------------------------------------------------- 1 | .alert { 2 | position: fixed !important; 3 | top: 200px !important; 4 | left: 50% !important; 5 | } 6 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin-top: 65px; 3 | } 4 | .navbar-header { 5 | position: relative; 6 | top: -4px; 7 | } 8 | .navbar-brand > .icon-banner { 9 | position: relative; 10 | top: -2px; 11 | display: inline; 12 | } 13 | .icon { 14 | position: relative; 15 | top: -3px; 16 | } 17 | .logged-out iframe { 18 | display: none; 19 | width: 0; 20 | height: 0; 21 | } 22 | .page-consent .client-logo { 23 | float: left; 24 | } 25 | .page-consent .client-logo img { 26 | width: 80px; 27 | height: 80px; 28 | } 29 | .page-consent .consent-buttons { 30 | margin-top: 25px; 31 | } 32 | .page-consent .consent-form .consent-scopecheck { 33 | display: inline-block; 34 | margin-right: 5px; 35 | } 36 | .page-consent .consent-form .consent-description { 37 | margin-left: 25px; 38 | } 39 | .page-consent .consent-form .consent-description label { 40 | font-weight: normal; 41 | } 42 | .page-consent .consent-form .consent-remember { 43 | padding-left: 16px; 44 | } 45 | .grants .page-header { 46 | margin-bottom: 10px; 47 | } 48 | .grants .grant { 49 | margin-top: 20px; 50 | padding-bottom: 20px; 51 | border-bottom: 1px solid lightgray; 52 | } 53 | .grants .grant img { 54 | width: 100px; 55 | height: 100px; 56 | } 57 | .grants .grant .clientname { 58 | font-size: 140%; 59 | font-weight: bold; 60 | } 61 | .grants .grant .granttype { 62 | font-size: 120%; 63 | font-weight: bold; 64 | } 65 | .grants .grant .created { 66 | font-size: 120%; 67 | font-weight: bold; 68 | } 69 | .grants .grant .expires { 70 | font-size: 120%; 71 | font-weight: bold; 72 | } 73 | .grants .grant li { 74 | list-style-type: none; 75 | display: inline; 76 | } 77 | .grants .grant li:after { 78 | content: ', '; 79 | } 80 | .grants .grant li:last-child:after { 81 | content: ''; 82 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{margin-top:65px;}.navbar-header{position:relative;top:-4px;}.navbar-brand>.icon-banner{position:relative;top:-2px;display:inline;}.icon{position:relative;top:-10px;}.logged-out iframe{display:none;width:0;height:0;}.page-consent .client-logo{float:left;}.page-consent .client-logo img{width:80px;height:80px;}.page-consent .consent-buttons{margin-top:25px;}.page-consent .consent-form .consent-scopecheck{display:inline-block;margin-right:5px;}.page-consent .consent-form .consent-description{margin-left:25px;}.page-consent .consent-form .consent-description label{font-weight:normal;}.page-consent .consent-form .consent-remember{padding-left:16px;}.grants .page-header{margin-bottom:10px;}.grants .grant{margin-top:20px;padding-bottom:20px;border-bottom:1px solid #d3d3d3;}.grants .grant img{width:100px;height:100px;}.grants .grant .clientname{font-size:140%;font-weight:bold;}.grants .grant .granttype{font-size:120%;font-weight:bold;}.grants .grant .created{font-size:120%;font-weight:bold;}.grants .grant .expires{font-size:120%;font-weight:bold;}.grants .grant li{list-style-type:none;display:inline;}.grants .grant li:after{content:', ';}.grants .grant li:last-child:after{content:'';} -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/favicon.ico -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/open-iconic.eot -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/open-iconic.otf -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/fonts/open-iconic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/fonts/open-iconic.woff -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/icon.jpg -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/icon.png -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/js/Role.js: -------------------------------------------------------------------------------- 1 | var Roleid = ''; 2 | 3 | $(".viewbtn").on("click", function () { 4 | Roleid = $(this).data('id'); 5 | 6 | }); 7 | $(".deletebutton").on("click", function () { 8 | if (Roleid) { 9 | $.post("/account/roledelete/" + Roleid, null, function () { 10 | history.go(0); 11 | ShowSuccess("删除成功!"); 12 | }) 13 | .error(function () { 14 | $('#DeleteRole').modal('hide'); 15 | ShowFailure("删除失败,无权限!"); 16 | }); 17 | 18 | 19 | 20 | } 21 | }); -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/js/User.js: -------------------------------------------------------------------------------- 1 | var userid = ''; 2 | 3 | $(".viewbtn").on("click", function () { 4 | userid = $(this).data('id'); 5 | 6 | }); 7 | $(".deletebutton").on("click", function () { 8 | if (userid) { 9 | $.post("/account/delete/" + userid, null, function () { 10 | history.go(0); 11 | ShowSuccess("删除成功!"); 12 | }) 13 | .error(function () { 14 | $('#DeleteUser').modal('hide'); 15 | ShowFailure("删除失败,无权限!"); 16 | }); 17 | 18 | 19 | 20 | } 21 | }); -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/js/showTip.js: -------------------------------------------------------------------------------- 1 | //tip是提示信息,type:'success'是成功信息,'danger'是失败信息,'info'是普通信息 2 | function ShowTip(tip, type) { 3 | var $tip = $('#tip'); 4 | if ($tip.length == 0) { 5 | $tip = $(''); 6 | $('body').append($tip); 7 | } 8 | $tip.stop(true).attr('class', 'alert alert-' + type).text(tip).css('margin-left', -$tip.outerWidth() / 2).fadeIn(500).delay(2000).fadeOut(500); 9 | } 10 | 11 | function ShowMsg(msg) { 12 | ShowTip(msg, 'info'); 13 | } 14 | 15 | function ShowSuccess(msg) { 16 | ShowTip(msg, 'success'); 17 | } 18 | 19 | function ShowFailure(msg) { 20 | ShowTip(msg, 'danger'); 21 | } 22 | 23 | function ShowWarn(msg, $focus, clear) { 24 | ShowTip(msg, 'warning'); 25 | if ($focus) $focus.focus(); 26 | if (clear) $focus.val(''); 27 | return false; 28 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/js/signin-redirect.js: -------------------------------------------------------------------------------- 1 | window.location.href = document.querySelector("meta[http-equiv=refresh]").getAttribute("data-url"); 2 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/js/signout-redirect.js: -------------------------------------------------------------------------------- 1 | window.addEventListener("load", function () { 2 | var a = document.querySelector("a.PostLogoutRedirectUri"); 3 | if (a) { 4 | window.location = a.href; 5 | } 6 | }); 7 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /Blog.IdentityServer/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 | "!LICENSE.txt", 15 | "gulpfile.js" 16 | ], 17 | "keywords": [ 18 | "jquery", 19 | "asp.net", 20 | "mvc", 21 | "validation", 22 | "unobtrusive" 23 | ], 24 | "authors": [ 25 | "Microsoft" 26 | ], 27 | "license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm", 28 | "repository": { 29 | "type": "git", 30 | "url": "git://github.com/aspnet/jquery-validation-unobtrusive.git" 31 | }, 32 | "dependencies": { 33 | "jquery-validation": ">=1.8", 34 | "jquery": ">=1.8" 35 | }, 36 | "_release": "3.2.6", 37 | "_resolution": { 38 | "type": "version", 39 | "tag": "v3.2.6", 40 | "commit": "47e82bc6cb86a05247f8c3846192228038572783" 41 | }, 42 | "_source": "https://github.com/aspnet/jquery-validation-unobtrusive.git", 43 | "_target": "3.2.6", 44 | "_originalSource": "jquery-validation-unobtrusive" 45 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) .NET Foundation. All rights reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use 4 | these files except in compliance with the License. You may obtain a copy of the 5 | License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software distributed 10 | under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 11 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 12 | specific language governing permissions and limitations under the License. 13 | -------------------------------------------------------------------------------- /Blog.IdentityServer/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 | "!LICENSE.txt", 15 | "gulpfile.js" 16 | ], 17 | "keywords": [ 18 | "jquery", 19 | "asp.net", 20 | "mvc", 21 | "validation", 22 | "unobtrusive" 23 | ], 24 | "authors": [ 25 | "Microsoft" 26 | ], 27 | "license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm", 28 | "repository": { 29 | "type": "git", 30 | "url": "git://github.com/aspnet/jquery-validation-unobtrusive.git" 31 | }, 32 | "dependencies": { 33 | "jquery-validation": ">=1.8", 34 | "jquery": ">=1.8" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Blog.IdentityServer/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": "https://github.com/jzaefferer/jquery-validation.git", 38 | "_target": "1.14.0", 39 | "_originalSource": "jquery-validation" 40 | } -------------------------------------------------------------------------------- /Blog.IdentityServer/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 | -------------------------------------------------------------------------------- /Blog.IdentityServer/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 | } 32 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation", 3 | "title": "jQuery Validation Plugin", 4 | "description": "Client-side form validation made easy", 5 | "version": "1.14.0", 6 | "homepage": "http://jqueryvalidation.org/", 7 | "license": "MIT", 8 | "author": { 9 | "name": "Jörn Zaefferer", 10 | "email": "joern.zaefferer@gmail.com", 11 | "url": "http://bassistance.de" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/jzaefferer/jquery-validation.git" 16 | }, 17 | "bugs": { 18 | "url": "https://github.com/jzaefferer/jquery-validation/issues" 19 | }, 20 | "licenses": [ 21 | { 22 | "type": "MIT", 23 | "url": "http://www.opensource.org/licenses/MIT" 24 | } 25 | ], 26 | "scripts": { 27 | "test": "grunt", 28 | "prepublish": "grunt" 29 | }, 30 | "files": [ 31 | "dist/localization/", 32 | "dist/additional-methods.js", 33 | "dist/jquery.validate.js" 34 | ], 35 | "main": "dist/jquery.validate.js", 36 | "dependencies": {}, 37 | "devDependencies": { 38 | "commitplease": "2.0.0", 39 | "grunt": "0.4.4", 40 | "grunt-contrib-compress": "0.7.0", 41 | "grunt-contrib-concat": "0.3.0", 42 | "grunt-contrib-copy": "0.5.0", 43 | "grunt-contrib-jshint": "^0.10.0", 44 | "grunt-contrib-qunit": "0.4.0", 45 | "grunt-contrib-uglify": "0.4.0", 46 | "grunt-contrib-watch": "0.6.0", 47 | "grunt-jscs": "1.0.0", 48 | "grunt-text-replace": "0.3.11" 49 | }, 50 | "keywords": [ 51 | "jquery", 52 | "jquery-plugin", 53 | "forms", 54 | "validation", 55 | "validate" 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/accept.js: -------------------------------------------------------------------------------- 1 | // Accept a value from a file input based on a required mimetype 2 | $.validator.addMethod("accept", function(value, element, param) { 3 | // Split mime on commas in case we have multiple types we can accept 4 | var typeParam = typeof param === "string" ? param.replace(/\s/g, "").replace(/,/g, "|") : "image/*", 5 | optionalValue = this.optional(element), 6 | i, file; 7 | 8 | // Element is optional 9 | if (optionalValue) { 10 | return optionalValue; 11 | } 12 | 13 | if ($(element).attr("type") === "file") { 14 | // If we are using a wildcard, make it regex friendly 15 | typeParam = typeParam.replace(/\*/g, ".*"); 16 | 17 | // Check if the element has a FileList before checking each file 18 | if (element.files && element.files.length) { 19 | for (i = 0; i < element.files.length; i++) { 20 | file = element.files[i]; 21 | 22 | // Grab the mimetype from the loaded file, verify it matches 23 | if (!file.type.match(new RegExp( "\\.?(" + typeParam + ")$", "i"))) { 24 | return false; 25 | } 26 | } 27 | } 28 | } 29 | 30 | // Either return true because we've validated each file, or because the 31 | // browser does not support element.files and the FileList feature 32 | return true; 33 | }, $.validator.format("Please enter a value with a valid mimetype.")); 34 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/additional.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function stripHtml(value) { 4 | // remove html tags and space chars 5 | return value.replace(/<.[^<>]*?>/g, " ").replace(/ | /gi, " ") 6 | // remove punctuation 7 | .replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g, ""); 8 | } 9 | 10 | $.validator.addMethod("maxWords", function(value, element, params) { 11 | return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params; 12 | }, $.validator.format("Please enter {0} words or less.")); 13 | 14 | $.validator.addMethod("minWords", function(value, element, params) { 15 | return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params; 16 | }, $.validator.format("Please enter at least {0} words.")); 17 | 18 | $.validator.addMethod("rangeWords", function(value, element, params) { 19 | var valueStripped = stripHtml(value), 20 | regex = /\b\w+\b/g; 21 | return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1]; 22 | }, $.validator.format("Please enter between {0} and {1} words.")); 23 | 24 | }()); 25 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/alphanumeric.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("alphanumeric", function(value, element) { 2 | return this.optional(element) || /^\w+$/i.test(value); 3 | }, "Letters, numbers, and underscores only please"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/bankaccountNL.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Dutch bank account numbers (not 'giro' numbers) have 9 digits 3 | * and pass the '11 check'. 4 | * We accept the notation with spaces, as that is common. 5 | * acceptable: 123456789 or 12 34 56 789 6 | */ 7 | $.validator.addMethod("bankaccountNL", function(value, element) { 8 | if (this.optional(element)) { 9 | return true; 10 | } 11 | if (!(/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(value))) { 12 | return false; 13 | } 14 | // now '11 check' 15 | var account = value.replace(/ /g, ""), // remove spaces 16 | sum = 0, 17 | len = account.length, 18 | pos, factor, digit; 19 | for ( pos = 0; pos < len; pos++ ) { 20 | factor = len - pos; 21 | digit = account.substring(pos, pos + 1); 22 | sum = sum + factor * digit; 23 | } 24 | return sum % 11 === 0; 25 | }, "Please specify a valid bank account number"); 26 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/bankorgiroaccountNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("bankorgiroaccountNL", function(value, element) { 2 | return this.optional(element) || 3 | ($.validator.methods.bankaccountNL.call(this, value, element)) || 4 | ($.validator.methods.giroaccountNL.call(this, value, element)); 5 | }, "Please specify a valid bank or giro account number"); 6 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/bic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity. 3 | * 4 | * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional) 5 | * 6 | * BIC definition in detail: 7 | * - First 4 characters - bank code (only letters) 8 | * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters) 9 | * - Next 2 characters - location code (letters and digits) 10 | * a. shall not start with '0' or '1' 11 | * b. second character must be a letter ('O' is not allowed) or one of the following digits ('0' for test (therefore not allowed), '1' for passive participant and '2' for active participant) 12 | * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits) 13 | */ 14 | $.validator.addMethod("bic", function(value, element) { 15 | return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value ); 16 | }, "Please specify a valid BIC code"); 17 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/cpfBR.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number. 3 | * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation. 4 | */ 5 | $.validator.addMethod("cpfBR", function(value) { 6 | // Removing special characters from value 7 | value = value.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, ""); 8 | 9 | // Checking value to have 11 digits only 10 | if (value.length !== 11) { 11 | return false; 12 | } 13 | 14 | var sum = 0, 15 | firstCN, secondCN, checkResult, i; 16 | 17 | firstCN = parseInt(value.substring(9, 10), 10); 18 | secondCN = parseInt(value.substring(10, 11), 10); 19 | 20 | checkResult = function(sum, cn) { 21 | var result = (sum * 10) % 11; 22 | if ((result === 10) || (result === 11)) {result = 0;} 23 | return (result === cn); 24 | }; 25 | 26 | // Checking for dump data 27 | if (value === "" || 28 | value === "00000000000" || 29 | value === "11111111111" || 30 | value === "22222222222" || 31 | value === "33333333333" || 32 | value === "44444444444" || 33 | value === "55555555555" || 34 | value === "66666666666" || 35 | value === "77777777777" || 36 | value === "88888888888" || 37 | value === "99999999999" 38 | ) { 39 | return false; 40 | } 41 | 42 | // Step 1 - using first Check Number: 43 | for ( i = 1; i <= 9; i++ ) { 44 | sum = sum + parseInt(value.substring(i - 1, i), 10) * (11 - i); 45 | } 46 | 47 | // If first Check Number (CN) is valid, move to Step 2 - using second Check Number: 48 | if ( checkResult(sum, firstCN) ) { 49 | sum = 0; 50 | for ( i = 1; i <= 10; i++ ) { 51 | sum = sum + parseInt(value.substring(i - 1, i), 10) * (12 - i); 52 | } 53 | return checkResult(sum, secondCN); 54 | } 55 | return false; 56 | 57 | }, "Please specify a valid CPF number"); 58 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/creditcardtypes.js: -------------------------------------------------------------------------------- 1 | /* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator 2 | * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0 3 | * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings) 4 | */ 5 | $.validator.addMethod("creditcardtypes", function(value, element, param) { 6 | if (/[^0-9\-]+/.test(value)) { 7 | return false; 8 | } 9 | 10 | value = value.replace(/\D/g, ""); 11 | 12 | var validTypes = 0x0000; 13 | 14 | if (param.mastercard) { 15 | validTypes |= 0x0001; 16 | } 17 | if (param.visa) { 18 | validTypes |= 0x0002; 19 | } 20 | if (param.amex) { 21 | validTypes |= 0x0004; 22 | } 23 | if (param.dinersclub) { 24 | validTypes |= 0x0008; 25 | } 26 | if (param.enroute) { 27 | validTypes |= 0x0010; 28 | } 29 | if (param.discover) { 30 | validTypes |= 0x0020; 31 | } 32 | if (param.jcb) { 33 | validTypes |= 0x0040; 34 | } 35 | if (param.unknown) { 36 | validTypes |= 0x0080; 37 | } 38 | if (param.all) { 39 | validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080; 40 | } 41 | if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard 42 | return value.length === 16; 43 | } 44 | if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa 45 | return value.length === 16; 46 | } 47 | if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex 48 | return value.length === 15; 49 | } 50 | if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub 51 | return value.length === 14; 52 | } 53 | if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute 54 | return value.length === 15; 55 | } 56 | if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover 57 | return value.length === 16; 58 | } 59 | if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb 60 | return value.length === 16; 61 | } 62 | if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb 63 | return value.length === 15; 64 | } 65 | if (validTypes & 0x0080) { //unknown 66 | return true; 67 | } 68 | return false; 69 | }, "Please enter a valid credit card number."); 70 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/currency.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Validates currencies with any given symbols by @jameslouiz 3 | * Symbols can be optional or required. Symbols required by default 4 | * 5 | * Usage examples: 6 | * currency: ["£", false] - Use false for soft currency validation 7 | * currency: ["$", false] 8 | * currency: ["RM", false] - also works with text based symbols such as "RM" - Malaysia Ringgit etc 9 | * 10 | * 11 | * 12 | * Soft symbol checking 13 | * currencyInput: { 14 | * currency: ["$", false] 15 | * } 16 | * 17 | * Strict symbol checking (default) 18 | * currencyInput: { 19 | * currency: "$" 20 | * //OR 21 | * currency: ["$", true] 22 | * } 23 | * 24 | * Multiple Symbols 25 | * currencyInput: { 26 | * currency: "$,£,¢" 27 | * } 28 | */ 29 | $.validator.addMethod("currency", function(value, element, param) { 30 | var isParamString = typeof param === "string", 31 | symbol = isParamString ? param : param[0], 32 | soft = isParamString ? true : param[1], 33 | regex; 34 | 35 | symbol = symbol.replace(/,/g, ""); 36 | symbol = soft ? symbol + "]" : symbol + "]?"; 37 | regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$"; 38 | regex = new RegExp(regex); 39 | return this.optional(element) || regex.test(value); 40 | 41 | }, "Please specify a valid currency"); 42 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/dateFA.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("dateFA", function(value, element) { 2 | return this.optional(element) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(value); 3 | }, $.validator.messages.date); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/dateITA.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy. 3 | * 4 | * @example $.validator.methods.date("01/01/1900") 5 | * @result true 6 | * 7 | * @example $.validator.methods.date("01/13/1990") 8 | * @result false 9 | * 10 | * @example $.validator.methods.date("01.01.1900") 11 | * @result false 12 | * 13 | * @example 14 | * @desc Declares an optional input element whose value must be a valid date. 15 | * 16 | * @name $.validator.methods.dateITA 17 | * @type Boolean 18 | * @cat Plugins/Validate/Methods 19 | */ 20 | $.validator.addMethod("dateITA", function(value, element) { 21 | var check = false, 22 | re = /^\d{1,2}\/\d{1,2}\/\d{4}$/, 23 | adata, gg, mm, aaaa, xdata; 24 | if ( re.test(value)) { 25 | adata = value.split("/"); 26 | gg = parseInt(adata[0], 10); 27 | mm = parseInt(adata[1], 10); 28 | aaaa = parseInt(adata[2], 10); 29 | xdata = new Date(Date.UTC(aaaa, mm - 1, gg, 12, 0, 0, 0)); 30 | if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth () === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) { 31 | check = true; 32 | } else { 33 | check = false; 34 | } 35 | } else { 36 | check = false; 37 | } 38 | return this.optional(element) || check; 39 | }, $.validator.messages.date); 40 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/dateNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("dateNL", function(value, element) { 2 | return this.optional(element) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(value); 3 | }, $.validator.messages.date); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/extension.js: -------------------------------------------------------------------------------- 1 | // Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept 2 | $.validator.addMethod("extension", function(value, element, param) { 3 | param = typeof param === "string" ? param.replace(/,/g, "|") : "png|jpe?g|gif"; 4 | return this.optional(element) || value.match(new RegExp("\\.(" + param + ")$", "i")); 5 | }, $.validator.format("Please enter a value with a valid extension.")); 6 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/giroaccountNL.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dutch giro account numbers (not bank numbers) have max 7 digits 3 | */ 4 | $.validator.addMethod("giroaccountNL", function(value, element) { 5 | return this.optional(element) || /^[0-9]{1,7}$/.test(value); 6 | }, "Please specify a valid giro account number"); 7 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/integer.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("integer", function(value, element) { 2 | return this.optional(element) || /^-?\d+$/.test(value); 3 | }, "A positive or negative non-decimal number please"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/ipv4.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("ipv4", function(value, element) { 2 | return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value); 3 | }, "Please enter a valid IP v4 address."); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/ipv6.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("ipv6", function(value, element) { 2 | return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value); 3 | }, "Please enter a valid IP v6 address."); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/lettersonly.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("lettersonly", function(value, element) { 2 | return this.optional(element) || /^[a-z]+$/i.test(value); 3 | }, "Letters only please"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/letterswithbasicpunc.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("letterswithbasicpunc", function(value, element) { 2 | return this.optional(element) || /^[a-z\-.,()'"\s]+$/i.test(value); 3 | }, "Letters or punctuation only please"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/mobileNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("mobileNL", function(value, element) { 2 | return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(value); 3 | }, "Please specify a valid mobile number"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/mobileUK.js: -------------------------------------------------------------------------------- 1 | /* For UK phone functions, do the following server side processing: 2 | * Compare original input with this RegEx pattern: 3 | * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ 4 | * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' 5 | * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. 6 | * A number of very detailed GB telephone number RegEx patterns can also be found at: 7 | * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers 8 | */ 9 | $.validator.addMethod("mobileUK", function(phone_number, element) { 10 | phone_number = phone_number.replace(/\(|\)|\s+|-/g, ""); 11 | return this.optional(element) || phone_number.length > 9 && 12 | phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/); 13 | }, "Please specify a valid mobile number"); 14 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/nieES.js: -------------------------------------------------------------------------------- 1 | /* 2 | * The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain 3 | */ 4 | $.validator.addMethod( "nieES", function( value ) { 5 | "use strict"; 6 | 7 | value = value.toUpperCase(); 8 | 9 | // Basic format test 10 | if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) { 11 | return false; 12 | } 13 | 14 | // Test NIE 15 | //T 16 | if ( /^[T]{1}/.test( value ) ) { 17 | return ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) ); 18 | } 19 | 20 | //XYZ 21 | if ( /^[XYZ]{1}/.test( value ) ) { 22 | return ( 23 | value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt( 24 | value.replace( "X", "0" ) 25 | .replace( "Y", "1" ) 26 | .replace( "Z", "2" ) 27 | .substring( 0, 8 ) % 23 28 | ) 29 | ); 30 | } 31 | 32 | return false; 33 | 34 | }, "Please specify a valid NIE number." ); 35 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/nifES.js: -------------------------------------------------------------------------------- 1 | /* 2 | * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals 3 | */ 4 | $.validator.addMethod( "nifES", function( value ) { 5 | "use strict"; 6 | 7 | value = value.toUpperCase(); 8 | 9 | // Basic format test 10 | if ( !value.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)") ) { 11 | return false; 12 | } 13 | 14 | // Test NIF 15 | if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) { 16 | return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) ); 17 | } 18 | // Test specials NIF (starts with K, L or M) 19 | if ( /^[KLM]{1}/.test( value ) ) { 20 | return ( value[ 8 ] === String.fromCharCode( 64 ) ); 21 | } 22 | 23 | return false; 24 | 25 | }, "Please specify a valid NIF number." ); 26 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/notEqualTo.js: -------------------------------------------------------------------------------- 1 | jQuery.validator.addMethod( "notEqualTo", function( value, element, param ) { 2 | return this.optional(element) || !$.validator.methods.equalTo.call( this, value, element, param ); 3 | }, "Please enter a different value, values must not be the same." ); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/nowhitespace.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("nowhitespace", function(value, element) { 2 | return this.optional(element) || /^\S+$/i.test(value); 3 | }, "No white space please"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/pattern.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Return true if the field value matches the given format RegExp 3 | * 4 | * @example $.validator.methods.pattern("AR1004",element,/^AR\d{4}$/) 5 | * @result true 6 | * 7 | * @example $.validator.methods.pattern("BR1004",element,/^AR\d{4}$/) 8 | * @result false 9 | * 10 | * @name $.validator.methods.pattern 11 | * @type Boolean 12 | * @cat Plugins/Validate/Methods 13 | */ 14 | $.validator.addMethod("pattern", function(value, element, param) { 15 | if (this.optional(element)) { 16 | return true; 17 | } 18 | if (typeof param === "string") { 19 | param = new RegExp("^(?:" + param + ")$"); 20 | } 21 | return param.test(value); 22 | }, "Invalid format."); 23 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/phoneNL.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dutch phone numbers have 10 digits (or 11 and start with +31). 3 | */ 4 | $.validator.addMethod("phoneNL", function(value, element) { 5 | return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(value); 6 | }, "Please specify a valid phone number."); 7 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/phoneUK.js: -------------------------------------------------------------------------------- 1 | /* For UK phone functions, do the following server side processing: 2 | * Compare original input with this RegEx pattern: 3 | * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ 4 | * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' 5 | * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. 6 | * A number of very detailed GB telephone number RegEx patterns can also be found at: 7 | * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers 8 | */ 9 | $.validator.addMethod("phoneUK", function(phone_number, element) { 10 | phone_number = phone_number.replace(/\(|\)|\s+|-/g, ""); 11 | return this.optional(element) || phone_number.length > 9 && 12 | phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/); 13 | }, "Please specify a valid phone number"); 14 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/phoneUS.js: -------------------------------------------------------------------------------- 1 | /** 2 | * matches US phone number format 3 | * 4 | * where the area code may not start with 1 and the prefix may not start with 1 5 | * allows '-' or ' ' as a separator and allows parens around area code 6 | * some people may want to put a '1' in front of their number 7 | * 8 | * 1(212)-999-2345 or 9 | * 212 999 2344 or 10 | * 212-999-0983 11 | * 12 | * but not 13 | * 111-123-5434 14 | * and not 15 | * 212 123 4567 16 | */ 17 | $.validator.addMethod("phoneUS", function(phone_number, element) { 18 | phone_number = phone_number.replace(/\s+/g, ""); 19 | return this.optional(element) || phone_number.length > 9 && 20 | phone_number.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/); 21 | }, "Please specify a valid phone number"); 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/phonesUK.js: -------------------------------------------------------------------------------- 1 | /* For UK phone functions, do the following server side processing: 2 | * Compare original input with this RegEx pattern: 3 | * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ 4 | * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' 5 | * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. 6 | * A number of very detailed GB telephone number RegEx patterns can also be found at: 7 | * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers 8 | */ 9 | //Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers 10 | $.validator.addMethod("phonesUK", function(phone_number, element) { 11 | phone_number = phone_number.replace(/\(|\)|\s+|-/g, ""); 12 | return this.optional(element) || phone_number.length > 9 && 13 | phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/); 14 | }, "Please specify a valid uk phone number"); 15 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/postalCodeCA.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Matches a valid Canadian Postal Code 3 | * 4 | * @example jQuery.validator.methods.postalCodeCA( "H0H 0H0", element ) 5 | * @result true 6 | * 7 | * @example jQuery.validator.methods.postalCodeCA( "H0H0H0", element ) 8 | * @result false 9 | * 10 | * @name jQuery.validator.methods.postalCodeCA 11 | * @type Boolean 12 | * @cat Plugins/Validate/Methods 13 | */ 14 | $.validator.addMethod( "postalCodeCA", function( value, element ) { 15 | return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test( value ); 16 | }, "Please specify a valid postal code" ); 17 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/postalcodeBR.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Valida CEPs do brasileiros: 3 | * 4 | * Formatos aceitos: 5 | * 99999-999 6 | * 99.999-999 7 | * 99999999 8 | */ 9 | $.validator.addMethod("postalcodeBR", function(cep_value, element) { 10 | return this.optional(element) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value ); 11 | }, "Informe um CEP válido."); 12 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/postalcodeIT.js: -------------------------------------------------------------------------------- 1 | /* Matches Italian postcode (CAP) */ 2 | $.validator.addMethod("postalcodeIT", function(value, element) { 3 | return this.optional(element) || /^\d{5}$/.test(value); 4 | }, "Please specify a valid postal code"); 5 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/postalcodeNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("postalcodeNL", function(value, element) { 2 | return this.optional(element) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(value); 3 | }, "Please specify a valid postal code"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/postcodeUK.js: -------------------------------------------------------------------------------- 1 | // Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK) 2 | $.validator.addMethod("postcodeUK", function(value, element) { 3 | return this.optional(element) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(value); 4 | }, "Please specify a valid UK postcode"); 5 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/require_from_group.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Lets you say "at least X inputs that match selector Y must be filled." 3 | * 4 | * The end result is that neither of these inputs: 5 | * 6 | * 7 | * 8 | * 9 | * ...will validate unless at least one of them is filled. 10 | * 11 | * partnumber: {require_from_group: [1,".productinfo"]}, 12 | * description: {require_from_group: [1,".productinfo"]} 13 | * 14 | * options[0]: number of fields that must be filled in the group 15 | * options[1]: CSS selector that defines the group of conditionally required fields 16 | */ 17 | $.validator.addMethod("require_from_group", function(value, element, options) { 18 | var $fields = $(options[1], element.form), 19 | $fieldsFirst = $fields.eq(0), 20 | validator = $fieldsFirst.data("valid_req_grp") ? $fieldsFirst.data("valid_req_grp") : $.extend({}, this), 21 | isValid = $fields.filter(function() { 22 | return validator.elementValue(this); 23 | }).length >= options[0]; 24 | 25 | // Store the cloned validator for future validation 26 | $fieldsFirst.data("valid_req_grp", validator); 27 | 28 | // If element isn't being validated, run each require_from_group field's validation rules 29 | if (!$(element).data("being_validated")) { 30 | $fields.data("being_validated", true); 31 | $fields.each(function() { 32 | validator.element(this); 33 | }); 34 | $fields.data("being_validated", false); 35 | } 36 | return isValid; 37 | }, $.validator.format("Please fill at least {0} of these fields.")); 38 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/skip_or_fill_minimum.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Lets you say "either at least X inputs that match selector Y must be filled, 3 | * OR they must all be skipped (left blank)." 4 | * 5 | * The end result, is that none of these inputs: 6 | * 7 | * 8 | * 9 | * 10 | * 11 | * ...will validate unless either at least two of them are filled, 12 | * OR none of them are. 13 | * 14 | * partnumber: {skip_or_fill_minimum: [2,".productinfo"]}, 15 | * description: {skip_or_fill_minimum: [2,".productinfo"]}, 16 | * color: {skip_or_fill_minimum: [2,".productinfo"]} 17 | * 18 | * options[0]: number of fields that must be filled in the group 19 | * options[1]: CSS selector that defines the group of conditionally required fields 20 | * 21 | */ 22 | $.validator.addMethod("skip_or_fill_minimum", function(value, element, options) { 23 | var $fields = $(options[1], element.form), 24 | $fieldsFirst = $fields.eq(0), 25 | validator = $fieldsFirst.data("valid_skip") ? $fieldsFirst.data("valid_skip") : $.extend({}, this), 26 | numberFilled = $fields.filter(function() { 27 | return validator.elementValue(this); 28 | }).length, 29 | isValid = numberFilled === 0 || numberFilled >= options[0]; 30 | 31 | // Store the cloned validator for future validation 32 | $fieldsFirst.data("valid_skip", validator); 33 | 34 | // If element isn't being validated, run each skip_or_fill_minimum field's validation rules 35 | if (!$(element).data("being_validated")) { 36 | $fields.data("being_validated", true); 37 | $fields.each(function() { 38 | validator.element(this); 39 | }); 40 | $fields.data("being_validated", false); 41 | } 42 | return isValid; 43 | }, $.validator.format("Please either skip these fields or fill at least {0} of them.")); 44 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/strippedminlength.js: -------------------------------------------------------------------------------- 1 | // TODO check if value starts with <, otherwise don't try stripping anything 2 | $.validator.addMethod("strippedminlength", function(value, element, param) { 3 | return $(value).text().length >= param; 4 | }, $.validator.format("Please enter at least {0} characters")); 5 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/time.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("time", function(value, element) { 2 | return this.optional(element) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(value); 3 | }, "Please enter a valid time, between 00:00 and 23:59"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/time12h.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("time12h", function(value, element) { 2 | return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(value); 3 | }, "Please enter a valid time in 12-hour am/pm format"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/url2.js: -------------------------------------------------------------------------------- 1 | // same as url, but TLD is optional 2 | $.validator.addMethod("url2", function(value, element) { 3 | return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); 4 | }, $.validator.messages.url); 5 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/vinUS.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Return true, if the value is a valid vehicle identification number (VIN). 3 | * 4 | * Works with all kind of text inputs. 5 | * 6 | * @example 7 | * @desc Declares a required input element whose value must be a valid vehicle identification number. 8 | * 9 | * @name $.validator.methods.vinUS 10 | * @type Boolean 11 | * @cat Plugins/Validate/Methods 12 | */ 13 | $.validator.addMethod("vinUS", function(v) { 14 | if (v.length !== 17) { 15 | return false; 16 | } 17 | 18 | var LL = [ "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ], 19 | VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ], 20 | FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ], 21 | rs = 0, 22 | i, n, d, f, cd, cdv; 23 | 24 | for (i = 0; i < 17; i++) { 25 | f = FL[i]; 26 | d = v.slice(i, i + 1); 27 | if (i === 8) { 28 | cdv = d; 29 | } 30 | if (!isNaN(d)) { 31 | d *= f; 32 | } else { 33 | for (n = 0; n < LL.length; n++) { 34 | if (d.toUpperCase() === LL[n]) { 35 | d = VL[n]; 36 | d *= f; 37 | if (isNaN(cdv) && n === 8) { 38 | cdv = LL[n]; 39 | } 40 | break; 41 | } 42 | } 43 | } 44 | rs += d; 45 | } 46 | cd = rs % 11; 47 | if (cd === 10) { 48 | cd = "X"; 49 | } 50 | if (cd === cdv) { 51 | return true; 52 | } 53 | return false; 54 | }, "The specified vehicle identification number (VIN) is invalid."); 55 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/zipcodeUS.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("zipcodeUS", function(value, element) { 2 | return this.optional(element) || /^\d{5}(-\d{4})?$/.test(value); 3 | }, "The specified US ZIP Code is invalid"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/additional/ziprange.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod("ziprange", function(value, element) { 2 | return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value); 3 | }, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx"); 4 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/ajax.js: -------------------------------------------------------------------------------- 1 | // ajax mode: abort 2 | // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); 3 | // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 4 | 5 | var pendingRequests = {}, 6 | ajax; 7 | // Use a prefilter if available (1.5+) 8 | if ( $.ajaxPrefilter ) { 9 | $.ajaxPrefilter(function( settings, _, xhr ) { 10 | var port = settings.port; 11 | if ( settings.mode === "abort" ) { 12 | if ( pendingRequests[port] ) { 13 | pendingRequests[port].abort(); 14 | } 15 | pendingRequests[port] = xhr; 16 | } 17 | }); 18 | } else { 19 | // Proxy ajax 20 | ajax = $.ajax; 21 | $.ajax = function( settings ) { 22 | var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, 23 | port = ( "port" in settings ? settings : $.ajaxSettings ).port; 24 | if ( mode === "abort" ) { 25 | if ( pendingRequests[port] ) { 26 | pendingRequests[port].abort(); 27 | } 28 | pendingRequests[port] = ajax.apply(this, arguments); 29 | return pendingRequests[port]; 30 | } 31 | return ajax.apply(this, arguments); 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ar.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: AR (Arabic; العربية) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "هذا الحقل إلزامي", 7 | remote: "يرجى تصحيح هذا الحقل للمتابعة", 8 | email: "رجاء إدخال عنوان بريد إلكتروني صحيح", 9 | url: "رجاء إدخال عنوان موقع إلكتروني صحيح", 10 | date: "رجاء إدخال تاريخ صحيح", 11 | dateISO: "رجاء إدخال تاريخ صحيح (ISO)", 12 | number: "رجاء إدخال عدد بطريقة صحيحة", 13 | digits: "رجاء إدخال أرقام فقط", 14 | creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح", 15 | equalTo: "رجاء إدخال نفس القيمة", 16 | extension: "رجاء إدخال ملف بامتداد موافق عليه", 17 | maxlength: $.validator.format("الحد الأقصى لعدد الحروف هو {0}"), 18 | minlength: $.validator.format("الحد الأدنى لعدد الحروف هو {0}"), 19 | rangelength: $.validator.format("عدد الحروف يجب أن يكون بين {0} و {1}"), 20 | range: $.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"), 21 | max: $.validator.format("رجاء إدخال عدد أقل من أو يساوي (0}"), 22 | min: $.validator.format("رجاء إدخال عدد أكبر من أو يساوي (0}") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_bg.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: BG (Bulgarian; български език) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Полето е задължително.", 7 | remote: "Моля, въведете правилната стойност.", 8 | email: "Моля, въведете валиден email.", 9 | url: "Моля, въведете валидно URL.", 10 | date: "Моля, въведете валидна дата.", 11 | dateISO: "Моля, въведете валидна дата (ISO).", 12 | number: "Моля, въведете валиден номер.", 13 | digits: "Моля, въведете само цифри.", 14 | creditcard: "Моля, въведете валиден номер на кредитна карта.", 15 | equalTo: "Моля, въведете същата стойност отново.", 16 | extension: "Моля, въведете стойност с валидно разширение.", 17 | maxlength: $.validator.format("Моля, въведете повече от {0} символа."), 18 | minlength: $.validator.format("Моля, въведете поне {0} символа."), 19 | rangelength: $.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."), 20 | range: $.validator.format("Моля, въведете стойност между {0} и {1}."), 21 | max: $.validator.format("Моля, въведете стойност по-малка или равна на {0}."), 22 | min: $.validator.format("Моля, въведете стойност по-голяма или равна на {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_bn_BD.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: bn_BD (Bengali, Bangladesh) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "এই তথ্যটি আবশ্যক।", 7 | remote: "এই তথ্যটি ঠিক করুন।", 8 | email: "অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।", 9 | url: "অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।", 10 | date: "তারিখ সঠিক নয়।", 11 | dateISO: "অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।", 12 | number: "অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।", 13 | digits: "এখানে শুধু সংখ্যা ব্যবহার করা যাবে।", 14 | creditcard: "অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।", 15 | equalTo: "একই মান আবার লিখুন।", 16 | extension: "সঠিক ধরনের ফাইল আপলোড করুন।", 17 | maxlength: $.validator.format("{0}টির বেশি অক্ষর লেখা যাবে না।"), 18 | minlength: $.validator.format("{0}টির কম অক্ষর লেখা যাবে না।"), 19 | rangelength: $.validator.format("{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।"), 20 | range: $.validator.format("{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।"), 21 | max: $.validator.format("অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।"), 22 | min: $.validator.format("অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ca.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: CA (Catalan; català) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Aquest camp és obligatori.", 7 | remote: "Si us plau, omple aquest camp.", 8 | email: "Si us plau, escriu una adreça de correu-e vàlida", 9 | url: "Si us plau, escriu una URL vàlida.", 10 | date: "Si us plau, escriu una data vàlida.", 11 | dateISO: "Si us plau, escriu una data (ISO) vàlida.", 12 | number: "Si us plau, escriu un número enter vàlid.", 13 | digits: "Si us plau, escriu només dígits.", 14 | creditcard: "Si us plau, escriu un número de tarjeta vàlid.", 15 | equalTo: "Si us plau, escriu el mateix valor de nou.", 16 | extension: "Si us plau, escriu un valor amb una extensió acceptada.", 17 | maxlength: $.validator.format("Si us plau, no escriguis més de {0} caracters."), 18 | minlength: $.validator.format("Si us plau, no escriguis menys de {0} caracters."), 19 | rangelength: $.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."), 20 | range: $.validator.format("Si us plau, escriu un valor entre {0} i {1}."), 21 | max: $.validator.format("Si us plau, escriu un valor menor o igual a {0}."), 22 | min: $.validator.format("Si us plau, escriu un valor major o igual a {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_cs.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: CS (Czech; čeština, český jazyk) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Tento údaj je povinný.", 7 | remote: "Prosím, opravte tento údaj.", 8 | email: "Prosím, zadejte platný e-mail.", 9 | url: "Prosím, zadejte platné URL.", 10 | date: "Prosím, zadejte platné datum.", 11 | dateISO: "Prosím, zadejte platné datum (ISO).", 12 | number: "Prosím, zadejte číslo.", 13 | digits: "Prosím, zadávejte pouze číslice.", 14 | creditcard: "Prosím, zadejte číslo kreditní karty.", 15 | equalTo: "Prosím, zadejte znovu stejnou hodnotu.", 16 | extension: "Prosím, zadejte soubor se správnou příponou.", 17 | maxlength: $.validator.format("Prosím, zadejte nejvíce {0} znaků."), 18 | minlength: $.validator.format("Prosím, zadejte nejméně {0} znaků."), 19 | rangelength: $.validator.format("Prosím, zadejte od {0} do {1} znaků."), 20 | range: $.validator.format("Prosím, zadejte hodnotu od {0} do {1}."), 21 | max: $.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."), 22 | min: $.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_da.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: DA (Danish; dansk) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Dette felt er påkrævet.", 7 | maxlength: $.validator.format("Indtast højst {0} tegn."), 8 | minlength: $.validator.format("Indtast mindst {0} tegn."), 9 | rangelength: $.validator.format("Indtast mindst {0} og højst {1} tegn."), 10 | email: "Indtast en gyldig email-adresse.", 11 | url: "Indtast en gyldig URL.", 12 | date: "Indtast en gyldig dato.", 13 | number: "Indtast et tal.", 14 | digits: "Indtast kun cifre.", 15 | equalTo: "Indtast den samme værdi igen.", 16 | range: $.validator.format("Angiv en værdi mellem {0} og {1}."), 17 | max: $.validator.format("Angiv en værdi der højst er {0}."), 18 | min: $.validator.format("Angiv en værdi der mindst er {0}."), 19 | creditcard: "Indtast et gyldigt kreditkortnummer." 20 | }); 21 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_de.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: DE (German, Deutsch) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Dieses Feld ist ein Pflichtfeld.", 7 | maxlength: $.validator.format("Geben Sie bitte maximal {0} Zeichen ein."), 8 | minlength: $.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."), 9 | rangelength: $.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."), 10 | email: "Geben Sie bitte eine gültige E-Mail Adresse ein.", 11 | url: "Geben Sie bitte eine gültige URL ein.", 12 | date: "Bitte geben Sie ein gültiges Datum ein.", 13 | number: "Geben Sie bitte eine Nummer ein.", 14 | digits: "Geben Sie bitte nur Ziffern ein.", 15 | equalTo: "Bitte denselben Wert wiederholen.", 16 | range: $.validator.format("Geben Sie bitte einen Wert zwischen {0} und {1} ein."), 17 | max: $.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."), 18 | min: $.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."), 19 | creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein." 20 | }); 21 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_el.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: EL (Greek; ελληνικά) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Αυτό το πεδίο είναι υποχρεωτικό.", 7 | remote: "Παρακαλώ διορθώστε αυτό το πεδίο.", 8 | email: "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.", 9 | url: "Παρακαλώ εισάγετε ένα έγκυρο URL.", 10 | date: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.", 11 | dateISO: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).", 12 | number: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό.", 13 | digits: "Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.", 14 | creditcard: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.", 15 | equalTo: "Παρακαλώ εισάγετε την ίδια τιμή ξανά.", 16 | extension: "Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.", 17 | maxlength: $.validator.format("Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες."), 18 | minlength: $.validator.format("Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες."), 19 | rangelength: $.validator.format("Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων."), 20 | range: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}."), 21 | max: $.validator.format("Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}."), 22 | min: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_es.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ES (Spanish; Español) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Este campo es obligatorio.", 7 | remote: "Por favor, rellena este campo.", 8 | email: "Por favor, escribe una dirección de correo válida.", 9 | url: "Por favor, escribe una URL válida.", 10 | date: "Por favor, escribe una fecha válida.", 11 | dateISO: "Por favor, escribe una fecha (ISO) válida.", 12 | number: "Por favor, escribe un número válido.", 13 | digits: "Por favor, escribe sólo dígitos.", 14 | creditcard: "Por favor, escribe un número de tarjeta válido.", 15 | equalTo: "Por favor, escribe el mismo valor de nuevo.", 16 | extension: "Por favor, escribe un valor con una extensión aceptada.", 17 | maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."), 18 | minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."), 19 | rangelength: $.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."), 20 | range: $.validator.format("Por favor, escribe un valor entre {0} y {1}."), 21 | max: $.validator.format("Por favor, escribe un valor menor o igual a {0}."), 22 | min: $.validator.format("Por favor, escribe un valor mayor o igual a {0}."), 23 | nifES: "Por favor, escribe un NIF válido.", 24 | nieES: "Por favor, escribe un NIE válido.", 25 | cifES: "Por favor, escribe un CIF válido." 26 | }); 27 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_es_AR.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ES (Spanish; Español) 4 | * Region: AR (Argentina) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "Este campo es obligatorio.", 8 | remote: "Por favor, completá este campo.", 9 | email: "Por favor, escribí una dirección de correo válida.", 10 | url: "Por favor, escribí una URL válida.", 11 | date: "Por favor, escribí una fecha válida.", 12 | dateISO: "Por favor, escribí una fecha (ISO) válida.", 13 | number: "Por favor, escribí un número entero válido.", 14 | digits: "Por favor, escribí sólo dígitos.", 15 | creditcard: "Por favor, escribí un número de tarjeta válido.", 16 | equalTo: "Por favor, escribí el mismo valor de nuevo.", 17 | extension: "Por favor, escribí un valor con una extensión aceptada.", 18 | maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."), 19 | minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."), 20 | rangelength: $.validator.format("Por favor, escribí un valor entre {0} y {1} caracteres."), 21 | range: $.validator.format("Por favor, escribí un valor entre {0} y {1}."), 22 | max: $.validator.format("Por favor, escribí un valor menor o igual a {0}."), 23 | min: $.validator.format("Por favor, escribí un valor mayor o igual a {0}."), 24 | nifES: "Por favor, escribí un NIF válido.", 25 | nieES: "Por favor, escribí un NIE válido.", 26 | cifES: "Por favor, escribí un CIF válido." 27 | }); 28 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_es_PE.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ES (Spanish; Español) 4 | * Region: PE (Perú) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "Este campo es obligatorio.", 8 | remote: "Por favor, llene este campo.", 9 | email: "Por favor, escriba un correo electrónico válido.", 10 | url: "Por favor, escriba una URL válida.", 11 | date: "Por favor, escriba una fecha válida.", 12 | dateISO: "Por favor, escriba una fecha (ISO) válida.", 13 | number: "Por favor, escriba un número válido.", 14 | digits: "Por favor, escriba sólo dígitos.", 15 | creditcard: "Por favor, escriba un número de tarjeta válido.", 16 | equalTo: "Por favor, escriba el mismo valor de nuevo.", 17 | extension: "Por favor, escriba un valor con una extensión permitida.", 18 | maxlength: $.validator.format("Por favor, no escriba más de {0} caracteres."), 19 | minlength: $.validator.format("Por favor, no escriba menos de {0} caracteres."), 20 | rangelength: $.validator.format("Por favor, escriba un valor entre {0} y {1} caracteres."), 21 | range: $.validator.format("Por favor, escriba un valor entre {0} y {1}."), 22 | max: $.validator.format("Por favor, escriba un valor menor o igual a {0}."), 23 | min: $.validator.format("Por favor, escriba un valor mayor o igual a {0}."), 24 | nifES: "Por favor, escriba un NIF válido.", 25 | nieES: "Por favor, escriba un NIE válido.", 26 | cifES: "Por favor, escriba un CIF válido." 27 | }); 28 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_et.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ET (Estonian; eesti, eesti keel) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "See väli peab olema täidetud.", 7 | maxlength: $.validator.format("Palun sisestage vähem kui {0} tähemärki."), 8 | minlength: $.validator.format("Palun sisestage vähemalt {0} tähemärki."), 9 | rangelength: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."), 10 | email: "Palun sisestage korrektne e-maili aadress.", 11 | url: "Palun sisestage korrektne URL.", 12 | date: "Palun sisestage korrektne kuupäev.", 13 | dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).", 14 | number: "Palun sisestage korrektne number.", 15 | digits: "Palun sisestage ainult numbreid.", 16 | equalTo: "Palun sisestage sama väärtus uuesti.", 17 | range: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."), 18 | max: $.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."), 19 | min: $.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."), 20 | creditcard: "Palun sisestage korrektne krediitkaardi number." 21 | }); 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_eu.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: EU (Basque; euskara, euskera) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Eremu hau beharrezkoa da.", 7 | remote: "Mesedez, bete eremu hau.", 8 | email: "Mesedez, idatzi baliozko posta helbide bat.", 9 | url: "Mesedez, idatzi baliozko URL bat.", 10 | date: "Mesedez, idatzi baliozko data bat.", 11 | dateISO: "Mesedez, idatzi baliozko (ISO) data bat.", 12 | number: "Mesedez, idatzi baliozko zenbaki oso bat.", 13 | digits: "Mesedez, idatzi digituak soilik.", 14 | creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.", 15 | equalTo: "Mesedez, idatzi berdina berriro ere.", 16 | extension: "Mesedez, idatzi onartutako luzapena duen balio bat.", 17 | maxlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."), 18 | minlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."), 19 | rangelength: $.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."), 20 | range: $.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."), 21 | max: $.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."), 22 | min: $.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_fa.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: FA (Persian; فارسی) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "تکمیل این فیلد اجباری است.", 7 | remote: "لطفا این فیلد را تصحیح کنید.", 8 | email: ".لطفا یک ایمیل صحیح وارد کنید", 9 | url: "لطفا آدرس صحیح وارد کنید.", 10 | date: "لطفا یک تاریخ صحیح وارد کنید", 11 | dateFA: "لطفا یک تاریخ صحیح وارد کنید", 12 | dateISO: "لطفا تاریخ صحیح وارد کنید (ISO).", 13 | number: "لطفا عدد صحیح وارد کنید.", 14 | digits: "لطفا تنها رقم وارد کنید", 15 | creditcard: "لطفا کریدیت کارت صحیح وارد کنید.", 16 | equalTo: "لطفا مقدار برابری وارد کنید", 17 | extension: "لطفا مقداری وارد کنید که ", 18 | maxlength: $.validator.format("لطفا بیشتر از {0} حرف وارد نکنید."), 19 | minlength: $.validator.format("لطفا کمتر از {0} حرف وارد نکنید."), 20 | rangelength: $.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."), 21 | range: $.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."), 22 | max: $.validator.format("لطفا مقداری کمتر از {0} حرف وارد کنید."), 23 | min: $.validator.format("لطفا مقداری بیشتر از {0} حرف وارد کنید."), 24 | minWords: $.validator.format("لطفا حداقل {0} کلمه وارد کنید."), 25 | maxWords: $.validator.format("لطفا حداکثر {0} کلمه وارد کنید.") 26 | }); 27 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_fi.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: FI (Finnish; suomi, suomen kieli) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Tämä kenttä on pakollinen.", 7 | email: "Syötä oikea sähköpostiosoite.", 8 | url: "Syötä oikea URL-osoite.", 9 | date: "Syötä oikea päivämäärä.", 10 | dateISO: "Syötä oikea päivämäärä muodossa VVVV-KK-PP.", 11 | number: "Syötä luku.", 12 | creditcard: "Syötä voimassa oleva luottokorttinumero.", 13 | digits: "Syötä pelkästään numeroita.", 14 | equalTo: "Syötä sama arvo uudestaan.", 15 | maxlength: $.validator.format("Voit syöttää enintään {0} merkkiä."), 16 | minlength: $.validator.format("Vähintään {0} merkkiä."), 17 | rangelength: $.validator.format("Syötä vähintään {0} ja enintään {1} merkkiä."), 18 | range: $.validator.format("Syötä arvo väliltä {0}–{1}."), 19 | max: $.validator.format("Syötä arvo, joka on enintään {0}."), 20 | min: $.validator.format("Syötä arvo, joka on vähintään {0}.") 21 | }); 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ge.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author @tatocaster 3 | * Translated default messages for the jQuery validation plugin. 4 | * Locale: GE (Georgian; ქართული) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "ეს ველი სავალდებულოა", 8 | remote: "გთხოვთ შეასწოროთ.", 9 | email: "გთხოვთ შეიყვანოთ სწორი ფორმატით.", 10 | url: "გთხოვთ შეიყვანოთ სწორი ფორმატით.", 11 | date: "გთხოვთ შეიყვანოთ სწორი თარიღი.", 12 | dateISO: "გთხოვთ შეიყვანოთ სწორი ფორმატით ( ISO ).", 13 | number: "გთხოვთ შეიყვანოთ რიცხვი.", 14 | digits: "დაშვებულია მხოლოდ ციფრები.", 15 | creditcard: "გთხოვთ შეიყვანოთ სწორი ფორმატის ბარათის კოდი.", 16 | equalTo: "გთხოვთ შეიყვანოთ იგივე მნიშვნელობა.", 17 | maxlength: $.validator.format( "გთხოვთ შეიყვანოთ არა უმეტეს {0} სიმბოლოსი." ), 18 | minlength: $.validator.format( "შეიყვანეთ მინიმუმ {0} სიმბოლო." ), 19 | rangelength: $.validator.format( "გთხოვთ შეიყვანოთ {0} -დან {1} -მდე რაოდენობის სიმბოლოები." ), 20 | range: $.validator.format( "შეიყვანეთ {0} -სა {1} -ს შორის." ), 21 | max: $.validator.format( "გთხოვთ შეიყვანოთ მნიშვნელობა ნაკლები ან ტოლი {0} -ს." ), 22 | min: $.validator.format( "გთხოვთ შეიყვანოთ მნიშვნელობა მეტი ან ტოლი {0} -ს." ) 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_gl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: GL (Galician; Galego) 4 | */ 5 | (function($) { 6 | $.extend($.validator.messages, { 7 | required: "Este campo é obrigatorio.", 8 | remote: "Por favor, cubre este campo.", 9 | email: "Por favor, escribe unha dirección de correo válida.", 10 | url: "Por favor, escribe unha URL válida.", 11 | date: "Por favor, escribe unha data válida.", 12 | dateISO: "Por favor, escribe unha data (ISO) válida.", 13 | number: "Por favor, escribe un número válido.", 14 | digits: "Por favor, escribe só díxitos.", 15 | creditcard: "Por favor, escribe un número de tarxeta válido.", 16 | equalTo: "Por favor, escribe o mesmo valor de novo.", 17 | extension: "Por favor, escribe un valor cunha extensión aceptada.", 18 | maxlength: $.validator.format("Por favor, non escribas máis de {0} caracteres."), 19 | minlength: $.validator.format("Por favor, non escribas menos de {0} caracteres."), 20 | rangelength: $.validator.format("Por favor, escribe un valor entre {0} e {1} caracteres."), 21 | range: $.validator.format("Por favor, escribe un valor entre {0} e {1}."), 22 | max: $.validator.format("Por favor, escribe un valor menor ou igual a {0}."), 23 | min: $.validator.format("Por favor, escribe un valor maior ou igual a {0}."), 24 | nifES: "Por favor, escribe un NIF válido.", 25 | nieES: "Por favor, escribe un NIE válido.", 26 | cifES: "Por favor, escribe un CIF válido." 27 | }); 28 | }(jQuery)); 29 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_he.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: HE (Hebrew; עברית) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "השדה הזה הינו שדה חובה", 7 | remote: "נא לתקן שדה זה", 8 | email: "נא למלא כתובת דוא\"ל חוקית", 9 | url: "נא למלא כתובת אינטרנט חוקית", 10 | date: "נא למלא תאריך חוקי", 11 | dateISO: "נא למלא תאריך חוקי (ISO)", 12 | number: "נא למלא מספר", 13 | digits: "נא למלא רק מספרים", 14 | creditcard: "נא למלא מספר כרטיס אשראי חוקי", 15 | equalTo: "נא למלא את אותו ערך שוב", 16 | extension: "נא למלא ערך עם סיומת חוקית", 17 | maxlength: $.validator.format(".נא לא למלא יותר מ- {0} תווים"), 18 | minlength: $.validator.format("נא למלא לפחות {0} תווים"), 19 | rangelength: $.validator.format("נא למלא ערך בין {0} ל- {1} תווים"), 20 | range: $.validator.format("נא למלא ערך בין {0} ל- {1}"), 21 | max: $.validator.format("נא למלא ערך קטן או שווה ל- {0}"), 22 | min: $.validator.format("נא למלא ערך גדול או שווה ל- {0}") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_hr.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: HR (Croatia; hrvatski jezik) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Ovo polje je obavezno.", 7 | remote: "Ovo polje treba popraviti.", 8 | email: "Unesite ispravnu e-mail adresu.", 9 | url: "Unesite ispravan URL.", 10 | date: "Unesite ispravan datum.", 11 | dateISO: "Unesite ispravan datum (ISO).", 12 | number: "Unesite ispravan broj.", 13 | digits: "Unesite samo brojeve.", 14 | creditcard: "Unesite ispravan broj kreditne kartice.", 15 | equalTo: "Unesite ponovo istu vrijednost.", 16 | extension: "Unesite vrijednost sa ispravnom ekstenzijom.", 17 | maxlength: $.validator.format("Maksimalni broj znakova je {0} ."), 18 | minlength: $.validator.format("Minimalni broj znakova je {0} ."), 19 | rangelength: $.validator.format("Unesite vrijednost između {0} i {1} znakova."), 20 | range: $.validator.format("Unesite vrijednost između {0} i {1}."), 21 | max: $.validator.format("Unesite vrijednost manju ili jednaku {0}."), 22 | min: $.validator.format("Unesite vrijednost veću ili jednaku {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_hu.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: HU (Hungarian; Magyar) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Kötelező megadni.", 7 | maxlength: $.validator.format("Legfeljebb {0} karakter hosszú legyen."), 8 | minlength: $.validator.format("Legalább {0} karakter hosszú legyen."), 9 | rangelength: $.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."), 10 | email: "Érvényes e-mail címnek kell lennie.", 11 | url: "Érvényes URL-nek kell lennie.", 12 | date: "Dátumnak kell lennie.", 13 | number: "Számnak kell lennie.", 14 | digits: "Csak számjegyek lehetnek.", 15 | equalTo: "Meg kell egyeznie a két értéknek.", 16 | range: $.validator.format("{0} és {1} közé kell esnie."), 17 | max: $.validator.format("Nem lehet nagyobb, mint {0}."), 18 | min: $.validator.format("Nem lehet kisebb, mint {0}."), 19 | creditcard: "Érvényes hitelkártyaszámnak kell lennie.", 20 | remote: "Kérem javítsa ki ezt a mezőt.", 21 | dateISO: "Kérem írjon be egy érvényes dátumot (ISO)." 22 | }); 23 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_hy_AM.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: HY_AM (Armenian; հայերեն լեզու) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Պարտադիր լրացման դաշտ", 7 | remote: "Ներմուծեք ճիշտ արժեքը", 8 | email: "Ներմուծեք վավեր էլեկտրոնային փոստի հասցե", 9 | url: "Ներմուծեք վավեր URL", 10 | date: "Ներմուծեք վավեր ամսաթիվ", 11 | dateISO: "Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։", 12 | number: "Ներմուծեք թիվ", 13 | digits: "Ներմուծեք միայն թվեր", 14 | creditcard: "Ներմուծեք ճիշտ բանկային քարտի համար", 15 | equalTo: "Ներմուծեք միևնուն արժեքը ևս մեկ անգամ", 16 | extension: "Ընտրեք ճիշտ ընդլանումով ֆայլ", 17 | maxlength: $.validator.format("Ներմուծեք ոչ ավել քան {0} նիշ"), 18 | minlength: $.validator.format("Ներմուծեք ոչ պակաս քան {0} նիշ"), 19 | rangelength: $.validator.format("Ներմուծեք {0}֊ից {1} երկարությամբ արժեք"), 20 | range: $.validator.format("Ներմուծեք թիվ {0}֊ից {1} միջակայքում"), 21 | max: $.validator.format("Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին"), 22 | min: $.validator.format("Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_id.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ID (Indonesia; Indonesian) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Kolom ini diperlukan.", 7 | remote: "Harap benarkan kolom ini.", 8 | email: "Silakan masukkan format email yang benar.", 9 | url: "Silakan masukkan format URL yang benar.", 10 | date: "Silakan masukkan format tanggal yang benar.", 11 | dateISO: "Silakan masukkan format tanggal(ISO) yang benar.", 12 | number: "Silakan masukkan angka yang benar.", 13 | digits: "Harap masukan angka saja.", 14 | creditcard: "Harap masukkan format kartu kredit yang benar.", 15 | equalTo: "Harap masukkan nilai yg sama dengan sebelumnya.", 16 | maxlength: $.validator.format("Input dibatasi hanya {0} karakter."), 17 | minlength: $.validator.format("Input tidak kurang dari {0} karakter."), 18 | rangelength: $.validator.format("Panjang karakter yg diizinkan antara {0} dan {1} karakter."), 19 | range: $.validator.format("Harap masukkan nilai antara {0} dan {1}."), 20 | max: $.validator.format("Harap masukkan nilai lebih kecil atau sama dengan {0}."), 21 | min: $.validator.format("Harap masukkan nilai lebih besar atau sama dengan {0}.") 22 | }); 23 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_is.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: IS (Icelandic; íslenska) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Þessi reitur er nauðsynlegur.", 7 | remote: "Lagaðu þennan reit.", 8 | maxlength: $.validator.format("Sláðu inn mest {0} stafi."), 9 | minlength: $.validator.format("Sláðu inn minnst {0} stafi."), 10 | rangelength: $.validator.format("Sláðu inn minnst {0} og mest {1} stafi."), 11 | email: "Sláðu inn gilt netfang.", 12 | url: "Sláðu inn gilda vefslóð.", 13 | date: "Sláðu inn gilda dagsetningu.", 14 | number: "Sláðu inn tölu.", 15 | digits: "Sláðu inn tölustafi eingöngu.", 16 | equalTo: "Sláðu sama gildi inn aftur.", 17 | range: $.validator.format("Sláðu inn gildi milli {0} og {1}."), 18 | max: $.validator.format("Sláðu inn gildi sem er minna en eða jafnt og {0}."), 19 | min: $.validator.format("Sláðu inn gildi sem er stærra en eða jafnt og {0}."), 20 | creditcard: "Sláðu inn gilt greiðslukortanúmer." 21 | }); 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_it.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: IT (Italian; Italiano) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Campo obbligatorio", 7 | remote: "Controlla questo campo", 8 | email: "Inserisci un indirizzo email valido", 9 | url: "Inserisci un indirizzo web valido", 10 | date: "Inserisci una data valida", 11 | dateISO: "Inserisci una data valida (ISO)", 12 | number: "Inserisci un numero valido", 13 | digits: "Inserisci solo numeri", 14 | creditcard: "Inserisci un numero di carta di credito valido", 15 | equalTo: "Il valore non corrisponde", 16 | extension: "Inserisci un valore con un'estensione valida", 17 | maxlength: $.validator.format("Non inserire più di {0} caratteri"), 18 | minlength: $.validator.format("Inserisci almeno {0} caratteri"), 19 | rangelength: $.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri"), 20 | range: $.validator.format("Inserisci un valore compreso tra {0} e {1}"), 21 | max: $.validator.format("Inserisci un valore minore o uguale a {0}"), 22 | min: $.validator.format("Inserisci un valore maggiore o uguale a {0}"), 23 | nifES: "Inserisci un NIF valido", 24 | nieES: "Inserisci un NIE valido", 25 | cifES: "Inserisci un CIF valido", 26 | currency: "Inserisci una valuta valida" 27 | }); 28 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ja.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: JA (Japanese; 日本語) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "このフィールドは必須です。", 7 | remote: "このフィールドを修正してください。", 8 | email: "有効なEメールアドレスを入力してください。", 9 | url: "有効なURLを入力してください。", 10 | date: "有効な日付を入力してください。", 11 | dateISO: "有効な日付(ISO)を入力してください。", 12 | number: "有効な数字を入力してください。", 13 | digits: "数字のみを入力してください。", 14 | creditcard: "有効なクレジットカード番号を入力してください。", 15 | equalTo: "同じ値をもう一度入力してください。", 16 | extension: "有効な拡張子を含む値を入力してください。", 17 | maxlength: $.validator.format("{0} 文字以内で入力してください。"), 18 | minlength: $.validator.format("{0} 文字以上で入力してください。"), 19 | rangelength: $.validator.format("{0} 文字から {1} 文字までの値を入力してください。"), 20 | range: $.validator.format("{0} から {1} までの値を入力してください。"), 21 | max: $.validator.format("{0} 以下の値を入力してください。"), 22 | min: $.validator.format("{0} 以上の値を入力してください。") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ka.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: KA (Georgian; ქართული) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "ამ ველის შევსება აუცილებელია.", 7 | remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.", 8 | email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.", 9 | url: "გთხოვთ მიუთითოთ კორექტული URL.", 10 | date: "გთხოვთ მიუთითოთ კორექტული თარიღი.", 11 | dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.", 12 | number: "გთხოვთ მიუთითოთ ციფრი.", 13 | digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.", 14 | creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.", 15 | equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.", 16 | extension: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.", 17 | maxlength: $.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."), 18 | minlength: $.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."), 19 | rangelength: $.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."), 20 | range: $.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."), 21 | max: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."), 22 | min: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_kk.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: KK (Kazakh; қазақ тілі) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Бұл өрісті міндетті түрде толтырыңыз.", 7 | remote: "Дұрыс мағына енгізуіңізді сұраймыз.", 8 | email: "Нақты электронды поштаңызды енгізуіңізді сұраймыз.", 9 | url: "Нақты URL-ды енгізуіңізді сұраймыз.", 10 | date: "Нақты URL-ды енгізуіңізді сұраймыз.", 11 | dateISO: "Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.", 12 | number: "Күнді енгізуіңізді сұраймыз.", 13 | digits: "Тек қана сандарды енгізуіңізді сұраймыз.", 14 | creditcard: "Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.", 15 | equalTo: "Осы мәнді қайта енгізуіңізді сұраймыз.", 16 | extension: "Файлдың кеңейтуін дұрыс таңдаңыз.", 17 | maxlength: $.validator.format("Ұзындығы {0} символдан көр болмасын."), 18 | minlength: $.validator.format("Ұзындығы {0} символдан аз болмасын."), 19 | rangelength: $.validator.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз."), 20 | range: $.validator.format("Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз."), 21 | max: $.validator.format("{0} аз немесе тең санын енгізуіңіді сұраймыз."), 22 | min: $.validator.format("{0} көп немесе тең санын енгізуіңізді сұраймыз.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ko.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: KO (Korean; 한국어) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "필수 항목입니다.", 7 | remote: "항목을 수정하세요.", 8 | email: "유효하지 않은 E-Mail주소입니다.", 9 | url: "유효하지 않은 URL입니다.", 10 | date: "올바른 날짜를 입력하세요.", 11 | dateISO: "올바른 날짜(ISO)를 입력하세요.", 12 | number: "유효한 숫자가 아닙니다.", 13 | digits: "숫자만 입력 가능합니다.", 14 | creditcard: "신용카드 번호가 바르지 않습니다.", 15 | equalTo: "같은 값을 다시 입력하세요.", 16 | extension: "올바른 확장자가 아닙니다.", 17 | maxlength: $.validator.format("{0}자를 넘을 수 없습니다. "), 18 | minlength: $.validator.format("{0}자 이상 입력하세요."), 19 | rangelength: $.validator.format("문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요."), 20 | range: $.validator.format("{0} 에서 {1} 사이의 값을 입력하세요."), 21 | max: $.validator.format("{0} 이하의 값을 입력하세요."), 22 | min: $.validator.format("{0} 이상의 값을 입력하세요.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_lt.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: LT (Lithuanian; lietuvių kalba) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Šis laukas yra privalomas.", 7 | remote: "Prašau pataisyti šį lauką.", 8 | email: "Prašau įvesti teisingą elektroninio pašto adresą.", 9 | url: "Prašau įvesti teisingą URL.", 10 | date: "Prašau įvesti teisingą datą.", 11 | dateISO: "Prašau įvesti teisingą datą (ISO).", 12 | number: "Prašau įvesti teisingą skaičių.", 13 | digits: "Prašau naudoti tik skaitmenis.", 14 | creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.", 15 | equalTo: "Prašau įvestį tą pačią reikšmę dar kartą.", 16 | extension: "Prašau įvesti reikšmę su teisingu plėtiniu.", 17 | maxlength: $.validator.format("Prašau įvesti ne daugiau kaip {0} simbolių."), 18 | minlength: $.validator.format("Prašau įvesti bent {0} simbolius."), 19 | rangelength: $.validator.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."), 20 | range: $.validator.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."), 21 | max: $.validator.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."), 22 | min: $.validator.format("Prašau įvesti reikšmę didesnę arba lygią {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_lv.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: LV (Latvian; latviešu valoda) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Šis lauks ir obligāts.", 7 | remote: "Lūdzu, pārbaudiet šo lauku.", 8 | email: "Lūdzu, ievadiet derīgu e-pasta adresi.", 9 | url: "Lūdzu, ievadiet derīgu URL adresi.", 10 | date: "Lūdzu, ievadiet derīgu datumu.", 11 | dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).", 12 | number: "Lūdzu, ievadiet derīgu numuru.", 13 | digits: "Lūdzu, ievadiet tikai ciparus.", 14 | creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.", 15 | equalTo: "Lūdzu, ievadiet to pašu vēlreiz.", 16 | extension: "Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.", 17 | maxlength: $.validator.format("Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes."), 18 | minlength: $.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."), 19 | rangelength: $.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."), 20 | range: $.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."), 21 | max: $.validator.format("Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}."), 22 | min: $.validator.format("Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_my.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: MY (Malay; Melayu) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Medan ini diperlukan.", 7 | remote: "Sila betulkan medan ini.", 8 | email: "Sila masukkan alamat emel yang betul.", 9 | url: "Sila masukkan URL yang betul.", 10 | date: "Sila masukkan tarikh yang betul.", 11 | dateISO: "Sila masukkan tarikh(ISO) yang betul.", 12 | number: "Sila masukkan nombor yang betul.", 13 | digits: "Sila masukkan nilai digit sahaja.", 14 | creditcard: "Sila masukkan nombor kredit kad yang betul.", 15 | equalTo: "Sila masukkan nilai yang sama semula.", 16 | extension: "Sila masukkan nilai yang telah diterima.", 17 | maxlength: $.validator.format("Sila masukkan nilai tidak lebih dari {0} aksara."), 18 | minlength: $.validator.format("Sila masukkan nilai sekurang-kurangnya {0} aksara."), 19 | rangelength: $.validator.format("Sila masukkan panjang nilai antara {0} dan {1} aksara."), 20 | range: $.validator.format("Sila masukkan nilai antara {0} dan {1} aksara."), 21 | max: $.validator.format("Sila masukkan nilai yang kurang atau sama dengan {0}."), 22 | min: $.validator.format("Sila masukkan nilai yang lebih atau sama dengan {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_nl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: NL (Dutch; Nederlands, Vlaams) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Dit is een verplicht veld.", 7 | remote: "Controleer dit veld.", 8 | email: "Vul hier een geldig e-mailadres in.", 9 | url: "Vul hier een geldige URL in.", 10 | date: "Vul hier een geldige datum in.", 11 | dateISO: "Vul hier een geldige datum in (ISO-formaat).", 12 | number: "Vul hier een geldig getal in.", 13 | digits: "Vul hier alleen getallen in.", 14 | creditcard: "Vul hier een geldig creditcardnummer in.", 15 | equalTo: "Vul hier dezelfde waarde in.", 16 | extension: "Vul hier een waarde in met een geldige extensie.", 17 | maxlength: $.validator.format("Vul hier maximaal {0} tekens in."), 18 | minlength: $.validator.format("Vul hier minimaal {0} tekens in."), 19 | rangelength: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."), 20 | range: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."), 21 | max: $.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."), 22 | min: $.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}."), 23 | 24 | // for validations in additional-methods.js 25 | iban: "Vul hier een geldig IBAN in.", 26 | dateNL: "Vul hier een geldige datum in.", 27 | phoneNL: "Vul hier een geldig Nederlands telefoonnummer in.", 28 | mobileNL: "Vul hier een geldig Nederlands mobiel telefoonnummer in.", 29 | postalcodeNL: "Vul hier een geldige postcode in.", 30 | bankaccountNL: "Vul hier een geldig bankrekeningnummer in.", 31 | giroaccountNL: "Vul hier een geldig gironummer in.", 32 | bankorgiroaccountNL: "Vul hier een geldig bank- of gironummer in." 33 | }); 34 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_no.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: NO (Norwegian; Norsk) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Dette feltet er obligatorisk.", 7 | maxlength: $.validator.format("Maksimalt {0} tegn."), 8 | minlength: $.validator.format("Minimum {0} tegn."), 9 | rangelength: $.validator.format("Angi minimum {0} og maksimum {1} tegn."), 10 | email: "Oppgi en gyldig epostadresse.", 11 | url: "Angi en gyldig URL.", 12 | date: "Angi en gyldig dato.", 13 | dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).", 14 | dateSE: "Angi en gyldig dato.", 15 | number: "Angi et gyldig nummer.", 16 | numberSE: "Angi et gyldig nummer.", 17 | digits: "Skriv kun tall.", 18 | equalTo: "Skriv samme verdi igjen.", 19 | range: $.validator.format("Angi en verdi mellom {0} og {1}."), 20 | max: $.validator.format("Angi en verdi som er mindre eller lik {0}."), 21 | min: $.validator.format("Angi en verdi som er større eller lik {0}."), 22 | creditcard: "Angi et gyldig kredittkortnummer." 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_pl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: PL (Polish; język polski, polszczyzna) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "To pole jest wymagane.", 7 | remote: "Proszę o wypełnienie tego pola.", 8 | email: "Proszę o podanie prawidłowego adresu email.", 9 | url: "Proszę o podanie prawidłowego URL.", 10 | date: "Proszę o podanie prawidłowej daty.", 11 | dateISO: "Proszę o podanie prawidłowej daty (ISO).", 12 | number: "Proszę o podanie prawidłowej liczby.", 13 | digits: "Proszę o podanie samych cyfr.", 14 | creditcard: "Proszę o podanie prawidłowej karty kredytowej.", 15 | equalTo: "Proszę o podanie tej samej wartości ponownie.", 16 | extension: "Proszę o podanie wartości z prawidłowym rozszerzeniem.", 17 | maxlength: $.validator.format("Proszę o podanie nie więcej niż {0} znaków."), 18 | minlength: $.validator.format("Proszę o podanie przynajmniej {0} znaków."), 19 | rangelength: $.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."), 20 | range: $.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."), 21 | max: $.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."), 22 | min: $.validator.format("Proszę o podanie wartości większej bądź równej {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_pt_BR.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: PT (Portuguese; português) 4 | * Region: BR (Brazil) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "Este campo é requerido.", 8 | remote: "Por favor, corrija este campo.", 9 | email: "Por favor, forneça um endereço de email válido.", 10 | url: "Por favor, forneça uma URL válida.", 11 | date: "Por favor, forneça uma data válida.", 12 | dateISO: "Por favor, forneça uma data válida (ISO).", 13 | number: "Por favor, forneça um número válido.", 14 | digits: "Por favor, forneça somente dígitos.", 15 | creditcard: "Por favor, forneça um cartão de crédito válido.", 16 | equalTo: "Por favor, forneça o mesmo valor novamente.", 17 | extension: "Por favor, forneça um valor com uma extensão válida.", 18 | maxlength: $.validator.format("Por favor, forneça não mais que {0} caracteres."), 19 | minlength: $.validator.format("Por favor, forneça ao menos {0} caracteres."), 20 | rangelength: $.validator.format("Por favor, forneça um valor entre {0} e {1} caracteres de comprimento."), 21 | range: $.validator.format("Por favor, forneça um valor entre {0} e {1}."), 22 | max: $.validator.format("Por favor, forneça um valor menor ou igual a {0}."), 23 | min: $.validator.format("Por favor, forneça um valor maior ou igual a {0}."), 24 | nifES: "Por favor, forneça um NIF válido.", 25 | nieES: "Por favor, forneça um NIE válido.", 26 | cifEE: "Por favor, forneça um CIF válido.", 27 | postalcodeBR: "Por favor, forneça um CEP válido.", 28 | cpfBR: "Por favor, forneça um CPF válido." 29 | }); 30 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_pt_PT.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: PT (Portuguese; português) 4 | * Region: PT (Portugal) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "Campo de preenchimento obrigatório.", 8 | remote: "Por favor, corrija este campo.", 9 | email: "Por favor, introduza um endereço eletrónico válido.", 10 | url: "Por favor, introduza um URL válido.", 11 | date: "Por favor, introduza uma data válida.", 12 | dateISO: "Por favor, introduza uma data válida (ISO).", 13 | number: "Por favor, introduza um número válido.", 14 | digits: "Por favor, introduza apenas dígitos.", 15 | creditcard: "Por favor, introduza um número de cartão de crédito válido.", 16 | equalTo: "Por favor, introduza de novo o mesmo valor.", 17 | extension: "Por favor, introduza um ficheiro com uma extensão válida.", 18 | maxlength: $.validator.format("Por favor, não introduza mais do que {0} caracteres."), 19 | minlength: $.validator.format("Por favor, introduza pelo menos {0} caracteres."), 20 | rangelength: $.validator.format("Por favor, introduza entre {0} e {1} caracteres."), 21 | range: $.validator.format("Por favor, introduza um valor entre {0} e {1}."), 22 | max: $.validator.format("Por favor, introduza um valor menor ou igual a {0}."), 23 | min: $.validator.format("Por favor, introduza um valor maior ou igual a {0}."), 24 | nifES: "Por favor, introduza um NIF válido.", 25 | nieES: "Por favor, introduza um NIE válido.", 26 | cifES: "Por favor, introduza um CIF válido." 27 | }); 28 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ro.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: RO (Romanian, limba română) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Acest câmp este obligatoriu.", 7 | remote: "Te rugăm să completezi acest câmp.", 8 | email: "Te rugăm să introduci o adresă de email validă", 9 | url: "Te rugăm sa introduci o adresă URL validă.", 10 | date: "Te rugăm să introduci o dată corectă.", 11 | dateISO: "Te rugăm să introduci o dată (ISO) corectă.", 12 | number: "Te rugăm să introduci un număr întreg valid.", 13 | digits: "Te rugăm să introduci doar cifre.", 14 | creditcard: "Te rugăm să introduci un numar de carte de credit valid.", 15 | equalTo: "Te rugăm să reintroduci valoarea.", 16 | extension: "Te rugăm să introduci o valoare cu o extensie validă.", 17 | maxlength: $.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."), 18 | minlength: $.validator.format("Te rugăm să introduci cel puțin {0} caractere."), 19 | rangelength: $.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."), 20 | range: $.validator.format("Te rugăm să introduci o valoare între {0} și {1}."), 21 | max: $.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."), 22 | min: $.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_ru.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: RU (Russian; русский язык) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Это поле необходимо заполнить.", 7 | remote: "Пожалуйста, введите правильное значение.", 8 | email: "Пожалуйста, введите корректный адрес электронной почты.", 9 | url: "Пожалуйста, введите корректный URL.", 10 | date: "Пожалуйста, введите корректную дату.", 11 | dateISO: "Пожалуйста, введите корректную дату в формате ISO.", 12 | number: "Пожалуйста, введите число.", 13 | digits: "Пожалуйста, вводите только цифры.", 14 | creditcard: "Пожалуйста, введите правильный номер кредитной карты.", 15 | equalTo: "Пожалуйста, введите такое же значение ещё раз.", 16 | extension: "Пожалуйста, выберите файл с правильным расширением.", 17 | maxlength: $.validator.format("Пожалуйста, введите не больше {0} символов."), 18 | minlength: $.validator.format("Пожалуйста, введите не меньше {0} символов."), 19 | rangelength: $.validator.format("Пожалуйста, введите значение длиной от {0} до {1} символов."), 20 | range: $.validator.format("Пожалуйста, введите число от {0} до {1}."), 21 | max: $.validator.format("Пожалуйста, введите число, меньшее или равное {0}."), 22 | min: $.validator.format("Пожалуйста, введите число, большее или равное {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_si.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: SI (Slovenian) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "To polje je obvezno.", 7 | remote: "Vpis v tem polju ni v pravi obliki.", 8 | email: "Prosimo, vnesite pravi email naslov.", 9 | url: "Prosimo, vnesite pravi URL.", 10 | date: "Prosimo, vnesite pravi datum.", 11 | dateISO: "Prosimo, vnesite pravi datum (ISO).", 12 | number: "Prosimo, vnesite pravo številko.", 13 | digits: "Prosimo, vnesite samo številke.", 14 | creditcard: "Prosimo, vnesite pravo številko kreditne kartice.", 15 | equalTo: "Prosimo, ponovno vnesite enako vsebino.", 16 | extension: "Prosimo, vnesite vsebino z pravo končnico.", 17 | maxlength: $.validator.format("Prosimo, da ne vnašate več kot {0} znakov."), 18 | minlength: $.validator.format("Prosimo, vnesite vsaj {0} znakov."), 19 | rangelength: $.validator.format("Prosimo, vnesite od {0} do {1} znakov."), 20 | range: $.validator.format("Prosimo, vnesite vrednost med {0} in {1}."), 21 | max: $.validator.format("Prosimo, vnesite vrednost manjšo ali enako {0}."), 22 | min: $.validator.format("Prosimo, vnesite vrednost večjo ali enako {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_sk.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: SK (Slovak; slovenčina, slovenský jazyk) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Povinné zadať.", 7 | maxlength: $.validator.format("Maximálne {0} znakov."), 8 | minlength: $.validator.format("Minimálne {0} znakov."), 9 | rangelength: $.validator.format("Minimálne {0} a Maximálne {1} znakov."), 10 | email: "E-mailová adresa musí byť platná.", 11 | url: "URL musí byť platný.", 12 | date: "Musí byť dátum.", 13 | number: "Musí byť číslo.", 14 | digits: "Môže obsahovať iba číslice.", 15 | equalTo: "Dva hodnoty sa musia rovnať.", 16 | range: $.validator.format("Musí byť medzi {0} a {1}."), 17 | max: $.validator.format("Nemôže byť viac ako{0}."), 18 | min: $.validator.format("Nemôže byť menej ako{0}."), 19 | creditcard: "Číslo platobnej karty musí byť platné." 20 | }); 21 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_sl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Language: SL (Slovenian; slovenski jezik) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "To polje je obvezno.", 7 | remote: "Prosimo popravite to polje.", 8 | email: "Prosimo vnesite veljaven email naslov.", 9 | url: "Prosimo vnesite veljaven URL naslov.", 10 | date: "Prosimo vnesite veljaven datum.", 11 | dateISO: "Prosimo vnesite veljaven ISO datum.", 12 | number: "Prosimo vnesite veljavno število.", 13 | digits: "Prosimo vnesite samo števila.", 14 | creditcard: "Prosimo vnesite veljavno številko kreditne kartice.", 15 | equalTo: "Prosimo ponovno vnesite vrednost.", 16 | extension: "Prosimo vnesite vrednost z veljavno končnico.", 17 | maxlength: $.validator.format("Prosimo vnesite največ {0} znakov."), 18 | minlength: $.validator.format("Prosimo vnesite najmanj {0} znakov."), 19 | rangelength: $.validator.format("Prosimo vnesite najmanj {0} in največ {1} znakov."), 20 | range: $.validator.format("Prosimo vnesite vrednost med {0} in {1}."), 21 | max: $.validator.format("Prosimo vnesite vrednost manjše ali enako {0}."), 22 | min: $.validator.format("Prosimo vnesite vrednost večje ali enako {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_sr.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: SR (Serbian; српски језик) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Поље је обавезно.", 7 | remote: "Средите ово поље.", 8 | email: "Унесите исправну и-мејл адресу.", 9 | url: "Унесите исправан URL.", 10 | date: "Унесите исправан датум.", 11 | dateISO: "Унесите исправан датум (ISO).", 12 | number: "Унесите исправан број.", 13 | digits: "Унесите само цифе.", 14 | creditcard: "Унесите исправан број кредитне картице.", 15 | equalTo: "Унесите исту вредност поново.", 16 | extension: "Унесите вредност са одговарајућом екстензијом.", 17 | maxlength: $.validator.format("Унесите мање од {0} карактера."), 18 | minlength: $.validator.format("Унесите барем {0} карактера."), 19 | rangelength: $.validator.format("Унесите вредност дугачку између {0} и {1} карактера."), 20 | range: $.validator.format("Унесите вредност између {0} и {1}."), 21 | max: $.validator.format("Унесите вредност мању или једнаку {0}."), 22 | min: $.validator.format("Унесите вредност већу или једнаку {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_sr_lat.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Polje je obavezno.", 7 | remote: "Sredite ovo polje.", 8 | email: "Unesite ispravnu e-mail adresu", 9 | url: "Unesite ispravan URL.", 10 | date: "Unesite ispravan datum.", 11 | dateISO: "Unesite ispravan datum (ISO).", 12 | number: "Unesite ispravan broj.", 13 | digits: "Unesite samo cifre.", 14 | creditcard: "Unesite ispravan broj kreditne kartice.", 15 | equalTo: "Unesite istu vrednost ponovo.", 16 | extension: "Unesite vrednost sa odgovarajućom ekstenzijom.", 17 | maxlength: $.validator.format("Unesite manje od {0} karaktera."), 18 | minlength: $.validator.format("Unesite barem {0} karaktera."), 19 | rangelength: $.validator.format("Unesite vrednost dugačku između {0} i {1} karaktera."), 20 | range: $.validator.format("Unesite vrednost između {0} i {1}."), 21 | max: $.validator.format("Unesite vrednost manju ili jednaku {0}."), 22 | min: $.validator.format("Unesite vrednost veću ili jednaku {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_sv.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: SV (Swedish; Svenska) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Detta fält är obligatoriskt.", 7 | maxlength: $.validator.format("Du får ange högst {0} tecken."), 8 | minlength: $.validator.format("Du måste ange minst {0} tecken."), 9 | rangelength: $.validator.format("Ange minst {0} och max {1} tecken."), 10 | email: "Ange en korrekt e-postadress.", 11 | url: "Ange en korrekt URL.", 12 | date: "Ange ett korrekt datum.", 13 | dateISO: "Ange ett korrekt datum (ÅÅÅÅ-MM-DD).", 14 | number: "Ange ett korrekt nummer.", 15 | digits: "Ange endast siffror.", 16 | equalTo: "Ange samma värde igen.", 17 | range: $.validator.format("Ange ett värde mellan {0} och {1}."), 18 | max: $.validator.format("Ange ett värde som är mindre eller lika med {0}."), 19 | min: $.validator.format("Ange ett värde som är större eller lika med {0}."), 20 | creditcard: "Ange ett korrekt kreditkortsnummer." 21 | }); 22 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_th.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: TH (Thai; ไทย) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "โปรดระบุ", 7 | remote: "โปรดแก้ไขให้ถูกต้อง", 8 | email: "โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง", 9 | url: "โปรดระบุ URL ที่ถูกต้อง", 10 | date: "โปรดระบุวันที่ ที่ถูกต้อง", 11 | dateISO: "โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).", 12 | number: "โปรดระบุทศนิยมที่ถูกต้อง", 13 | digits: "โปรดระบุจำนวนเต็มที่ถูกต้อง", 14 | creditcard: "โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง", 15 | equalTo: "โปรดระบุค่าเดิมอีกครั้ง", 16 | extension: "โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง", 17 | maxlength: $.validator.format("โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ"), 18 | minlength: $.validator.format("โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ"), 19 | rangelength: $.validator.format("โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ"), 20 | range: $.validator.format("โปรดระบุค่าระหว่าง {0} และ {1}"), 21 | max: $.validator.format("โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}"), 22 | min: $.validator.format("โปรดระบุค่ามากกว่าหรือเท่ากับ {0}") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_tj.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: TJ (Tajikistan; Забони тоҷикӣ) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Ворид кардани ин филд маҷбури аст.", 7 | remote: "Илтимос, маълумоти саҳеҳ ворид кунед.", 8 | email: "Илтимос, почтаи электронии саҳеҳ ворид кунед.", 9 | url: "Илтимос, URL адреси саҳеҳ ворид кунед.", 10 | date: "Илтимос, таърихи саҳеҳ ворид кунед.", 11 | dateISO: "Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.", 12 | number: "Илтимос, рақамҳои саҳеҳ ворид кунед.", 13 | digits: "Илтимос, танҳо рақам ворид кунед.", 14 | creditcard: "Илтимос, кредит карди саҳеҳ ворид кунед.", 15 | equalTo: "Илтимос, миқдори баробар ворид кунед.", 16 | extension: "Илтимос, қофияи файлро дуруст интихоб кунед", 17 | maxlength: $.validator.format("Илтимос, бештар аз {0} рамз ворид накунед."), 18 | minlength: $.validator.format("Илтимос, камтар аз {0} рамз ворид накунед."), 19 | rangelength: $.validator.format("Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед."), 20 | range: $.validator.format("Илтимос, аз {0} то {1} рақам зиёд ворид кунед."), 21 | max: $.validator.format("Илтимос, бештар аз {0} рақам ворид накунед."), 22 | min: $.validator.format("Илтимос, камтар аз {0} рақам ворид накунед.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_tr.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: TR (Turkish; Türkçe) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Bu alanın doldurulması zorunludur.", 7 | remote: "Lütfen bu alanı düzeltin.", 8 | email: "Lütfen geçerli bir e-posta adresi giriniz.", 9 | url: "Lütfen geçerli bir web adresi (URL) giriniz.", 10 | date: "Lütfen geçerli bir tarih giriniz.", 11 | dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)", 12 | number: "Lütfen geçerli bir sayı giriniz.", 13 | digits: "Lütfen sadece sayısal karakterler giriniz.", 14 | creditcard: "Lütfen geçerli bir kredi kartı giriniz.", 15 | equalTo: "Lütfen aynı değeri tekrar giriniz.", 16 | extension: "Lütfen geçerli uzantıya sahip bir değer giriniz.", 17 | maxlength: $.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."), 18 | minlength: $.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."), 19 | rangelength: $.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."), 20 | range: $.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."), 21 | max: $.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."), 22 | min: $.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz."), 23 | require_from_group: "Lütfen bu alanların en az {0} tanesini doldurunuz." 24 | }); 25 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_uk.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: UK (Ukrainian; українська мова) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Це поле необхідно заповнити.", 7 | remote: "Будь ласка, введіть правильне значення.", 8 | email: "Будь ласка, введіть коректну адресу електронної пошти.", 9 | url: "Будь ласка, введіть коректний URL.", 10 | date: "Будь ласка, введіть коректну дату.", 11 | dateISO: "Будь ласка, введіть коректну дату у форматі ISO.", 12 | number: "Будь ласка, введіть число.", 13 | digits: "Вводите потрібно лише цифри.", 14 | creditcard: "Будь ласка, введіть правильний номер кредитної карти.", 15 | equalTo: "Будь ласка, введіть таке ж значення ще раз.", 16 | extension: "Будь ласка, виберіть файл з правильним розширенням.", 17 | maxlength: $.validator.format("Будь ласка, введіть не більше {0} символів."), 18 | minlength: $.validator.format("Будь ласка, введіть не менше {0} символів."), 19 | rangelength: $.validator.format("Будь ласка, введіть значення довжиною від {0} до {1} символів."), 20 | range: $.validator.format("Будь ласка, введіть число від {0} до {1}."), 21 | max: $.validator.format("Будь ласка, введіть число, менше або рівно {0}."), 22 | min: $.validator.format("Будь ласка, введіть число, більше або рівно {0}.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_vi.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: VI (Vietnamese; Tiếng Việt) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "Hãy nhập.", 7 | remote: "Hãy sửa cho đúng.", 8 | email: "Hãy nhập email.", 9 | url: "Hãy nhập URL.", 10 | date: "Hãy nhập ngày.", 11 | dateISO: "Hãy nhập ngày (ISO).", 12 | number: "Hãy nhập số.", 13 | digits: "Hãy nhập chữ số.", 14 | creditcard: "Hãy nhập số thẻ tín dụng.", 15 | equalTo: "Hãy nhập thêm lần nữa.", 16 | extension: "Phần mở rộng không đúng.", 17 | maxlength: $.validator.format("Hãy nhập từ {0} kí tự trở xuống."), 18 | minlength: $.validator.format("Hãy nhập từ {0} kí tự trở lên."), 19 | rangelength: $.validator.format("Hãy nhập từ {0} đến {1} kí tự."), 20 | range: $.validator.format("Hãy nhập từ {0} đến {1}."), 21 | max: $.validator.format("Hãy nhập từ {0} trở xuống."), 22 | min: $.validator.format("Hãy nhập từ {1} trở lên.") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_zh.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語) 4 | */ 5 | $.extend($.validator.messages, { 6 | required: "这是必填字段", 7 | remote: "请修正此字段", 8 | email: "请输入有效的电子邮件地址", 9 | url: "请输入有效的网址", 10 | date: "请输入有效的日期", 11 | dateISO: "请输入有效的日期 (YYYY-MM-DD)", 12 | number: "请输入有效的数字", 13 | digits: "只能输入数字", 14 | creditcard: "请输入有效的信用卡号码", 15 | equalTo: "你的输入不相同", 16 | extension: "请输入有效的后缀", 17 | maxlength: $.validator.format("最多可以输入 {0} 个字符"), 18 | minlength: $.validator.format("最少要输入 {0} 个字符"), 19 | rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"), 20 | range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"), 21 | max: $.validator.format("请输入不大于 {0} 的数值"), 22 | min: $.validator.format("请输入不小于 {0} 的数值") 23 | }); 24 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/messages_zh_TW.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Translated default messages for the jQuery validation plugin. 3 | * Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語) 4 | * Region: TW (Taiwan) 5 | */ 6 | $.extend($.validator.messages, { 7 | required: "必須填寫", 8 | remote: "請修正此欄位", 9 | email: "請輸入有效的電子郵件", 10 | url: "請輸入有效的網址", 11 | date: "請輸入有效的日期", 12 | dateISO: "請輸入有效的日期 (YYYY-MM-DD)", 13 | number: "請輸入正確的數值", 14 | digits: "只可輸入數字", 15 | creditcard: "請輸入有效的信用卡號碼", 16 | equalTo: "請重複輸入一次", 17 | extension: "請輸入有效的後綴", 18 | maxlength: $.validator.format("最多 {0} 個字"), 19 | minlength: $.validator.format("最少 {0} 個字"), 20 | rangelength: $.validator.format("請輸入長度為 {0} 至 {1} 之間的字串"), 21 | range: $.validator.format("請輸入 {0} 至 {1} 之間的數值"), 22 | max: $.validator.format("請輸入不大於 {0} 的數值"), 23 | min: $.validator.format("請輸入不小於 {0} 的數值") 24 | }); 25 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/methods_de.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Localized default methods for the jQuery validation plugin. 3 | * Locale: DE 4 | */ 5 | $.extend($.validator.methods, { 6 | date: function(value, element) { 7 | return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); 8 | }, 9 | number: function(value, element) { 10 | return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/methods_es_CL.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Localized default methods for the jQuery validation plugin. 3 | * Locale: ES_CL 4 | */ 5 | $.extend($.validator.methods, { 6 | date: function(value, element) { 7 | return this.optional(element) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(value); 8 | }, 9 | number: function(value, element) { 10 | return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/methods_fi.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Localized default methods for the jQuery validation plugin. 3 | * Locale: FI 4 | */ 5 | $.extend($.validator.methods, { 6 | date: function(value, element) { 7 | return this.optional(element) || /^\d{1,2}\.\d{1,2}\.\d{4}$/.test(value); 8 | }, 9 | number: function(value, element) { 10 | return this.optional(element) || /^-?(?:\d+)(?:,\d+)?$/.test(value); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/methods_nl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Localized default methods for the jQuery validation plugin. 3 | * Locale: NL 4 | */ 5 | $.extend($.validator.methods, { 6 | date: function(value, element) { 7 | return this.optional(element) || /^\d\d?[\.\/\-]\d\d?[\.\/\-]\d\d\d?\d?$/.test(value); 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/src/localization/methods_pt.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Localized default methods for the jQuery validation plugin. 3 | * Locale: PT_BR 4 | */ 5 | $.extend($.validator.methods, { 6 | date: function(value, element) { 7 | return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value); 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/lib/jquery-validation/validation.jquery.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "validation", 3 | "title": "jQuery Validation", 4 | "description": "Form validation made easy. Validate a simple comment form with inline rules, or a complex signup form with powerful remote checks.", 5 | "keywords": [ 6 | "forms", 7 | "validation", 8 | "validate" 9 | ], 10 | "author": { 11 | "name": "Jörn Zaefferer", 12 | "email": "joern.zaefferer@gmail.com", 13 | "url": "http://bassistance.de" 14 | }, 15 | "licenses": [ 16 | { 17 | "type": "MIT", 18 | "url": "http://www.opensource.org/licenses/MIT" 19 | } 20 | ], 21 | "bugs": "https://github.com/jzaefferer/jquery-validation/issues", 22 | "homepage": "https://github.com/jzaefferer/jquery-validation", 23 | "docs": "http://jqueryvalidation.org/documentation/", 24 | "download": "https://github.com/jzaefferer/jquery-validation/releases", 25 | "dependencies": { 26 | "jquery": ">=1.4.4" 27 | }, 28 | "version": "1.14.0" 29 | } 30 | -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/logo.png -------------------------------------------------------------------------------- /Blog.IdentityServer/wwwroot/logofull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anjoy8/Blog.IdentityServer/2ca932e9a30fe818ed084e5f2a2283f39624fb10/Blog.IdentityServer/wwwroot/logofull.png -------------------------------------------------------------------------------- /Build.bat: -------------------------------------------------------------------------------- 1 | git pull 2 | 3 | 4 | dotnet build 5 | 6 | cd Blog.IdentityServer 7 | 8 | 9 | 10 | dotnet run 11 | 12 | cmd -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. 2 | 3 | FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base 4 | WORKDIR /app 5 | EXPOSE 5004 6 | 7 | FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build 8 | WORKDIR /src 9 | COPY ["Blog.IdentityServer/Blog.IdentityServer.csproj", "Blog.IdentityServer/"] 10 | RUN dotnet restore "Blog.IdentityServer/Blog.IdentityServer.csproj" 11 | COPY . . 12 | WORKDIR "/src/Blog.IdentityServer" 13 | RUN dotnet build "Blog.IdentityServer.csproj" -c Release -o /app/build 14 | 15 | FROM build AS publish 16 | RUN dotnet publish "Blog.IdentityServer.csproj" -c Release -o /app/publish 17 | 18 | FROM base AS final 19 | WORKDIR /app 20 | COPY --from=publish /app/publish . 21 | ENTRYPOINT ["dotnet", "Blog.IdentityServer.dll"] --------------------------------------------------------------------------------