Esempio n. 1
0
        public IHttpActionResult PostTypeRequest(TypeRequest typeRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.TypeRequests.Add(typeRequest);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                if (TypeRequestExists(typeRequest.typeReaquest_id))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtRoute("DefaultApi", new { id = typeRequest.typeReaquest_id }, typeRequest));
        }
Esempio n. 2
0
        public override async Task<bool> Execute(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;

            switch (_typeRequest)
            {
                case TypeRequest.Start:
                    _typeRequest = TypeRequest.Resource;
                    await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, Base.DEFAULT_MSG);
                    break;

                case TypeRequest.Resource:
                    var ret = ApiExplorer.Usage(PveHelper.GetClassApiRoot(PveHelper.GetClient()),
                                                message.Text.Trim(),
                                                ApiExplorer.OutputType.Html,
                                                true,
                                                null,
                                                true);

                    await botClient.SendDocumentAsyncFromText(message.Chat.Id, ret, "Usage.html");
                    endCommand = true;
                    break;

                default: break;
            }

            return await Task.FromResult(endCommand);
        }
Esempio n. 3
0
        public IHttpActionResult PutTypeRequest(int id, TypeRequest typeRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != typeRequest.typeReaquest_id)
            {
                return(BadRequest());
            }

            // db.Entry(typeRequest).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TypeRequestExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Esempio n. 4
0
        public override async Task <bool> Execute(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;

            switch (_typeRequest)
            {
            case TypeRequest.Start:
                _typeRequest = TypeRequest.Resource;
                await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id,
                                                               "Insert <b>resource</b> (eg nodes)");

                break;

            case TypeRequest.Resource:
                var ret = ApiExplorer.Usage(PveHelper.GetClassApiRoot(),
                                            message.Text.Trim(),
                                            true,
                                            null,
                                            true);

                await botClient.SendDocumentAsyncFromText(message.Chat.Id, ret, "Usage.txt");

                endCommand = true;
                break;

            default: break;
            }

            return(await Task.FromResult(endCommand));
        }
Esempio n. 5
0
        public IHttpActionResult GetTypeRequest(int id)
        {
            TypeRequest typeRequest = db.TypeRequests.Find(id);

            if (typeRequest == null)
            {
                return(NotFound());
            }

            return(Ok(typeRequest));
        }
Esempio n. 6
0
        public Request(TypeRequest type, EndPoint from, String path, String query, String host, String userAgent, String language)
        {
            this.type = type;
            this.from = from;

            this.path      = path;
            this.query     = query;
            this.host      = host;
            this.userAgent = userAgent;
            this.language  = language;
        }
Esempio n. 7
0
        public IHttpActionResult DeleteTypeRequest(int id)
        {
            TypeRequest typeRequest = db.TypeRequests.Find(id);

            if (typeRequest == null)
            {
                return(NotFound());
            }

            db.TypeRequests.Remove(typeRequest);
            db.SaveChanges();

            return(Ok(typeRequest));
        }
Esempio n. 8
0
        private Type GetRequestType(MultiRootConnector col, string name)
        {
            for (int i = 0; i < typeRequests.Count; i++)
            {
                TypeRequest typeRequest = typeRequests[i];
                if (typeRequest.Name == name)
                {
                    // 対応する型が見つかった

                    return(col.SelectedVariableType[i]);
                }
            }
            return(null);
        }
Esempio n. 9
0
        public IStoreConfiguration <TState> UseReducer <TReducerType, TSectionType>(Expression <StateSubSectionSelectionDelegate <TState, TSectionType> > sectionSelector)
            where TReducerType : IReducer <TSectionType>
        {
            Type reducerType = typeof(ReducerSection <TState, TReducerType, TSectionType>);

            IParameter[] parameters = new IParameter[]
            {
                ConstantParameter.Create <ITypeRequest>("subReducer", new TypeRequest(typeof(TReducerType))),
                ConstantParameter.Create <Expression <StateSubSectionSelectionDelegate <TReducerType, TSectionType> > >(nameof(sectionSelector), sectionSelector)
            };

            TypeRequest typeRequest = new TypeRequest(reducerType, parameters);

            m_reducers.Add(typeRequest);
            return(this);
        }
