#AutoIt3Wrapper_UseX64=n ;Opt("MustDeclareVars", 1) ;AutoItSetOption("WinTitleMatchMode", 3) ; EXACT_MATCH! ;============================================================ ; PSM AutoIt Dispatcher Skeleton ; ------------------------------ ; ; Use this skeleton to create your own ; connection components integrated with the PSM. ; Areas you may want to modify are marked ; with the string "CHANGE_ME". ; ; Created : April 2013 ; Cyber-Ark Software Ltd. ;============================================================ #include "PSMGenericClientWrapper.au3" #include "wd_core.au3" #include "wd_helper.au3" ;======================================= ; Consts & Globals ;======================================= Global Const $DISPATCHER_NAME = "PSMEdgeTest" ; CHANGE_ME ;Global Const $CLIENT_EXECUTABLE = "C:\Program Files (x86)\CyberArk\PSM\Components\msedgedriver.exe" ; CHANGE_ME Global Const $ERROR_MESSAGE_TITLE = "PSM " & $DISPATCHER_NAME & " Dispatcher error message" Global Const $LOG_MESSAGE_PREFIX = $DISPATCHER_NAME & " Dispatcher - " Global Const $sDriver = "C:\Program Files (x86)\CyberArk\PSM\Components\msedgedriver.exe" ; <== Please modify this statement to your environment. Must be a local drive, network drives don't work! Global $sDesiredCapabilities, $sSession Global $TargetUsername Global $TargetPassword Global $TargetAddress Global $ConnectionClientPID = 0 ;======================================= ; Code ;======================================= Exit Main() ;======================================= ; Main ;======================================= Func Main() ; Init PSM Dispatcher utils wrapper ToolTip ("Initializing...") if (PSMGenericClient_Init() <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf LogWrite("successfully initialized Dispatcher Utils Wrapper") ; Get the dispatcher parameters FetchSessionProperties() LogWrite("mapping local drives") if (PSMGenericClient_MapTSDrives() <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf LogWrite("starting client application") ToolTip ("Starting " & $DISPATCHER_NAME & "...") LogWrite("Test") OpenEdge() LogWrite("Test1") $ConnectionClientPID = WinGetProcess("[CLASS:Chrome_WidgetWin_1]") LogWrite("Test2") LogWrite($ConnectionClientPID) if ($ConnectionClientPID == 0) Then Error(StringFormat("Failed to execute process [%s]", $ConnectionClientPID, @error)) EndIf ; ------------------ ; Handle login here! ; CHANGE_ME ; ------------------ ; Open website $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@name='txtUsername']") Sleep(500) _WD_ElementAction($sSession, $sElement, 'value', $TargetUsername) Sleep(500) $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@name='txtAuthToken']") _WD_ElementAction($sSession, $sElement, 'value', $TargetPassword) $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@name='btnLogin']") ;_WD_ElementAction($sSession, $sButton, 'click') _WD_LoadWait($sSession, 2000) ; Send PID to PSM so recording/monitoring can begin ; Notice that until we send the PID, PSM blocks all user input. LogWrite("sending PID to PSM") if (PSMGenericClient_SendPID($ConnectionClientPID) <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf ; Terminate PSM Dispatcher utils wrapper LogWrite("Terminating Dispatcher Utils Wrapper") PSMGenericClient_Term() Return $PSM_ERROR_SUCCESS EndFunc ;================================== ; Functions ;================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: Error ; Description ...: An exception handler - displays an error message and terminates the dispatcher ; Parameters ....: $ErrorMessage - Error message to display ; $Code - [Optional] Exit error code ; =============================================================================================================================== Func Error($ErrorMessage, $Code = -1) ; If the dispatcher utils DLL was already initialized, write an error log message and terminate the wrapper if (PSMGenericClient_IsInitialized()) Then LogWrite($ErrorMessage, True) PSMGenericClient_Term() EndIf Local $MessageFlags = BitOr(0, 16, 262144) ; 0=OK button, 16=Stop-sign icon, 262144=MsgBox has top-most attribute set MsgBox($MessageFlags, $ERROR_MESSAGE_TITLE, $ErrorMessage) ; If the connection component was already invoked, terminate it if ($ConnectionClientPID <> 0) Then ProcessClose($ConnectionClientPID) $ConnectionClientPID = 0 EndIf Exit $Code EndFunc ; #FUNCTION# ==================================================================================================================== ; Name...........: LogWrite ; Description ...: Write a PSMWinSCPDispatcher log message to standard PSM log file ; Parameters ....: $sMessage - [IN] The message to write ; $LogLevel - [Optional] [IN] Defined if the message should be handled as an error message or as a trace messge ; Return values .: $PSM_ERROR_SUCCESS - Success, otherwise error - Use PSMGenericClient_PSMGetLastErrorString for details. ; =============================================================================================================================== Func LogWrite($sMessage, $LogLevel = $LOG_LEVEL_TRACE) Return PSMGenericClient_LogWrite($LOG_MESSAGE_PREFIX & $sMessage, $LogLevel) EndFunc ; #FUNCTION# ==================================================================================================================== ; Name...........: PSMGenericClient_GetSessionProperty ; Description ...: Fetches properties required for the session ; Parameters ....: None ; Return values .: None ; =============================================================================================================================== Func FetchSessionProperties() ; CHANGE_ME if (PSMGenericClient_GetSessionProperty("Username", $TargetUsername) <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf if (PSMGenericClient_GetSessionProperty("Password", $TargetPassword) <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf if (PSMGenericClient_GetSessionProperty("Address", $TargetAddress) <> $PSM_ERROR_SUCCESS) Then Error(PSMGenericClient_PSMGetLastErrorString()) EndIf EndFunc ; #FUNCTION# ==================================================================================================================== ; Name...........: LogWrite ; Description ...: Write a PSMWinSCPDispatcher log message to standard PSM log file ; Parameters ....: $sMessage - [IN] The message to write ; $LogLevel - [Optional] [IN] Defined if the message should be handled as an error message or as a trace messge ; Return values .: $PSM_ERROR_SUCCESS - Success, otherwise error - Use PSMGenericClient_PSMGetLastErrorString for details. ; =============================================================================================================================== Func OpenEdge() _WD_Option('Driver', $sDriver) _WD_Option('Port', 9515) _WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\msedge.log"') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"ms:edgeOptions": {"excludeSwitches": [ "enable-automation"]}}}}' _WD_Startup() If @error Then LogWrite(@error) ;Exit SetError(2, @error) $sSession = _WD_CreateSession($sDesiredCapabilities) If @error Then LogWrite(@error) ;Exit SetError(3, @error) _WD_Navigate($sSession, $TargetAddress) LogWrite("Edge2") ;If @error Then Return SetError(@error) Sleep(5000) EndFunc