예제 #1
0
 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);
 }
예제 #2
0
 /// <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);
 }
예제 #3
0
            /// <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);
            }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        /// <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());
            }
        }