예제 #1
0
        /// <summary>
        /// Checks if the server is still running
        /// </summary>
        /// <param name="access">The desired access scheme</param>
        /// <returns>true if everything is fine</returns>
        public async Task <ServerErrors> Validates(AccessType access)
        {
            ServerErrors serverHealth = 0;

            if (IsRunning())
            {
                Logging.OnLogMessage("The process is running", MessageType.Info);
            }
            else
            {
                Logging.OnLogMessage("The process is dead", MessageType.Warning);
                serverHealth |= ServerErrors.ProcessDead;
            }

            if (await IsAccessible(access))
            {
                Logging.OnLogMessage("The server is responding fine", MessageType.Info);
            }
            else
            {
                Logging.OnLogMessage("The server is not responding as it should", MessageType.Warning);
                serverHealth |= ServerErrors.Connection;
            }

            return(serverHealth);
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            if (_db.Users.FirstOrDefault(i => (i.Login == user.Login) && (i.Id != user.Id)) != null)
            {
                ServerErrors.Add("Пользователь с таким логином уже существует");
            }
            if (_db.Users.FirstOrDefault(i => (i.Email == user.Email) && (i.Id != user.Id)) != null)
            {
                ServerErrors.Add("Пользователь с таким адресом эл.почты уже существует");
            }

            if (ServerErrors.Count != 0)
            {
                return(Page());
            }
            else
            {
                _db.Attach(user).State = EntityState.Modified;

                try
                {
                    await _db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw new Exception($"User {user.Id} not found!");
                }
                return(RedirectToPage("/AdminPages/ListUsers"));
            }
        }
예제 #3
0
        private string Invoke(string methodName, IDictionary <string, string> parameters)
        {
            var url    = Host + methodName;
            var source = _http.GetAsync(url, parameters).Result;

            ServerErrors.IfErrorThrowException(source);
            return(source);
        }
