public void LoginAsync(string login, string password, Action <string> callback, Action <Exception> callbackError, bool useSsl) { if (login == null) { throw new ArgumentNullException("login"); } if (password == null) { throw new ArgumentNullException("password"); } WebClient client = new WebClient(); Uri uri = new UriBuilder { Host = this.Host, Path = @"/webman/login.cgi", Query = string.Format("username={0}&passwd={1}", login, password), Port = this.Port, Scheme = useSsl ? "https" : "http" }.Uri; client.DownloadStringCompleted += (sender, e) => { if (e.Error != null) { if (uri.Scheme == "https") { throw new SynoNetworkException("Open Syno could not connect to the server. Please make sure your server's SSL certificate has been issued by a trusted Certificate Authority. see http://bit.ly/qODji5 for further detail.", e.Error); } throw new SynoNetworkException("Open Syno could not complete the operation. Please check that your phone is not in flight mode and that you are getting a proper signal.", e.Error); } else { string rawCookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"]; if (rawCookie == null) { try { if (JObject.Parse(e.Result)["success"].Value <bool>() != true) { throw new SynoLoginException("The login and the password don't match, please check your credentials", null); } } catch (JsonReaderException exception) { PiggybackingJsonReaderException extendedException = new PiggybackingJsonReaderException("Failed JSON document was : " + e.Result, exception); callbackError(extendedException); } } else { string cookie = rawCookie.Split(';').Where(s => s.StartsWith("id=")).Single(); this.Token = cookie; // Delete ascii urls patches } callback(this.Token); } }; client.DownloadStringAsync(uri); }
public void LoginAsync(string login, string password, Action<string> callback, Action<Exception> callbackError, bool useSsl) { if (login == null) throw new ArgumentNullException("login"); if (password == null) throw new ArgumentNullException("password"); WebClient client = new WebClient(); Uri uri = new UriBuilder { Host = this.Host, Path = @"/webman/login.cgi", Query = string.Format("username={0}&passwd={1}", login, password), Port = this.Port, Scheme = useSsl ? "https" : "http" }.Uri; client.DownloadStringCompleted += (sender, e) => { if (e.Error != null) { if (uri.Scheme == "https") { throw new SynoNetworkException("Open Syno could not connect to the server. Please make sure your server's SSL certificate has been issued by a trusted Certificate Authority. see http://bit.ly/qODji5 for further detail.", e.Error); } throw new SynoNetworkException("Open Syno could not complete the operation. Please check that your phone is not in flight mode and that you are getting a proper signal.", e.Error); } else { string rawCookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"]; if (rawCookie == null) { try { if (JObject.Parse(e.Result)["success"].Value<bool>() != true) { throw new SynoLoginException("The login and the password don't match, please check your credentials", null); } } catch (JsonReaderException exception) { PiggybackingJsonReaderException extendedException = new PiggybackingJsonReaderException("Failed JSON document was : " + e.Result, exception); callbackError(extendedException); } } else { string cookie = rawCookie.Split(';').Where(s => s.StartsWith("id=")).Single(); this.Token = cookie; // Delete ascii urls patches } callback(this.Token); } }; client.DownloadStringAsync(uri); }