DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSecrets
Variant vJson
Handle hoJson
Variant vResults
Handle hoResults
String sAppName
String sService
String sDomain
String sUsername
String sTargetName
String sKeyChainService
String sKeyChainAccount
Integer i
Integer iCount_i
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatSecrets)) To hoSecrets
If (Not(IsComObjectCreated(hoSecrets))) Begin
Send CreateComObject of hoSecrets
End
// On Windows, this is the Windows Credentials Manager
// On MacOS/iOS, it is the Apple Keychain
Set ComLocation Of hoSecrets To "local_manager"
// Pass an empty JSON object to list all secrets.
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get Create (RefClass(cComChilkatJsonObject)) To hoResults
If (Not(IsComObjectCreated(hoResults))) Begin
Send CreateComObject of hoResults
End
Set ComEmitCompact Of hoResults To False
Get pvComObject of hoJson to vJson
Get pvComObject of hoResults to vResults
Get ComListSecrets Of hoSecrets vJson vResults To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSecrets To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComEmit Of hoResults To sTemp1
Showln sTemp1
// 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.
Move 0 To i
Get ComSizeOfArray Of hoResults "secrets" To iCount_i
While (i < iCount_i)
Set ComI Of hoResults To i
Get ComStringOf Of hoResults "secrets[i].appName" To sAppName
Get ComStringOf Of hoResults "secrets[i].service" To sService
Get ComStringOf Of hoResults "secrets[i].domain" To sDomain
Get ComStringOf Of hoResults "secrets[i].username" To sUsername
Get ComStringOf Of hoResults "secrets[i].targetName" To sTargetName
Get ComStringOf Of hoResults "secrets[i].keyChainService" To sKeyChainService
Get ComStringOf Of hoResults "secrets[i].keyChainAccount" To sKeyChainAccount
Move (i + 1) To i
Loop
End_Procedure