private void ProcessRequest(HttpListenerContext context) { string url = context.Request.RawUrl; RestRoute route = resources.Keys.Where(rt => rt.Matches(context.Request.HttpMethod, url)) .FirstOrDefault(); try { if (route != null) { RestLogger.LogInfo("RestServer::ProcessRequest: " + route + " found"); resources[route](new ResourceData(context, route)); } else if (fileResponder.FileExists(url)) { RestLogger.LogInfo("RestServer::ProcessRequest: file {0} found", url); fileResponder.SendFileResponse(context); } else { RestLogger.LogWarning("RestServer::ProcessRequest: url {0} not found", url); responseWriter.SendNotFound(context.Response); } } catch (Exception ex) { LogException("ProcessRequest", ex); responseWriter.SendInternalServerError(context.Response, ex.ToString()); } }
private string GetContent(HttpWebResponse httpResponse) { try { using (Stream stream = httpResponse.GetResponseStream()) { Stream dataStream = stream; if (httpResponse.Headers.AllKeys.Contains("Content-Encoding") && httpResponse.Headers["Content-Encoding"].Contains("gzip")) { dataStream = new GZipStream(stream, CompressionMode.Decompress); } using (StreamReader reader = new StreamReader(dataStream)) { string content = reader.ReadToEnd(); return(content); } } } catch (Exception ex) { RestLogger.Log("Response::GetContent", ex); } return(string.Empty); }
private void GetQueryString(string url) { string[] splittedUrl = url.IndexOf("?") > -1 ? url.Split('?') : url.Split('#'); if (splittedUrl.Length <= 1) { return; } string allQueries = splittedUrl[1]; string[] queries = allQueries.IndexOf("&") > -1 ? allQueries.Split('&') : allQueries.Split(';'); foreach (string query in queries) { string[] keyAndValues = query.Split('='); if (keyAndValues.Length != 2) { RestLogger.LogWarning("RestRoute::GetQueryString: {0} does not contain an equal sign", query); continue; } string key = Uri.UnescapeDataString(keyAndValues[0]); string[] values = keyAndValues[1].Split(','); foreach (string value in values) { this.QueryString.Add(key, Uri.UnescapeDataString(value)); } } }
public RestClient(string url, NetworkCredential credentialsOrNull) { this.Cookies = new CookieContainer(); url = SanitizeUrl(url); this.root = url; RestLogger.LogInfo("Client root {0}", this.root); this.credentialsOrNull = credentialsOrNull; }
internal BaseTwitchClient(TwitchConfig config, TwitchRestApiClient client) { ApiClient = client; LogManager = new LogManager(config.LogLevel); LogManager.Message += async msg => await _logEvent.InvokeAsync(msg).ConfigureAwait(false); _stateLock = new SemaphoreSlim(1, 1); RestLogger = LogManager.CreateLogger("Rest"); ApiClient.SentRequest += async(method, endpoint, ms) => await RestLogger.VerboseAsync($"{method} /{endpoint}: {ms} ms"); }
internal virtual async Task OnLoginAsync(bool validateToken) { if (!validateToken) { return; } var tokenInfo = await GetTokenInfoAsync().ConfigureAwait(false); if (!tokenInfo.IsValid) { await RestLogger.ErrorAsync("Token is not valid").ConfigureAwait(false); await LogoutAsync().ConfigureAwait(false); return; } TokenInfo = tokenInfo; }
public void Start() { try { contextQueue = new ProducerConsumerQueue <HttpListenerContext>(ProcessRequest, config.NumWorkerThreads); RestLogger.LogInfo("RestServer starting, {0}", config.BaseUrl); listener.Prefixes.Add(config.BaseUrl); IsListening = true; listener.Start(); listenerThread.Start(); } catch (Exception ex) { IsListening = false; LogException("Start", ex); throw; } }
public bool FileExists(string url) { if (!rootExists || string.IsNullOrEmpty(url)) { return(false); } if (url.Contains("..")) { RestLogger.LogWarning("FileResponder::FileExists: request with step back{0}{1}", Environment.NewLine, url); return(false); } string path = GetFullPath(url); return(File.Exists(path)); }
public FileResponder(string root, ResponseWriter responseWriter) { if (!string.IsNullOrEmpty(root)) { if (responseWriter == null) { throw new ArgumentNullException("responseWriter"); } this.responseWriter = responseWriter; root = Path.GetFullPath(root); if (!Directory.Exists(root)) { RestLogger.LogInfo("FileResponder: creating directory " + root); Directory.CreateDirectory(root); } RestLogger.LogInfo("FileResponder: web root " + root); this.rootExists = true; this.root = root; } }
private void LogException(string callingFunction, Exception ex) { RestLogger.Log("RestServer::" + callingFunction, ex); }