Example #1
0
        public async Task <Result> AuthorizeAndGetDiscoDetailsAsync(string clientId, string request)
        {
            var serviceProvider = await AggregatorContext.QueryAsync(ctx => ctx.ServiceProviders
                                                                     .Include(p => p.AllowedNotificationUris)
                                                                     .Include(p => p.Discoveries).ThenInclude(d => d.DiscoveryService)
                                                                     .FirstOrDefaultAsync(p => p.ClientIdOnAggregator == clientId));

            if (serviceProvider == null)
            {
                throw new UnifiedException(OAuth2Error.UnauthorizedClient, GetInvalidDescription(OpenIdConnectParameterNames.ClientId));
            }

            var jwksString = serviceProvider.UseStoredJwksValue
                                ? serviceProvider.JwksValue
                                : await cacheAccessor.GetOrCreateAsync(
                $"{GetType()}:{nameof(AuthorizeAndGetDiscoDetailsAsync)}:{serviceProvider.Id}",
                serviceProvider.JwksCachingInSeconds !.Value,
                () => httpClient.GetStringAsync(serviceProvider.JwksUri));

            if (!JwtSignatureValidator.Validate(request, jwksString !, out var claims))
            {
                throw new UnifiedException(OAuth2Error.UnauthorizedClient, "Token validation failed");
            }

            claims !.TryGetValue(MobileConnectParameterNames.NotificationUri, out var value2);

            if (!serviceProvider.AllowedNotificationUris !.Any(u => u.Value == (claims !.TryGetValue(MobileConnectParameterNames.NotificationUri, out var value) ? (string?)value : null)))
            {
                throw new UnifiedException(OAuth2Error.UnauthorizedClient, GetInvalidDescription(MobileConnectParameterNames.Request));
            }

            var disco = serviceProvider.Discoveries !.First(d => d.IsEnabled);

            return(new(disco.DiscoveryService !.Uri !, disco.ClientIdOnDiscovery !, disco.ClientSecretOnDiscovery !, disco.RedirectUri !));
        }
