Advertisement
Guest User

Untitled

a guest
Oct 5th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.83 KB | None | 0 0
  1. function PobierzTokenTwitch(login, haslo: string): string;
  2.   function ExtractData(sBegin, sEnd, sData: string): string;
  3.   var
  4.     iStartPos, iEndPos: integer;
  5.   begin
  6.     Result := '';
  7.     iStartPos := Pos(sBegin, sData) + Length(sBegin);
  8.     iEndPos := PosEx(sEnd, sData, iStartPos);
  9.     if (iStartPos > Length(sBegin)) and (iEndPos > iStartPos) then Result := Copy(sData, iStartPos, iEndPos - iStartPos);
  10.   end;
  11.  
  12. const
  13.   // wpisz swoje dane ze strony
  14.   CLIENT_ID = 'co04pfrt255u3a8yxud4to7122jr9ps';
  15.   CLIENT_SECRET = '4u1xhp0orvdowk5efwyecmrlal9w0l7';
  16.   REDIRECT_URI = 'http://mca64.com/twitch.php';
  17.  
  18. var
  19.   IdHTTP: TIdHTTP;
  20.   IdSSL: TIdSSLIOHandlerSocketOpenSSL;
  21.   HTML: string;
  22.   nonce: string;
  23.   parametry: TStringList;
  24.   strumien: TStringStream;
  25.   authenticity_token: string;
  26.   RedirectURL, Code: string;
  27. begin
  28.   IdHTTP := TIdHTTP.Create;
  29.   parametry := TStringList.Create;
  30.   strumien := TStringStream.Create;
  31.   try
  32.     IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  33.     IdHTTP.IOHandler := IdSSL;
  34.     IdHTTP.AllowCookies := True;
  35.     IdHTTP.CookieManager := Form1.IdCookieManager1;
  36.     Form1.IdCookieManager1.CookieCollection.Clear;
  37.     IdHTTP.HandleRedirects := True;
  38.  
  39.     HTML := IdHTTP.Get
  40.       (Format('https://api.twitch.tv/kraken/oauth2/authorize?response_type=code&client_id=%0:s&redirect_uri=%1:s&scope=chat_login+channel_editor+channel_read',
  41.       [CLIENT_ID, REDIRECT_URI]));
  42.  
  43.     nonce := ExtractData('name="nonce" value="', '"', HTML);
  44.  
  45.     parametry.Add('scope=chat_login channel_editor channel_read');
  46.     parametry.Add('client_id=' + CLIENT_ID);
  47.     parametry.Add('redirect_uri=' + REDIRECT_URI);
  48.     parametry.Add('response_type=code');
  49.     parametry.Add('state=');
  50.     parametry.Add('nonce=' + nonce);
  51.     parametry.Add('from_embed=false');
  52.     parametry.Add('time_to_submit=');
  53.     parametry.Add('username=' + login);
  54.     parametry.Add('password=' + haslo);
  55.  
  56.     IdHTTP.Post('https://passport.twitch.tv/authentications/new', parametry, strumien, IndyTextEncoding_UTF8());
  57.  
  58.     HTML := strumien.DataString;
  59.     RedirectURL := ExtractData('redirect":"', '"', HTML);
  60.     RedirectURL := StringReplace(RedirectURL, '\u0026', '&', [rfReplaceAll]);
  61.     Code := ExtractData('code=', '&', RedirectURL);
  62.  
  63.     try
  64.       HTML := IdHTTP.Get(RedirectURL, [302, 404]); // IGNORUJEMY BLEDY
  65.     except
  66.     end;
  67.  
  68.     authenticity_token := ExtractData('name="authenticity_token" type="hidden" value="', '"', HTML);
  69.     if Length(authenticity_token) > 0 then // potrzebna autioryzacja aplikacji
  70.     begin
  71.       parametry.Clear;
  72.  
  73.       parametry.Add('utf8=✓');
  74.       parametry.Add('client_id=' + CLIENT_ID);
  75.       parametry.Add('authenticity_token=' + authenticity_token);
  76.       parametry.Add('scope=chat_login channel_editor channel_read');
  77.       parametry.Add('response_type=code');
  78.       parametry.Add('redirect_uri=' + REDIRECT_URI);
  79.       parametry.Add('state=');
  80.       try // 10061 connection refused
  81.         IdHTTP.Post('https://api.twitch.tv/kraken/oauth2/allow', parametry, strumien, IndyTextEncoding_UTF8());
  82.       except
  83.       end;
  84.       HTML := strumien.DataString;
  85.     end;
  86.  
  87.     Code := ExtractData('code=', '&', IdHTTP.Request.URL); // zgodnie z api z adresu strony trzeba odczytac codde
  88.  
  89.     parametry.Clear;
  90.  
  91.     parametry.Add('client_id=' + CLIENT_ID);
  92.     parametry.Add('client_secret=' + CLIENT_SECRET);
  93.     parametry.Add('grant_type=authorization_code');
  94.     parametry.Add('redirect_uri=' + REDIRECT_URI);
  95.     parametry.Add('code=' + Code);
  96.     parametry.Add('state=');
  97.  
  98.     IdHTTP.Post('https://api.twitch.tv/kraken/oauth2/token', parametry, strumien, IndyTextEncoding_UTF8());
  99.  
  100.     HTML := strumien.DataString;
  101.  
  102.     parametry.Clear;
  103.  
  104.     Result := 'oauth:' + ExtractData('"access_token":"', '"', HTML);
  105.   finally
  106.     IdHTTP.Free;
  107.     parametry.Free;
  108.     strumien.Free;
  109.   end;
  110. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement