示例#1
0
        public ApiResult HandleRequest <TRequest, TResponse>(string apiActionName, TRequest request, RequestContext reqContext,
                                                             Func <TRequest, IFullTrace, ApiResult <TResponse> > handler, AccessLevel defaultAccessLevel = AccessLevel.NoLimit)
        {
            ServiceSession.Current = new ServiceSession();
            ServiceSession.Current.RequestContext = reqContext;

            using (var trace = CreateTrace(reqContext))
            {
                trace.Method      = apiActionName;
                trace.ApiName     = this.ApiName;
                trace.ServiceType = this.Domain;

                var inspectContext = new InspectContext <TRequest>
                {
                    Request        = request,
                    RequestContext = reqContext,
                    Trace          = trace,
                    AccessLevel    = defaultAccessLevel,
                    ApiName        = this.ApiName,
                    Domain         = this.Domain,
                };

                var fullActionName = string.Format("{0}.{1}.{2}", ApiName, apiActionName, Domain);

                MakeupInpectContext(inspectContext, fullActionName);

                return(_handler.Handle(inspectContext, handler));
            }
        }
示例#2
0
        public override void BeforeHandle <TRequest>(InspectContext <TRequest> inspectCxt)
        {
            inspectCxt.Trace.Start();

            inspectCxt.Trace.LocalIp    = NetWorkHelper.GetLocalIp();
            inspectCxt.Trace.Parameters = JsonHelper.ToJson(inspectCxt.Request);
        }
示例#3
0
        public override void BeforeHandle <TRequest>(InspectContext <TRequest> inspectCxt)
        {
            string userId;

            if (TryGetUserId(inspectCxt, out userId))
            {
                inspectCxt.Trace.User = userId;
            }
        }
示例#4
0
        public override void AfterHandle <TRequest>(InspectContext <TRequest> inspectCxt, ApiResult result)
        {
            inspectCxt.Trace.Result = result;

            inspectCxt.Trace.Stop();

            var traceLevel = GetTraceLevel(inspectCxt.Trace, result.Success);

            var option = inspectCxt.ActionConfig == null ? ActionAccessConfig.DefaultLogOption : inspectCxt.ActionConfig.LogOption;

            SaveTrace(inspectCxt.Trace, traceLevel, option, inspectCxt.Domain);
        }
示例#5
0
        private bool TryGetUserId <TRequest>(InspectContext <TRequest> inspectCxt, out string userId)
        {
            var userRequest = inspectCxt.Request as IUserRequest;

            userId = null;

            if (userRequest != null && !string.IsNullOrWhiteSpace(userRequest.UserId))
            {
                userId = userRequest.UserId;
            }

            return(!string.IsNullOrWhiteSpace(userId));
        }
示例#6
0
        protected override ApiResult HandleImpl <TRequest>(InspectContext <TRequest> inspectCxt,
                                                           Func <TRequest, IFullTrace, ApiResult> finalFunc)
        {
            string error;
            bool   pass = CheckRequest(inspectCxt.Request, out error);

            inspectCxt.Trace.StepTrace.AddStep(string.Format("end check param [{0}] {1}", pass ? "passed" : "not pass", error));

            if (!pass)
            {
                return(ApiResult.MakeFailedResult(error));
            }

            return(base.HandleImpl(inspectCxt, finalFunc));
        }
示例#7
0
        private void MakeupInpectContext(InspectContext context, string actionName)
        {
            context.ActionConfig = RetrieveActionConfig(actionName);

            if (context.Trace != null)
            {
                context.Trace.StepTrace.SerializeResult = false;
                if (context.ActionConfig != null)
                {
                    context.Trace.StepTrace.SerializeResult = context.ActionConfig.ServiceDebug;
                }

                // todo: add core & cache handle inject later
                ServiceAccessBase.Trace = context.Trace;
                // CachedDataHelper.Trace = context.Trace;
            }
        }
示例#8
0
        public ApiResult Handle <TRequest>(InspectContext <TRequest> inspectCxt, Func <TRequest, IFullTrace, ApiResult> finalFunc)
        {
            if (Next != null)
            {
                try
                {
                    return(Next.Handle(inspectCxt, finalFunc));
                }
                catch (Exception ex)
                {
                    inspectCxt.Trace.SetException(ex);

                    return(ApiResult.MakeFailedResult(ErrorMessageCollection.SystemException));
                }
            }

            return(ApiResult.MakeFailedResult(ErrorMessageCollection.SystemInnerError));
        }
示例#9
0
        public override void BeforeHandle <TRequest>(InspectContext <TRequest> inspectCxt)
        {
            if (inspectCxt.RequestContext == null)
            {
                inspectCxt.RequestContext = new RequestContext();

                inspectCxt.Trace.RequestContext = inspectCxt.RequestContext;
            }

            if (inspectCxt.RequestContext.Device == null)
            {
                inspectCxt.RequestContext.Device = new RequestDevice();
            }

            if (inspectCxt.RequestContext.Channel == null)
            {
                inspectCxt.RequestContext.Channel = new RequestChannel();
            }

            inspectCxt.RequestContext.Device.Ip         = NetWorkHelper.GetClientIP();
            inspectCxt.RequestContext.Channel.UserAgent = HttpContext.Current.Request.UserAgent;

            do
            {
                if (string.IsNullOrEmpty(inspectCxt.RequestContext.Device.DeviceType))
                {
                    inspectCxt.RequestContext.Device.DeviceType = "Andriod";

                    if (!string.IsNullOrEmpty(inspectCxt.RequestContext.Channel.UserAgent) &&
                        inspectCxt.RequestContext.Channel.UserAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        inspectCxt.RequestContext.Device.DeviceType = "IPhone";
                    }

                    break;
                }

                if (inspectCxt.RequestContext.Device.DeviceType.IndexOf("ios", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    inspectCxt.RequestContext.Device.DeviceType = "IPhone";
                    break;
                }
            } while (false);
        }
示例#10
0
        protected override ApiResult HandleImpl <TRequest>(InspectContext <TRequest> inspectCxt,
                                                           Func <TRequest, IFullTrace, ApiResult> finalFunc)
        {
            var request = inspectCxt.Request as WithTokenRequest;

            if (request != null)
            {
                var algoName = SelectAlgo(request.SelectANo);

                var attackDefender = new ReplayAttackDefender(new AuthKeyContainer());

                var    raParam = new ReplayAttackParam();
                string error;
                if (!attackDefender.Defend(raParam, algoName, out error))
                {
                    return(ApiResult.MakeFailedResult(error));
                }
            }

            return(base.HandleImpl(inspectCxt, finalFunc));
        }
示例#11
0
 public override void BeforeHandle <TRequest>(InspectContext <TRequest> inspectCxt)
 {
     inspectCxt.Trace.StepTrace.AddStep("begin detecting attack");
 }
示例#12
0
 public override void AfterHandle <TRequest>(InspectContext <TRequest> inspectCxt, Sparticle.Result.ApiResult result)
 {
 }
示例#13
0
 public override void AfterHandle <TRequest>(InspectContext <TRequest> inspectCxt, ApiResult result)
 {
     // do nothing
 }
示例#14
0
 public override void BeforeHandle <TRequest>(InspectContext <TRequest> inspectCxt)
 {
     inspectCxt.Trace.StepTrace.AddStep("begin check param");
 }