private async Task <Dictionary <string, AuthorizationPolicy> > GetDynamicAuthorizationPoliciesFromPlatformPermissions()
        {
            var cacheKey = CacheKey.With(GetType(), "GetDynamicAuthorizationPoliciesFromPlatformPermissions");
            var result   = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken());

                var resultLookup = new Dictionary <string, AuthorizationPolicy>();
                foreach (var permission in await _platformSecurityApi.GetPermissionsAsync())
                {
                    resultLookup[permission.Id] = new AuthorizationPolicyBuilder().AddRequirements(new PermissionAuthorizationRequirement {
                        Permission = permission.Id
                    }).Build();
                }

                //Register storefront permissions
                foreach (var permission in SecurityConstants.Permissions.AllPermissions)
                {
                    resultLookup[permission] = new AuthorizationPolicyBuilder().AddRequirements(new PermissionAuthorizationRequirement {
                        Permission = permission
                    }).Build();
                }

                return(resultLookup);
            });

            return(result);
        }
        public async Task <IdentityResult> DeleteAsync(User user, CancellationToken cancellationToken)
        {
            await _platformSecurityApi.DeleteAsyncAsync(new[] { user.UserName });

            //Evict user from the cache
            SecurityCacheRegion.ExpireUser(user.Id);
            return(IdentityResult.Success);
        }
 private static User PrepareUserResult(ICacheEntry cacheEntry, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
 {
     if (userDto != null)
     {
         cacheEntry.SetAbsoluteExpiration(TimeSpan.FromMinutes(1));
         cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
         return(userDto.ToUser());
     }
     return(null);
 }
 private User PrepareUserResult(MemoryCacheEntryOptions options, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
 {
     if (userDto != null)
     {
         var user = userDto.ToUser();
         options.AddExpirationToken(new PollingApiUserChangeToken(_platformSecurityApi, _options.ChangesPollingInterval));
         options.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
         return(user);
     }
     return(null);
 }
Example #5
0
        public override async Task <User> FindByLoginAsync(string loginProvider, string providerKey)
        {
            var cacheKey = CacheKey.With(GetType(), "FindByLoginAsync", loginProvider, providerKey);

            return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var userDto = await _commerceCoreApi.GetUserByLoginAsync(loginProvider, providerKey);
                if (userDto != null)
                {
                    cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
                    return userDto.ToUser();
                }
                return null;
            }, cacheNullValue : false));
        }
        public async Task <IdentityResult> UpdateAsync(User user, CancellationToken cancellationToken)
        {
            if (user.Contact != null)
            {
                if (user.Contact.IsTransient())
                {
                    user.Contact = await _memberService.CreateContactAsync(user.Contact);
                }
                else
                {
                    await _memberService.UpdateContactAsync(user.Contact);
                }
            }

            var dtoUser   = user.ToUserDto();
            var resultDto = await _platformSecurityApi.UpdateAsyncAsync(dtoUser);

            //Evict user from the cache
            SecurityCacheRegion.ExpireUser(user.Id);
            return(resultDto.ToIdentityResult());
        }
        private async Task <User> PrepareUserResultAsync(MemoryCacheEntryOptions options, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
        {
            if (userDto != null)
            {
                var user = userDto.ToUser();
                var orderSearchResult = await _orderModule.SearchAsync(new CustomerOrderSearchCriteria()
                {
                    CustomerId = user.Id,
                    Take       = 0,
                    Skip       = 0,
                });

                user.IsFirstTimeBuyer = orderSearchResult.TotalCount == 0;

                options.AddExpirationToken(new PollingApiUserChangeToken(_platformSecurityApi, _options.ChangesPollingInterval));
                options.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));

                return(user);
            }
            return(null);
        }
Example #8
0
        public override async Task <IdentityResult> AddLoginAsync(User user, UserLoginInfo login)
        {
            var updateUser = await FindByIdAsync(user.Id);

            if (updateUser != null)
            {
                updateUser.ExternalLogins.Add(new ExternalUserLoginInfo
                {
                    LoginProvider       = login.LoginProvider,
                    ProviderKey         = login.ProviderKey,
                    ProviderDisplayName = login.ProviderDisplayName
                });
            }

            var resultDto = await _platformSecurityApi.UpdateAsyncAsync(updateUser.ToPlatformUserDto());

            //Evict user from the cache
            SecurityCacheRegion.ExpireUser(user.Id);

            return(resultDto.ToIdentityResult());
        }
        public async Task <User> FindByIdAsync(string userId, CancellationToken cancellationToken)
        {
            var cacheKey = CacheKey.With(GetType(), "FindByIdAsync", userId);
            var result   = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var userDto = await _platformSecurityApi.GetUserByIdAsync(userId);
                if (userDto != null)
                {
                    cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
                    return(userDto.ToUser());
                }
                return(null);
            }, cacheNullValue : false);

            //Load user associated contact
            if (result != null && result.ContactId != null)
            {
                result.Contact = await _memberService.GetContactByIdAsync(result.ContactId);
            }
            return(result);
        }