Beispiel #1
0
        public bool Login()
        {
            Debug.Print("JetSet.pro logging in");
            lock (loginLock)
            {
                try
                {
                    IsLoggedIn = false;

                    if (String.IsNullOrEmpty(_user) || String.IsNullOrEmpty(_password))
                    {
                        Debug.Print("JetSet.pro: Username or password is empty");
                        return(false);
                    }
                    Debug.Print("Jetset.pro: get home page {0}", homeUrl);
                    var result = loginWC.DownloadString(homeUrl);

                    var loginParams = String.Format("login={0}&pass={1}", _user, _password);
                    loginWC.ContentType = ContentType.UrlEncodedUTF8;

                    Debug.Print("Jetset.pro: send login info to {0}", loginUrl);
                    loginWC.UploadString(loginUrl, loginParams);

                    String remember = loginWC.CookiesStrings.FirstOrDefault(item => item.Key == "remember").Value;

                    if (string.IsNullOrEmpty(remember))
                    {
                        Debug.Print("Jetset.pro: login info cookie 'remember' isn't set");
                        return(false);
                    }

                    remember = HttpUtility.UrlDecode(remember);


                    ArrayList loginObj = (ArrayList)serializer.Deserialize(remember);

                    if (loginObj == null || loginObj.GetType() != typeof(ArrayList) || loginObj.Count != 3)
                    {
                        Debug.Print("Jetset.pro: unable to parse login json object");
                        return(false);
                    }
                    userId = (string)loginObj[0];
                    hash1  = (string)loginObj[1];
                    hash2  = (string)loginObj[2];

                    Debug.Print("Jetset.pro: get home page {0}", homeUrl);
                    result = loginWC.DownloadString(streamsUrl);

                    if (String.IsNullOrEmpty(result))
                    {
                        Debug.Print("Jetset.pro: can't get streams url {0}", streamsUrl);
                        return(false);
                    }

                    _channelUrl = Re.GetSubString(result, reChannelUrl, 1);

                    if (String.IsNullOrEmpty(_channelUrl))
                    {
                        Debug.Print("Jetset.pro: can't get channel url {0}", _channelUrl);
                        return(false);
                    }

                    result = loginWC.DownloadString(String.Format(chatJsUrl, TimeUtils.UnixTimestamp()));

                    var configVer = Re.GetSubString(result, reConfigVer, 1);
                    var config    = String.Format(configTemplate, configVer, TimeUtils.UnixTimestamp());

                    loginWC.setCookie("config", HttpUtility.UrlEncode(config), "jetset.pro");

                    result = loginWC.DownloadString(baseUrl + _channelUrl);

                    roomid   = Re.GetSubString(result, reRoomId, 1);
                    token    = Re.GetSubString(result, reToken, 1);
                    rndtoken = Re.GetSubString(result, reRndToken, 1);

                    loginWC.setCookie("RND_TOKEN", rndtoken, "jetset.pro");

                    loginWC.CookiesStrings.ForEach(pair => { Debug.Print("{0}: {1}", pair.Key, pair.Value); });

                    var sessionid = loginWC.DownloadString("http://" + socketDomain + ":8080/socket.io/1/?t=" + TimeUtils.UnixTimestamp());
                    sessionid = Re.GetSubString(sessionid, reSessId, 1);

                    Domain  = socketDomain;
                    Port    = "8080";
                    Path    = "/socket.io/1/websocket/" + sessionid;
                    Cookies = loginWC.CookiesStrings;
                    Connect();
                    IsLoggedIn = true;
                }
                catch (Exception e)
                {
                    Debug.Print("JetSet: login exception {0} {1} {2} ", loginWC.URL, e.Message, e.StackTrace.ToString());
                }

                return(true);
            }
        }