コード例 #1
0
        public override async Task Invoke(IOwinContext context)
        {
            var kernel = context.GetNinjectKernel();
            var logger = kernel.Get <ILogger>();
            var authenticationContext = kernel.Get <IAuthenticationContext>();

            if (authenticationContext.Method == AuthenticationMethod.KitosToken)
            {
                var requestStart    = DateTime.UtcNow;
                var route           = context.Request.Path;
                var method          = context.Request.Method;
                var queryParameters = GetQueryParameters(context.Request.Query);
                var userId          = authenticationContext.UserId.GetValueOrDefault(INVALID_ID);
                logger.Information("Route: {route} Method: {method} QueryParameters: {queryParameters} UserID: {userID} RequestStartUTC: {requestStart}", route, method, queryParameters, userId, requestStart);
                try
                {
                    await Next.Invoke(context);
                }
                finally
                {
                    var requestEnd = DateTime.UtcNow;
                    logger.Information("Route: {route} Method: {method} QueryParameters: {queryParameters} UserID: {userID} RequestEndUTC: {requestEnd}", route, method, queryParameters, userId, requestEnd);
                }
            }
            else
            {
                await Next.Invoke(context);
            }
        }
コード例 #2
0
        public override async Task Invoke(IOwinContext context)
        {
            var kernel        = context.GetNinjectKernel();
            var correlationId = Guid.NewGuid();

            using (LogContext.PushProperty("CorrelationId", correlationId.ToString()))
            {
                await Next.Invoke(context);
            }
        }
コード例 #3
0
        public override async Task Invoke(IOwinContext context)
        {
            var kernel = context.GetNinjectKernel();
            var logger = kernel.Get <ILogger>();
            var authenticationContext = kernel.Get <IAuthenticationContext>();

            if (authenticationContext.Method == AuthenticationMethod.KitosToken)
            {
                var query         = context.Request.Query;
                var resultLimiter = ContainsResultLimit(query);
                switch (resultLimiter)
                {
                case PageSizer.Top:
                    if (int.TryParse(query.Get("$top"), out var topPageSize))
                    {
                        LogIfExcessivePageSize(topPageSize, PageSizer.Top, logger);
                        break;
                    }
                    else
                    {
                        context.Response.StatusCode = 400;
                        context.Response.Write($"The value of the \"$top\" parameter must be a number between 0 and {MaxPageSize}");
                        return;
                    }

                case PageSizer.Take:
                    if (int.TryParse(query.Get("take"), out var takePageSize))
                    {
                        LogIfExcessivePageSize(takePageSize, PageSizer.Take, logger);
                        break;
                    }
                    else
                    {
                        context.Response.StatusCode = 400;
                        context.Response.Write($"The value of the \"take\" parameter must be a number between 0 and {MaxPageSize}");
                        return;
                    }

                case PageSizer.None:
                default:
                    break;
                }
            }

            await Next.Invoke(context);
        }
コード例 #4
0
        public override async Task Invoke(IOwinContext context)
        {
            var kernel = context.GetNinjectKernel();
            var logger = kernel.Get <ILogger>();
            var authenticationContext = kernel.Get <IAuthenticationContext>();

            if (IsKitosTokenAuthenticated(authenticationContext) && IsIllegalMutationAttempt(context))
            {
                logger.Warning("User with id: {userID} attempted to mutate resource: {url} by method {method}",
                               authenticationContext.UserId, context.Request.Uri.ToString(), context.Request.Method);
                context.Response.StatusCode = 403;
                context.Response.Write("Det er ikke tilladt at skrive data via APIet");
            }
            else
            {
                await Next.Invoke(context);
            }
        }
コード例 #5
0
        public override async Task Invoke(IOwinContext context)
        {
            var kernel = context.GetNinjectKernel();
            var logger = kernel.Get <ILogger>();
            var authenticationContext = kernel.Get <IAuthenticationContext>();

            if (authenticationContext.Method == AuthenticationMethod.KitosToken && !authenticationContext.HasApiAccess)
            {
                logger.Warning("User with id: {userID} made an API call without having API access",
                               authenticationContext.UserId);
                context.Response.StatusCode = 403;
                context.Response.Write("Du har ikke tilladelse til at kalde API endpoints");
            }
            else
            {
                await Next.Invoke(context);
            }
        }