private void BeginLogin() { LoginParams loginParams = CurrentContext.Value; // Generate a random ID to identify this login attempt loginParams.LoginID = UUID.Random(); CurrentContext = loginParams; #region Sanity Check loginParams if (loginParams.Options == null) loginParams.Options = new List<string>().ToArray(); // Convert the password to MD5 if it isn't already if (loginParams.Password.Length != 35 && !loginParams.Password.StartsWith("$1$")) loginParams.Password = Utils.MD5(loginParams.Password); if (loginParams.ViewerDigest == null) loginParams.ViewerDigest = String.Empty; if (loginParams.Version == null) loginParams.Version = String.Empty; if (loginParams.UserAgent == null) loginParams.UserAgent = String.Empty; if (loginParams.Platform == null) loginParams.Platform = String.Empty; if (loginParams.MAC == null) loginParams.MAC = String.Empty; if (loginParams.Channel == null) loginParams.Channel = String.Empty; if (loginParams.Author == null) loginParams.Author = String.Empty; #endregion // TODO: Allow a user callback to be defined for handling the cert ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); // Even though this will compile on Mono 2.4, it throws a runtime exception //ServicePointManager.ServerCertificateValidationCallback = TrustAllCertificatePolicy.TrustAllCertificateHandler; if (Client.Settings.USE_LLSD_LOGIN) { #region LLSD Based Login // Create the CAPS login structure OSDMap loginLLSD = new OSDMap(); loginLLSD["first"] = OSD.FromString(loginParams.FirstName); loginLLSD["last"] = OSD.FromString(loginParams.LastName); loginLLSD["passwd"] = OSD.FromString(loginParams.Password); loginLLSD["start"] = OSD.FromString(loginParams.Start); loginLLSD["channel"] = OSD.FromString(loginParams.Channel); loginLLSD["version"] = OSD.FromString(loginParams.Version); loginLLSD["platform"] = OSD.FromString(loginParams.Platform); loginLLSD["mac"] = OSD.FromString(loginParams.MAC); loginLLSD["agree_to_tos"] = OSD.FromBoolean(loginParams.AgreeToTos); loginLLSD["read_critical"] = OSD.FromBoolean(loginParams.ReadCritical); loginLLSD["viewer_digest"] = OSD.FromString(loginParams.ViewerDigest); loginLLSD["id0"] = OSD.FromString(loginParams.ID0); // Create the options LLSD array OSDArray optionsOSD = new OSDArray(); for (int i = 0; i < loginParams.Options.Length; i++) optionsOSD.Add(OSD.FromString(loginParams.Options[i])); foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!optionsOSD.Contains(callbackOpts[i])) optionsOSD.Add(callbackOpts[i]); } } } loginLLSD["options"] = optionsOSD; // Make the CAPS POST for login Uri loginUri; try { loginUri = new Uri(loginParams.URI); } catch (Exception ex) { Logger.Log(String.Format("Failed to parse login URI {0}, {1}", loginParams.URI, ex.Message), Helpers.LogLevel.Error, Client); return; } CapsClient loginRequest = new CapsClient(loginUri); loginRequest.OnComplete += new CapsClient.CompleteCallback(LoginReplyLLSDHandler); loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, String.Format("Logging in as {0} {1}...", loginParams.FirstName, loginParams.LastName)); loginRequest.BeginGetResponse(loginLLSD, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); #endregion } else { #region XML-RPC Based Login Code // Create the Hashtable for XmlRpcCs Hashtable loginXmlRpc = new Hashtable(); loginXmlRpc["first"] = loginParams.FirstName; loginXmlRpc["last"] = loginParams.LastName; loginXmlRpc["passwd"] = loginParams.Password; loginXmlRpc["start"] = loginParams.Start; loginXmlRpc["channel"] = loginParams.Channel; loginXmlRpc["version"] = loginParams.Version; loginXmlRpc["platform"] = loginParams.Platform; loginXmlRpc["mac"] = loginParams.MAC; if (loginParams.AgreeToTos) loginXmlRpc["agree_to_tos"] = "true"; if (loginParams.ReadCritical) loginXmlRpc["read_critical"] = "true"; loginXmlRpc["id0"] = loginParams.ID0; loginXmlRpc["last_exec_event"] = 0; // Create the options array ArrayList options = new ArrayList(); for (int i = 0; i < loginParams.Options.Length; i++) options.Add(loginParams.Options[i]); foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!options.Contains(callbackOpts[i])) options.Add(callbackOpts[i]); } } } loginXmlRpc["options"] = options; try { ArrayList loginArray = new ArrayList(1); loginArray.Add(loginXmlRpc); XmlRpcRequest request = new XmlRpcRequest(CurrentContext.Value.MethodName, loginArray); // Start the request Thread requestThread = new Thread( delegate() { try { LoginReplyXmlRpcHandler( request.Send(CurrentContext.Value.URI, CurrentContext.Value.Timeout), loginParams); } catch (WebException e) { UpdateLoginStatus(LoginStatus.Failed, "Error opening the login server connection: " + e.Message); } }); requestThread.Name = "XML-RPC Login"; requestThread.Start(); } catch (Exception e) { UpdateLoginStatus(LoginStatus.Failed, "Error opening the login server connection: " + e); } #endregion } }
private void BeginLogin() { LoginParams loginParams = CurrentContext.Value; // Sanity check if (loginParams.Options == null) loginParams.Options = new List<string>(); // Convert the password to MD5 if it isn't already if (loginParams.Password.Length != 35 && !loginParams.Password.StartsWith("$1$")) loginParams.Password = Utils.MD5(loginParams.Password); // Override SSL authentication mechanisms. DO NOT convert this to the // .NET 2.0 preferred method, the equivalent function in Mono has a // different name and it will break compatibility! #pragma warning disable 0618 ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy(); // TODO: At some point, maybe we should check the cert? // Create the CAPS login structure OSDMap loginLLSD = new OSDMap(); loginLLSD["first"] = OSD.FromString(loginParams.FirstName); loginLLSD["last"] = OSD.FromString(loginParams.LastName); loginLLSD["passwd"] = OSD.FromString(loginParams.Password); loginLLSD["start"] = OSD.FromString(loginParams.Start); loginLLSD["channel"] = OSD.FromString(loginParams.Channel); loginLLSD["version"] = OSD.FromString(loginParams.Version); loginLLSD["platform"] = OSD.FromString(loginParams.Platform); loginLLSD["mac"] = OSD.FromString(loginParams.MAC); loginLLSD["agree_to_tos"] = OSD.FromBoolean(true); loginLLSD["read_critical"] = OSD.FromBoolean(true); loginLLSD["viewer_digest"] = OSD.FromString(loginParams.ViewerDigest); loginLLSD["id0"] = OSD.FromString(loginParams.id0); // Create the options LLSD array OSDArray optionsOSD = new OSDArray(); for (int i = 0; i < loginParams.Options.Count; i++) optionsOSD.Add(OSD.FromString(loginParams.Options[i])); foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!optionsOSD.Contains(callbackOpts[i])) optionsOSD.Add(callbackOpts[i]); } } } loginLLSD["options"] = optionsOSD; // Make the CAPS POST for login Uri loginUri; try { loginUri = new Uri(loginParams.URI); } catch (Exception ex) { Logger.Log(String.Format("Failed to parse login URI {0}, {1}", loginParams.URI, ex.Message), Helpers.LogLevel.Error, Client); throw ex; } CapsClient loginRequest = new CapsClient(loginUri); loginRequest.OnComplete += new CapsClient.CompleteCallback(LoginReplyHandler); loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, String.Format("Logging in as {0} {1}...", loginParams.FirstName, loginParams.LastName)); loginRequest.StartRequest(OSDParser.SerializeLLSDXmlBytes(loginLLSD), "application/xml+llsd"); }
private void BeginLogin() { LoginParams loginParams = CurrentContext.Value; // Sanity check if (loginParams.Options == null) { loginParams.Options = new List <string>(); } // Convert the password to MD5 if it isn't already if (loginParams.Password.Length != 35 && !loginParams.Password.StartsWith("$1$")) { loginParams.Password = Utils.MD5(loginParams.Password); } // Override SSL authentication mechanisms. DO NOT convert this to the // .NET 2.0 preferred method, the equivalent function in Mono has a // different name and it will break compatibility! #pragma warning disable 0618 ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy(); // TODO: At some point, maybe we should check the cert? // Create the CAPS login structure OSDMap loginLLSD = new OSDMap(); loginLLSD["first"] = OSD.FromString(loginParams.FirstName); loginLLSD["last"] = OSD.FromString(loginParams.LastName); loginLLSD["passwd"] = OSD.FromString(loginParams.Password); loginLLSD["start"] = OSD.FromString(loginParams.Start); loginLLSD["channel"] = OSD.FromString(loginParams.Channel); loginLLSD["version"] = OSD.FromString(loginParams.Version); loginLLSD["platform"] = OSD.FromString(loginParams.Platform); loginLLSD["mac"] = OSD.FromString(loginParams.MAC); loginLLSD["agree_to_tos"] = OSD.FromBoolean(true); loginLLSD["read_critical"] = OSD.FromBoolean(true); loginLLSD["viewer_digest"] = OSD.FromString(loginParams.ViewerDigest); loginLLSD["id0"] = OSD.FromString(loginParams.id0); // Create the options LLSD array OSDArray optionsOSD = new OSDArray(); for (int i = 0; i < loginParams.Options.Count; i++) { optionsOSD.Add(OSD.FromString(loginParams.Options[i])); } foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!optionsOSD.Contains(callbackOpts[i])) { optionsOSD.Add(callbackOpts[i]); } } } } loginLLSD["options"] = optionsOSD; // Make the CAPS POST for login Uri loginUri; try { loginUri = new Uri(loginParams.URI); } catch (Exception ex) { Logger.Log(String.Format("Failed to parse login URI {0}, {1}", loginParams.URI, ex.Message), Helpers.LogLevel.Error, Client); return; } CapsClient loginRequest = new CapsClient(loginUri); loginRequest.OnComplete += new CapsClient.CompleteCallback(LoginReplyHandler); loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, String.Format("Logging in as {0} {1}...", loginParams.FirstName, loginParams.LastName)); loginRequest.StartRequest(OSDParser.SerializeLLSDXmlBytes(loginLLSD), "application/xml+llsd"); }
private void BeginLogin() { LoginParams loginParams = CurrentContext.Value; // Generate a random ID to identify this login attempt loginParams.LoginID = UUID.Random(); CurrentContext = loginParams; #region Sanity Check loginParams if (loginParams.Options == null) loginParams.Options = new List<string>().ToArray(); // Convert the password to MD5 if it isn't already if (loginParams.Password.Length != 35 && !loginParams.Password.StartsWith("$1$")) loginParams.Password = Utils.MD5(loginParams.Password); if (loginParams.ViewerDigest== null) loginParams.ViewerDigest = String.Empty; if (loginParams.Version == null) loginParams.Version = String.Empty; if (loginParams.UserAgent == null) loginParams.UserAgent = String.Empty; if (loginParams.Platform == null) loginParams.Platform = String.Empty; if (loginParams.MAC == null) loginParams.MAC = String.Empty; if (loginParams.Channel == null) loginParams.Channel = String.Empty; if (loginParams.AgreeToTos == null) loginParams.AgreeToTos = "true"; if (loginParams.ReadCritical == null) loginParams.ReadCritical = "true"; if (loginParams.Author == null) loginParams.Author = String.Empty; #endregion // Override SSL authentication mechanisms. DO NOT convert this to the // .NET 2.0 preferred method, the equivalent function in Mono has a // different name and it will break compatibility! #pragma warning disable 0618 ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy(); // TODO: At some point, maybe we should check the cert? if (UseLLSDLogin) { #region LLSD Based Login // Create the CAPS login structure OSDMap loginLLSD = new OSDMap(); loginLLSD["first"] = OSD.FromString(loginParams.FirstName); loginLLSD["last"] = OSD.FromString(loginParams.LastName); loginLLSD["passwd"] = OSD.FromString(loginParams.Password); loginLLSD["start"] = OSD.FromString(loginParams.Start); loginLLSD["channel"] = OSD.FromString(loginParams.Channel); loginLLSD["version"] = OSD.FromString(loginParams.Version); loginLLSD["platform"] = OSD.FromString(loginParams.Platform); loginLLSD["mac"] = OSD.FromString(loginParams.MAC); loginLLSD["agree_to_tos"] = OSD.FromBoolean(true); loginLLSD["read_critical"] = OSD.FromBoolean(true); loginLLSD["viewer_digest"] = OSD.FromString(loginParams.ViewerDigest); loginLLSD["id0"] = OSD.FromString(loginParams.ID0); // Create the options LLSD array OSDArray optionsOSD = new OSDArray(); for (int i = 0; i < loginParams.Options.Length; i++) optionsOSD.Add(OSD.FromString(loginParams.Options[i])); foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!optionsOSD.Contains(callbackOpts[i])) optionsOSD.Add(callbackOpts[i]); } } } loginLLSD["options"] = optionsOSD; // Make the CAPS POST for login Uri loginUri; try { loginUri = new Uri(loginParams.URI); } catch (Exception ex) { Log.Log(String.Format("Failed to parse login URI {0}, {1}", loginParams.URI, ex.Message), Helpers.LogLevel.Error); return; } CapsClient loginRequest = new CapsClient(loginUri); loginRequest.OnComplete += new CapsClient.CompleteCallback(LoginReplyLLSDHandler); loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, String.Format("Logging in as {0} {1}...", loginParams.FirstName, loginParams.LastName)); loginRequest.BeginGetResponse(loginLLSD, OSDFormat.Xml, CapsTimeout); #endregion } else { #region XML-RPC Based Login Code // Create the Hashtable for XmlRpcCs Hashtable loginXmlRpc = new Hashtable(); loginXmlRpc["first"] = loginParams.FirstName; loginXmlRpc["last"] = loginParams.LastName; loginXmlRpc["passwd"] = loginParams.Password; loginXmlRpc["start"] = loginParams.Start; loginXmlRpc["channel"] = loginParams.Channel; loginXmlRpc["version"] = loginParams.Version; loginXmlRpc["platform"] = loginParams.Platform; loginXmlRpc["mac"] = loginParams.MAC; loginXmlRpc["agree_to_tos"] = true; loginXmlRpc["read_critical"] = true; loginXmlRpc["viewer_digest"] = loginParams.ViewerDigest; loginXmlRpc["id0"] = loginParams.ID0; loginXmlRpc["last_exec_event"] = 0; // Create the options array ArrayList options = new ArrayList(); for (int i = 0; i < loginParams.Options.Length; i++) options.Add(loginParams.Options[i]); foreach (string[] callbackOpts in CallbackOptions.Values) { if (callbackOpts != null) { for (int i = 0; i < callbackOpts.Length; i++) { if (!options.Contains(callbackOpts[i])) options.Add(callbackOpts[i]); } } } loginXmlRpc["options"] = options; try { ArrayList loginArray = new ArrayList(1); loginArray.Add(loginXmlRpc); XmlRpcRequest request = new XmlRpcRequest(CurrentContext.Value.MethodName, loginArray); // Start the request Thread requestThread = new Thread( delegate() { try { LoginReplyXmlRpcHandler( request.Send(CurrentContext.Value.URI, CurrentContext.Value.Timeout), loginParams); } catch (WebException e) { UpdateLoginStatus(LoginStatus.Failed, "Error opening the login server connection: " + e.Message); } }); requestThread.Name = "XML-RPC Login"; requestThread.Start(); } catch (Exception e) { UpdateLoginStatus(LoginStatus.Failed, "Error opening the login server connection: " + e); } #endregion } }