示例#1
0
        private static void ObfuscatePassword(ApiPacket packet)
        {
            if (!packet.RequestBody.Contains("grant_type"))
            {
                return;
            }
            var startPos = packet.RequestBody.IndexOf("&password="******"password") && splitItem.Count() == 2)
                {
                    pwordLen = splitItem[1].Length;
                }
            }
            var password = packet.RequestBody.Substring(startPos + "&password="******"XXXXX");
        }
示例#2
0
 public static void WriteRequestHeaders(IOwinRequest request, ApiPacket packet)
 {
     packet.Verb = request.Method;
     ObfuscatePassword(packet);
     packet.RequestUri     = request.Uri.AbsoluteUri;
     packet.RequestHeaders = "{\r\n" + string.Join(Environment.NewLine, request.Headers.Select(kv => "\t" + kv.Key + "=" + string.Join(",", kv.Value))) + "\r\n}";
 }
示例#3
0
        public override void Clear()
        {
            var api = new ApiPacket(10, 4);

            api.Set("sessionid", Id);
            var response = TcpFrame.Send(api);

            IsSuccess(response);
        }
示例#4
0
        public override void Remove(string key)
        {
            var api = new ApiPacket(10, 3);

            api.Set("sessionid", Id);
            api.Set("key", key);
            var response = TcpFrame.Send(api);

            IsSuccess(response);
        }
示例#5
0
        public override void Set(string key, byte[] value)
        {
            var api = new ApiPacket(10, 2);

            api.Set("sessionid", Id);
            api.Set("key", key);
            api.Bytes = value;
            var response = TcpFrame.Send(api);

            IsSuccess(response);
        }
示例#6
0
        public override IEnumerable <string> GetKeys()
        {
            var api = new ApiPacket(10, 0);

            api.Set("sessionid", Id);
            var response = TcpFrame.Send(api);

            IsSuccess(response);

            var _keys = response.Obj == null?Array.Empty <string>() : response.Obj.Split('|').AsEnumerable();

            return(_keys);
        }
示例#7
0
        public override bool TryGetValue(string key, out byte[] value)
        {
            var api = new ApiPacket(10, 1);

            api.Set("sessionid", Id);
            api.Set("key", key);
            var response = TcpFrame.Send(api);

            IsSuccess(response);

            value = response.Bytes;

            return(value != null);
        }
        private ApiResponse <object> GetApiResponse(ApiPacketRequest apr, List <object> list, long totalRecord)
        {
            ApiResponse <object> returnObject = new ApiResponse <object>();
            ApiPacket <object>   fp           = new ApiPacket <object>()
            {
                PacketList = list
            };
            ApiResponse <object> response = new ApiResponse <object>()
            {
                Success     = list != null ? true : false,
                ApiPacket   = fp,
                PageNo      = apr.PageNo,
                PageSize    = apr.PageSize,
                TotalRecord = totalRecord,
                Message     = list != null ? "Record Fetched successfully." : "Record Fetched fail.",
                Status      = list != null ? 200 : 400
            };

            Tools.CopyClass(returnObject.ApiPacket, fp);
            Tools.CopyClass(returnObject, response);
            returnObject.ApiPacket.PacketList = new List <object>();
            returnObject.ApiPacket.PacketList.AddRange(list);
            return(returnObject);
        }
        public ApiResponse <Object> GetPacketByUserId(ApiPacketRequest apr)
        {
            ApiResponse <Object> returnObject = new ApiResponse <Object>();
            List <object>        obj          = new List <object>();

            switch (apr.TableName)
            {
            case "Login":
            {
                UsersLogin query             = JsonConvert.DeserializeObject <UsersLogin>(apr.ApiPacket.Packet.ToString());
                var        result            = new AspNetUsers().Login(query);
                ApiPacket <LoginResponse> fp = new ApiPacket <LoginResponse>()
                {
                    Packet = new LoginResponse()
                };
                if (result != null)
                {
                    returnObject.ApiPacket.Packet = new LoginResponse()
                    {
                        UserInfo = result.UserInfo                                                          /*, BlockInfo = result.BlockInfo ServicePoint = result.ServicePoint, GeoLocation = result.GeoLocation*/
                    };
                }
                ApiResponse <LoginResponse> response = new ApiResponse <LoginResponse>()
                {
                    Success     = result != null ? true : false,
                    ApiPacket   = fp,
                    PageNo      = apr.PageNo,
                    PageSize    = apr.PageSize,
                    TotalRecord = 0,
                    Message     = result != null ? "Login successfully." : "Invalid Username or Password",
                    Status      = result != null ? 200 : 400
                };
                Tools.CopyClass(returnObject, response);
                break;
                //return returnObject;
            }

            case "UserGeo":
            {
                var result = new PermittedGeoLocation().GetPermittedGeoLocation(new PermittedGeoLocationRM {
                        UserId = apr.UserId
                    });;


                ApiPacket <PermittedGeoLocationViewModels> fp = new ApiPacket <PermittedGeoLocationViewModels>()
                {
                    Packet = new PermittedGeoLocationViewModels()
                };
                if (result != null)
                {
                    returnObject.ApiPacket.Packet = new PermittedGeoLocationViewModels()
                    {
                        District = result.District, Upazila = result.Upazila, Unions = result.Unions, Village = result.Village, CenterInfo = result.CenterInfo, CampInfo = result.CampInfo
                    };
                }

                ApiResponse <PermittedGeoLocationViewModels> response = new ApiResponse <PermittedGeoLocationViewModels>()
                {
                    Success     = result != null ? true : false,
                    ApiPacket   = fp,
                    PageNo      = apr.PageNo,
                    PageSize    = apr.PageSize,
                    TotalRecord = 0,
                    Message     = result != null ? "Record Fetched successfully." : "Record Fetched fail.",
                    Status      = result != null ? 200 : 400
                };
                Tools.CopyClass(returnObject, response);
                break;
            }

            case "UniqueId":
            {
                var requestObject = JsonConvert.DeserializeObject <RequestForUniqueId>(apr.ApiPacket.Packet.ToString());
                var result        = new UniqueId().SaveAndGet(requestObject ?? new RequestForUniqueId(), apr.UserId);
                returnObject = GetApiResponse(apr, result.ToList <object>(), result.Count);
                break;
            }

            case "SpinnerData":
            {
                var         spinnerRequest = JsonConvert.DeserializeObject <SpinnerRequest>(apr.ApiPacket.Packet.ToString());
                SpinnerData spinner        = new SpinnerData();
                var         result         = spinner.APIGetSpinnerData(QueryFromAPIPacketRequest(apr), spinnerRequest);
                obj.AddRange(result);
                returnObject = GetApiResponse(apr, obj, apr.TotalRecord != 0 ? spinner.APIGetTotalRecord(QueryFromAPIPacketRequest(apr), spinnerRequest) : apr.TotalRecord);
                break;
            }

            case "BlockInfo":
            {
                var requestObject = new ForApiResponse()
                {
                    UserId = apr.UserId
                };
                BlockInfo blockinfo = new BlockInfo();
                var       result    = blockinfo.APIGetBlockList(requestObject);
                obj.AddRange(result);
                returnObject = GetApiResponse(apr, result.ToList <object>(), result.Count);
                break;
            }

            default:
            {
                ApiResponse <object> response = new ApiResponse <object>()
                {
                    Success     = false,
                    ApiPacket   = null,
                    PageNo      = apr.PageNo,
                    PageSize    = apr.PageSize,
                    TotalRecord = 0,
                    Message     = "Table is not registered to System",
                    Status      = 400
                };
                return(response);
            }
            }
            return(returnObject);
        }
