Beispiel #1
0
        public async Task <IBusinessResult <GetByIdCustomerResponse> > GetById(int id)
        {
            #region [ Config Cache ]
            string   keyCache        = string.Format(keyGetByIdCache, id);
            TimeSpan expirationCache = TimeSpan.FromMinutes(20);
            #endregion

            if (!_cache.TryGetValue(keyCache, out IBusinessResult <GetByIdCustomerResponse> result))
            {
                result = await GetByIdCache(id);

                if (!result.HasErrors)
                {
                    var cacheEntryOptions = new MemoryCacheEntryOptions()
                                            .SetSlidingExpiration(expirationCache);

                    // Save data in cache.
                    _cache.Set(keyCache, result, cacheEntryOptions);
                }
            }

            if (!result.Data.AnyOrNotNull())
            {
                return(BusinessResult <GetByIdCustomerResponse> .Create(
                           "Customer not found.".ToMessageResult("GetById", MessageType.Warning)
                           ));
            }

            return(result);
        }
Beispiel #2
0
        public async Task <IBusinessResult <VoidResult> > Delete(int id)
        {
            if (await this.RemoveByIdAsync(id) > 0)
            {
                RemoveGetByIdCache(id);
                RemoveGetByCache();

                return(BusinessResult <VoidResult> .Create(
                           "Operation performed successfully.".ToMessageResult("Delete", MessageType.Success)
                           ));
            }

            return(BusinessResult <VoidResult> .Create(
                       "Customer not found.".ToMessageResult("Delete", MessageType.Warning)
                       ));
        }
Beispiel #3
0
        public async Task <IBusinessResult <CreateCustomerResponse> > Create(CreateCustomerRequest dto)
        {
            var customer = dto.MapTo <Customer>();

            if (await this.AddAsync(customer) > 0)
            {
                RemoveGetByCache();

                return(customer
                       .MapTo <CreateCustomerResponse>()
                       .ToBusinessWithMessage(
                           "Operation performed successfully.".ToMessageResult("CustomerCreate", MessageType.Success)
                           ));
            }
            return(BusinessResult <CreateCustomerResponse> .Create(
                       "An attempt to perform an operation failed.".ToMessageResult("CustomerCreate", MessageType.Error)
                       ));
        }
Beispiel #4
0
        public async Task <IBusinessResult <VoidResult> > Update(int id, UpdateCustomerRequest dto)
        {
            var customer = dto.MapTo <Customer>();

            customer.Id = id;

            if (await this.ModifyAsync(customer) > 0)
            {
                RemoveGetByIdCache(id);
                RemoveGetByCache();

                return(BusinessResult <VoidResult> .Create(
                           "Operation performed successfully.".ToMessageResult("Update", MessageType.Success)
                           ));
            }

            return(BusinessResult <VoidResult> .Create(
                       "Customer not found.".ToMessageResult("Update", MessageType.Warning)
                       ));
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            IConfiguration configuration = (IConfiguration)context.HttpContext.RequestServices.GetService(typeof(IConfiguration));

            if (configuration == null)
            {
                context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                context.Result = new JsonResult(
                    BusinessResult <VoidResult> .Create(
                        "Project settings not found for authentication filter (OAuth2).".ToMessageResult("internalservererror", MessageType.Error)
                        ));
                return;
            }

            string authValidadeUrl = configuration.GetSection("JWTAuthorize:ValidateUrl")?.Value;
            string authByPass      = configuration.GetSection("JWTAuthorize:ByPass")?.Value;

            if (authByPass?.ToLower() == "true" || string.IsNullOrEmpty(authValidadeUrl))
            {
                await next();

                return;
            }

            bool isAuthorized = true;

            string authKey = context.HttpContext.Request
                             .Headers["Authorization"].SingleOrDefault();

            if (string.IsNullOrWhiteSpace(authKey))
            {
                authKey = "Bearer " + context.HttpContext.Request.Query["Token"].FirstOrDefault();
            }

            if (string.IsNullOrWhiteSpace(authKey))
            {
                isAuthorized = false;
            }

            if (isAuthorized)
            {
                Hashtable header = new Hashtable();
                header.Add("Authorization", authKey);

                var response = await WebRequestHelper.GetAsync($"{authValidadeUrl}", header);

                if (!string.IsNullOrEmpty(response))
                {
                    try
                    {
                        var result = JsonConvert.DeserializeObject <LoginResult>(response);

                        if (isAuthorized && string.IsNullOrEmpty(result.UserName))
                        {
                            isAuthorized = false;
                        }
                        else
                        {
                            var claims = new List <Claim>();
                            foreach (var role in result.Claims ?? new List <ClaimResult>())
                            {
                                claims.Add(new Claim(role.Type, role.Value));
                            }
                            ClaimsIdentity  identity  = new ClaimsIdentity(claims);
                            ClaimsPrincipal principal = new ClaimsPrincipal(identity);
                            Thread.CurrentPrincipal = principal;
                        }
                    }
                    catch (Exception)
                    {
                        isAuthorized = false;
                    }
                }
                else
                {
                    isAuthorized = false;
                }
            }

            if (isAuthorized)
            {
                await next();
            }
            else
            {
                context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                context.Result = new JsonResult(
                    BusinessResult <VoidResult> .Create(
                        "Provide a valid access token (OAuth2).".ToMessageResult("unauthorized", MessageType.Error)
                        ));
            }
        }