예제 #4
0
        /// <summary>
        /// This method will fetch information available for a server based on the provided
        /// server id.
        /// </summary>
        /// <param name="userId">The id of the requesting user</param>
        /// <param name="serverId">The id of the target server</param>
        /// <returns>An either monad</returns>
        public Either <Server, Error> Get(long userId, int serverId)
        {
            try
            {
                var server = _burstChatContext
                             .Servers
                             .Include(s => s.Channels)
                             .Include(s => s.Subscriptions)
                             .FirstOrDefault(s => s.Id == serverId);

                return(server is { } && server.Subscriptions.Any(s => s.UserId == userId)
                    ? new Success <Server, Error>(server !)
                    : new Failure <Server, Error>(ServerErrors.ServerNotFound()));
            }
예제 #5
0
 /// <summary>
 /// Метод для передачи статусов ошибок
 /// </summary>
 /// <param name="type">тип ошибки</param>
 /// <param name="message">сообщение об ошибке</param>
 private void CallErrorServer(ServerErrorType type, string message = "")
 {
     Task.Factory.StartNew(() => { ServerErrors?.Invoke(this, new Arguments.ErrorServerArgs(type, message)); });
 }
예제 #6
0
        private void Receive()
        {
            //TODO: REPLACE ALL URI'S WITH MORE THAN 1 DOT'S WITH &URI_DOT!

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("[*] Server: PULLING_CLIENT_HEADER");
            string rawClientHeader = StreamReader.ReadToEndAndKeepAlive();

            //Parse rawClientHeader to ClientHeader
            if (rawClientHeader.Equals(""))
            {
                return;
            }

            try
            {
                __RequestedDataPath = rawClientHeader.Split(' ')[1];
            }
            catch
            {
                EndResponse();
                return;
            }
            if (__RequestedDataPath.Length == 1)
            {
                // REQUEST PATH IS / ~ THEREFORE INDEX
                __RequestedDataPath = "/" + GlobalShares.INIParser.GetValue("HTTP", "Index"); //TODO ; PARSE INI
            }
            string _Uri = ServerHeader.WWWFolder + __RequestedDataPath.Replace("/", @"/");

            _Uri = Extensions.Extensions.ClearUri(_Uri);

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("[*] Server: PULLING_REQUEST=" + _Uri);

            string _full = "";

            if (_Uri.Contains("?"))
            {
                _full = _Uri.Remove(_Uri.IndexOf('?'), _Uri.Length - _Uri.IndexOf('?'));
            }
            else
            {
                _full = _Uri;
            }
            if ((!File.Exists(_full) || ServerErrors.GetError(_full) != ServerErrors.ServerErrorsEnums.NoError))
            {
                switch (ServerErrors.GetError(_Uri))
                {
                case ServerErrors.ServerErrorsEnums.NotSupportedYet:
                    __RequestedDataBuffer = File.ReadAllBytes(ServerHeader.WWWFolder + @"/" + GlobalShares.INIParser.GetValue("Errors", "Error_php"));
                    break;

                case ServerErrors.ServerErrorsEnums.NoError:
                    __RequestedDataBuffer   = File.ReadAllBytes(ServerHeader.WWWFolder + @"/" + GlobalShares.INIParser.GetValue("Errors", "Error_404"));
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("[*] Server: USER_REQUEST_404");
                    break;

                case ServerErrors.ServerErrorsEnums.NotSupported:
                    __RequestedDataBuffer   = File.ReadAllBytes(ServerHeader.WWWFolder + @"/" + GlobalShares.INIParser.GetValue("Errors", "Error_php"));
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("[*] Server: USER_REQUEST_404");
                    break;
                }
            }
            else
            {
                // PASS URI TO PLUGIN-MANAGER AND DETERMINE WHETHER AN APPLICATION IS ALLOCATED TO IT [SOLVED]
                if (PlugInManager.HandlePlugIn(_Uri))
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("[*] Server: RUNNING_PLUGIN");

                    string _extension = Path.GetExtension(_Uri).Replace(".", "");
                    if (_extension.Contains("?"))
                    {
                        _extension = _extension.Remove(_extension.IndexOf('?'), _extension.Length - _extension.IndexOf('?'));
                    }
                    if (_extension == "php")
                    {
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.WriteLine("[*] PlugIn: RUNNING_PHP_EXE");

                        Webserver.__Handler.InvokeAnonymous(delegate
                        {
                            Webserver.__Handler.logLB.Items.Add("[*] RUNNING HYPERTEXT PREPROCESSOR!");
                            Webserver.__Handler.logLB.TopIndex = Webserver.__Handler.logLB.Items.Count - 1;
                        });

                        string _get_arguments = "";
                        if (!_Uri.Contains("?"))
                        {
                            _Uri += "?";
                        }

                        _get_arguments        = _Uri.Remove(0, _Uri.IndexOf('?') + 1).Replace('&', ' ');
                        __RequestedDataBuffer = PlugInManager.PullPlugInData(_Uri, "-f " + _Uri.Remove(_Uri.IndexOf('?'), _Uri.Length - _Uri.IndexOf('?')).Replace(GlobalShares.INIParser.GetValue("HTTP", "PublicFolder") + @"/", "") + " " + _get_arguments);
                    }
                }
                else
                {
                    __RequestedDataBuffer = File.ReadAllBytes(_Uri);
                    //if (_Uri.Contains(".ico")) // FIX ACCESS-VIOLATION
                    //    __RequestedDataBuffer = File.ReadAllBytes(_Uri);
                    //else
                    //{
                    //    using (var _file = MemoryMappedFile.CreateFromFile(_Uri))
                    //    {
                    //        Stream _requestFileStream = _file.CreateViewStream();
                    //        using (var _memoryStream = new MemoryStream())
                    //        {

                    //            Console.ForegroundColor = ConsoleColor.Red;
                    //            Console.WriteLine("[*] SERVER: USING MEMORYMAPPEDSTREAM");

                    //            _requestFileStream.CopyTo(_memoryStream);
                    //            __RequestedDataBuffer = _memoryStream.ToArray();

                    //            _memoryStream.Close();
                    //            _requestFileStream.Close();
                    //            _file.Dispose();
                    //        }
                    //    }
                    //    //Webserver.FreeMemory(2); // Dangerous
                    //}
                }

                /*
                 * FATAL PROBLEM:
                 * MEMORY-LACK! [SOLVED; BUT DANGEROUS]
                 */
            }


            BeginResponse(!File.Exists(_Uri) ? "error" : "");
            Send(__RequestedDataBuffer);
            EndResponse();
        }