:Start of postmsg postmsg.dsc
DragonSphereSoftware

DragonSphere Software Demos


If you are viewing this script in your browser you can save it as a VDS 5.x source file (*.dsc) to run it.




#
# DragonSphere Software's Home Page
#  
# All Source Files for this demo including postmsg.zip
#
# This demo shows the use of the CAPICOM ActiveX control and WinHTTPRequest ActiveX control from Microsoft
# This demo also shows how to post SOAP requests to Google's Search engine.
# Google SOAP Search API

# 
Option Language,$09
Title Post Message
# Place these resources in your resource directory
#RESOURCE ADD,TEXT,demo.txt,XMLDEMO
#RESOURCE ADD,TEXT,Header.txt,XMLHEAD

#External vdsbrw50.dll

# Register the CAPICOM.dll with the users system
# It is best to save this dll into the Windows System directory

run regsvr32.exe /s capicom.dll,WAIT

If @Greater(@Name(@SYSINFO(DSVER)),4)

External GadgetX.dll,5.0

  # GadgetX Commands/Functions
  #DEFINE COMMAND,GADGETX,OLE,SET,CALL,DEFINE
  #DEFINE FUNCTION,GADGETX,OLE,GET,CALL,GETLASTERROR,OR,ADDROF
  # Browser Command/Function
  # #DEFINE COMMAND,BROWSER
  # #DEFINE FUNCTION,BROWSER
  # Script Commands/Functions
  #DEFINE FUNCTION,CertList
  #DEFINE COMMAND,DisplayCert,ReadCertStore
  # Table Commands/Functions  
  #INCLUDE utils.dsc
Else
  Warn This example is designed for VDS 5+
  Goto CLOSE
End

Define Variable,Object,http
Define Variable,Object,res
Define Variable,Object,userstore
Define Variable,Object,certs
Define Variable,Object,cert
Define Variable,Collection,colcerts

Define Constant,OLE_TRUE,-1
Define Constant,OLE_FALSE,0

# CAPICOM_ERROR_CODE
Define Constant,CAPICOM_E_ENCODE_INVALID_TYPE,-2138570496
Define Constant,CAPICOM_E_EKU_INVALID_OID,-2138570240
Define Constant,CAPICOM_E_EKU_OID_NOT_INITIALIZED,-2138570239
Define Constant,CAPICOM_E_CERTIFICATE_NOT_INITIALIZED,-2138570224
Define Constant,CAPICOM_E_CERTIFICATE_NO_PRIVATE_KEY,-2138570223
Define Constant,CAPICOM_E_CHAIN_NOT_BUILT,-2138570208
Define Constant,CAPICOM_E_STORE_NOT_OPENED,-2138570192
Define Constant,CAPICOM_E_STORE_EMPTY,-2138570191
Define Constant,CAPICOM_E_STORE_INVALID_OPEN_MODE,-2138570190
Define Constant,CAPICOM_E_STORE_INVALID_SAVE_AS_TYPE,-2138570189
Define Constant,CAPICOM_E_ATTRIBUTE_NAME_NOT_INITIALIZED,-2138570176
Define Constant,CAPICOM_E_ATTRIBUTE_VALUE_NOT_INITIALIZED,-2138570175
Define Constant,CAPICOM_E_ATTRIBUTE_INVALID_NAME,-2138570174
Define Constant,CAPICOM_E_ATTRIBUTE_INVALID_VALUE,-2138570173
Define Constant,CAPICOM_E_SIGNER_NOT_INITIALIZED,-2138570160
Define Constant,CAPICOM_E_SIGNER_NOT_FOUND,-2138570159
Define Constant,CAPICOM_E_SIGNER_NO_CHAIN,-2138570158
Define Constant,CAPICOM_E_SIGNER_INVALID_USAGE,-2138570157
Define Constant,CAPICOM_E_SIGN_NOT_INITIALIZED,-2138570144
Define Constant,CAPICOM_E_SIGN_INVALID_TYPE,-2138570143
Define Constant,CAPICOM_E_SIGN_NOT_SIGNED,-2138570142
Define Constant,CAPICOM_E_INVALID_ALGORITHM,-2138570128
Define Constant,CAPICOM_E_INVALID_KEY_LENGTH,-2138570127
Define Constant,CAPICOM_E_ENVELOP_NOT_INITIALIZED,-2138570112
Define Constant,CAPICOM_E_ENVELOP_INVALID_TYPE,-2138570111
Define Constant,CAPICOM_E_ENVELOP_NO_RECIPIENT,-2138570110
Define Constant,CAPICOM_E_ENVELOP_RECIPIENT_NOT_FOUND,-2138570109
Define Constant,CAPICOM_E_ENCRYPT_NOT_INITIALIZED,-2138570096
Define Constant,CAPICOM_E_ENCRYPT_INVALID_TYPE,-2138570095
Define Constant,CAPICOM_E_ENCRYPT_NO_SECRET,-2138570094
Define Constant,CAPICOM_E_NOT_SUPPORTED,-2138568448
Define Constant,CAPICOM_E_UI_DISABLED,-2138568447
Define Constant,CAPICOM_E_CANCELLED,-2138568446
Define Constant,CAPICOM_E_NOT_ALLOWED,-2138568445
Define Constant,CAPICOM_E_OUT_OF_RESOURCE,-2138568444
Define Constant,CAPICOM_E_INTERNAL,-2138568431
Define Constant,CAPICOM_E_UNKNOWN,-2138568295
Define Constant,CAPICOM_E_PRIVATE_KEY_NOT_INITIALIZED,-2138569984
Define Constant,CAPICOM_E_PRIVATE_KEY_NOT_EXPORTABLE,-2138569983
Define Constant,CAPICOM_E_ENCODE_NOT_INITIALIZED,-2138569952
Define Constant,CAPICOM_E_EXTENSION_NOT_INITIALIZED,-2138569936
Define Constant,CAPICOM_E_PROPERTY_NOT_INITIALIZED,-2138569920
Define Constant,CAPICOM_E_FIND_INVALID_TYPE,-2138569904
Define Constant,CAPICOM_E_FIND_INVALID_PREDEFINED_POLICY,-2138569903
Define Constant,CAPICOM_E_CODE_NOT_INITIALIZED,-2138569888
Define Constant,CAPICOM_E_CODE_NOT_SIGNED,-2138569887
Define Constant,CAPICOM_E_CODE_DESCRIPTION_NOT_INITIALIZED,-2138569886
Define Constant,CAPICOM_E_CODE_DESCRIPTION_URL_NOT_INITIALIZED,-2138569885
Define Constant,CAPICOM_E_CODE_INVALID_TIMESTAMP_URL,-2138569884
Define Constant,CAPICOM_E_HASH_NO_DATA,-2138569872
Define Constant,CAPICOM_E_INVALID_CONVERT_TYPE,-2138569856
# CAPICOM_ENCODING_TYPE
Define Constant,CAPICOM_ENCODE_BASE64,0
Define Constant,CAPICOM_ENCODE_BINARY,1
Define Constant,CAPICOM_ENCODE_ANY,-1
# CAPICOM_EKU
Define Constant,CAPICOM_EKU_OTHER,0
Define Constant,CAPICOM_EKU_SERVER_AUTH,1
Define Constant,CAPICOM_EKU_CLIENT_AUTH,2
Define Constant,CAPICOM_EKU_CODE_SIGNING,3
Define Constant,CAPICOM_EKU_EMAIL_PROTECTION,4
Define Constant,CAPICOM_EKU_SMARTCARD_LOGON,5
Define Constant,CAPICOM_EKU_ENCRYPTING_FILE_SYSTEM,6
# CAPICOM_CHECK_FLAG
Define Constant,CAPICOM_CHECK_NONE,0
Define Constant,CAPICOM_CHECK_TRUSTED_ROOT,1
Define Constant,CAPICOM_CHECK_TIME_VALIDITY,2
Define Constant,CAPICOM_CHECK_SIGNATURE_VALIDITY,4
Define Constant,CAPICOM_CHECK_ONLINE_REVOCATION_STATUS,8
Define Constant,CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS,16
Define Constant,CAPICOM_CHECK_COMPLETE_CHAIN,32
Define Constant,CAPICOM_CHECK_NAME_CONSTRAINTS,64
Define Constant,CAPICOM_CHECK_BASIC_CONSTRAINTS,128
Define Constant,CAPICOM_CHECK_NESTED_VALIDITY_PERIOD,256
Define Constant,CAPICOM_CHECK_ONLINE_ALL,495
Define Constant,CAPICOM_CHECK_OFFLINE_ALL,503
# CAPICOM_CERT_INFO_TYPE
Define Constant,CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME,0
Define Constant,CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME,1
Define Constant,CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME,2
Define Constant,CAPICOM_CERT_INFO_ISSUER_EMAIL_NAME,3
Define Constant,CAPICOM_CERT_INFO_SUBJECT_UPN,4
Define Constant,CAPICOM_CERT_INFO_ISSUER_UPN,5
Define Constant,CAPICOM_CERT_INFO_SUBJECT_DNS_NAME,6
Define Constant,CAPICOM_CERT_INFO_ISSUER_DNS_NAME,7
# CAPICOM_STORE_LOCATION
Define Constant,CAPICOM_MEMORY_STORE,0
Define Constant,CAPICOM_LOCAL_MACHINE_STORE,1
Define Constant,CAPICOM_CURRENT_USER_STORE,2
Define Constant,CAPICOM_ACTIVE_DIRECTORY_USER_STORE,3
Define Constant,CAPICOM_SMART_CARD_USER_STORE,4
# CAPICOM_STORE_OPEN_MODE
Define Constant,CAPICOM_STORE_OPEN_READ_ONLY,0
Define Constant,CAPICOM_STORE_OPEN_READ_WRITE,1
Define Constant,CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED,2
Define Constant,CAPICOM_STORE_OPEN_EXISTING_ONLY,128
Define Constant,CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED,256
# CAPICOM_ACTIVE_DIRECTORY_SEARCH_LOCATION
Define Constant,CAPICOM_SEARCH_ANY,0
Define Constant,CAPICOM_SEARCH_GLOBAL_CATALOG,1
Define Constant,CAPICOM_SEARCH_DEFAULT_DOMAIN,2
# CAPICOM_STORE_SAVE_AS_TYPE
Define Constant,CAPICOM_STORE_SAVE_AS_SERIALIZED,0
Define Constant,CAPICOM_STORE_SAVE_AS_PKCS7,1
# CAPICOM_ATTRIBUTE
Define Constant,CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME,0
Define Constant,CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME,1
Define Constant,CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION,2
# CAPICOM_SIGNED_DATA_VERIFY_FLAG
Define Constant,CAPICOM_VERIFY_SIGNATURE_ONLY,0
Define Constant,CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE,1
# CAPICOM_ENCRYPTION_ALGORITHM
Define Constant,CAPICOM_ENCRYPTION_ALGORITHM_RC2,0
Define Constant,CAPICOM_ENCRYPTION_ALGORITHM_RC4,1
Define Constant,CAPICOM_ENCRYPTION_ALGORITHM_DES,2
Define Constant,CAPICOM_ENCRYPTION_ALGORITHM_3DES,3
Define Constant,CAPICOM_ENCRYPTION_ALGORITHM_AES,4
# CAPICOM_ENCRYPTION_KEY_LENGTH
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM,0
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS,1
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS,2
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS,3
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS,4
Define Constant,CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS,5
# CAPICOM_SECRET_TYPE
Define Constant,CAPICOM_SECRET_PASSWORD,0
# CAPICOM_KEY_ALGORITHM
Define Constant,CAPICOM_KEY_ALGORITHM_OTHER,0
Define Constant,CAPICOM_KEY_ALGORITHM_RSA,1
Define Constant,CAPICOM_KEY_ALGORITHM_DSS,2
# CAPICOM_OID
Define Constant,CAPICOM_OID_OTHER,0
Define Constant,CAPICOM_OID_AUTHORITY_KEY_IDENTIFIER_EXTENSION,1
Define Constant,CAPICOM_OID_KEY_ATTRIBUTES_EXTENSION,2
Define Constant,CAPICOM_OID_CERT_POLICIES_95_EXTENSION,3
Define Constant,CAPICOM_OID_KEY_USAGE_RESTRICTION_EXTENSION,4
Define Constant,CAPICOM_OID_LEGACY_POLICY_MAPPINGS_EXTENSION,5
Define Constant,CAPICOM_OID_SUBJECT_ALT_NAME_EXTENSION,6
Define Constant,CAPICOM_OID_ISSUER_ALT_NAME_EXTENSION,7
Define Constant,CAPICOM_OID_BASIC_CONSTRAINTS_EXTENSION,8
Define Constant,CAPICOM_OID_SUBJECT_KEY_IDENTIFIER_EXTENSION,9
Define Constant,CAPICOM_OID_KEY_USAGE_EXTENSION,10
Define Constant,CAPICOM_OID_PRIVATEKEY_USAGE_PERIOD_EXTENSION,11
Define Constant,CAPICOM_OID_SUBJECT_ALT_NAME2_EXTENSION,12
Define Constant,CAPICOM_OID_ISSUER_ALT_NAME2_EXTENSION,13
Define Constant,CAPICOM_OID_BASIC_CONSTRAINTS2_EXTENSION,14
Define Constant,CAPICOM_OID_NAME_CONSTRAINTS_EXTENSION,15
Define Constant,CAPICOM_OID_CRL_DIST_POINTS_EXTENSION,16
Define Constant,CAPICOM_OID_CERT_POLICIES_EXTENSION,17
Define Constant,CAPICOM_OID_POLICY_MAPPINGS_EXTENSION,18
Define Constant,CAPICOM_OID_AUTHORITY_KEY_IDENTIFIER2_EXTENSION,19
Define Constant,CAPICOM_OID_POLICY_CONSTRAINTS_EXTENSION,20
Define Constant,CAPICOM_OID_ENHANCED_KEY_USAGE_EXTENSION,21
Define Constant,CAPICOM_OID_CERTIFICATE_TEMPLATE_EXTENSION,22
Define Constant,CAPICOM_OID_APPLICATION_CERT_POLICIES_EXTENSION,23
Define Constant,CAPICOM_OID_APPLICATION_POLICY_MAPPINGS_EXTENSION,24
Define Constant,CAPICOM_OID_APPLICATION_POLICY_CONSTRAINTS_EXTENSION,25
Define Constant,CAPICOM_OID_AUTHORITY_INFO_ACCESS_EXTENSION,26
Define Constant,CAPICOM_OID_SERVER_AUTH_EKU,100
Define Constant,CAPICOM_OID_CLIENT_AUTH_EKU,101
Define Constant,CAPICOM_OID_CODE_SIGNING_EKU,102
Define Constant,CAPICOM_OID_EMAIL_PROTECTION_EKU,103
Define Constant,CAPICOM_OID_IPSEC_END_SYSTEM_EKU,104
Define Constant,CAPICOM_OID_IPSEC_TUNNEL_EKU,105
Define Constant,CAPICOM_OID_IPSEC_USER_EKU,106
Define Constant,CAPICOM_OID_TIME_STAMPING_EKU,107
Define Constant,CAPICOM_OID_CTL_USAGE_SIGNING_EKU,108
Define Constant,CAPICOM_OID_TIME_STAMP_SIGNING_EKU,109
Define Constant,CAPICOM_OID_SERVER_GATED_CRYPTO_EKU,110
Define Constant,CAPICOM_OID_ENCRYPTING_FILE_SYSTEM_EKU,111
Define Constant,CAPICOM_OID_EFS_RECOVERY_EKU,112
Define Constant,CAPICOM_OID_WHQL_CRYPTO_EKU,113
Define Constant,CAPICOM_OID_NT5_CRYPTO_EKU,114
Define Constant,CAPICOM_OID_OEM_WHQL_CRYPTO_EKU,115
Define Constant,CAPICOM_OID_EMBEDED_NT_CRYPTO_EKU,116
Define Constant,CAPICOM_OID_ROOT_LIST_SIGNER_EKU,117
Define Constant,CAPICOM_OID_QUALIFIED_SUBORDINATION_EKU,118
Define Constant,CAPICOM_OID_KEY_RECOVERY_EKU,119
Define Constant,CAPICOM_OID_DIGITAL_RIGHTS_EKU,120
Define Constant,CAPICOM_OID_LICENSES_EKU,121
Define Constant,CAPICOM_OID_LICENSE_SERVER_EKU,122
Define Constant,CAPICOM_OID_SMART_CARD_LOGON_EKU,123
Define Constant,CAPICOM_OID_PKIX_POLICY_QUALIFIER_CPS,124
Define Constant,CAPICOM_OID_PKIX_POLICY_QUALIFIER_USERNOTICE,125
# CAPICOM_PROPID
Define Constant,CAPICOM_PROPID_UNKNOWN,0
Define Constant,CAPICOM_PROPID_KEY_PROV_HANDLE,1
Define Constant,CAPICOM_PROPID_KEY_PROV_INFO,2
Define Constant,CAPICOM_PROPID_SHA1_HASH,3
Define Constant,CAPICOM_PROPID_HASH_PROP,3
Define Constant,CAPICOM_PROPID_MD5_HASH,4
Define Constant,CAPICOM_PROPID_KEY_CONTEXT,5
Define Constant,CAPICOM_PROPID_KEY_SPEC,6
Define Constant,CAPICOM_PROPID_IE30_RESERVED,7
Define Constant,CAPICOM_PROPID_PUBKEY_HASH_RESERVED,8
Define Constant,CAPICOM_PROPID_ENHKEY_USAGE,9
Define Constant,CAPICOM_PROPID_CTL_USAGE,9
Define Constant,CAPICOM_PROPID_NEXT_UPDATE_LOCATION,10
Define Constant,CAPICOM_PROPID_FRIENDLY_NAME,11
Define Constant,CAPICOM_PROPID_PVK_FILE,12
Define Constant,CAPICOM_PROPID_DESCRIPTION,13
Define Constant,CAPICOM_PROPID_ACCESS_STATE,14
Define Constant,CAPICOM_PROPID_SIGNATURE_HASH,15
Define Constant,CAPICOM_PROPID_SMART_CARD_DATA,16
Define Constant,CAPICOM_PROPID_EFS,17
Define Constant,CAPICOM_PROPID_FORTEZZA_DATA,18
Define Constant,CAPICOM_PROPID_ARCHIVED,19
Define Constant,CAPICOM_PROPID_KEY_IDENTIFIER,20
Define Constant,CAPICOM_PROPID_AUTO_ENROLL,21
Define Constant,CAPICOM_PROPID_PUBKEY_ALG_PARA,22
Define Constant,CAPICOM_PROPID_CROSS_CERT_DIST_POINTS,23
Define Constant,CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH,24
Define Constant,CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH,25
Define Constant,CAPICOM_PROPID_ENROLLMENT,26
Define Constant,CAPICOM_PROPID_DATE_STAMP,27
Define Constant,CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH,28
Define Constant,CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH,29
Define Constant,CAPICOM_PROPID_EXTENDED_ERROR_INFO,30
Define Constant,CAPICOM_PROPID_RENEWAL,64
Define Constant,CAPICOM_PROPID_ARCHIVED_KEY_HASH,65
Define Constant,CAPICOM_PROPID_FIRST_RESERVED,66
Define Constant,CAPICOM_PROPID_LAST_RESERVED,32767
Define Constant,CAPICOM_PROPID_FIRST_USER,32768
Define Constant,CAPICOM_PROPID_LAST_USER,65535
# CAPICOM_PROV_TYPE
Define Constant,CAPICOM_PROV_RSA_FULL,1
Define Constant,CAPICOM_PROV_RSA_SIG,2
Define Constant,CAPICOM_PROV_DSS,3
Define Constant,CAPICOM_PROV_FORTEZZA,4
Define Constant,CAPICOM_PROV_MS_EXCHANGE,5
Define Constant,CAPICOM_PROV_SSL,6
Define Constant,CAPICOM_PROV_RSA_SCHANNEL,12
Define Constant,CAPICOM_PROV_DSS_DH,13
Define Constant,CAPICOM_PROV_EC_ECDSA_SIG,14
Define Constant,CAPICOM_PROV_EC_ECNRA_SIG,15
Define Constant,CAPICOM_PROV_EC_ECDSA_FULL,16
Define Constant,CAPICOM_PROV_EC_ECNRA_FULL,17
Define Constant,CAPICOM_PROV_DH_SCHANNEL,18
Define Constant,CAPICOM_PROV_SPYRUS_LYNKS,20
Define Constant,CAPICOM_PROV_RNG,21
Define Constant,CAPICOM_PROV_INTEL_SEC,22
Define Constant,CAPICOM_PROV_REPLACE_OWF,23
Define Constant,CAPICOM_PROV_RSA_AES,24
# CAPICOM_CERTIFICATE_SAVE_AS_TYPE
Define Constant,CAPICOM_CERTIFICATE_SAVE_AS_PFX,0
Define Constant,CAPICOM_CERTIFICATE_SAVE_AS_CER,1
# CAPICOM_CERTIFICATES_SAVE_AS_TYPE
Define Constant,CAPICOM_CERTIFICATES_SAVE_AS_SERIALIZED,0
Define Constant,CAPICOM_CERTIFICATES_SAVE_AS_PKCS7,1
Define Constant,CAPICOM_CERTIFICATES_SAVE_AS_PFX,2
# CAPICOM_CERTIFICATE_INCLUDE_OPTION
Define Constant,CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT,0
Define Constant,CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN,1
Define Constant,CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY,2
# CAPICOM_KEY_SPEC
Define Constant,CAPICOM_KEY_SPEC_KEYEXCHANGE,1
Define Constant,CAPICOM_KEY_SPEC_SIGNATURE,2
# CAPICOM_KEY_LOCATION
Define Constant,CAPICOM_CURRENT_USER_KEY,0
Define Constant,CAPICOM_LOCAL_MACHINE_KEY,1
# CAPICOM_KEY_STORAGE_FLAG
Define Constant,CAPICOM_KEY_STORAGE_DEFAULT,0
Define Constant,CAPICOM_KEY_STORAGE_EXPORTABLE,1
Define Constant,CAPICOM_KEY_STORAGE_USER_PROTECTED,2
# CAPICOM_EXPORT_FLAG
Define Constant,CAPICOM_EXPORT_DEFAULT,0
Define Constant,CAPICOM_EXPORT_IGNORE_PRIVATE_KEY_NOT_EXPORTABLE_ERROR,1
# CAPICOM_KEY_USAGE
Define Constant,CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE,128
Define Constant,CAPICOM_NON_REPUDIATION_KEY_USAGE,64
Define Constant,CAPICOM_KEY_ENCIPHERMENT_KEY_USAGE,32
Define Constant,CAPICOM_DATA_ENCIPHERMENT_KEY_USAGE,16
Define Constant,CAPICOM_KEY_AGREEMENT_KEY_USAGE,8
Define Constant,CAPICOM_KEY_CERT_SIGN_KEY_USAGE,4
Define Constant,CAPICOM_OFFLINE_CRL_SIGN_KEY_USAGE,2
Define Constant,CAPICOM_CRL_SIGN_KEY_USAGE,2
Define Constant,CAPICOM_ENCIPHER_ONLY_KEY_USAGE,1
Define Constant,CAPICOM_DECIPHER_ONLY_KEY_USAGE,32768
# CAPICOM_CERTIFICATE_FIND_TYPE
Define Constant,CAPICOM_CERTIFICATE_FIND_SHA1_HASH,0
Define Constant,CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,1
Define Constant,CAPICOM_CERTIFICATE_FIND_ISSUER_NAME,2
Define Constant,CAPICOM_CERTIFICATE_FIND_ROOT_NAME,3
Define Constant,CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME,4
Define Constant,CAPICOM_CERTIFICATE_FIND_EXTENSION,5
Define Constant,CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,6
Define Constant,CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY,7
Define Constant,CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY,8
Define Constant,CAPICOM_CERTIFICATE_FIND_TIME_VALID,9
Define Constant,CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID,10
Define Constant,CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED,11
Define Constant,CAPICOM_CERTIFICATE_FIND_KEY_USAGE,12
# CAPICOM_HASH_ALGORITHM
Define Constant,CAPICOM_HASH_ALGORITHM_SHA1,0
Define Constant,CAPICOM_HASH_ALGORITHM_MD2,1
Define Constant,CAPICOM_HASH_ALGORITHM_MD4,2
Define Constant,CAPICOM_HASH_ALGORITHM_MD5,3