示例#10
0
        public static void Main(string[] args)
        {
            //Console.BackgroundColor = ConsoleColor.Cyan;
            //Console.ForegroundColor = ConsoleColor.White;

            TcpEventQueue.OnInterceptor(EnServer.SendMsg, true);
            TcpEventQueue.OnInterceptor(EnServer.Receive, true);

            TcpEventQueue.OnInterceptor(EnClient.SendMsg, true);
            TcpEventQueue.OnInterceptor(EnClient.Receive, true);

            ClientFrame client1 = new(Tool.Sockets.SupportCode.TcpBufferSize.Default, 108, true);

            //DataTcp.AddDataTcps(Assembly.LoadFrom(@"D:\Nixue工作室\Tool.Net\WebTestApp\bin\Debug\net5.0\WebTestApp.dll"));

            client1.SetCompleted((a, b, c) =>
            {
                //Console.WriteLine("\nIP:{0} \t{1} \t{2}", a, b, c.ToString("yyyy/MM/dd HH:mm:ss:fffffff"));

                if (b == Tool.Sockets.SupportCode.EnClient.Connect) //|| b == Tool.Sockets.SupportCode.EnClient.Receive)
                {
                    //Cstest();
                    //var data = new ApiPacket(1, 102);
                    //int c2 = ++c1;
                    //data.Set("a", c2);
                    //data.Set("path", StringExtension.GetGuid() + ".jpg");
                    //data.Bytes = System.IO.File.ReadAllBytes(@"C:\Users\Administrator\Downloads\3cd107e4ec103f614b6f7f1eca9e18e6.jpeg");
                    ////var mag = client.Send(data);
                    ////Console.WriteLine("请求结果:{0},{1},{2} \t{3}", mag.Obj, mag.OnTcpFrame, c.ToString("yyyy/MM/dd HH:mm:ss:fffffff"), ++c1);

                    ////client.SendAsync(data, (a1) => Console.WriteLine("请求结果:{0},{1},{2} \t{3}", a1.Obj, a1.OnTcpFrame, c.ToString("HH:mm:ss:fff"), c2));//, client.LocalPoint

                    //System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
                    //client.SendAsync(data, (a1) => Console.WriteLine("请求结果:{0},{1} \t{2}ms \t{3}", a1.Obj, a1.OnTcpFrame, stopwatch.ElapsedMilliseconds, c2));
                }
            });

            client1.ConnectAsync("127.0.0.1", 444);//127.0.0.1

            int c1 = 0;
            //for (int i = 0; i < 1; i++)
            //{
            ClientFrame client = new(TcpBufferSize.Default, 108, true);

            client.SetCompleted((a, b, c) =>
            {
                Console.WriteLine("\nIP:{0} \t{1} \t{2}", a, b, c.ToString("yyyy/MM/dd HH:mm:ss:fffffff"));

                if (b == EnClient.Connect) //|| b == Tool.Sockets.SupportCode.EnClient.Receive)
                {
                    Cstest();
                    //var data = new ApiPacket(1, 102);
                    //int c2 = ++c1;
                    //data.Set("a", c2);
                    //data.Set("path", StringExtension.GetGuid() + ".jpg");
                    //data.Bytes = System.IO.File.ReadAllBytes(@"C:\Users\Administrator\Downloads\3cd107e4ec103f614b6f7f1eca9e18e6.jpeg");
                    ////var mag = client.Send(data);
                    ////Console.WriteLine("请求结果:{0},{1},{2} \t{3}", mag.Obj, mag.OnTcpFrame, c.ToString("yyyy/MM/dd HH:mm:ss:fffffff"), ++c1);

                    ////client.SendAsync(data, (a1) => Console.WriteLine("请求结果:{0},{1},{2} \t{3}", a1.Obj, a1.OnTcpFrame, c.ToString("HH:mm:ss:fff"), c2));//, client.LocalPoint

                    //System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
                    //client.SendAsync(data, (a1) => Console.WriteLine("请求结果:{0},{1} \t{2}ms \t{3}", a1.Obj, a1.OnTcpFrame, stopwatch.ElapsedMilliseconds, c2));
                }
            });

            client.ConnectAsync("127.0.0.1", 444);//120.79.58.17
            client.AddKeepAlive(5);
            //}

            void Cstest()
            {
                Task.Run(() =>
                {
                    var data = new ApiPacket(1, 102);
                    //data.Set("a", c2);
                    data.Set("path", StringExtension.GetGuid() + ".jpg");

                    System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
                    while (true)
                    {
                        int c2 = ++c1;
                        stopwatch.Restart();

                        try
                        {
                            data.Bytes = System.IO.File.ReadAllBytes("3cd107e4ec103f614b6f7f1eca9e18e6.jpeg");
                        }
                        catch (Exception)
                        {
                            data.Bytes = new byte[] { 1, 0, 1 };
                        }
                        //client.SendAsync(data, (a1) =>
                        //{
                        //    Console.WriteLine("请求结果:{0},{1} \t{2}ms \t{3}", a1.Obj, a1.OnTcpFrame, stopwatch.ElapsedMilliseconds, c2);
                        //});var mag = client.Send( data); //
                        //var mag = client.SendIpIdea(client1.LocalPoint, data);
                        var mag = client.Send(data);
                        Console.WriteLine("请求结果:{0},{1} \t{2}ms \t{3}", mag.Text, mag.OnTcpFrame, stopwatch.Elapsed.TotalMilliseconds, c2);
                        System.Threading.Thread.Sleep(5 * 200);
                        //break;
                    }
                });
            }

            ServerFrame server = new(108);

            server.SetCompleted((a, b, c) =>
            {
                Console.WriteLine("IP:{0} \t{1} \t{2}", a, b, c.ToString("yyyy/MM/dd HH:mm:ss:fffffff"));
            });

            server.StartAsync("127.0.0.1", 444);

            Console.ReadLine();

            System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
            long cot = 0;

            while (true)
            {
                stopwatch.Restart();
                //Console.Write("输入参数:");
                //string str = Console.ReadLine();
                //if (string.IsNullOrWhiteSpace(str)) { Console.WriteLine(); continue; }
                var data = new ApiPacket(1, 100, 100);
                data.Set("a", cot++);

                var mag = client.Send(data);

                //client.SendAsync(data).ContinueWith(s =>
                //{
                //    var mag = s.Result;
                //    Console.WriteLine("\n请求结果:{0},{1} \t{2}ms", mag.Text, mag.OnTcpFrame, stopwatch.Elapsed.TotalMilliseconds);
                //});
                Console.WriteLine("请求结果:{0},{1} \t{2}ms", mag.Text, mag.OnTcpFrame, stopwatch.Elapsed.TotalMilliseconds);

                if (cot == 100)
                {
                    break;
                }
            }

            Console.ReadLine();
        }