Example #2
0
        public async Task ValidateIdgwCallBackAsync(DIAuthorizationRequest request, string?code, string?error, string?error_description)
        {
            if (!string.IsNullOrEmpty(error))
            {
                var diAuthorizationRequest = await AggregatorContext.QueryAsync(ctx => ctx.DIAuthorizationRequests.FirstAsync(r => r.StateNew == request.StateNew));

                diAuthorizationRequest !.Error            = error;
                diAuthorizationRequest !.ErrorDescription = error_description;
                diAuthorizationRequest !.ErrorAt          = DateTimeOffset.Now;
                await AggregatorContext.SaveAsync(ctx => ctx.DIAuthorizationRequests !.Update(diAuthorizationRequest));

                throw new UnifiedException(OAuth2ErrorDetails.GetError(error), error_description);
            }

            if (string.IsNullOrEmpty(code))
            {
                var diAuthorizationRequest = await AggregatorContext.QueryAsync(ctx => ctx.DIAuthorizationRequests.FirstAsync(r => r.StateNew == request.StateNew));

                diAuthorizationRequest !.Error            = "Empty parameter code";
                diAuthorizationRequest !.ErrorDescription = "Empty parameter code";
                diAuthorizationRequest !.ErrorAt          = DateTimeOffset.Now;
                await AggregatorContext.SaveAsync(ctx => ctx.DIAuthorizationRequests !.Update(diAuthorizationRequest));

                throw new UnifiedException(OAuth2Error.ServerError, "Empty parameter code");
            }
        }
 public void AggregateIncludeTest()
 {
     var context           = new QueryTestContext(new DbContextOptions <QueryTestContext>());
     var contextAggregator = new AggregatorContext <QueryTestContext>(new List <QueryTestContext>()
     {
         context
     });
     var query = contextAggregator.CreateQueryable(a => a.Students);
 }
        public async Task <(PremiumInfoToken PremiumInfoToken, bool IsPremiumInfoSigned)> GetAuthStateByTokenAsync(string accessTokenFromAggregatorHash)
        {
            using var context = new AggregatorContext();
            var PremiumInfoToken = await context !.PremiumInfoTokens !.FirstOrDefaultAsync(l => l.AccessTokenOnAggregatorHash == accessTokenFromAggregatorHash);

            if (PremiumInfoToken == null)
            {
                throw new UnifiedException(OAuth2Error.UnauthorizedClient, "No valid token found");
            }
            var serviceProvider = await context !.ServiceProviders !.FirstOrDefaultAsync(l => l.ClientIdOnAggregator == PremiumInfoToken !.ClientIdOnAggregator);

            return(PremiumInfoToken !, serviceProvider !.IsPremiumInfoSigned !);
        }
 public HomeController(AggregatorContext context, UserManager <appUser> userManager, ITransactionService transactionService,
                       IAccountSummaryService accountSummaryService, IBankService bankService, SignInManager <appUser> signInManager, ILogger <LoginModel> logger, ISEBAccountAuthService sEBAccountAuthService, IMedBankServices medBankServices)
 {
     _context               = context;
     _userManager           = userManager;
     _transactionService    = transactionService;
     _accountSummaryService = accountSummaryService;
     _bankService           = bankService;
     _sEBAccountAuthService = sEBAccountAuthService;
     _medBankServices       = medBankServices;
     _signInManager         = signInManager;
     _logger = logger;
 }
        public async Task <IActionResult> OnGetAsync(string paramUsername, string paramPassword)
        {
            if (string.IsNullOrEmpty(paramUsername) || string.IsNullOrEmpty(paramPassword))
            {
                return(LocalRedirect("/"));
            }
            string returnUrl = Url.Content("~/");

            try
            {
                // Clear the existing external cookie
                await HttpContext
                .SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
            }
            catch { }

            string passwordHash = HelperHash.HashString(paramPassword);

            using var context = new AggregatorContext();
            var adminUser = await context !.AdminUsers !.FirstOrDefaultAsync(l => l.Login == paramUsername && l.Password == passwordHash);

            if (adminUser != null)
            {
                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.Name, paramUsername),
                    new Claim(ClaimTypes.Role, "Administrator"),
                };
                var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                var authProperties = new AuthenticationProperties
                {
                    IsPersistent = true,
                    RedirectUri  = this.Request.Host.Value
                };
                try
                {
                    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
                                                  new ClaimsPrincipal(claimsIdentity),
                                                  authProperties);
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                    throw;
                }
                return(LocalRedirect(returnUrl));
            }
            return(LocalRedirect("/"));
        }
        static public async Task <DiscoverySettings> GetSettingsByClientId(string clientId)
        {
            var serviceProvider = await AggregatorContext.QueryAsync(ctx => ctx.ServiceProviders
                                                                     .Include(p => p.AllowedNotificationUris)
                                                                     .Include(p => p.Discoveries).ThenInclude(d => d.DiscoveryService)
                                                                     .FirstOrDefaultAsync(p => p.ClientIdOnAggregator == clientId));

            if (serviceProvider == null)
            {
                throw new UnifiedException(OAuth2Error.UnauthorizedClient, GetInvalidDescription(OpenIdConnectParameterNames.ClientId));
            }

            var disco = serviceProvider.Discoveries !.First(d => d.IsEnabled);

            return(new DiscoverySettings(disco.DiscoveryService !.Uri !, disco.ClientIdOnDiscovery !, disco.ClientSecretOnDiscovery !, disco.RedirectUri !));
        }
        public void ProductController_PayWithROBOKASSAAsync_ShouldReturnNotFound()
        {
            //Arrange
            var options = new DbContextOptionsBuilder <AggregatorContext>()
                          .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
                          .Options;
            var context    = new AggregatorContext(options);
            var store      = Substitute.For <IUserStore <User> >();
            var controller = new ProductController(context,
                                                   Substitute.For <UserManager <User> >(store, null, null, null, null, null, null, null, null),
                                                   Substitute.For <IConfiguration>());
            //Act
            var result = controller.PayWithROBOKASSAAsync(-1).Result as StatusCodeResult;

            //Assert
            Assert.AreEqual(result.StatusCode, (int)HttpStatusCode.NotFound);
        }
Example #9
0
        private async Task UpdateDIAuthStateInDBAsync(DIAuthorizationRequest newAuthState, string id, IdType idType)
        {
            DIAuthorizationRequest diAuthorizationRequest;

            if (idType == IdType.StateId)
            {
                diAuthorizationRequest = await AggregatorContext.QueryAsync(ctx => ctx.DIAuthorizationRequests.FirstAsync(r => r.StateNew == id));
            }
            else if (idType == IdType.Dcid)
            {
                diAuthorizationRequest = await AggregatorContext.QueryAsync(ctx => ctx.DIAuthorizationRequests.FirstAsync(r => r.Dcid == id));
            }
            else if (idType == IdType.Code)
            {
                diAuthorizationRequest = await AggregatorContext.QueryAsync(ctx => ctx.DIAuthorizationRequests.FirstAsync(r => r.Code == id));
            }
            else
            {
                throw new Exception("Id type is wrong ");
            }

            diAuthorizationRequest = newAuthState;
            await AggregatorContext.SaveAsync(ctx => ctx.DIAuthorizationRequests !.Update(diAuthorizationRequest));
        }
Example #10
0
 public Task EraseClientSecretAsync(string stateNew) => AggregatorContext.SaveAsync(async ctx =>
 {
     var authorizationRequest = await ctx.DIAuthorizationRequests.FirstAsync(r => r.StateNew == stateNew);
     authorizationRequest.IdgwClientSecret = null;
 });
Example #11
0
 public ProductController(AggregatorContext dbContext, UserManager <User> userManager, IConfiguration configuration)
 {
     _dbContext     = dbContext;
     _userManager   = userManager;
     _configuration = configuration;
 }