Advertisement
FineNerds

Riot Login

Feb 13th, 2016
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.85 KB | None | 0 0
  1. async void Login(string username, string pass, BaseRegion selectedRegion, Deletable<UserClient> user)
  2.         {
  3.             user.Instance.Region = selectedRegion;
  4.             user.Instance.calls = new RiotCalls(user.Instance);
  5.             //BaseRegion selectedRegion = BaseRegion.GetRegion((string)RegionComboBox.SelectedValue);
  6.             var authToken = await user.Instance.calls.GetRestToken(username, pass, selectedRegion.LoginQueue);
  7.             if (authToken == "invalid_credentials")
  8.             {
  9.                 ErrorTextBox.Text = "Wrong login data";
  10.                 user.Delete();
  11.                 HideGrid.Visibility = Visibility.Visible;
  12.                 ErrorTextBox.Visibility = Visibility.Visible;
  13.                 LoggingInLabel.Visibility = Visibility.Hidden;
  14.                 LoggingInProgressRing.Visibility = Visibility.Collapsed;
  15.                 return;
  16.             }
  17.             user.Instance.RiotConnection = new RtmpClient(new System.Uri("rtmps://" + selectedRegion.Server + ":2099"), user.Instance.calls.RegisterObjects(), ObjectEncoding.Amf3);
  18.             user.Instance.RiotConnection.CallbackException += client_CallbackException;
  19.             user.Instance.RiotConnection.MessageReceived += client_MessageReceived;
  20.             try
  21.             {
  22.  
  23.                 await user.Instance.RiotConnection.ConnectAsync();
  24.             }
  25.             catch
  26.             {
  27.                 ErrorTextBox.Text = "Failed to login. SSL error.";
  28.                 HideGrid.Visibility = Visibility.Visible;
  29.                 ErrorTextBox.Visibility = Visibility.Visible;
  30.                 LoggingInLabel.Visibility = Visibility.Hidden;
  31.                 LoggingInProgressRing.Visibility = Visibility.Collapsed;
  32.                 //user.Delete();
  33.                 Login(username, pass, selectedRegion, user);
  34.                 return;
  35.             }
  36.  
  37.             user.Instance.RiotConnection.SetChunkSize(2147483647);
  38.             AuthenticationCredentials newCredentials = new AuthenticationCredentials
  39.             {
  40.                 Username = username,
  41.                 Password = pass,
  42.                 ClientVersion = Client.Version,
  43.                 IpAddress = user.Instance.calls.GetIpAddress(),
  44.                 Locale = selectedRegion.Locale,
  45.                 OperatingSystem = "Windows 7",
  46.                 Domain = "lolclient.lol.riotgames.com",
  47.                 AuthToken = authToken
  48.             };
  49.             Session login = await user.Instance.calls.Login(newCredentials);
  50.             if (login == null)
  51.             {
  52.                 Client.Log("Login session is null.");
  53.                 var overlay = new MessageOverlay
  54.                 {
  55.                     MessageTextBox = { Text = "Login session is null. Login failed. Please check whether the version number is correct or not.", IsReadOnly = true },
  56.                     MessageTitle = { Content = "Login session is null." }
  57.                 };
  58.                 Client.OverlayContainer.Content = overlay.Content;
  59.                 Client.OverlayContainer.Visibility = Visibility.Visible;
  60.                 ErrorTextBox.Text = "Failed to login. Login session is null.";
  61.                 HideGrid.Visibility = Visibility.Visible;
  62.                 ErrorTextBox.Visibility = Visibility.Visible;
  63.                 LoggingInLabel.Visibility = Visibility.Hidden;
  64.                 LoggingInProgressRing.Visibility = Visibility.Collapsed;
  65.                 return;
  66.             }
  67.             user.Instance.PlayerSession = login;
  68.  
  69.             var str1 = string.Format("gn-{0}", login.AccountSummary.AccountId);
  70.             var str2 = string.Format("cn-{0}", login.AccountSummary.AccountId);
  71.             var str3 = string.Format("bc-{0}", login.AccountSummary.AccountId);
  72.             Task<bool>[] taskArray = { user.Instance.RiotConnection.SubscribeAsync("my-rtmps", "messagingDestination", str1, str1),
  73.                                                  user.Instance.RiotConnection.SubscribeAsync("my-rtmps", "messagingDestination", str2, str2),
  74.                                                  user.Instance.RiotConnection.SubscribeAsync("my-rtmps", "messagingDestination", "bc", str3) };
  75.  
  76.             await Task.WhenAll(taskArray);
  77.             //Riot added this for no reason but make it look like the riot client we have to do this
  78.             var plainTextbytes = Encoding.UTF8.GetBytes(login.AccountSummary.Username + ":" + login.Token);
  79.             user.Instance.reconnectToken = Convert.ToBase64String(plainTextbytes);
  80.  
  81.             var LoggedIn = await user.Instance.RiotConnection.LoginAsync(username.ToLower(), login.Token);
  82.  
  83.             var packetx = await user.Instance.calls.GetLoginDataPacketForUser();
  84.  
  85.             if (packetx == null || packetx.AllSummonerData == null)
  86.             {
  87.                 user.Instance.RiotConnection.CallbackException -= client_CallbackException;
  88.                 user.Instance.RiotConnection.MessageReceived -= client_MessageReceived;
  89.                 //Just Created Account, need to put logic here.
  90.                 user.Instance.done = false;
  91.                 Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
  92.                 {
  93.                     var createSummoner = new CreateSummonerNameOverlay(user.Instance);
  94.                     Client.OverlayContainer.Content = createSummoner.Content;
  95.                     Client.OverlayContainer.Visibility = Visibility.Visible;
  96.                 }));
  97.                 while (!user.Instance.done)
  98.                 {
  99.                 }
  100.                 Login(username, pass, selectedRegion, user);
  101.                 return;
  102.             }
  103.  
  104.             if (saveuser || !string.IsNullOrWhiteSpace(Client.EncrytKey))
  105.             {
  106.                 UserList.AddUser(username, pass, packetx.AllSummonerData.Summoner.InternalName,
  107.                                     "Using Sightstone", packetx.AllSummonerData.Summoner.ProfileIconId,
  108.                                     selectedRegion, ShowType.chat, Client.EncrytKey);
  109.                 saveuser = false;
  110.             }
  111.             DoGetOnLoginPacket(username, pass, selectedRegion, packetx, user);
  112.         }
  113.  
  114.         private async void DoGetOnLoginPacket(string username, string pass, BaseRegion selectedRegion, LoginDataPacket packetx, Deletable<UserClient> user)
  115.         {
  116.             //TODO: Finish this so all calls are used
  117.  
  118.             user.Instance.Queues = await user.Instance.calls.GetAvailableQueues();
  119.             user.Instance.PlayerChampions = await user.Instance.calls.GetAvailableChampions();
  120.             //var runes = await RiotCalls.GetSummonerRuneInventory(packetx.AllSummonerData.Summoner.AcctId);
  121.             user.Instance.StartHeartbeat();
  122.             //var leaguePos = await RiotCalls.GetMyLeaguePositions();
  123.             //var preferences = await RiotCalls.LoadPreferencesByKey();
  124.             //var masterybook = await RiotCalls.GetMasteryBook(packetx.AllSummonerData.Summoner.AcctId);
  125.             //var lobby = await RiotCalls.CheckLobbyStatus();
  126.             var invites = await user.Instance.calls.GetPendingInvitations();
  127.             //var player = await RiotCalls.CreatePlayer();
  128.             GotLoginPacket(packetx, username, pass, selectedRegion, user);
  129.  
  130.             foreach (var pop in from InvitationRequest invite in invites
  131.                                 select new GameInvitePopup(invite, user.Instance)
  132.                                 {
  133.                                     HorizontalAlignment = HorizontalAlignment.Right,
  134.                                     VerticalAlignment = VerticalAlignment.Bottom,
  135.                                     Height = 230
  136.                                 })
  137.                 Client.NotificationGrid.Children.Add(pop);
  138.             if (invites.Length != 0)
  139.                 Client.MainWin.FlashWindow();
  140.  
  141.             user.Instance.LoginPacket = packetx;
  142.             if (!dataLogin.ContainsKey(packetx.AllSummonerData.Summoner.InternalName + ":" + selectedRegion))
  143.             {
  144.                 dataLogin.Add(packetx.AllSummonerData.Summoner.InternalName + ":" + selectedRegion, new LoginData
  145.                 {
  146.                     Pass = pass,
  147.                     Region = selectedRegion,
  148.                     ShowType = ShowType.chat,
  149.                     Status = "Using Sightstone",
  150.                     SumIcon = packetx.AllSummonerData.Summoner.ProfileIconId,
  151.                     SumName = packetx.AllSummonerData.Summoner.InternalName,
  152.                     User = username
  153.                 });
  154.  
  155.                 LoggingInLabel.Visibility = Visibility.Hidden;
  156.                 LoggingInProgressRing.Visibility = Visibility.Hidden;
  157.                 Encrypt.Visibility = Visibility.Hidden;
  158.                 EncryptCheck.Visibility = Visibility.Hidden;
  159.             }
  160.         }
  161.  
  162.         private void GotLoginPacket(LoginDataPacket packet, string username, string pass, BaseRegion selectedRegion, Deletable<UserClient> user)
  163.         {
  164.  
  165.             user.Instance.LoginPacket = packet;
  166.             Client.CurrentServer = selectedRegion.Server + ":" + packet.AllSummonerData.Summoner.InternalName;
  167.             UserList.Users.Add(selectedRegion.Server + ":" + packet.AllSummonerData.Summoner.InternalName, new Dictionary<string, UserClient> { { packet.AllSummonerData.Summoner.InternalName, user.Instance } });
  168.             if (packet.AllSummonerData.Summoner.ProfileIconId == -1)
  169.             {
  170.                 user.Instance.RiotConnection.CallbackException -= client_CallbackException;
  171.                 user.Instance.RiotConnection.MessageReceived -= client_MessageReceived;
  172.                 user.Instance.done = false;
  173.                 Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
  174.                 {
  175.                     Client.OverlayContainer.Content = new ChooseProfilePicturePage().Content;
  176.                     Client.OverlayContainer.Visibility = Visibility.Visible;
  177.                 }));
  178.                 while (!user.Instance.done)
  179.                 {
  180.                 }
  181.                 Login(username, pass, selectedRegion, user);
  182.  
  183.                 return;
  184.             }
  185.  
  186.             user.Instance.RiotConnection.MessageReceived += user.Instance.OnMessageReceived;
  187.             user.Instance.RiotConnection.Disconnected += user.Instance.RiotConnection_Disconnected;
  188.             user.Instance.GameConfigs = packet.GameTypeConfigs;
  189.             user.Instance.IsLoggedIn = true;
  190.  
  191.  
  192.             Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(async () =>
  193.             {
  194.                 //MessageBox.Show("Do not play ANY games. I am not sure if they will work ~eddy", "XMPP", MessageBoxButton.OK, MessageBoxImage.Warning);
  195.                 Client.StatusContainer.Visibility = Visibility.Visible;
  196.                 Client.Container.Margin = new Thickness(0, 0, 0, 40);
  197.                 user.Instance.XmppConnection = new agsXMPP.XmppClientConnection("pvp.net", 5223)
  198.                 {
  199.                     AutoResolveConnectServer = false,
  200.                     ConnectServer = "chat." + user.Instance.Region.ChatName + ".lol.riotgames.com",
  201.                     Resource = "xiff",
  202.                     UseSSL = true,
  203.                     KeepAliveInterval = 10,
  204.                     KeepAlive = true,
  205.                     UseCompression = true
  206.                 };
  207.                 user.Instance.XmppConnection.OnMessage += user.Instance.XmppConnection_OnMessage;
  208.                 user.Instance.XmppConnection.OnError += user.Instance.XmppConnection_OnError;
  209.                 if (switchpage)
  210.                 {
  211.                     user.Instance.XmppConnection.OnLogin += (o) =>
  212.                     {
  213.                         Client.Log("Connected to XMPP Server");
  214.                         //Set up chat
  215.                         Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
  216.                         {
  217.                             user.Instance.XmppConnection.Send(invisibleLoginCheckBox.IsChecked != true
  218.                                 ? new Presence(ShowType.chat, user.Instance.GetPresence(), 0)
  219.                                 {
  220.                                     Type = PresenceType.available
  221.                                 }
  222.                                 : new Presence(ShowType.NONE, user.Instance.GetPresence(), 0)
  223.                                 {
  224.                                     Type = PresenceType.invisible
  225.                                 });
  226.                         }));
  227.                     };
  228.                 }
  229.                 Client.ready = false;
  230.                 Client.loadedGroups = false;
  231.                 user.Instance.RostManager = new RosterManager(user.Instance.XmppConnection);
  232.                 user.Instance.XmppConnection.OnRosterItem += user.Instance.RostManager_OnRosterItem;
  233.  
  234.                 user.Instance.XmppConnection.OnRosterEnd += user.Instance.XmppConnection_OnRosterEnd;
  235.                 user.Instance.PresManager = new PresenceManager(user.Instance.XmppConnection);
  236.                 user.Instance.XmppConnection.OnPresence += user.Instance.XmppConnection_OnPresence;
  237.                 user.Instance.XmppConnection.OnMessage += Client.statusPage.XmppConnection_OnMessage;
  238.                 if (!user.Instance.Garena)
  239.                 {
  240.                     user.Instance.userpass = new KeyValuePair<string, string>(username,
  241.                         "AIR_" + pass);
  242.  
  243.                     user.Instance.XmppConnection.Open(username, "AIR_" + pass);
  244.  
  245.                     //Client.XmppConnection.OnInvalidCertificate += Client.XmppConnection_OnInvalidCertificate;
  246.                 }
  247.                 else
  248.                 {
  249.                     user.Instance.XmppConnection.ConnectServer = "chat" + user.Instance.Region.ChatName + ".lol.garenanow.com";
  250.                     var gas = getGas(user);
  251.                     user.Instance.XmppConnection.Open(user.Instance.UID, "AIR_" + gas);
  252.                     user.Instance.userpass = new KeyValuePair<string, string>(user.Instance.UID, "AIR_" + gas);
  253.                 }
  254.  
  255.                 Client.Log("Connected to " + user.Instance.Region.RegionName + " and logged in as " +
  256.                            user.Instance.LoginPacket.AllSummonerData.Summoner.Name);
  257.  
  258.                 PlatformGameLifecycleDTO data = (PlatformGameLifecycleDTO)user.Instance.LoginPacket.ReconnectInfo;
  259.                 Client.CurrentUser = packet.AllSummonerData.Summoner.InternalName;
  260.                 Client.MainPage = new MainPage();
  261.  
  262.                 if (data != null && data.Game != null)
  263.                 {
  264.                     Client.Log(data.PlayerCredentials.ChampionId.ToString(CultureInfo.InvariantCulture));
  265.                     user.Instance.CurrentGame = data.PlayerCredentials;
  266.                     user.Instance.GameType = data.Game.GameType;
  267.                     if (switchpage)
  268.                         Client.SwitchPage(new InGame());
  269.                 }
  270.                 else if (switchpage)
  271.                 {
  272.                     while (!Client.ready)
  273.                     {
  274.                         await Task.Delay(1000);
  275.                     }
  276.                     Client.SwitchPage(Client.MainPage);
  277.  
  278.                     Client.loadedGroups = true;
  279.                 }
  280.                 if (switchpage) return;
  281.                 var sum = dataLogin[packet.AllSummonerData.Summoner.InternalName + ":" + selectedRegion];
  282.                 user.Instance.presenceStatus = sum.ShowType;
  283.                 user.Instance.XmppConnection.Send(sum.ShowType == ShowType.NONE
  284.                     ? new Presence(sum.ShowType, user.Instance.GetPresence(), 0) { Type = PresenceType.invisible }
  285.                     : new Presence(sum.ShowType, user.Instance.GetPresence(), 0) { Type = PresenceType.available });
  286.                 UserAccount acc = new UserAccount
  287.                 {
  288.                     PlayerName = { Content = packet.AllSummonerData.Summoner.InternalName },
  289.                     StatusColour = { Fill = System.Windows.Media.Brushes.Green },
  290.                     ProfileImage =
  291.                     {
  292.                         Source = new BitmapImage(Client.GetIconUri(sum.SumIcon))
  293.                     },
  294.                     RegionLabel = { Content = sum.Region.RegionName },
  295.                     LevelLabel = { Content = packet.AllSummonerData.SummonerLevel.Level },
  296.                     PlayerStatus = { Content = sum.Status }
  297.                 };
  298.                 foreach (var lgndata in dataLogin.Where(lgndata => lgndata.Key == packet.AllSummonerData.Summoner.InternalName + ":" + selectedRegion))
  299.                 {
  300.                     user.Instance.presenceStatus = lgndata.Value.ShowType;
  301.                     user.Instance.XmppConnection.Send(lgndata.Value.ShowType == ShowType.NONE
  302.                         ? new Presence(sum.ShowType, user.Instance.GetPresence(), 0) { Type = PresenceType.invisible }
  303.                         : new Presence(sum.ShowType, user.Instance.GetPresence(), 0) { Type = PresenceType.available });
  304.                 }
  305.                 switch (user.Instance.presenceStatus)
  306.                 {
  307.                     case ShowType.away:
  308.                     case ShowType.dnd:
  309.                     case ShowType.xa:
  310.                         acc.StatusColour.Fill = System.Windows.Media.Brushes.Red;
  311.                         break;
  312.                     case ShowType.NONE:
  313.                         acc.StatusColour.Fill = System.Windows.Media.Brushes.Silver;
  314.                         break;
  315.                 }
  316.  
  317.                 user.Instance.userAccount = acc;
  318.                 UserListView.Items.Add(acc);
  319.                 acc.MouseDown += async (o, e) =>
  320.                 {
  321.                     Client.CurrentServer = selectedRegion.Server + ":" + packet.AllSummonerData.Summoner.InternalName;
  322.                     Client.CurrentUser = packet.AllSummonerData.Summoner.InternalName;
  323.                     Client.SwitchPage(Client.MainPage);
  324.                     while (!Client.ready)
  325.                     {
  326.                         await Task.Delay(1000);
  327.                     }
  328.                     Client.loadedGroups = true;
  329.                 };
  330.             }));
  331.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement