public Boolean Authorize(HTTPCredentials myHTTPCredentials) { try { HTTPSecurity.UserNamePasswordValidator.Validate(myHTTPCredentials.Username, myHTTPCredentials.Password); return(true); } catch (SecurityTokenException ste) { Debug.WriteLine("Authorize failed with " + ste.ToString()); return(false); } }
public HTTPHeader(String myHeader) : this() { PlainHeader = myHeader; HttpStatusCode = HTTPStatusCodes.OK; KeepAlive = false; String[] ProtocolArray; // Split the Request into lines String[] RequestParts = myHeader.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); if (RequestParts.Length == 0) { HttpStatusCode = HTTPStatusCodes.BadRequest; return; } #region Header first line // The first line containing the information about the HTTPMethod, the current folder/myPath (destination) and the protocol // e.g: PROPFIND /file/file Name HTTP/1.1 String[] HTTPMethodHeader = RequestParts[0].Split(new char[] { ' ' }); if (HTTPMethodHeader.Length < 3) { HttpStatusCode = HTTPStatusCodes.BadRequest; return; } // This is a response if (HTTPMethodHeader[0].StartsWith("HTTP")) { Protocol = HTTPMethodHeader[0]; ProtocolArray = Protocol.Split(_SlashSeperator); ProtocolName = ProtocolArray[0].ToLower(); ProtocolVersion = new Version(ProtocolArray[1]); HttpStatusCode = (HTTPStatusCodes)Enum.Parse(typeof(HTTPStatusCodes), HTTPMethodHeader[1]); } // This is a request else { if (!Enum.IsDefined(typeof(HTTPMethods), HTTPMethodHeader[0])) { //HttpStatusCode = HTTPStatusCodes.NotImplemented; HttpMethod = HTTPMethods.UNKNOWN; HttpMethodString = HTTPMethodHeader[0]; //return; //throw new Exception("Invalid HTTP Method " + HTTPMethodHeader[0]); } else { HttpMethod = (HTTPMethods)Enum.Parse(typeof(HTTPMethods), HTTPMethodHeader[0]); HttpMethodString = HTTPMethodHeader[0]; } // Decode UTF-8 Hex encoding "%C3%B6" -> "ö" etc... Destination = RawUrl = HTTPMethodHeader[1];// HttpUtility.UrlDecode(HTTPMethodHeader[1]); //if (Destination.Length > 1 && Destination.EndsWith("/") && !Destination.Contains("/?")) //{ // RawUrl = HttpUtility.UrlDecode(HTTPMethodHeader[1]);//.TrimEnd(((String)"/").ToCharArray()); // if (RawUrl[RawUrl.Length-1] == '/') // { // RawUrl = RawUrl.Substring(0, RawUrl.Length - 1); // } // Destination = RawUrl; //} // Parse QueryString after '?' and maybe fix the Destination var _Questionmark = RawUrl.IndexOf('?'); if (_Questionmark > -1) { Destination = RawUrl.Substring(0, _Questionmark); QueryString = HttpUtility.ParseQueryString(RawUrl.Substring(_Questionmark + 1)); } //!svn/vcc/default var _Exclamationmark = RawUrl.IndexOf('!'); if (_Exclamationmark > -1) { SVNParameters = RawUrl.Substring(_Exclamationmark + 1); Destination = RawUrl.Substring(0, _Exclamationmark - 1); if (Destination == "") { Destination = "/"; } } Protocol = HTTPMethodHeader[2]; ProtocolArray = Protocol.Split(_SlashSeperator); ProtocolName = ProtocolArray[0].ToLower(); ProtocolVersion = new Version(ProtocolArray[1]); RawUrl = HTTPMethodHeader[1]; } #endregion if (ProtocolVersion >= new Version(1, 1)) { KeepAlive = true; } #region Parse all other Header informations Headers = new NameValueCollection(); AcceptTypes = new List <AcceptType>(); for (Int16 i = 1; i < RequestParts.Length; i++) { // The Header is finished if (RequestParts[i] == String.Empty) { break; } // Should never happen, however if (!RequestParts[i].Contains(':')) { continue; } String Key = RequestParts[i].Substring(0, RequestParts[i].IndexOf(':')); String Value = RequestParts[i].Substring(Key.Length + 1).Trim(); if (Key.ToLower() == "accept") { if (Value.Contains(",")) { UInt32 place = 0; foreach (var acc in Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { AcceptTypes.Add(new AcceptType(acc.Trim(), place++)); } } else { AcceptTypes.Add(new AcceptType(Value.Trim())); } } else if (Key.ToLower() == "content-length") { UInt64.TryParse(Value, out _ContentLength); } else if (Key.ToLower() == "content-type") { ContentType = new System.Net.Mime.ContentType(Value); } else if (Key.ToLower() == "host") { HostName = Value; } else if (Key.ToLower() == "accept-encoding") { AcceptEncoding = Value; } /* * try * { * ContentEncoding = Encoding.GetEncoding(Value); * } * catch * { * ContentEncoding = Encoding.UTF8; * } * */ else if (Key.ToLower() == "user-agent") { if (Value.Contains("Microsoft-WebDAV-MiniRedir")) { ClientType = ClientTypes.MicrosoftWebDAVMiniRedir; } else if (Value.Contains("MSIE 7")) { ClientType = ClientTypes.MSInternetExplorer7; } else if (Value.Contains("MSIE 8")) { ClientType = ClientTypes.MSInternetExplorer8; } else if (Value.Contains("Firefox")) { ClientType = ClientTypes.Firefox; } else if (Value.ToLower().Contains("svn")) { ClientType = ClientTypes.SVN; } else { ClientType = ClientTypes.Other; } } else if (Key.ToLower() == "connection" && Value.ToLower().Contains("keep-alive")) { KeepAlive = true; } else if (Key.ToLower() == "authorization") { try { Authorization = new HTTPCredentials(Value); } catch (Exception) { //NLOG: temporarily commented //_Logger.ErrorException("could not parse authorization of HTTPHeader", ex); } } else { Headers.Add(Key, Value); } } AcceptTypes.Sort(); //AcceptTypes.Sort(new Comparison<AcceptType>((at1, at2) => //{ // if (at1.Quality > at2.Quality) return 1; // else if (at1.Quality == at2.Quality) return 0; // else return -1; // //if (at2.Quality > at1.Quality) return -1; // //else return 1; // //return at1.Quality.CompareTo(at2.Quality); //} // )); #endregion }
public HTTPHeader(String myHeader) : this() { PlainHeader = myHeader; HttpStatusCode = HTTPStatusCodes.OK; KeepAlive = false; String[] ProtocolArray; // Split the Request into lines String[] RequestParts = myHeader.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); if (RequestParts.Length == 0) { HttpStatusCode = HTTPStatusCodes.BadRequest; return; } #region Header first line // The first line containing the information about the HTTPMethod, the current folder/myPath (destination) and the protocol // e.g: PROPFIND /file/file Name HTTP/1.1 String[] HTTPMethodHeader = RequestParts[0].Split(new char[] { ' ' }); if (HTTPMethodHeader.Length < 3) { HttpStatusCode = HTTPStatusCodes.BadRequest; return; } // This is a response if (HTTPMethodHeader[0].StartsWith("HTTP")) { Protocol = HTTPMethodHeader[0]; ProtocolArray = Protocol.Split(_SlashSeperator); ProtocolName = ProtocolArray[0].ToLower(); ProtocolVersion = new Version(ProtocolArray[1]); HttpStatusCode = (HTTPStatusCodes) Enum.Parse(typeof(HTTPStatusCodes), HTTPMethodHeader[1]); } // This is a request else { if (!Enum.IsDefined(typeof(HTTPMethods), HTTPMethodHeader[0])) { //HttpStatusCode = HTTPStatusCodes.NotImplemented; HttpMethod = HTTPMethods.UNKNOWN; HttpMethodString = HTTPMethodHeader[0]; //return; //throw new Exception("Invalid HTTP Method " + HTTPMethodHeader[0]); } else { HttpMethod = (HTTPMethods) Enum.Parse(typeof(HTTPMethods), HTTPMethodHeader[0]); HttpMethodString = HTTPMethodHeader[0]; } // Decode UTF-8 Hex encoding "%C3%B6" -> "ö" etc... Destination = RawUrl = HTTPMethodHeader[1];// HttpUtility.UrlDecode(HTTPMethodHeader[1]); //if (Destination.Length > 1 && Destination.EndsWith("/") && !Destination.Contains("/?")) //{ // RawUrl = HttpUtility.UrlDecode(HTTPMethodHeader[1]);//.TrimEnd(((String)"/").ToCharArray()); // if (RawUrl[RawUrl.Length-1] == '/') // { // RawUrl = RawUrl.Substring(0, RawUrl.Length - 1); // } // Destination = RawUrl; //} // Parse QueryString after '?' and maybe fix the Destination var _Questionmark = RawUrl.IndexOf('?'); if (_Questionmark > -1) { Destination = RawUrl.Substring(0, _Questionmark); QueryString = HttpUtility.ParseQueryString(RawUrl.Substring(_Questionmark + 1)); } //!svn/vcc/default var _Exclamationmark = RawUrl.IndexOf('!'); if (_Exclamationmark > -1) { SVNParameters = RawUrl.Substring(_Exclamationmark + 1); Destination = RawUrl.Substring(0, _Exclamationmark - 1); if (Destination == "") Destination = "/"; } Protocol = HTTPMethodHeader[2]; ProtocolArray = Protocol.Split(_SlashSeperator); ProtocolName = ProtocolArray[0].ToLower(); ProtocolVersion = new Version(ProtocolArray[1]); RawUrl = HTTPMethodHeader[1]; } #endregion if (ProtocolVersion >= new Version(1, 1)) KeepAlive = true; #region Parse all other Header informations Headers = new NameValueCollection(); AcceptTypes = new List<AcceptType>(); for (Int16 i = 1; i < RequestParts.Length; i++) { // The Header is finished if (RequestParts[i] == String.Empty) break; // Should never happen, however if (!RequestParts[i].Contains(':')) continue; String Key = RequestParts[i].Substring(0, RequestParts[i].IndexOf(':')); String Value = RequestParts[i].Substring(Key.Length + 1).Trim(); if (Key.ToLower() == "accept") { if (Value.Contains(",")) { UInt32 place = 0; foreach (var acc in Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { AcceptTypes.Add(new AcceptType(acc.Trim(), place++)); } } else { AcceptTypes.Add(new AcceptType(Value.Trim())); } } else if (Key.ToLower() == "content-length") UInt64.TryParse(Value, out _ContentLength); else if (Key.ToLower() == "content-type") ContentType = new System.Net.Mime.ContentType(Value); else if (Key.ToLower() == "host") HostName = Value; else if (Key.ToLower() == "accept-encoding") AcceptEncoding = Value; /* try { ContentEncoding = Encoding.GetEncoding(Value); } catch { ContentEncoding = Encoding.UTF8; } * */ else if (Key.ToLower() == "user-agent") { if (Value.Contains("Microsoft-WebDAV-MiniRedir")) ClientType = ClientTypes.MicrosoftWebDAVMiniRedir; else if (Value.Contains("MSIE 7")) ClientType = ClientTypes.MSInternetExplorer7; else if (Value.Contains("MSIE 8")) ClientType = ClientTypes.MSInternetExplorer8; else if (Value.Contains("Firefox")) ClientType = ClientTypes.Firefox; else if (Value.ToLower().Contains("svn")) ClientType = ClientTypes.SVN; else ClientType = ClientTypes.Other; } else if (Key.ToLower() == "connection" && Value.ToLower().Contains("keep-alive")) { KeepAlive = true; } else if (Key.ToLower() == "authorization") { try { Authorization = new HTTPCredentials(Value); } catch (Exception) { //NLOG: temporarily commented //_Logger.ErrorException("could not parse authorization of HTTPHeader", ex); } } else Headers.Add(Key, Value); } AcceptTypes.Sort(); //AcceptTypes.Sort(new Comparison<AcceptType>((at1, at2) => //{ // if (at1.Quality > at2.Quality) return 1; // else if (at1.Quality == at2.Quality) return 0; // else return -1; // //if (at2.Quality > at1.Quality) return -1; // //else return 1; // //return at1.Quality.CompareTo(at2.Quality); //} // )); #endregion }