コード例 #1
0
        public async Task InvokeAsync(HttpContext context, IStatusResponse statusResponse)
        {
            //Set IStatusResponse on response headers at end of request session
            context.Response.OnStarting(state =>
            {
                string statusRespStr = JsonSerializer.Serialize(statusResponse);
                context.Response.Headers.Add(SRR.HeaderKey, statusRespStr);
                return(Task.CompletedTask);
            }, context);

            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                //Typically would log whatever exception was thrown to a permanent place
                //Low-key just didn't want to impl a Logger NuGet .csproj that worked with a Logger.json file
                List <StatusDetail> details = new List <StatusDetail>()
                {
                    new StatusDetail()
                    {
                        Code = Status.Status900.UnknownCode.ToInt32(),
                        Desc = Status.StatusMessage.UnknownCode.GetValue()
                    },
                    new StatusDetail()
                    {
                        Code = Status.Status900.UnknownCode.ToInt32(),
                        Desc = ex.Message
                    }
                };
                statusResponse.SetStatusResponse(Status.Status500.FatalError, Status.StatusMessage.FatalError, details);
                context.Response.StatusCode    = (int)HttpStatusCode.NoContent;
                context.Response.ContentLength = 0;
                context.Response.Body          = Stream.Null;
            }
        }
コード例 #2
0
        public async Task InvokeAsync(HttpContext context, IStatusResponse statusResp)
        {
            List <StatusDetail> statusDetails;

            //Get Token from header
            if (!context.Request.Headers.TryGetValue(TokenMan.RequestHeaderKey, out StringValues headerVal))
            {
                FailForMissingToken();
                return;
            }
            string token = headerVal.FirstOrDefault();

            if (string.IsNullOrWhiteSpace(token))
            {
                FailForMissingToken();
                return;
            }

            //---Validations---
            //Signature validation
            bool isValid = TokenMan.ValidateTokenSignature(token);

            if (!isValid)
            {
                statusDetails = new List <StatusDetail>()
                {
                    new StatusDetail()
                    {
                        Code = Status300.TandemTokenNotValid.ToInt32(),
                        Desc = StatusMessage.TandemTokenNotValid.GetValue()
                    }
                };
                statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails);
                return;
            }
            //Expired validation
            isValid = !TokenMan.TokenIsExpired(token);
            if (!isValid)
            {
                statusDetails = new List <StatusDetail>()
                {
                    new StatusDetail()
                    {
                        Code = Status300.TandemTokenNotValid.ToInt32(),
                        Desc = StatusMessage.TandemTokenNotValid.GetValue()
                    }
                };
                statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails);
                return;
            }

            //Token valid, proceed
            await _next(context);

            //LOCAL HELPER FUNCTION
            void FailForMissingToken()
            {
                statusDetails = new List <StatusDetail>()
                {
                    new StatusDetail()
                    {
                        Code = Status300.TandemTokenNotFound.ToInt32(),
                        Desc = StatusMessage.TandemTokenNotFound.GetValue()
                    }
                };
                statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails);
            }
        }