Skip to content

Instantly share code, notes, and snippets.

@an01f01
Last active September 15, 2022 19:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save an01f01/fdafcb0a32379975dea106d74af0798a to your computer and use it in GitHub Desktop.
Save an01f01/fdafcb0a32379975dea106d74af0798a to your computer and use it in GitHub Desktop.
procedure THeaderFooterwithNavigation.OnNavCompleted(Sender: TObject;
var Params: TTMSFNCCustomWebBrowserNavigateCompleteParams);
var
s, Encoded, accessToken: string;
Base64: TBase64Encoding;
uri: TUri;
begin
{ TODO: On load complete, extract code for https://localhost callback }
Memo1.Lines.Add(Params.URL);
if Params.URL.Contains('http://localhost/?code=') then
begin
TMSFNCWebBrowser1.StopLoading;
uri := TUri.Create(Params.URL);
Memo1.Lines.Add(uri.ParameterByName['code']);
Memo1.Lines.Add('Extract code');
s := '<YOUR_CLIENT_ID_FITBIT>' + ':' + '<YOUR_CLIENT_SECRET_FITBIT>';
Base64 := TBase64Encoding.Create(0);
Encoded := Base64.Encode(s);
Memo1.Lines.Add('Basic ' + Encoded);
RESTClient1.BaseURL := 'https://api.fitbit.com/oauth2/token';
RESTRequest1.Params.Clear;
RESTRequest1.AddParameter('Authorization', 'Basic ' + Encoded, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
RESTRequest1.Params.AddItem('client_id', '<YOUR_CLIENT_ID_FITBIT>', TRESTRequestParameterKind.pkQUERY);
RESTRequest1.Params.AddItem('client_secret', '<YOUR_CLIENT_SECRET_FITBIT>', TRESTRequestParameterKind.pkQUERY);
RESTRequest1.Params.AddItem('grant_type', 'authorization_code', TRESTRequestParameterKind.pkQUERY);
RESTRequest1.Params.AddItem('redirect_uri', 'http://localhost', TRESTRequestParameterKind.pkQUERY);
RESTRequest1.Params.AddItem('code', uri.ParameterByName['code'], TRESTRequestParameterKind.pkQUERY);
RESTRequest1.Method := TRESTRequestMethod.rmPOST;
RESTRequest1.Execute;
Memo1.Lines.Add(RESTResponse1.JSONValue.ToString);
Memo1.Lines.Add(RESTResponse1.JSONValue.GetValue<string>('access_token'));
accessToken := RESTResponse1.JSONValue.GetValue<string>('access_token');
Memo1.Lines.Add('Request Access Token w POST');
Memo1.Lines.Add('Print Access Token');
RESTClient1.BaseURL := 'https://api.fitbit.com/1/user/-/profile.json';
RESTRequest1.Params.Clear;
RESTRequest1.AddParameter('Authorization', 'Bearer ' + accessToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
RESTRequest1.Method := TRESTRequestMethod.rmGET;
RESTRequest1.Execute;
Memo1.Lines.Add(RESTResponse1.JSONValue.ToString);
end;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment