Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        public void LogRequest(AlexaRequestDTO alexaRequestDTO, AlexaAccountDTO alexaAccountDTO)
        {
            alexaRequestDTO.AccountRefId = alexaAccountDTO.AccountId;

            this.alexaRepository.LogRequest(alexaRequestDTO);
        }
Ejemplo n.º 5
0
 public AlexaAccountDTO CreateSession(AlexaRequestDTO alexaRequestDTO)
 {
     return(this.alexaRepository.AddOrUpdateAccount(alexaRequestDTO));
 }