Sample code for 30+ languages & platforms
Visual FoxPro

Windows Credentials Manager / Apple Keychain - List All Secrets

See more Secrets Examples

On Windows, lists all secrets in the Windows Credentials Manager.

On MacOS or iOS, lists all secrets in the Apple Keychain.

Note: This example requires Chilkat v10.1.0 or later.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSecrets
LOCAL loJson
LOCAL loResults
LOCAL lcAppName
LOCAL lcService
LOCAL lcDomain
LOCAL lcUsername
LOCAL lcTargetName
LOCAL lcKeyChainService
LOCAL lcKeyChainAccount
LOCAL i
LOCAL lnCount_i

lnSuccess = 0

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

loSecrets = CreateObject('Chilkat.Secrets')

* On Windows, this is the Windows Credentials Manager
* On MacOS/iOS, it is the Apple Keychain
loSecrets.Location = "local_manager"

* Pass an empty JSON object to list all secrets.
loJson = CreateObject('Chilkat.JsonObject')

loResults = CreateObject('Chilkat.JsonObject')
loResults.EmitCompact = 0

lnSuccess = loSecrets.ListSecrets(loJson,loResults)
IF (lnSuccess = 0) THEN
    ? loSecrets.LastErrorText
    RELEASE loSecrets
    RELEASE loJson
    RELEASE loResults
    CANCEL
ENDIF

? loResults.Emit()

* Sample output on Windows (listing all secrets contained in the Windows Credentials Manager)
* The "targetName" is purely informational and indicates the raw TargetName of the secret (i.e. Credential) stored in the Credentials Manager.
* Code for parsing (iterating) the JSON results is shown below..

* {
*   "secrets": [
*     {
*       "appName": "Test",
*       "service": "MyService",
*       "domain": "Xyz",
*       "username": "MySecret",
*       "targetName": "Test/MyService/Xyz/MySecret"
*     },
*     {
*       "appName": "Chilkat",
*       "service": "TestSplit",
*       "domain": "local",
*       "username": "Matt",
*       "targetName": "Chilkat/TestSplit/local/Matt"
*     },
*     {
*       "appName": "Test2",
*       "service": "Custom",
*       "domain": "Ocean",
*       "username": "Starfish20",
*       "targetName": "Test2/Custom/Ocean/Starfish20"
*     },
*     {
*       "service": "VS Code Azure",
*       "domain": "",
*       "username": "Azure",
*       "targetName": "VS Code Azure/Azure"
*     },
*     {
*       "appName": "Test2",
*       "service": "Custom",
*       "domain": "Ocean",
*       "username": "Starfish",
*       "targetName": "Test2/Custom/Ocean/Starfish"
*     },
*     {
*       "appName": "AA_MyApp",
*       "service": "OAuth2",
*       "domain": "onedrive",
*       "username": "matt",
*       "targetName": "AA_MyApp/OAuth2/onedrive/matt"
*     }
*   ]
* }

* ---------------------------------------------------------------------------------------
* Here's sample output for listing secrets on MacOS
* Some are secrets created using Chilkat's API, others are pre-existing secrets.
* The "keyChainService" and "keyChainAccount" members are purely informational and show the raw Apple Keychain Service and Account information for the secret.

* {
*   "secrets": [
*     {
*       "service": "com.apple.scopedbookmarksagent.xpc",
*       "username": "com.apple.scopedbookmarksagent.xpc",
*       "keyChainService": "com.apple.scopedbookmarksagent.xpc",
*       "keyChainAccount": "com.apple.scopedbookmarksagent.xpc"
*     },
*     {
*       "service": "StandaloneBeacon",
*       "username": "searchparty",
*       "keyChainService": "StandaloneBeacon",
*       "keyChainAccount": "searchparty"
*     },
*     {
*       "service": "BeaconStore",
*       "username": "BeaconStoreKey",
*       "keyChainService": "BeaconStore",
*       "keyChainAccount": "BeaconStoreKey"
*     },
*     {
*       "service": "LocalStorage",
*       "username": "findmylocate",
*       "keyChainService": "LocalStorage",
*       "keyChainAccount": "findmylocate"
*     },
*     {
*       "service": "ProtectedCloudStorage",
*       "username": "default",
*       "keyChainService": "ProtectedCloudStorage",
*       "keyChainAccount": "default"
*     },
*     {
*       "service": "CloudStorage",
*       "username": "findmylocate",
*       "keyChainService": "CloudStorage",
*       "keyChainAccount": "findmylocate"
*     },
*     {
*       "service": "CloudKitCache",
*       "username": "FindMyCloudKit",
*       "keyChainService": "CloudKitCache",
*       "keyChainAccount": "FindMyCloudKit"
*     },
*     {
*       "service": "com.apple.continuity.encryption",
*       "username": "handoff-own-encryption-key",
*       "keyChainService": "com.apple.continuity.encryption",
*       "keyChainAccount": "handoff-own-encryption-key"
*     },
*     {
*       "service": "com.apple.NetworkServiceProxy.ProxyToken",
*       "username": "CloudFlare",
*       "keyChainService": "com.apple.NetworkServiceProxy.ProxyToken",
*       "keyChainAccount": "CloudFlare"
*     },
*     {
*       "appName": "Chilkat",
*       "service": "çözツ新",
*       "domain": "local",
*       "username": "Matt",
*       "keyChainService": "Chilkat/çözツ新",
*       "keyChainAccount": "local/Matt"
*     },
*     {
*       "service": "AirPort",
*       "username": "FP Public WiFi",
*       "keyChainService": "AirPort",
*       "keyChainAccount": "FP Public WiFi"
*     }
*   ]
* }

* ---------------------------------------------------------------------------------------
* Here's sample code for parsing the JSON list of secrets.

i = 0
lnCount_i = loResults.SizeOfArray("secrets")
DO WHILE i < lnCount_i
    loResults.I = i
    lcAppName = loResults.StringOf("secrets[i].appName")
    lcService = loResults.StringOf("secrets[i].service")
    lcDomain = loResults.StringOf("secrets[i].domain")
    lcUsername = loResults.StringOf("secrets[i].username")
    lcTargetName = loResults.StringOf("secrets[i].targetName")
    lcKeyChainService = loResults.StringOf("secrets[i].keyChainService")
    lcKeyChainAccount = loResults.StringOf("secrets[i].keyChainAccount")
    i = i + 1
ENDDO

RELEASE loSecrets
RELEASE loJson
RELEASE loResults