Exemplo n.º 1
0
        private AgilefantClient GetClientSession(HttpRequestProcessor processor)
        {
            var client = _client;
            var index  = -1;

            try
            {
                if (processor.HttpCookies.ContainsKey("aft-session"))
                {
                    var id = (string)processor.HttpCookies["aft-session"];
                    index  = _logins.LookupId(id);
                    client = _logins[index];
                }

                if (client != null)
                {
                    var response = client.Session.Get("loginContext.action").Result;
                    if (string.IsNullOrWhiteSpace(response.Headers.Location) && !response.Content.Content.Contains("Agilefant login") ||
                        !string.IsNullOrWhiteSpace(response.Headers.Location) && (!response.Headers.Location.Contains("login.jsp") && !response.Headers.Location.Contains("error.json")))
                    {
                        return(client);
                    }
                    client.Session.Logout();
                    client.Session.ReLogin();
                    return(client);
                }

                if (string.IsNullOrWhiteSpace(_config.Username) && string.IsNullOrWhiteSpace(_config.Password))
                {
                    throw new SecurityException("No login credentials provided");
                }

                var session = AgilefantSession.Login(_config.Username, _config.Password).Result;
                _client = new AgilefantClient(session);
                return(_client);
            }
            catch (Exception)
            {
                Logger.Log("Re-authentication is required.", LogLevel.Warn);
                try
                {
                    if (index != -1)
                    {
                        throw new Exception("Can't relogin");
                    }
                    _client.Session.Logout();
                    _client.Session.ReLogin();
                    return(_client);
                }
                catch (Exception)
                {
                    if (index != -1 && _logins.Count > index)
                    {
                        _logins.RemoveIndex(index);
                    }
                    processor.WriteRedirect("/rest/login?returnUrl=" + Uri.EscapeDataString(processor.HttpUrl), "{\"success\":false}");
                    return(null);
                }
            }
        }
Exemplo n.º 2
0
 private bool Listen()
 {
     try
     {
         _listener = new TcpListener(IPAddress.Any, _port);
         _listener.Start();
         while (_isActive)
         {
             var s         = _listener.AcceptTcpClient();
             var processor = new HttpRequestProcessor(s, HandleRequest);
             var thread    = new Thread(processor.ProcessInput);
             thread.Start();
             Thread.Sleep(1);
         }
     }
     catch (SocketException e)
     {
         // The server died due to a bug in mono
         if (e.Message.Contains("The socket has been shut down"))
         {
             Logger.Log("Mono shutdown the server. Please use .NET Core whenever it starts supporting your platform to avoid this.", LogLevel.Error);
             return(false);
         }
         if (e.SocketErrorCode == SocketError.Interrupted)
         {
             return(true);
         }
         throw;
     }
     return(true);
 }
Exemplo n.º 3
0
        public bool Execute(HttpRequestProcessor requestProcessor)
        {
            if (!_urlRegex.IsMatch(requestProcessor.HttpUrl))
            {
                return(false);
            }
            var spl = requestProcessor.HttpUrl.Split(new [] { "/" }, StringSplitOptions.RemoveEmptyEntries);

            _callback.Invoke(requestProcessor, spl);
            return(true);
        }
Exemplo n.º 4
0
        private void HandleRequest(HttpRequestProcessor requestProcessor)
        {
            if (_handlers.Any(restfulUrlHandler => restfulUrlHandler.Execute(requestProcessor)))
            {
                if (!requestProcessor.ResponseWritten)
                {
                    requestProcessor.WriteSuccess();
                }
                return;
            }

            var url = requestProcessor.HttpUrl;

            if (string.IsNullOrWhiteSpace(url) || url == "/")
            {
                url = "/index.html";
            }
            var path = Path.GetFullPath(_serverBaseDirectory + url);

            if (!path.StartsWith(_serverBaseDirectory))
            {
                requestProcessor.WriteResponse("403 Forbidden", "Thou shall not pass!");
                return;
            }

            string data;

            if (_filesCache.TryGetValue(path, out data))
            {
                var ext  = Path.GetExtension(path);
                var type = MimeTypes[ext];
                requestProcessor.WriteSuccess(data, type);
                return;
            }

            if (_serverBaseDirectory != null && File.Exists(path))
            {
                var ext    = Path.GetExtension(path);
                var type   = MimeTypes[ext];
                var reader = new StreamReader(path);
                data = reader.ReadToEnd();
                requestProcessor.WriteSuccess(data, type);
                reader.Close();
                _filesCache[path] = data;
            }
            else
            {
                requestProcessor.WriteResponse("404 Not Found", "<iframe src=\"https://thebest404pageever.com/\" " +
                                               "style=\"position: absolute; width: 99%; height: 99%; top: 0; left: 0;\">" +
                                               "404, thou must find mordor before getting eagles.</iframe>", "text/html");
            }
        }