{
type
TSpManager = class(TForm)
[...]
IdHTTPServer1: TIdHTTPServer;
OAuth2Authenticator1: TOAuth2Authenticator;
RESTClient1: TRESTClient;
RESTRequest1: TRESTRequest;
RESTResponse1: TRESTResponse;
procedure IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
[...]
}
Procedure TSpManager.SendData(s:
string);
var
CDStruct: TCopyDataStruct;
copytext: ansistring;
begin
copytext:= s;
begin
CDStruct.dwData:= 0;
CDStruct.cbData:= length(Copytext) + 1;
CDStruct.lpData:= @CopyText[1];
SendMessage(MainHandle, WM_COPYDATA,1,integer(@CDStruct));
end;
end;
Procedure TSpManager.AuthorizeSpotifyAccess;
begin
IdHTTPServer1.Active := True;
OAuth2Authenticator1.ResetToDefaults;
OAuth2Authenticator1.ClientID := Stcf.AccessData.clientID;
// Bei der Registrierung von Spotify zugeteilt (lokal gespeichert)
OAuth2Authenticator1.ClientSecret := Stcf.AccessData.ClientSecret;
// Bei der Registrierung von Spotify zugeteilt (lokal gespeichert)
OAuth2Authenticator1.AuthorizationEndpoint := '
https://accounts.spotify.com/authorize';
// Bereiche, auf die Benutzerzugriff erlaubt sein soll
OAuth2Authenticator1.Scope := '
playlist-read-private user-read-private user-library-read';
// Weiterleitungsseite mit dem aktuellen AUTORISIERUNGSCODE
OAuth2Authenticator1.RedirectionEndpoint := '
http://localhost:9090';
// Die Definition des URI zum Generieren des AUTORISIERUNGSCODES
ShellExecute(0, '
OPEN', PChar(Self.OAuth2Authenticator1.AuthorizationRequestURI), '
', '
', SW_SHOWNORMAL);
end;
procedure TSpManager.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var s:
string;
begin
// Abfrage-String validiert
if (ARequestInfo.Params.IndexOfName('
code') = -1)
then Exit;
// Definition des ACCESS CODE, den wir von der Weiterleitungsseite abrufen
OAuth2Authenticator1.AuthCode := ARequestInfo.Params.Values['
code'];
// End-point für die Generierung des ACCESS TOKEN
OAuth2Authenticator1.AccessTokenEndpoint := '
https://accounts.spotify.com/api/token';
// Definieren des ACCESS TOKEN aus dem AUTORISIERUNGSCODE
OAuth2Authenticator1.ChangeAuthCodeToAccesToken;
// Antwort an den Browser
AResponseInfo.ContentText := '
<html><body><script language=javascript>window.close();</script>Vielen Dank, dass Sie den Zugriff erlaubt haben!</body></html>';
// Operation erfolgreich!
s:= OAuth2Authenticator1.AccessToken;
SendData(s);
// Schickt die Daten nur zur Information an das Hauptfenster;
FAuthorized:= s <> '
';
// Boolean als Flag
end;