Esempio n. 10
0
        public static Request InitializeRequest(String msg, TcpClient client, TypeRequest type)
        {
            if (String.IsNullOrEmpty(msg))
            {
                return(null);
            }

            const char newLine = '\n';

            String[] tokents = msg.Split(newLine);


            var(host, userAgent, language, fullpath) = DefaultParse(tokents);

            switch (type)
            {
            case TypeRequest.GET:
            {
                var(path, query) = GetRequest(tokents, fullpath);
                var request = new Request(type, client.Client.RemoteEndPoint, path, query, host, userAgent, language);
                var Querys  = ParserRequest.GETQuerys(query);
                request.InitializeGET(Querys);

                return(request);
            }

            case TypeRequest.POST:
            {
                var(contentType, contentLength, referer, query) = PostRequest(tokents, client);
                var request = new Request(type, client.Client.RemoteEndPoint, fullpath, query, host, userAgent, language);
                var Querys  = ParserRequest.GETQuerys(query);
                request.InitializePOST(referer, contentType, contentLength, Querys);

                return(request);
            }

            default: break;
            }

            return(default(Request));
        }
Esempio n. 11
0
        private async Task <bool> ExecuteOrChoose(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;
            var cmdArgs    = StringHelper.TokenizeCommandLineToList(_messageText);

            if (cmdArgs.Count == 0)
            {
                //request resource
                _typeRequest = TypeRequest.Resource;
                await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id,
                                                               "Insert <b>resource</b> (eg nodes)");
            }
            else
            {
                var resource = cmdArgs[0];
                if (!resource.StartsWith("/"))
                {
                    resource = "/" + resource;
                }
                var requestArgs    = StringHelper.GetArgumentTags(resource);
                var parameters     = cmdArgs.ToArray()[1..];
Esempio n. 12
0
        public TStoreType CreateStore <TStoreType>() where TStoreType : IStore <TState>
        {
            if (m_activatorTypeRequest == null)
            {
                throw new MissingActivatorException();
            }

            List <IReducer <TState> > reducers    = new List <IReducer <TState> >();
            List <IMiddleware>        middlewares = new List <IMiddleware>();
            List <IParameter>         parameters  = new List <IParameter>();

            // Create activator
            IActivator activator = DefaultActivator.Get <IActivator>(m_activatorTypeRequest);

            parameters.Add(ConstantParameter.Create <IActivator>(nameof(activator), activator));

            // Logging
            ILog logger = activator.Get <ILog>(m_loggerTypeRequest);

            parameters.Add(new ConstantParameter("log", logger, typeof(ILog)));

            foreach (ITypeRequest singletonRequest in m_singletonTypeRequests)
            {
                object instance = activator.Get(singletonRequest, parameters);

                IParameter parameter = new ConstantParameter("", instance, singletonRequest.Type);

                parameters.Add(parameter);
            }

            foreach (ITypeRequest reducerTypeRequest in m_reducers)
            {
                IReducer <TState> reducer = activator.Get <IReducer <TState> >(reducerTypeRequest, parameters);
                reducers.Add(reducer);
            }

            ReducerMiddleware <TState> rootDispatcher = new ReducerMiddleware <TState>(reducers);

            ActionDispatchDelegate next = rootDispatcher.InvokeAsync;

            foreach (ITypeRequest middlewareTypeRequest in m_middleware)
            {
                IParameter          nextParameter      = ConstantParameter.Create <ActionDispatchDelegate>("next", next);
                IAbstractMiddleware abstractMiddleware = activator.Get <IAbstractMiddleware>(middlewareTypeRequest, parameters.Clone(nextParameter));
                switch (abstractMiddleware)
                {
                case IMiddleware middleware:
                    next = (p) => middleware.InvokeAsync(p);
                    break;

                case IMiddleware <TState> typedMiddleware:
                    next = (p) => typedMiddleware.InvokeAsync((ActionContext <TState>)p);
                    break;

                default:
                    throw new InvalidMiddlewareException(abstractMiddleware.GetType());
                }
            }

            IList <IParameter> storeParameters = parameters.Clone(
                ConstantParameter.Create <TState>("state", m_initialState),
                ConstantParameter.Create <ActionDispatchDelegate>("dispatch", next)
                );

            TypeRequest storeRequest = new TypeRequest(typeof(TStoreType));

            TStoreType store = DefaultActivator.Get <TStoreType>(storeRequest, storeParameters);

            return(store);
        }
 public override async Task RequestUrlAsync(TypeRequest typeRequest)
 {
     await CreatorRequestAsync(typeRequest);
 }
Esempio n. 14
0
        public static Task View(HttpContext context, ViewBag viewBag, ActionCheckLink Model, TypeRequest typeResponse, bool NotCache = false)
        {
            #region Код ответа
            if (viewBag.IsErrorRule)
            {
                context.Response.StatusCode = 500;
            }
            else
            {
                switch (Model)
                {
                case ActionCheckLink.allow:
                {
                    context.Response.StatusCode = 303;
                    break;
                }

                case ActionCheckLink.Is2FA:
                {
                    context.Response.StatusCode = 200;
                    break;
                }

                case ActionCheckLink.deny:
                {
                    context.Response.StatusCode = 403;
                    break;
                }

                default:
                {
                    context.Response.StatusCode = 500;
                    break;
                }
                }
            }
            #endregion

            // Данные ответа
            Trigger.OnResponseView((viewBag.IP, viewBag.UserAgent, viewBag.Referer, viewBag.DomainID, viewBag.method, viewBag.host, viewBag.uri, viewBag.FormData, context.Response.StatusCode, viewBag.IsCacheView));

            #region Локальный метод - "RenderTitle"
            string RenderTitle()
            {
                if (viewBag.IsErrorRule)
                {
                    return("Ошибка");
                }
                else
                {
                    switch (Model)
                    {
                    case ActionCheckLink.allow:
                        return("303");

                    case ActionCheckLink.deny:
                        return("Доступ запрещен");

                    case ActionCheckLink.Is2FA:
                        return("Aвторизация 2FA");

                    default:
                        return("Неизвестная ошибка");
                    }
                }
            }

            #endregion

            #region Локальный метод - "RenderScript"
            string RenderScript()
            {
                if (Model == ActionCheckLink.Is2FA)
                {
                    string hash = SHA256.Text($"{viewBag.host}:{viewBag.method}:{viewBag.uri}:{viewBag.Referer}:{PasswdTo.salt}");
                    return(@"
<script>
    function unlock(e)
    {
        e.preventDefault();
        document.getElementById('unlockError').style.display = 'none';

        var password = document.getElementById('unlockPassword').value;

        $.post('" + viewBag.CoreAPI + "/unlock/2fa', { password: password, host: '" + viewBag.host + "', method: '" + viewBag.method + "', uri: '" + WebUtility.UrlEncode(viewBag.uri) + "', referer: '" + WebUtility.UrlEncode(viewBag.Referer) + "', hash: '" + hash + @"' }, function (data)
        {
            var json = JSON.parse(JSON.stringify(data));

            if (json.msg) {
                document.getElementById('unlockError').style.display = 'block';
                document.getElementById('unlockError').innerText = json.msg;
            }
            else if (json.result) {
                window.location.reload();
            }
            else {
                document.getElementById('unlockError').style.display = 'block';
                document.getElementById('unlockError').innerText = 'Неизвестная ошибка';
            }
        })
    }
</script>");
                }

                return(string.Empty);
            }

            #endregion

            #region Локальный метод - "RenderBody"
            string RenderBody()
            {
                if (viewBag.IsErrorRule)
                {
                    return(@"<div class='code'>500</div>
                    <div class='title'>" + viewBag.ErrorTitleException + @"</div>
                    <pre>" + viewBag.ErrorRuleException + @"</pre>");
                }
                else if (Model == ActionCheckLink.Is2FA)
                {
                    return(@"<div class='code'>2FA</div>
                    <div class='title'>Aвторизация</div>
                    <pre>Введите пароль безопасности для 2FA</pre>

                    <form method='post' action='/' onsubmit='unlock(event)'>
                        <div class='form-group'>
                            <div class='input-group form'>
                                <span class='input-group-addon'><i class='fa fa-lock'></i></span>
                                <input class='form-control' id='unlockPassword' type='password' name='password'>
                            </div>

                            <button type='submit' class='btn-unlock'>Unlock</button>

                            <div id='unlockError' class='errorMsg'>eroror</div>
                        </div>
                    </form>");
                }
                else if (Model == ActionCheckLink.allow)
                {
                    return(@"<div class='code'>303</div>
                    <div class='title'>Отправить в backend</div>");
                }

                else if (Model == ActionCheckLink.deny)
                {
                    return(@"<div class='code'>403</div>
                    <div class='title'>Доступ запрещен</div>");
                }

                else
                {
                    return(@"<div class='code'>500</div>
                    <div class='title'>Неизвестная ошибка</div>");
                }
            }

            #endregion

            #region Локальный метод - "RenderDebug"
            string RenderDebug()
            {
                if (viewBag.DebugEnabled)
                {
                    #region jsonDomain
                    string jsonDomain()
                    {
                        if (viewBag.jsonDomain == null)
                        {
                            return(string.Empty);
                        }

                        return(Regex.Replace(viewBag.jsonDomain.Replace("\\\\", "\\"), "(<!--|-->|\"Auth2faToPasswd\": \"[^\"]+\")", r =>
                        {
                            switch (r.Groups[1].Value)
                            {
                            case "<!--":
                                return "&lt;!--";

                            case "-->":
                                return "--&gt;";

                            default:
                                {
                                    if (r.Groups[1].Value.StartsWith("\"Auth2faToPasswd\":"))
                                    {
                                        return "\"Auth2faToPasswd\": \"Используется\"";
                                    }
                                }
                                break;
                            }

                            return r.Groups[1].Value;
                        }));
                    }

                    #endregion

                    return(@"
<!--
IP:          " + viewBag?.IP + @"
UserAgent:   " + viewBag?.UserAgent + @"
method:      " + viewBag?.method + @"
host:        " + viewBag?.host + @"
uri:         " + viewBag?.uri + @"
FormData:    " + viewBag?.FormData + @"
Referer:     " + viewBag?.Referer + @"
IsCacheView: " + viewBag.IsCacheView + @"

" + viewBag.antiBotToGlobalConf?.Replace("\\\\", "\\")?.Replace("<!--", "&lt;!--")?.Replace("-->", "--&gt;") + @"


" + jsonDomain() + @"
-->
");
                }

                return(string.Empty);
            }

            #endregion

            #region Кешируем ответ
            if (jsonDB.Cache.Checklink != 0 && !NotCache && !viewBag.IsCacheView && context.Response.StatusCode != 200)
            {
                memoryCache.Set(KeyToMemoryCache.CheckLinkToCache(viewBag.method, viewBag.host, viewBag.uri), new ResponseView()
                {
                    ActionCheckLink = Model,
                    TypeResponse    = typeResponse,
                    IsErrorRule     = viewBag.IsErrorRule,
                    CacheTime       = viewBag.CreateCacheView
                }, TimeSpan.FromMilliseconds(jsonDB.Cache.Checklink));
            }
            #endregion

            #region Ответ без html
            if (!jsonDB.Base.DebugEnabled)
            {
                // Отдавать html ненужно
                if (context.Response.StatusCode == 303 || (Startup.cmd.StatusCode.Checklink && context.Response.StatusCode != 200))
                {
                    return(Task.FromResult(true));
                }
            }
            #endregion

            // Html ответ
            return(context.Response.WriteAsync(@"<!DOCTYPE html>
<html lang='ru-RU'>
<head>
    <title>" + RenderTitle() + @"</title>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'>
    <link rel='stylesheet' href='/statics/style.css'>
    " + (Model == ActionCheckLink.Is2FA ? "<script type='text/javascript' src='/statics/jquery.min.js'></script>" : string.Empty) + @"
</head>
<body>

" + RenderScript() + @"

    <div class='error'>
        <div class='error-block'>

            " + RenderBody() + @"

            <div class='copyright'>
                <div>
                    &copy; 2018 <strong>ISPCore</strong>. All rights reserved.
                </div>
                <div>
                    <a href='/'>Главная сайта</a> / <a href='http://core-system.org/' target='_blank'>Core System</a>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

" + RenderDebug() + @"
", context.RequestAborted));
        }
        private async Task CreatorRequestAsync(TypeRequest typeRequest)
        {
            _requestType = typeRequest;

            try
            {
                switch (typeRequest)
                {
                case TypeRequest.Post:

                    using (
                        _response =
                            await
                            ClientWeb.PostAsync(new Uri(ClientWeb.BaseAddress, _urlController),
                                                new StringContent(_contentPost, Encoding.UTF8, _contentType.MediaType)))
                    {
                        if (_response.IsSuccessStatusCode ||
                            _response.StatusCode == HttpStatusCode.Forbidden ||
                            _response.StatusCode == HttpStatusCode.BadRequest ||
                            _response.StatusCode == HttpStatusCode.InternalServerError)
                        {
                            using (var content = _response.Content)
                            {
                                _responseStream = await content.ReadAsStreamAsync();

                                using (var srs = new StreamReader(_responseStream))
                                {
                                    _responseString = srs.ReadToEnd();
                                }
                            }
                        }
                    }

                    break;

                case TypeRequest.Get:

                    using (_response = await ClientWeb.GetAsync(new Uri(ClientWeb.BaseAddress, _urlController)))
                    {
                        if (_response.IsSuccessStatusCode ||
                            _response.StatusCode == HttpStatusCode.Forbidden ||
                            _response.StatusCode == HttpStatusCode.BadRequest)
                        {
                            using (var content = _response.Content)
                            {
                                _responseStream = await content.ReadAsStreamAsync();

                                using (var srs = new StreamReader(_responseStream))
                                {
                                    _responseString = srs.ReadToEnd();
                                }
                            }
                        }

                        ClientWeb.Dispose();
                    }

                    break;

                case TypeRequest.Delete:
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(typeRequest), typeRequest, null);
                }
            }
            catch
            {
                throw;
            }
        }
Esempio n. 16
0
        public override string GetResponse(string link, TypeRequest tRequest = TypeRequest.GET, string refererLink = "", string cookie = "")
        {
            var    bResponce = new byte[512];
            string request   = string.Empty;
            string result    = string.Empty;
            string type      = string.Empty;
            string host      = Helpers.GetHostOfLink(link);

            if (!string.IsNullOrEmpty(cookie))
            {
                cookie = "Cookie:" + cookie;
            }
            if (string.IsNullOrEmpty(refererLink))
            {
                refererLink = "https://www.google.ru/";
            }
            string reqOption = "Connection: keep-alive\r\n" +
                               "User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" +
                               "Accept: text/html, application/xhtml+xml, */*\r\n" + // +
                               "Referer: " + refererLink + "\r\n" +
                               "Accept-Encoding: gzip,deflate,sdch\r\n" +
                               "Accept-Language: ru-RU\r\n" + cookie;

            switch (tRequest)
            {
            case TypeRequest.GET:
            {
                type = "GET ";
                break;
            }

            case TypeRequest.HEAD:
            {
                type = "HEAD ";
                break;
            }

            case TypeRequest.POST:
            {
                type = "POST ";
                break;
            }
            }
            request = type + link + " HTTP/1.1\r\n" +
                      "Host: " + host + "\r\n\r\n" + reqOption;


            var bytesSent = Encoding.ASCII.GetBytes(request);

            try
            {
                int offset = 0;
                while (true)
                {
                    m_socket.Send(bytesSent);
                    while (true)
                    {
                        SocketError er;
                        offset += m_socket.Receive(bResponce, 0, bResponce.Length, SocketFlags.None, out er);
                        result += Encoding.UTF8.GetString(bResponce);
                        if (bResponce[0] == 0x00 || result.Contains("302 Found") || result.Contains("</html>"))
                        {
                            break;
                        }
                    }
                    if (!result.Contains("302 Found"))
                    {
                        break;
                    }
                    break;
                    link    = result.Substring(result.IndexOf("Location:") + 9);
                    link    = link.Remove(link.IndexOf("\r"));
                    request = type + link + " HTTP/1.1\r\n" +
                              "Host: " + host + "\r\n\r\n" + reqOption;
                    bytesSent = Encoding.ASCII.GetBytes(request);
                }
                if (result.Contains("<html"))
                {
                    result = result.Substring(0, result.IndexOf("</html>") + 7);
                }
            }
            catch (SocketException)
            {
                m_socket.Close();
                //throw;
            }

            return(result);
        }
Esempio n. 17
0
        public static void SetCountRequestToHour(TypeRequest type, string host, bool EnableCountRequest)
        {
            #region Локальный метод - "SetCount"
            void SetCount(NumberOfRequestHour dt)
            {
                switch (type)
                {
                case TypeRequest._200:
                    dt.Count200++;
                    break;

                case TypeRequest._303:
                    dt.Count303++;
                    break;

                case TypeRequest._403:
                    dt.Count403++;
                    break;

                case TypeRequest._401:
                    dt.Count401++;
                    break;

                case TypeRequest._500:
                    dt.Count500++;
                    break;

                case TypeRequest._2fa:
                    dt.Count2FA++;
                    break;
                }
            }

            #endregion

            if (EnableCountRequest)
            {
                string keyNumberOfRequestToHour = KeyToMemoryCache.IspNumberOfRequestToHour(DateTime.Now);
                if (memoryCache.TryGetValue(keyNumberOfRequestToHour, out IDictionary <string, NumberOfRequestHour> DataNumberOfRequestDay))
                {
                    // Если хост есть в кеше
                    if (DataNumberOfRequestDay.TryGetValue(host, out NumberOfRequestHour dtValue))
                    {
                        SetCount(dtValue);
                    }

                    // Если хоста нету в кеше
                    else
                    {
                        var dt = new NumberOfRequestHour();
                        dt.Time = DateTime.Now;
                        SetCount(dt);
                        DataNumberOfRequestDay.Add(host, dt);
                    }
                }
                else
                {
                    // Считаем запрос
                    var dt = new NumberOfRequestHour();
                    dt.Time = DateTime.Now;
                    SetCount(dt);

                    // Создаем кеш
                    memoryCache.Set(keyNumberOfRequestToHour, new Dictionary <string, NumberOfRequestHour>()
                    {
                        [host] = dt
                    }, TimeSpan.FromHours(2));
                }
            }
        }
Esempio n. 18
0
        private RequestReturn Request <T>(string url, TypeRequest typerequest, byte[] bytedata = null, string[] moreheader = null)
        {
            RequestReturn result = new RequestReturn();

            http_request = new HttpRequest_(new Uri(url), typerequest.ToString());
#if DEBUG
            http_request.debug = Debug;
#endif
            if (typeof(T) == typeof(Stream) && bytedata == null && typerequest != TypeRequest.PUT)
            {
                http_request.ReceiveTimeout = this.ReceiveTimeout_;
            }
            http_request.AddHeader(Host);
            http_request.AddHeader("Authorization", "Bearer " + Token.access_token);
            if (moreheader != null)
            {
                foreach (string h in moreheader)
                {
                    http_request.AddHeader(h);
                }
            }
            else if (bytedata != null && (typerequest == TypeRequest.POST || typerequest == TypeRequest.PATCH))
            {
                http_request.AddHeader(Header_ContentTypeApplicationJson);
            }
            if ((typerequest == TypeRequest.POST || typerequest == TypeRequest.DELETE) && bytedata == null)
            {
                http_request.AddHeader("Content-Length: 0");
            }
            if (bytedata != null && (typerequest == TypeRequest.POST || typerequest == TypeRequest.PATCH))
            {
                http_request.AddHeader("Content-Length: " + bytedata.Length.ToString());
                Stream stream = http_request.SendHeader_And_GetStream();
                stream.Write(bytedata, 0, bytedata.Length);
                stream.Flush();
#if DEBUG
                Console.WriteLine("DriveAPIHttprequestv2: >>send data: " + Encoding.UTF8.GetString(bytedata));
#endif
            }
            try //get response
            {
                if (typeof(T) == typeof(string))
                {
                    result.DataTextResponse = http_request.GetTextDataResponse(false, true);
                    result.HeaderResponse   = http_request.HeaderReceive;
                }
                else if (typeof(T) == typeof(Stream))
                {
                    if (bytedata != null || typerequest == TypeRequest.PUT)
                    {
                        result.stream = http_request.SendHeader_And_GetStream();                                                    //get stream upload
                    }
                    else
                    {
                        result.stream = http_request.ReadHeaderResponse_and_GetStreamResponse(true); //get stream response
                    }
                }
                else
                {
                    throw new Exception("Error typereturn.");
                }
                return(result);
            }
            catch (HttpException ex)
            {
                result.DataTextResponse = http_request.TextDataResponse;
                GoogleDriveErrorMessage message;
                try { message = Newtonsoft.Json.JsonConvert.DeserializeObject <GoogleDriveErrorMessage>(ex.Message); }
                catch { throw ex; }// other message;
                switch (message.error.code)
                {
                case 204: if (typerequest == TypeRequest.DELETE)
                    {
                        return(result);
                    }
                    break;                                                                // delete result

                case 401:
                    if (Monitor.TryEnter(SyncRefreshToken))
                    {
                        try
                        {
                            Monitor.Enter(SyncRefreshToken);
                            Token = oauth.RefreshToken();
                            TokenRenewEvent.Invoke(Token);
                            return(Request <T>(url, typerequest, bytedata, moreheader));
                        }
                        finally { Monitor.Exit(SyncRefreshToken); }
                    }
                    else
                    {
                        try { Monitor.Enter(SyncRefreshToken); return(Request <T>(url, typerequest, bytedata, moreheader)); }
                        finally { Monitor.Exit(SyncRefreshToken); }
                    }

                case 403:
                    Error403 err = (Error403)Enum.Parse(typeof(Error403), message.error.errors[0].reason);
                    switch (err)
                    {
                    case Error403.forbidden:
                    case Error403.appNotAuthorizedToFile:
                    case Error403.domainPolicy:
                    case Error403.insufficientFilePermissions:
#if DEBUG
                        Console.WriteLine("DriveAPIHttprequestv2 Error403: " + result.DataTextResponse);
#endif
                        break;

                    case Error403.dailyLimitExceeded:
                    case Error403.rateLimitExceeded:
                    case Error403.sharingRateLimitExceeded:
                    case Error403.userRateLimitExceeded:
                        if (limit != null)
                        {
                            limit.Invoke();
                        }
#if DEBUG
                        Console.WriteLine("DriveAPIHttprequestv2 LimitExceeded: " + err.ToString());
#endif
                        try { Monitor.Enter(SyncLimitExceeded); Thread.Sleep(5000); } finally { Monitor.Exit(SyncLimitExceeded); }
                        return(Request <T>(url, typerequest, bytedata, moreheader));

                    case Error403.abuse:        //file malware or virut
                        if (acknowledgeAbuse_)
                        {
                            return(Request <T>(url + "&acknowledgeAbuse=true", typerequest, bytedata, moreheader));
                        }
                        else
                        {
                            break;
                        }

                    default: break;
                    }
                    break;

                case 308:
                    if (typerequest == TypeRequest.PUT && typeof(T) == typeof(Stream))
                    {
                        result.stream = http_request.GetStream();
                        return(result);
                    }
                    else
                    {
                        break;
                    }

                default: break;
                }
                throw ex;
            }
        }
Esempio n. 19
0
 public override string GetResponse(string domainName, TypeRequest tRequest = TypeRequest.GET, string refererLink = "", string cookie = "")
 {
     throw new NotImplementedException();
 }
Esempio n. 20
0
        private async Task <bool> ExecuteOrChoose(Message message, TelegramBotClient botClient)
        {
            var endCommand = false;
            var cmdArgs    = ParserExtensions.Parse(new Parser(), _messageText).Tokens.Select(a => a.Value).ToList();

            if (cmdArgs.Count == 0)
            {
                //request resource
                _typeRequest = TypeRequest.Resource;
                await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, DEFAULT_MSG);
            }
            else
            {
                var resource = cmdArgs[0];
                if (!resource.StartsWith("/"))
                {
                    resource = "/" + resource;
                }
                var requestArgs    = StringHelper.GetArgumentTags(resource);
                var parameters     = cmdArgs.Skip(1).ToArray();
                var parametersArgs = parameters.SelectMany(a => StringHelper.GetArgumentTags(a)).ToList();

                if (requestArgs.Count() > 0)
                {
                    //fix request
                    resource = resource.Substring(0, resource.IndexOf(StringHelper.CreateArgumentTag(requestArgs[0])) - 1);

                    var pveClient = PveHelper.GetClient();
                    var(Values, Error) = ApiExplorer.ListValues(pveClient, PveHelper.GetClassApiRoot(pveClient), resource);
                    if (!string.IsNullOrWhiteSpace(Error))
                    {
                        //return error
                        await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id, Error);

                        endCommand = true;
                    }
                    else
                    {
                        _typeRequest = TypeRequest.ArgResource;

                        await botClient.ChooseInlineKeyboard(message.Chat.Id,
                                                             $"Choose {requestArgs[0]}",
                                                             Values.Select(a => ("", a.Value, a.Value)));
                    }
                }
                else if (parametersArgs.Count() > 0)
                {
                    //request parameter value
                    _typeRequest = TypeRequest.ArgParameter;

                    await botClient.SendTextMessageAsyncNoKeyboard(message.Chat.Id,
                                                                   $"Insert value for parmater <b>{parametersArgs[0]}</b>");
                }
                else if (requestArgs.Count() == 0)
                {
                    var pveClient = PveHelper.GetClient();
                    //execute request
                    var(ResultCode, ResultText) = ApiExplorer.Execute(pveClient,
                                                                      PveHelper.GetClassApiRoot(pveClient),
                                                                      resource,
                                                                      MethodType,
                                                                      ApiExplorer.CreateParameterResource(parameters),
                                                                      false,
                                                                      ApiExplorer.OutputType.Html);

                    if (ResultCode != 200)
                    {
                        await botClient.SendTextMessageAsync(message.Chat.Id, $"Error: {ResultText}");
                    }
                    else
                    {
                        var filename = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(resource).Replace("/", "");
                        await botClient.SendDocumentAsyncFromText(message.Chat.Id, ResultText, $"{filename}.html");
                    }

                    endCommand = true;
                }
            }

            if (endCommand)
            {
                _messageText = "";
            }

            return(await Task.FromResult(endCommand));
        }
Esempio n. 21
0
 public MicroServiceAttribute(string route, TypeRequest action)
 {
     this._route  = route;
     this._action = action;
 }
Esempio n. 22
0
 public abstract Task RequestUrlAsync(TypeRequest typeRequest);
Esempio n. 23
0
        public static void SetCountRequestToMinute(string IP, TypeRequest type, string host, int DomainID, bool EnableCountRequest)
        {
            if (type != TypeRequest.All && type != TypeRequest._303)
            {
                return;
            }

            #region Локальный метод - "SetCount"
            void SetCount(NumberOfRequestMinute dt)
            {
                switch (type)
                {
                case TypeRequest._303:
                    dt.Count303++;
                    Trigger.OnRequestToMinute((IP, type, dt.Count303, host, DomainID));
                    break;

                case TypeRequest.All:
                    dt.NumberOfRequest++;
                    Trigger.OnRequestToMinute((IP, type, dt.NumberOfRequest, host, DomainID));
                    break;
                }
            }

            #endregion

            if (EnableCountRequest)
            {
                string keyNumberOfRequestToMinutes = KeyToMemoryCache.IspNumberOfRequestToMinutes(DateTime.Now);
                if (memoryCache.TryGetValue(keyNumberOfRequestToMinutes, out IDictionary <string, NumberOfRequestMinute> NumberOfRequestsPerMinute))
                {
                    // Если хост есть в кеше
                    if (NumberOfRequestsPerMinute.TryGetValue(host, out NumberOfRequestMinute dtValue))
                    {
                        SetCount(dtValue);
                    }

                    // Если хоста нету в кеше
                    else
                    {
                        var dt = new NumberOfRequestMinute();
                        dt.DomainID = DomainID;
                        SetCount(dt);
                        NumberOfRequestsPerMinute.Add(host, dt);
                    }
                }
                else
                {
                    // Считаем запрос
                    var dt = new NumberOfRequestMinute();
                    dt.DomainID = DomainID;
                    SetCount(dt);

                    // Создаем кеш
                    memoryCache.Set(keyNumberOfRequestToMinutes, new Dictionary <string, NumberOfRequestMinute>()
                    {
                        [host] = dt
                    }, TimeSpan.FromMinutes(3));
                }
            }
        }
Esempio n. 24
0
 public abstract string GetResponse(string domainName, TypeRequest tRequest = TypeRequest.GET, string refererLink = "", string cookie = "");