Sample code for 30+ languages & platforms
DataFlex

Windows Credentials Manager / Apple Keychain - List Matching Secrets

See more Secrets Examples

List secrets matching one or more wildcarded names for app, service, domain, and username.

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

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSecrets
    Variant vJsonMatch
    Handle hoJsonMatch
    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"

    // Set wildcarded or exact values for appName, service, domain, and username.
    // Omit any members where anything is allowed to match, or alternatively specify "*" to match anything.
    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonMatch
    If (Not(IsComObjectCreated(hoJsonMatch))) Begin
        Send CreateComObject of hoJsonMatch
    End
    Get ComUpdateString Of hoJsonMatch "appName" "Test*" To iSuccess
    Get ComUpdateString Of hoJsonMatch "service" "*" To iSuccess
    Get ComUpdateString Of hoJsonMatch "domain" "*" To iSuccess
    Get ComUpdateString Of hoJsonMatch "username" "Starfish*" To iSuccess

    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 hoJsonMatch to vJsonMatch
    Get pvComObject of hoResults to vResults
    Get ComListSecrets Of hoSecrets vJsonMatch 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.
    // The "targetName" is purely informational and indicates the raw TargetName of the secret (i.e. Credential) stored in the Credentials Manager.

    // {
    //   "secrets": [
    //     {
    //       "appName": "Test2",
    //       "service": "Custom",
    //       "domain": "Ocean",
    //       "username": "Starfish20",
    //       "targetName": "Test2/Custom/Ocean/Starfish20"
    //     },
    //     {
    //       "appName": "Test2",
    //       "service": "Custom",
    //       "domain": "Ocean",
    //       "username": "Starfish",
    //       "targetName": "Test2/Custom/Ocean/Starfish"
    //     }
    //   ]
    // }

    // ---------------------------------------------------------------------------------------
    // 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
        // Information field for Windows Credentials Manager.
        Get ComStringOf Of hoResults "secrets[i].targetName" To sTargetName
        // Informational fields if on MacOS using the Apple Keychain.
        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