Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Xero API through an SSH TunnelThis example demonstrates connecting through an SSH Tunnel w/ 2-legged OAuth for a Xero private application. This example requires Chilkat v9.5.0.64 or later
LOCAL loTunnel LOCAL lcSshHostname LOCAL lnSshPort LOCAL lnSuccess LOCAL loRest LOCAL loChannel LOCAL lnBTls LOCAL lnPort LOCAL lnMaxWaitMs LOCAL lcConsumerKey LOCAL lcConsumerSecret LOCAL loPfx LOCAL loPrivKeyFromPfx LOCAL loPrivKeyFromPem LOCAL loOauth1 LOCAL loSbXml LOCAL lnBAutoTrim LOCAL loXml LOCAL lnRecordCount LOCAL i * This example requires Chilkat v9.5.0.64 or later loTunnel = CreateObject('Chilkat_9_5_0.Socket') lcSshHostname = "www.my-ssh-server.com" lnSshPort = 22 * Connect to an SSH server and establish the SSH tunnel: lnSuccess = loTunnel.SshOpenTunnel(lcSshHostname,lnSshPort) IF (lnSuccess <> 1) THEN ? loTunnel.LastErrorText RELEASE loTunnel CANCEL ENDIF * Authenticate with the SSH server via a login/password * or with a public key. * This example demonstrates SSH password authentication. lnSuccess = loTunnel.SshAuthenticatePw("mySshLogin","mySshPassword") IF (lnSuccess <> 1) THEN ? loTunnel.LastErrorText RELEASE loTunnel CANCEL ENDIF * OK, the SSH tunnel is setup. Now open a channel within the tunnel. * (Any number of channels may be created from the same SSH tunnel. * Multiple channels may coexist at the same time.) * This sample code would typically be placed in a subroutine or function * where the rest object is passed by reference. * It does the OAuth1 setup and makes the initial connection. loRest = CreateObject('Chilkat_9_5_0.Rest') lnBTls = 1 lnPort = 443 lnMaxWaitMs = 7000 * This returns a socket object that is a single channel within the SSH tunnel. loChannel = loTunnel.SshOpenChannel("api.xero.com",lnPort,lnBTls,lnMaxWaitMs) IF (loTunnel.LastMethodSuccess <> 1) THEN ? loTunnel.LastErrorText RELEASE loTunnel RELEASE loRest CANCEL ENDIF * Use the connection. (This connection is a TLS running on an SSH channel through an SSH tunnel. * In other words, TLS is wrapped within the SSH tunnel.) lnSuccess = loRest.UseConnection(loChannel,1) IF (lnSuccess <> 1) THEN ? loRest.LastErrorText RELEASE loChannel RELEASE loTunnel RELEASE loRest CANCEL ENDIF * OK, we're connected. * ----------------------------------------------------------------- * Now setup the OAuth1 authenticator.. lcConsumerKey = "XERO_PRIVATE_APP_KEY" lcConsumerSecret = "XERO_PRIVATE_APP_SECRET" * Let's get our private key from our PFX (password protected), or the PEM (unprotected). * You can decide which to use. Either is OK, although I would recommend keeping your * private keys in a PFX and not in an unprotected PEM. loPfx = CreateObject('Chilkat_9_5_0.Pfx') lnSuccess = loPfx.LoadPfxFile("qa_data/certs/xero_private_app/public_privatekey.pfx","PFX_PASSWORD") IF (lnSuccess <> 1) THEN ? loPfx.LastErrorText RELEASE loTunnel RELEASE loRest RELEASE loPfx CANCEL ENDIF loPrivKeyFromPfx = loPfx.GetPrivateKey(0) IF (loPfx.LastMethodSuccess <> 1) THEN ? loPfx.LastErrorText RELEASE loTunnel RELEASE loRest RELEASE loPfx CANCEL ENDIF * Or we can load from a PEM.. loPrivKeyFromPem = CreateObject('Chilkat_9_5_0.PrivateKey') lnSuccess = loPrivKeyFromPem.LoadPemFile("qa_data/certs/xero_private_app/privatekey.pem") IF (lnSuccess <> 1) THEN ? loPrivKeyFromPem.LastErrorText RELEASE loTunnel RELEASE loRest RELEASE loPfx RELEASE loPrivKeyFromPem CANCEL ENDIF * Note: There are many other means for loading a private key, including * from other formats and directly from memory (i.e. not file-based). loOauth1 = CreateObject('Chilkat_9_5_0.OAuth1') loOauth1.ConsumerKey = lcConsumerKey loOauth1.ConsumerSecret = lcConsumerSecret loOauth1.Token = lcConsumerKey loOauth1.TokenSecret = lcConsumerSecret loOauth1.SignatureMethod = "RSA-SHA1" loOauth1.SetRsaKey(loPrivKeyFromPfx) RELEASE loPrivKeyFromPfx * Install the OAuth1 authenticator. loRest.SetAuthOAuth1(loOauth1,0) ? "OK, the Xero OAuth1 is initialized and the REST object is ready to make REST API calls.." * ----------------------------------------------------------------- * Make a call to verify that OAuth1 through an HTTP proxy works.. * Get the full list of contacts. loSbXml = CreateObject('Chilkat_9_5_0.StringBuilder') lnSuccess = loRest.FullRequestNoBodySb("GET","/api.xro/2.0/Contacts",loSbXml) IF (lnSuccess <> 1) THEN ? loRest.LastErrorText RELEASE loTunnel RELEASE loRest RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml CANCEL ENDIF * A 200 response is expected for actual success. IF (loRest.ResponseStatusCode <> 200) THEN ? loSbXml.GetAsString() RELEASE loTunnel RELEASE loRest RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml CANCEL ENDIF * Iterate over the contacts.. lnBAutoTrim = 0 loXml = CreateObject('Chilkat_9_5_0.Xml') loXml.LoadSb(loSbXml,lnBAutoTrim) loXml.SaveXml("qa_cache/xero_contacts.xml") * How many records exist? lnRecordCount = loXml.NumChildrenAt("Contacts") ? "numRecords = " + STR(lnRecordCount) i = 0 DO WHILE i < lnRecordCount loXml.I = i ? "ContactID: " + loXml.GetChildContent("Contacts|Contact[i]|ContactID") i = i + 1 ENDDO RELEASE loTunnel RELEASE loRest RELEASE loPfx RELEASE loPrivKeyFromPem RELEASE loOauth1 RELEASE loSbXml RELEASE loXml |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.