# For information of where the users Certificates are stored goto the following URL
# System Store Locations
# For this example I am using the MY certificate store since this is the default 
# where client side certificates are stored.
Define Constant,CAPICOM_MY_STORE,My
Define Constant,CAPICOM_CA_STORE,CA
Define Constant,CAPICOM_ROOT_STORE,Root


# WinHttpRequestOption
Define Constant,WinHttpRequestOption_UserAgentString,0
Define Constant,WinHttpRequestOption_URL,1
Define Constant,WinHttpRequestOption_URLCodePage,2
Define Constant,WinHttpRequestOption_EscapePercentInURL,3
Define Constant,WinHttpRequestOption_SslErrorIgnoreFlags,4
Define Constant,WinHttpRequestOption_SelectCertificate,5
Define Constant,WinHttpRequestOption_EnableRedirects,6
Define Constant,WinHttpRequestOption_UrlEscapeDisable,7
Define Constant,WinHttpRequestOption_UrlEscapeDisableQuery,8
Define Constant,WinHttpRequestOption_SecureProtocols,9
Define Constant,WinHttpRequestOption_EnableTracing,10
Define Constant,WinHttpRequestOption_RevertImpersonationOverSsl,11
Define Constant,WinHttpRequestOption_EnableHttpsToHttpRedirects,12
Define Constant,WinHttpRequestOption_EnablePassportAuthentication,13
Define Constant,WinHttpRequestOption_MaxAutomaticRedirects,14
Define Constant,WinHttpRequestOption_MaxResponseHeaderSize,15
Define Constant,WinHttpRequestOption_MaxResponseDrainSize,16
Define Constant,WinHttpRequestOption_EnableHttp1_1,17
Define Constant,WinHttpRequestOption_EnableCertificateRevocationCheck,18
# WinHttpRequestAutoLogonPolicy
Define Constant,AutoLogonPolicy_Always,0
Define Constant,AutoLogonPolicy_OnlyIfBypassProxy,1
Define Constant,AutoLogonPolicy_Never,2
# WinHttpRequestSslErrorFlags
Define Constant,SslErrorFlag_UnknownCA,256
Define Constant,SslErrorFlag_CertWrongUsage,512
Define Constant,SslErrorFlag_CertCNInvalid,4096
Define Constant,SslErrorFlag_CertDateInvalid,8192
Define Constant,SslErrorFlag_Ignore_All,13056
# WinHttpRequestSecureProtocols
Define Constant,SecureProtocol_SSL2,8
Define Constant,SecureProtocol_SSL3,32
Define Constant,SecureProtocol_TLS1,128
Define Constant,SecureProtocol_ALL,168

