public AlexaAccountDTO AddOrUpdateAccount(AlexaRequestDTO alexaRequestDto) { using (var context = new RealmContext()) { var alexaAccount = context.AlexaAccounts.AsNoTracking() .SingleOrDefault(o => o.AlexaUserId == alexaRequestDto.UserId); if (alexaAccount != null) { alexaAccount.RequestCount++; alexaAccount.LastRequest = DateTime.UtcNow; context.Entry(alexaAccount).State = EntityState.Modified; } else { alexaAccount = new AlexaAccount() { AccountId = Guid.NewGuid(), AlexaUserId = alexaRequestDto.UserId, DateCreated = DateTime.UtcNow, LastRequest = DateTime.UtcNow, RequestCount = 1 }; context.Entry(alexaAccount).State = EntityState.Added; } context.SaveChanges(); return(Mapper.Map <AlexaAccountDTO>(alexaAccount)); } }
public void LogRequest(AlexaRequestDTO alexaRequestDto) { using (var context = new RealmContext()) { var alexaRequest = Mapper.Map <AlexaRequest>(alexaRequestDto); alexaRequest.DateCreated = DateTime.UtcNow; context.Entry(alexaRequest).State = EntityState.Added; context.SaveChanges(); } }
/// <summary> /// Process Validation for Alexa Application /// </summary> /// <param name="actionContext">Http Action Context</param> /// <param name="cancellationToken"></param> /// <returns></returns> public override async Task OnActionExecutingAsync( HttpActionContext actionContext, CancellationToken cancellationToken) { var parameters = actionContext.ActionDescriptor.GetParameters(); var parameter = parameters?.FirstOrDefault(); if (parameter != null) { var parameterValue = actionContext.ActionArguments != null && actionContext.ActionArguments.Any() ? actionContext.ActionArguments.First().Value : null; logger.Trace($"Parameter {parameter.ParameterName} (Type: {parameter.ParameterType.FullName}) with value of '{parameterValue}'"); try { var model = parameterValue as AlexaRequestModel; if (parameter.ParameterType.Name == AlexaRequestModel && model != null) { var test2 = AppSettings.ReadSetting("applicationId"); if (model.Session.Application.ApplicationId != AppSettings.ReadSetting("applicationId")) { if (actionContext.Request.RequestUri.Host.ToLower().Equals("localhost")) { #if !DEBUG //await Task.Factory.StartNew(() => //{ // actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Invalid Alexa application Id in request"); //}); //return; #endif } } var alexaRequestDTO = AlexaRequestDTO.ToAlexaRequestDTO(model); var alexaAccountDTO = securityProvider.CreateSession(alexaRequestDTO); securityProvider.LogRequest(alexaRequestDTO, alexaAccountDTO); var playerDTO = securityProvider.GetPlayer(alexaAccountDTO); var customPrincipal = new CustomPrincipal(playerDTO.Name) { AccountId = alexaAccountDTO.AccountId, PlayerId = playerDTO.PlayerId }; customPrincipal.Roles.Add("Player"); Thread.CurrentPrincipal = customPrincipal; actionContext.RequestContext.Principal = customPrincipal; } } catch (SqlException ex) { logger.Fatal(ex, "AlexaAuthFilter"); } } await base.OnActionExecutingAsync(actionContext, cancellationToken); }
public void LogRequest(AlexaRequestDTO alexaRequestDTO, AlexaAccountDTO alexaAccountDTO) { alexaRequestDTO.AccountRefId = alexaAccountDTO.AccountId; this.alexaRepository.LogRequest(alexaRequestDTO); }
public AlexaAccountDTO CreateSession(AlexaRequestDTO alexaRequestDTO) { return(this.alexaRepository.AddOrUpdateAccount(alexaRequestDTO)); }