internal Identity WithClaims(Dictionary <string, IdentityClaimResource> claims) { foreach (var kvp in claims) { if (Claims.ContainsKey(kvp.Key)) { Claims[kvp.Key].Value = kvp.Value.Value; } else { Claims.Add(kvp.Key, new IdentityClaim(kvp.Value.Value, kvp.Value.IsIdentifyingClaim)); } } return(this); }
/// <summary> /// 获取用户编号 /// </summary> /// <returns></returns> public string GetSubjectId() { if (Claims == null || Claims.Count <= 0) { return(string.Empty); } if (Claims.ContainsKey(ClaimTypes.NameIdentifier)) { return(Claims[ClaimTypes.NameIdentifier]); } if (Claims.ContainsKey(JwtClaimTypes.Subject)) { return(Claims[JwtClaimTypes.Subject]); } return(string.Empty); }
/// <summary> /// Extract the <see cref="RegisteredClaims.ExpirationTime"/> from the claims dictionary if it is valid. /// </summary> /// <param name="claims">Claims information, also known as JWT payload.</param> /// <returns>Expiration time in Unix TimeStamp format or <code>null</code> if not found or invalid.</returns> private long?GetExpirationTime() { if (Claims.ContainsKey(RegisteredClaims.ExpirationTime)) { var expirationValue = Claims[RegisteredClaims.ExpirationTime].ToString(); long unixTime = 0; if (!long.TryParse(expirationValue, out unixTime)) { throw new InvalidExpirationTimeException(expirationValue); } return(unixTime); } return(null); }
public Identity WithClaim(string type, string value, bool isIdentifyingClaim, bool isServerSideOnly = false) { if (Claims.ContainsKey(type)) { var claim = Claims[type]; claim.Value = value; claim.IsIdentifyingClaim = isIdentifyingClaim; claim.IsServerSideOnly = isServerSideOnly; } else { var claim = new IdentityClaim(value, isIdentifyingClaim, isServerSideOnly); Claims.Add(type, claim); } return(this); }
private void ImportClaim(RoleData roleData) { if (Claims.ContainsKey(roleData.id)) { return; } var claim = new Claim { Project = Project, ProjectId = Project.ProjectId, Character = null, //see later Group = null, // see later Comments = new List <Comment>() { new Comment() { Author = Project.ProjectAcls.Single(acl => acl.IsOwner).User, CommentText = new CommentText() { Text = new MarkdownString($"<a href=\"http://site.allrpg.info/orders/orders/{roleData.id}/act=view&site={Project.Details.AllrpgId}\">Заявка в allrpg</a>") }, CreatedTime = UnixTime.ToDateTime(roleData.datesent), IsCommentByPlayer = false, IsVisibleToPlayer = false, LastEditTime = UnixTime.ToDateTime(roleData.datesent), ParentCommentId = null, Project = Project, } }, CreateDate = UnixTime.ToDateTime(roleData.datesent), Player = Users[roleData.sid], MasterDeclinedDate = roleData.todelete2 == 0 && roleData.status != 4 ? (DateTime?)null : UnixTime.ToDateTime(roleData.date), PlayerDeclinedDate = roleData.todelete == 0 ? (DateTime?)null : UnixTime.ToDateTime(roleData.date), PlayerAcceptedDate = UnixTime.ToDateTime(roleData.datesent), LastUpdateDateTime = UnixTime.ToDateTime(roleData.date) }; foreach (var virtualField in roleData.@virtual) { if (virtualField.Key == 7152) //Known steam2016 "responsible master" { int responsibleMasterIdx; if (int.TryParse(virtualField.Value, out responsibleMasterIdx)) { var responsibleSid = Steam2016ResponsibleMasters[responsibleMasterIdx]; claim.ResponsibleMasterUser = responsibleSid == null ? null : Users[(int)responsibleSid]; } } else if (ConvertToCommentVirtualFields.Contains(virtualField.Key) && !string.IsNullOrWhiteSpace(virtualField.Value)) { claim.Comments.Add(new Comment() { Author = Users[roleData.sid], CommentText = new CommentText() { Text = new MarkdownString(virtualField.Value) }, CreatedTime = claim.CreateDate, IsCommentByPlayer = true, IsVisibleToPlayer = true, LastEditTime = DateTime.UtcNow, ParentCommentId = null, Project = Project, }); } } bool canbeApproved = false; Character character; CharacterGroup characterGroup; if (Characters.TryGetValue(roleData.vacancy, out character)) { claim.Character = character; canbeApproved = true; } else if (LocationsFromVacancies.TryGetValue(roleData.vacancy, out characterGroup)) { claim.Group = characterGroup; } else if (Locations.TryGetValue(roleData.locat, out characterGroup)) { claim.Group = characterGroup; } else { claim.Group = Project.RootGroup; } claim.MasterAcceptedDate = canbeApproved && roleData.status == 3 ? UnixTime.ToDateTime(roleData.date) : (DateTime?)null; claim.ClaimStatus = ConvertAllrpgStatus(roleData, canbeApproved); Claims.Add(roleData.id, claim); }
/// <summary> /// Creates a new <see cref="ModelController{T}"/> /// </summary> public ModelController() { PrimaryKeyField = typeof(T).GetProperties().FirstOrDefault(p => p.GetCustomAttributes <PrimaryKeyAttribute>().Any())?.Name ?? "ID"; ParentKey = typeof(T).GetProperties().FirstOrDefault(p => p.GetCustomAttributes <ParentKeyAttribute>().Any())?.Name ?? ""; Connection = typeof(T).GetCustomAttribute <SettingsCategoryAttribute>()?.SettingsCategory ?? "systemSettings"; PropertyInfo pi = typeof(T).GetProperties().FirstOrDefault(p => p.GetCustomAttributes <DefaultSortOrderAttribute>().Any()); DefaultSortOrderAttribute dsoa = pi?.GetCustomAttribute <DefaultSortOrderAttribute>(); if (dsoa != null) { DefaultSort = $"{pi.Name} {(dsoa.Ascending ? "ASC" : "DESC")}"; } if (User.GetType() == typeof(ClaimsPrincipal)) { SecurityType = "Claims"; IEnumerable <ClaimAttribute> claimAttributes = typeof(T).GetCustomAttributes <ClaimAttribute>(); foreach (ClaimAttribute claimAttribute in claimAttributes) { if (Claims.ContainsKey(claimAttribute.Verb)) { Claims[claimAttribute.Verb].Add(claimAttribute.Claim); } else { Claims.Add(claimAttribute.Verb, new List <Claim>() { claimAttribute.Claim }); } } if (!Claims.ContainsKey("POST")) { Claims.Add("POST", new List <Claim>() { new Claim("Role", "Administrator") }); } if (!Claims.ContainsKey("PATCH")) { Claims.Add("PATCH", new List <Claim>() { new Claim("Role", "Administrator") }); } if (!Claims.ContainsKey("DELETE")) { Claims.Add("DELETE", new List <Claim>() { new Claim("Role", "Administrator") }); } } else { SecurityType = "Roles"; PostRoles = typeof(T).GetCustomAttribute <PostRolesAttribute>()?.Roles ?? "Administrator"; GetRoles = typeof(T).GetCustomAttribute <GetRolesAttribute>()?.Roles ?? ""; PatchRoles = typeof(T).GetCustomAttribute <PatchRolesAttribute>()?.Roles ?? "Administrator"; DeleteRoles = typeof(T).GetCustomAttribute <DeleteRolesAttribute>()?.Roles ?? "Administrator"; } CustomView = typeof(T).GetCustomAttribute <CustomViewAttribute>()?.CustomView ?? ""; ViewOnly = typeof(T).GetCustomAttribute <ViewOnlyAttribute>()?.ViewOnly ?? false; AllowSearch = typeof(T).GetCustomAttribute <AllowSearchAttribute>()?.AllowSearch ?? false; SearchSettings = typeof(T).GetCustomAttribute <AdditionalFieldSearchAttribute>(); Take = typeof(T).GetCustomAttribute <ReturnLimitAttribute>()?.Limit ?? null; // Custom View Models are ViewOnly. ViewOnly = ViewOnly || CustomView != String.Empty; RootQueryRestrictionAttribute rqra = typeof(T).GetCustomAttribute <RootQueryRestrictionAttribute>(); if (rqra != null) { RootQueryRestriction = new RecordRestriction(rqra.FilterExpression, rqra.Parameters.ToArray()); } }