Define Constant,HTTPREQUEST_SETCREDENTIALS_FOR_SERVER,0
Define Constant,HTTPREQUEST_SETCREDENTIALS_FOR_PROXY,1

# IWinHttpRequestEvents Interface
# Define IID,IWinHttpRequestEvents,{F97F4E15-B787-4212-80D1-D380CBBF982E}

# Map a user defined VDS Event Name to a Member ID for IWinHttpRequestEvents
# Define EventMap,IWinHttpRequestEvents,OnResponseStart,1610678272
# Define EventMap,IWinHttpRequestEvents,OnResponseDataAvailable,1610678273
# Define EventMap,IWinHttpRequestEvents,OnResponseFinished,1610678274
# Define EventMap,IWinHttpRequestEvents,OnError,1610678275

# Tab element message API constants
Define Constant,TCM_SETCURSEL,4876
Define Constant,TCM_SETCURFOCUS,4912

Ole Init
#Ole Exceptions,SHOW

List Create,1
List LoadFile,1,#header.txt
%%HeaderTxt = @Text(1)

List Clear,1
List LoadFile,1,#demo.txt
%%DemoXML = @Text(1)


List Clear,1
List Close,1
#Dim http As New MSXML2.XMLHTTP 
   
#  Create XMLHTTP/ServerXMLHTTP/WinHttprequest object 
#  You can use any of these three objects. 
#  Set http = CreateObject("WinHttp.WinHttprequest.5") 
#  Set http = CreateObject("MSXML2.XMLHTTP") 
#  Set http = CreateObject("MSXML2.ServerXMLHTTP") 

