Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Google Drive Refresh Access Token

See more Google Drive Examples

Demonstrates how to automatically refresh the access token when it expires.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.FileAccess,
  Chilkat.OAuth2,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  json: TJsonObject;
  tokenFilePath: string;
  oauth2: TOAuth2;
  fac: TFileAccess;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  success := True;

  //  This example uses a previously obtained access token having permission for the 
  //  Google Drive scope.

  //  The access token (and refresh token) was previously saved to a JSON file with this format:
  //  See Get Google Drive OAuth2 Access Token

  //  {
  //    "access_token": "ya29.Gls-BsdxTWuenChv ... yzVIrXikkLxu5T6dy4I6GjADFardoz4Lruw",
  //    "expires_in": 3600,
  //    "refresh_token": "1/tMBJ ... 27D-Hk6rpQYBA",
  //    "scope": "https://www.googleapis.com/auth/drive",
  //    "token_type": "Bearer"
  //  }

  json := TJsonObject.Create;
  tokenFilePath := 'qa_data/tokens/googleDrive.json';
  json.LoadFile(tokenFilePath);

  oauth2 := TOAuth2.Create;
  oauth2.AccessToken := json.StringOf('access_token');
  oauth2.RefreshToken := json.StringOf('refresh_token');

  oauth2.AuthorizationEndpoint := 'https://accounts.google.com/o/oauth2/v2/auth';
  oauth2.TokenEndpoint := 'https://www.googleapis.com/oauth2/v4/token';

  //   Replace these with actual values.
  oauth2.ClientId := 'GOOGLE-CLIENT-ID';
  oauth2.ClientSecret := 'GOOGLE-CLIENT-SECRET';
  oauth2.Scope := 'https://www.googleapis.com/auth/drive';

  //  Use OAuth2 to refresh the access token.
  success := oauth2.RefreshAccessToken();
  if (success <> True) then
    begin
      WriteLn(oauth2.LastErrorText);
      Exit;
    end;

  WriteLn(oauth2.AccessTokenResponse);

  //  Save the new access token to our JSON file (so we can refresh it again when needed).
  json.UpdateString('access_token',oauth2.AccessToken);

  fac := TFileAccess.Create;
  fac.WriteEntireTextFile(tokenFilePath,json.Emit(),'utf-8',False);

  WriteLn('Access Token Refreshed!');


  json.Free;
  oauth2.Free;
  fac.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.