Esempio n. 1
0
        public async Task ReplaceClaimAsync(TApplication application, Claim oldClaim, Claim newClaim, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            if (application == null)
            {
                throw new ArgumentNullException(nameof(application));
            }
            if (oldClaim == null)
            {
                throw new ArgumentNullException(nameof(oldClaim));
            }
            if (newClaim == null)
            {
                throw new ArgumentNullException(nameof(newClaim));
            }

            var matchedClaims = await ApplicationClaims.Where(ac => ac.ApplicationId.Equals(application.Id) && ac.ClaimValue == oldClaim.Value && ac.ClaimType == oldClaim.Type).ToListAsync(cancellationToken);

            foreach (var matchedClaim in matchedClaims)
            {
                matchedClaim.ClaimValue = newClaim.Value;
                matchedClaim.ClaimType  = newClaim.Type;
            }
        }
Esempio n. 2
0
 public async Task AddClaim(ApplicationUser user, ApplicationClaims appClaim)
 {
     var claimName = Enum.GetName(typeof(ApplicationClaims), appClaim);
     var result = await userManager.AddClaimAsync(user, new Claim(ClaimTypes.AuthorizationDecision, claimName));
     if (result.Succeeded)
     {
         logger.LogInformation($"Claim {claimName} added to User {user.UserName} successfully.");
     }
 }
Esempio n. 3
0
        public async Task <IList <Claim> > GetClaimsAsync(TApplication application, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            if (application == null)
            {
                throw new ArgumentNullException(nameof(application));
            }

            return(await ApplicationClaims.Where(ac => ac.ApplicationId.Equals(application.Id)).Select(c => c.ToClaim()).ToListAsync(cancellationToken));
        }
Esempio n. 4
0
 public Task AddClaimsAsync(TApplication application, IEnumerable <Claim> claims, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     ThrowIfDisposed();
     if (application == null)
     {
         throw new ArgumentNullException(nameof(application));
     }
     if (claims == null)
     {
         throw new ArgumentNullException(nameof(claims));
     }
     foreach (var claim in claims)
     {
         ApplicationClaims.Add(CreateApplicationClaim(application, claim));
     }
     return(Task.CompletedTask);
 }
Esempio n. 5
0
        public async Task RemoveClaimsAsync(TApplication application, IEnumerable <Claim> claims, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            if (application == null)
            {
                throw new ArgumentNullException(nameof(application));
            }
            if (claims == null)
            {
                throw new ArgumentNullException(nameof(claims));
            }
            foreach (var claim in claims)
            {
                var matchedClaims = await ApplicationClaims.Where(ac => ac.ApplicationId.Equals(application.Id) && ac.ClaimValue == claim.Value && ac.ClaimType == claim.Type).ToListAsync(cancellationToken);

                foreach (var c in matchedClaims)
                {
                    ApplicationClaims.Remove(c);
                }
            }
        }
Esempio n. 6
0
        public User GetUser(Guid userId)
        {
            try
            {
                var user = new User();
                user.UserId = userId;

                var            activeDirectoryAccessorFactory = new ActiveDirectoryAccessors.AccessorFactory();
                IGraphAccessor graphAccessor = activeDirectoryAccessorFactory.CreateAccessor <IGraphAccessor>();

                var userInformation = graphAccessor.GetUserById(userId.ToString());

                user.DisplayName  = userInformation.DisplayName;
                user.EmailAddress = userInformation.EmailAddress;
                user.FirstName    = userInformation.FirstName;
                user.LastName     = userInformation.LastName;

                //Enigne that takes a user and spits out claims
                var databaseAccessorFactory = new DatabaseAccessors.AccessorFactory();
                IApplicationsAccessor applicationAccessor = databaseAccessorFactory.CreateAccessor <IApplicationsAccessor>();
                IClaimsAccessor       claimsAccessor      = databaseAccessorFactory.CreateAccessor <IClaimsAccessor>();
                IUserClaimsAccessor   userClaimsAccessor  = databaseAccessorFactory.CreateAccessor <IUserClaimsAccessor>();
                IMembershipsAccessor  membershipsAccessor = databaseAccessorFactory.CreateAccessor <IMembershipsAccessor>();

                var userClaims       = userClaimsAccessor.FindAllUserClaims(user.UserId);
                var userApplications = membershipsAccessor.FindAllUserApplications(user.UserId);

                var applicationClaims = new List <ApplicationClaims>();
                foreach (var userApplication in userApplications)
                {
                    var application      = applicationAccessor.Find(userApplication.ApplicationId);
                    var applicationClaim = new ApplicationClaims
                    {
                        ApplicationName = application.Name,
                        Claims          = new ClaimData[0]
                    };
                    applicationClaims.Add(applicationClaim);
                }

                foreach (var userClaim in userClaims)
                {
                    var userClaimData    = claimsAccessor.Find(userClaim.ClaimId);
                    var application      = applicationAccessor.Find(userClaimData.ApplicationId);
                    var applicationClaim = applicationClaims.Where(app => app.ApplicationName == application.Name).FirstOrDefault();
                    var claimData        = new ClaimData
                    {
                        ClaimType  = userClaimData.ClaimType,
                        ClaimValue = userClaimData.ClaimValue
                    };
                    var claimDataList = applicationClaim.Claims.ToList();
                    claimDataList.Add(claimData);
                    applicationClaim.Claims = claimDataList.ToArray();
                }

                user.Applications = applicationClaims.ToArray();

                return(user);
            }
            catch (Exception ex)
            {
                Logger.LogError("Error in GetUser", ex);
                return(null);
            }
        }