Set http,@Ole(Create,"WinHttp.WinHttprequest.5.1",NULL)

:Main Dialog
  DIALOG CREATE,Post Message,-1,0,800,600
REM *** Modified by Dialog Designer on 10/13/2006 - 14:45 ***
  DIALOG ADD,TAB,TAB1,10,11,780,555,Certificates|Message Request|Response From Server
  # Response from Server Tab
  DIALOG ADD,TEXT,respheader_txt,50,36,,,Header from Response
  DIALOG ADD,EDIT,respheader_edt,68,31,735,89,,,MULTI,SCROLL
  DIALOG ADD,TEXT,respbody_txt,166,37,,,Body from Response
  DIALOG ADD,EDIT,EDIT1,188,30,740,358,,,MULTI,SCROLL
  # Post Information Tab
  DIALOG ADD,TEXT,username_txt,67,32,52,13,User Name
  DIALOG ADD,EDIT,username_edt,83,28,180,19
  DIALOG ADD,TEXT,pass_txt,66,243,46,13,Password
  DIALOG ADD,EDIT,pass_edt,83,239,180,19,,,PASSWORD
  DIALOG ADD,TEXT,URL_txt,104,33,19,13,URL
  DIALOG ADD,EDIT,URL_edt,120,28,696,19,http://api.google.com/search/beta2
  DIALOG ADD,TEXT,reqheader_txt,140,34,91,13,Header of Request
  DIALOG ADD,EDIT,reqheader_edt,157,30,697,111,,,MULTI,SCROLL
  DIALOG ADD,BUTTON,header_btn,156,730,40,22,...
  DIALOG ADD,TEXT,reqbody_txt,270,34,80,13,Body of Request
  DIALOG ADD,EDIT,reqbody_edt,285,30,698,261,,,MULTI,SCROLL
  DIALOG ADD,BUTTON,browse_btn,286,732,40,22,...,Click to load XML file...
  DIALOG ADD,BUTTON,go_btn,524,730,40,22,&Go
  # Certificate Tab
  DIALOG ADD,LINE,LINE1,44,22,758,511
  DIALOG ADD,TABLE,TABLE1,44,22,758,511,Index[80]|Issued To[195]|Issued By[195]|Issued Date[125]|Expiration Date[125],,DBLCLICK
  DIALOG ADD,STATUS,STATUS1,[250]|
  # Hide Response from Server elements  
  DIALOG HIDE,respheader_txt
  DIALOG HIDE,respheader_edt
  DIALOG HIDE,respbody_txt
  DIALOG HIDE,EDIT1
  # Hide Post Information elements
  DIALOG HIDE,username_txt
  DIALOG HIDE,username_edt
  DIALOG HIDE,pass_txt
  DIALOG HIDE,pass_edt
  DIALOG HIDE,URL_txt
  DIALOG HIDE,URL_edt
  DIALOG HIDE,reqheader_txt
  DIALOG HIDE,reqheader_edt
  DIALOG HIDE,reqbody_txt
  DIALOG HIDE,reqbody_edt
  DIALOG HIDE,go_btn
  DIALOG HIDE,browse_btn
  DIALOG HIDE,header_btn
  