示例#11
0
        public override async Task Invoke(IOwinContext context)
        {
            //Don't log if the isLoggingEnabled = false or Swagger requests.
            if (!_isLoggingEnabled || context.Request.Uri.AbsoluteUri.ToLower().Contains("localhost"))
            {
                //skip the middleware logger
                await _next.Invoke(context);

                return;
            }
            //public async Task Invoke(IDictionary<string, object> environment)
            //{
            //    IOwinContext context = new OwinContext(environment);


            // Get the identity
            var identity = (context.Request.User != null && context.Request.User.Identity.IsAuthenticated)
                ? context.Request.User.Identity.Name
                : "(anonymous)";


            // Buffer the request (body is a string, we can use this to log the request later
            var requestBody = new StreamReader(context.Request.Body).ReadToEnd();
            var requestData = Encoding.UTF8.GetBytes(requestBody);

            context.Request.Body = new MemoryStream(requestData);

            var apiPacket = new ApiPacket
            {
                CallerIdentity   = identity,
                RequestBody      = requestBody,
                RequestLength    = context.Request.Body.Length,
                RequestTimestamp = DateTime.Now // HttpContext.Current.Timestamp
            };

            var replayId = LoggingHelper.GetReplayId(requestBody);

            if (replayId != 0)
            {
                apiPacket.ReplayId = replayId;
            }
            apiPacket.CallerIdentity = SplitRequestBody(requestBody, "username");


            // Buffer the response
            var responseBuffer = new MemoryStream();
            var responseStream = context.Response.Body;

            context.Response.Body = responseBuffer;

            // add the "http-correlation-id" response header so the user can correlate back to this entry
            var responseHeaders = (IDictionary <string, string[]>)context.Environment["owin.ResponseHeaders"];
            //responseHeaders["http-correlation-id"] = new[] { apiPacket.CorrelationId.ToString("d") };

            await _next.Invoke(context);

            responseBuffer.Seek(0, SeekOrigin.Begin);
            var reader = new StreamReader(responseBuffer);

            apiPacket.Response = await reader.ReadToEndAsync();

            //If you need code to check for a specific request and modify the associated response
            //if (context.Request.Path.Value == @"/token")
            //{
            //    responseBuffer.Seek(0, SeekOrigin.Begin);
            //    var reader = new StreamReader(responseBuffer);
            //    apiPacket.Response = await reader.ReadToEndAsync();

            //    JObject jResp = JObject.Parse(apiPacket.Response);
            //    JObject jUserGuid = JObject.Parse(@"{'UserGuid':'PutUseGuidValueHere'}");
            //    jResp.Add("UserGuid", JToken.FromObject("UserGuidValue"));
            //    apiPacket.Response = jResp.ToString();


            //    var writeStream = new MemoryStream();
            //    StreamWriter writer = new StreamWriter(writeStream);
            //    writer.Write(apiPacket.Response);
            //    writer.Flush();
            //    writeStream.Position = 0;

            //    responseBuffer.Seek(0, SeekOrigin.Begin);
            //    writeStream.CopyTo(responseBuffer);
            //}

            //context.Response.Body = responseBuffer;
            apiPacket.ResponseLength = context.Response.ContentLength ?? 0;
            apiPacket.Duration       = (DateTime.Now - apiPacket.RequestTimestamp).TotalSeconds;

            //Make sure that user and the user identity is not null and that claims is not null before you look for the CorrelationId and AdUserName
            //or you will get a null ref error
            string trackingId;

            if (((ClaimsIdentity)context.Authentication.User?.Identity)?.Claims.FirstOrDefault() != null)
            {
                if (context.Authentication.User != null)
                {
                    trackingId = ((ClaimsIdentity)context.Authentication.User.Identity).Claims.FirstOrDefault(x => x.Type.ToUpper() == "SFCORRELATIONID")?.Value;
                    Guid.TryParse(trackingId, out Guid trackGuid);
                    apiPacket.CorrelationId  = trackGuid;
                    apiPacket.CallerIdentity = ((ClaimsIdentity)context.Authentication.User.Identity).Claims.FirstOrDefault(x => x.Type.ToUpper() == "SFADUSERNAME")?.Value;
                }

                context.Environment.TryGetValue("owin.CallCancelled", out var cancellation);
                if (cancellation != null)
                {
                    var token = (CancellationToken)cancellation;
                    if (token.IsCancellationRequested == false)
                    {
                        responseHeaders["http-correlation-id"] = new[] { apiPacket.CorrelationId.ToString("d") }
                    }
                    ;
                }
            }

            else if (responseHeaders != null && responseHeaders.ContainsKey("http-correlation-id") && responseHeaders["http-correlation-id"].FirstOrDefault() != Guid.Empty.ToString())
            {
                trackingId = responseHeaders["http-correlation-id"].FirstOrDefault();
                Guid.TryParse(trackingId, out Guid trackGuid);
                apiPacket.CorrelationId = trackGuid;
            }

            WriteRequestHeaders(context.Request, apiPacket);
            WriteResponseHeaders(context.Response, apiPacket);

            _logThisError = apiPacket.StatusCode != (int)HttpStatusCode.OK;
            try
            {
                //Persist the ApiPacket in the database ignore any logging errors ex: (System.Web.HttpException (0x80004005): Server cannot append header after HTTP headers have been sent.
                await _httpLoggerRepository.InsertApiPacketAsync(_isLoggingEnabled, apiPacket, _logThisError);
            }

            finally
            {
                // You need to do the following so that the buffered response is flushed out to the client application.
                responseBuffer.Seek(0, SeekOrigin.Begin);
                await responseBuffer.CopyToAsync(responseStream);
            }
        }
示例#12
0
 private static void WriteResponseHeaders(IOwinResponse response, ApiPacket packet)
 {
     packet.StatusCode      = response.StatusCode;
     packet.ReasonPhrase    = response.ReasonPhrase;
     packet.ResponseHeaders = "{\r\n" + string.Join(Environment.NewLine, response.Headers.Select(kv => "\t" + kv.Key + "=" + string.Join(",", kv.Value))) + "\r\n}";
 }