DIALOG SHOW
  DIALOG SET,reqheader_edt,%%HeaderTxt
  DIALOG SET,reqbody_edt,%%DemoXML
Table Set,ExtStyle,TABLE1,GRIDLINES|FULLROWSELECT|INFOTIP
%%Oldlocation =
%%Headers =

List create,7
List Create,9
List Create,5
ReadCertStore
%A = @GetLastError()
# Connect to the Event Interface
# %%cookie = @Ole(ConnectEvents,http,IWinHttpRequestEvents)
:evloop
  wait event,0.3
  %E = @event()
  if %E
    goto %E
  end
goto evloop
:TIMER

goto evloop
:CLOSE
  If @Get(http)
    # Must be called before your program exits
    # Ole DisConnectEvents,http,IWinHttpRequestEvents,%%cookie
  
    Ole Free,object,http
  End
  If @Get(userstore)
    Ole Free,object,userstore
  End
  Ole Exceptions,HIDE
  Ole UnInit
Exit

:TABLE1DBLCLICK
  %%Item = @Item(TABLE1,,0)
  If @Greater(%%Item,0)
    DisplayCert userstore,%%Item
  End
goto evloop
:CertificatesCLICK
  # Hide Response from Server elements  
  DIALOG HIDE,respheader_txt
  DIALOG HIDE,respheader_edt
  DIALOG HIDE,respbody_txt
  DIALOG HIDE,EDIT1
  # Hide Post Information elements
  DIALOG HIDE,URL_txt
  DIALOG HIDE,URL_edt
  DIALOG HIDE,reqheader_txt
  DIALOG HIDE,reqheader_edt
  DIALOG HIDE,reqbody_txt
  DIALOG HIDE,reqbody_edt
  DIALOG HIDE,go_btn
  DIALOG HIDE,browse_btn
  DIALOG HIDE,header_btn
  DIALOG HIDE,username_txt
  DIALOG HIDE,username_edt
  DIALOG HIDE,pass_txt
  DIALOG HIDE,pass_edt
  # Show Certificates elements
  DIALOG SHOW,LINE1  
Goto evloop
:Message RequestCLICK
  # Hide Certificates elements
  Dialog HIDE,LINE1
  # Hide Response from Server elements  
  DIALOG HIDE,respheader_txt
  DIALOG HIDE,respheader_edt
  DIALOG HIDE,respbody_txt
  DIALOG HIDE,EDIT1
  # Show Post Information elements
  DIALOG SHOW,URL_txt
  DIALOG SHOW,URL_edt
  DIALOG SHOW,reqbody_txt
  DIALOG SHOW,reqbody_edt
  DIALOG SHOW,reqheader_txt
  DIALOG SHOW,reqheader_edt
  DIALOG SHOW,go_btn
  DIALOG SHOW,browse_btn
  DIALOG SHOW,header_btn
  DIALOG SHOW,username_txt
  DIALOG SHOW,username_edt
  DIALOG SHOW,pass_txt
  DIALOG SHOW,pass_edt
  
Goto evloop
:Response from ServerCLICK
  # Hide Certificates elements
  Dialog HIDE,LINE1
  # Hide Post Information elements
  DIALOG HIDE,URL_txt
  DIALOG HIDE,URL_edt
  DIALOG HIDE,reqheader_txt
  DIALOG HIDE,reqheader_edt
  DIALOG HIDE,reqbody_txt
  DIALOG HIDE,reqbody_edt
  DIALOG HIDE,go_btn
  DIALOG HIDE,browse_btn
  DIALOG HIDE,header_btn
  DIALOG HIDE,username_txt
  DIALOG HIDE,username_edt
  DIALOG HIDE,pass_txt
  DIALOG HIDE,pass_edt
  # Show Response from Server elements  
  DIALOG SHOW,respheader_txt
  DIALOG SHOW,respheader_edt
  DIALOG SHOW,respbody_txt
  DIALOG SHOW,EDIT1
Goto evloop
:BROWSE_BTNBUTTON
  %F = @filedlg("Meta files (*.xml, *.htm, *.html)|*.xml;*.htm;*.html|Text files|*.txt",File to Post) 
  If @Ok()
    List create,8
    List LoadFile,8,%F
    Dialog Set,reqbody_edt,@Text(8)
    List clear,8
    List close,8
  End
goto evloop

:HEADER_BTNBUTTON
  %F = @filedlg("Text files (*.txt)|*.txt|Meta files (*.xml, *.htm, *.html)|*.xml;*.htm;*.html|All files (*.*)|*.*",Headers to Add) 
  If @Ok()
    List create,8
    List LoadFile,8,%F
    Dialog Set,reqheader_edt,@Text(8)
    List clear,8
    List close,8
  End
goto evloop

:CLOSECONN_BTNBUTTON

goto evloop  
:GO_BTNBUTTON 
  DIALOG CURSOR,WAIT 
  # ReadCertStore
  %%Location = @dlgtext(URL_edt)
  If %%Location
  Ole Set,http,"Option(^d) = ^B",WinHttpRequestOption_EnableHttp1_1,True
  Ole Set,http,"Option(^d) = ^d",WinHttpRequestOption_SecureProtocols,SecureProtocol_ALL
  Ole Set,http,"Option(^d) = ^d",WinHttpRequestOption_SslErrorIgnoreFlags,SslErrorFlag_Ignore_All
  
  #  Open URL As POST request 
  #  http.Open "POST", URL, False 
  If @dlgtext(reqbody_edt)
    Ole Call,http,"Open(^B,^B,^B)","POST",%%Location,False
  Else
    Ole Call,http,"Open(^B,^B,^B)","GET",%%Location,False
  End
  # Ole Set,http,"Option(^d) = ^B",WinHttpRequestOption_EnableTracing,True
  
  Ole Set,http,"Option(^d) = ^B",WinHttpRequestOption_UserAgentString,@CHR(34)A simple HTTP client application@CHR(34)
  #  Set Content-Type header 
  #  http.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + Boundary 
  If @dlgtext(reqheader_edt)
    %%ReqHeaders = @dlgtext(reqheader_edt)
    
    List Assign,9,%%ReqHeaders
    %%cnt = 0
    %%count = @count(9)
    %%OldSep = @fsep()
    Option FieldSep,:
    Repeat
      %%Item = @Trim(@Item(9,%%cnt))
      If %%Item
        Parse "%%Name;%%Value",%%Item
        Ole Call,http,"setRequestHeader(^B,^B)",%%Name,%%Value
      End
      %%cnt = @succ(%%cnt)
    Until @Equal(%%cnt,%%count)
    Option FieldSep,%%OldSep
  End
  
  If @Greater(@Index(TABLE1),0)
    rem set the Cert you want to use.  
    If @Equal(%%Location,%%OldLocation)
    Else
      Ole Call,http,"SetClientCertificate(^B)","CURRENT_USER\"@Get(CAPICOM_MY_STORE)"\"@Item(TABLE1,@Index(TABLE1),1)
	End
  End
  If @both(@dlgtext(username_edt),@dlgtext(pass_edt))
    rem set the User creds you want to use.  
    If @Equal(%%Location,%%OldLocation)
    Else
      Ole Call,http,"SetCredentials(^B,^B,^d)",@dlgtext(username_edt),@dlgtext(pass_edt),HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
	End
  End
  if @dlgtext(reqbody_edt)
    #  Send the form data To URL As POST binary request 
    #  http.send FormData 
    # Info @dlgtext(reqbody_edt)@CR()
	%%SendData = @dlgtext(reqbody_edt)
    Ole Call,http,"Send(^B)",%%SendData

  Else
    Ole Call,http,Send
  End

  # Wait for it!!!
  # Wait for it!!!!
  Ole Call,http,"WaitForResponse(^d)",-1
  %%SendErrTxt =
  %%SendErrCode =
  List Clear,9
  %%SendError = @GetLastError()
  While %%SendError
    List Append,9,%%SendError
    %A = @Match(9,DateTime:)
    If %A
      %%tmpDateTime = @Item(9)
      %%OldSep = @fsep()
      Option FieldSep,@Tab()
      Parse "%%Txt;%%DateTimeVal",%%tmpDateTime
      List Put,9,Logged At:@Tab()@DateTime(ddddd tt,%%DateTimeVal)
      Option FieldSep,%%OldSep
    End
    %A = @Match(9,Member:)
    If %A
      %%tmpMember = @Item(9)
      %%OldSep = @fsep()
      Option FieldSep,@Tab()
      Parse "%%Txt;%%MemVal",%%tmpMember
      List Put,9,Method:@Tab()@Substr(%%MemVal,2,@pred(@Pos(@chr(40),%%MemVal)))
      Option FieldSep,%%OldSep
    End
    %A = @Match(9,Function:)
    If %A
      List Delete,9
    End
    %A = @Match(9,Error In:)
    If %A
      List Delete,9
    End
    %%SendError = @GetLastError()
  Wend
  # Dialog Set,STATUS1,Data sent...  
  #  Get a result of the script which has received upload 
  #  WinHTTPPostRequest = http.responseText 
  
  %%Status = @Ole(Get,http,^d,Status) @Ole(Get,http,^B,StatusText)
  # %%Header = @Ole(Get,http,^B,GetResponseHeader)
  %%Headers = @Ole(Get,http,^B,GetAllResponseHeaders)
  Dialog Set,respheader_edt,%%Headers
  %%Data = @Ole(Get,http,^B,responseText)
  If %%Data
    List Clear,9
    List Assign,9,%%Data
  End
  Dialog set,EDIT1,@Text(9)
  If @Equal(%%Status,200 OK)
    Dialog Set,STATUS1,%%Status@Tab()Success...
  Else
    Dialog Set,STATUS1,Error:%%Status@Tab()Sorry can't go there...

  End
  	  If @dlgtext(respheader_edt)
  	    %%Headers = @dlgtext(respheader_edt)
        If @dlgtext(reqheader_edt)
  		  %%ReqHeaders = @dlgtext(reqheader_edt)
  	      List Assign,5,%%ReqHeaders
          List Assign,9,%%Headers
          %%OldSep = @fsep()
          Option FieldSep,:
          %%cnt = 0
          %%count = @count(9)
  	      Repeat
            %%Item = @Trim(@Item(9,%%cnt))
            If %%Item
              Parse "%%Name;%%Value",%%Item
  			  If @Equal(%%Name,Set-Cookie)
  		        %%CookieName = @SubStr(%%Value,1,@Pred(@Pos(=,%%Value)))
				%%CookieValue = @Trim(@SubStr(%%Value,@Succ(@Pos(=,%%Value)),@Pred(@Pos(;,%%Value))))
  				List seek,5,0
                If @Match(5,%%CookieName)
  				Else
				  If %%CookieValue
  			        List Add,5,@Strdel(%%Name,1,4): %%CookieName=%%CookieValue
				  End
  		        End
  			  End
            End
            %%cnt = @succ(%%cnt)
          Until @Equal(%%cnt,%%count)
  	      Option FieldSep,%%OldSep
          Dialog Set,reqheader_edt,@Text(5)
  		End
  	  End
  
  %%OldLocation = %%Location
  DIALOG CURSOR,  
  %A = @SendMsg(@Winexists(~TAB1),@Get(TCM_SETCURFOCUS),2,0)
  %A = @SendMsg(@winexists(~TAB1),@Get(TCM_SETCURSEL),2,0)
Goto evloop

:IWinHttpRequestEventsOnResponseStart
  # The next lines extract the event parameters
  # The parameters are comma separated
  # Save the current field separator
  %%OldSep = @fsep()
  # Change the field separator to a comma
  Option FieldSep,@chr(44)
  # Use Parse to separate the parameters into VDS variables
  Parse "%%Status;%%ContentType",@Ole(EventParamsList,IWinHttpRequestEventsOnResponseStart)
  # Now do something really cool with the parameters
  # %%Status;%%ContentType
  # Change the field separator back to the original
  Option FieldSep,%%OldSep
goto evloop

:IWinHttpRequestEventsOnResponseDataAvailable
  # The next line will extract the event parameter
  %%Data = @Ole(EventParamsList,IWinHttpRequestEventsOnResponseDataAvailable)
  # Now do something really cool with the parameter
  Dialog Set,Status1,%%Data
goto evloop

:IWinHttpRequestEventsOnResponseFinished
  # The event was fired
  %%ResponseFinished = 1
  # Dialog Set,Status1,IWinHttpRequestEventsOnResponseFinished event was fired
goto evloop

:IWinHttpRequestEventsOnError
  # The next lines extract the event parameters
  # The parameters are comma separated
  # Save the current field separator
  %%OldSep = @fsep()
  # Change the field separator to a comma
  Option FieldSep,@chr(44)
  # Use Parse to separate the parameters into VDS variables
  Parse "%%ErrorNumber;%%ErrorDescription",@Ole(EventParamsList,IWinHttpRequestEventsOnError)
  # Now do something really cool with the parameters
  # %%ErrorNumber;%%ErrorDescription
  # Change the field separator back to the original
  Option FieldSep,%%OldSep
goto evloop

:ReadCertStore
  If @Get(userstore)
    Ole Free,object,userstore
  End
  Set userstore,@Ole(Create,"CAPICOM.Store.2",NULL)
  %%certs = @CertList(userstore,CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME,CAPICOM_CURRENT_USER_STORE,CAPICOM_MY_STORE,@Or(CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED,CAPICOM_STORE_OPEN_EXISTING_ONLY))
  If %%certs
    List Assign,TABLE1,%%certs
    List seek,TABLE1,0
	List Insert,TABLE1,0@Tab()@Tab()" "@Tab()" "@Tab()" "@Tab()
	List see,TABLE1,0
  Else
    Warn No Client side Certs installed
  End
Exit

:CertList
  %R =
  Ole Call,%1,"Open(^d,^B,^d)",%3,%4,%5
  %%StoreName = @Ole(Get,%1,^B,Name)
  Set certs,@Ole(Get,%1,"^o",Certificates)
  Set colcerts,@Ole(BeginCollection,certs)
    %i = 1
    While @Ole(Next,cert,In,colcerts)
	  %R = %R%i@Tab()
      %s = @Ole(Get,cert,"^B","SubjectName")
      %n = @SubStr(%s,@sum(@Pos("CN=",%s),3),@len(%s))
      if @Greater(@Pos(@chr(44),%n),0)
        %%Name = @SubStr(%n,1,@Pred(@Pos(@chr(44),%n)))
        %R = %R@SubStr(%n,1,@Pred(@Pos(@chr(44),%n)))@Tab()
      else
        %R = %R%n@Tab()
      end
      %s = @Ole(Get,cert,"^B","IssuerName")
      %n = @SubStr(%s,@sum(@Pos("CN=",%s),3),@len(%s))
      if @Greater(@Pos(@chr(44),%n),0)
        %R = %R@SubStr(%n,1,@Pred(@Pos(@chr(44),%n)))@Tab()
      else
        %R = %R%n@Tab()
      end
      %s = @Ole(Get,cert,"^D","ValidFromDate")
      %R = %R@datetime(ddddd tt,%s)@Tab()
	  %s = @Ole(Get,cert,"^D","ValidToDate")
	  %R = %R@datetime(ddddd tt,%s)@Tab()@CR()
      rem %R = %R@Ole(Get,%1,"^B","Certificates.Item(^d).GetInfo(^d)",%i,%2)@CR()
      rem Ole Call,userstore,"Certificates.Item(^d).Display",%%cnt
      %i = @succ(%i)
    Wend
    Ole Free,Collection,colcerts
    Dialog Set,STATUS1,Certificate Store Name: %%StoreName@TAB()Number of Certificates: @Pred(%i)
Exit %R

:DisplayCert
  If @Get(%1)
    Ole Call,%1,"Certificates.Item(^d).Display",%2
  End
Exit

:End of postmsg