Zum Hauptinhalt springen

Integration in Vtiger

Im Folgenden wird erläutert, wie sich POWER CAPTCHA exemplarisch in die PHP-Anwendung Vtiger integrieren lässt.

Einbindung des Widgets im Frontend

In der CRM-Software Vtiger wird das Frontend über Smarty Templates abgebildet. Um für dieses Beispiel die Login-Schnittstelle zu sichern, solltest du zunächst das Login-Template in eine Default und eine Custom Variante unterteilen, wodurch du das ursprüngliche Login-Formular einfach wiederverwenden kannst. Die Dateien sehen dann folgendermaßen aus:

layouts/v7/modules/Users/Login.tpl
layouts/v7/modules/Users/Login.Default.tpl
layouts/v7/modules/Users/Login.Custom.tpl

Kopiere den Inhalt aus Login.tpl entsprechend in die Datei Login.Default.tpl sowie Login.Custom.tpl und ersetze den Inhalt aus Login.tpl durch folgenden Code:

{assign var="_DefaultLoginTemplate" value=vtemplate_path('Login.Default.tpl', 'Users')}
{assign var="_CustomLoginTemplate" value=vtemplate_path('Login.Custom.tpl', 'Users')}
{assign var="_CustomLoginTemplateFullPath" value="layouts/v7/$_CustomLoginTemplate"}

{if file_exists($_CustomLoginTemplateFullPath)}
    {include file=$_CustomLoginTemplate}
{else}
    {include file=$_DefaultLoginTemplate}
{/if}

Dadurch wird falls vorhanden, die Login.Custom.tpl-Datei für das Anzeigen des Logins verwendet. Um POWER CAPTCHA nun im Login einzubinden, ergänze folgenden Code in dem Login-Formular in der Login.Custom.tpl:

<script src="https://cdn.power-captcha.com/v1/power-captcha-1.2.4.min.js" type="text/javascript"></script>

<div id="loginFormDiv">
<form class="form-horizontal" method="POST" action="index.php">
//...
{assign var="clientUid" value=hash('sha256', $_SERVER['REMOTE_ADDR'])}
<div class="group" style="margin-bottom: 10px;" 
      data-pc-sitekey="<API-KEY>"
      data-pc-client-uid="{$clientUid}">
</div>
//...
</form>
</div>

Ersetze abschließend <API-KEY> noch durch einen gültigen API-Key.

Hinweis

Den API- und Secret-Key findest du im Bereich „Mein Konto“ auf power-captcha.com unter dem Menüpunkt API-Keys (siehe Abbildung).

Menüpunkt &#39;API-Keys&#39; mit angezeigten API-Key und Secret-Key im POWER CAPTCHA Mein Konto-Bereich

Bitte achte auch darauf, dass im Feld „Domain / Hostname“ die Domain deiner Website hinterlegt ist.

Weitere Informationen findest du in unseren FAQ.

Token-Verifizierung im Backend

Um das POWER CAPTCHA-Token zu verifizieren, muss die Verifizierung nun noch in das Backend integriert werden. Pass dazu die folgende Datei an:

modules/Users/actions/Login.php

Dort kann die Verifizierung einfach in einer preProcess Funktion abgebildet werden, die vor dem eigentlichen Login ausgeführt werden. Füge dafür den folgenden Code hinzu:

function preProcess(Vtiger_Request $request){
    if(isset($request->get('pc-token')) && !empty($request->get('pc-token')) {
            $curl = curl_init('https://api.power-captcha.com/pcu/v1/verify');
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($curl, CURLOPT_POST, TRUE);
        
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'X-API-Key: <API-KEY>', 
                'Content-Type: application/json'
            ));
        
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array(
                'secret' => '<SECRET>', 
                'token' => $request->get('pc-token'),
                'clientUid' => hash('sha256', $_SERVER['REMOTE_ADDR'])
            )));
        
            $response = json_decode(curl_exec($curl));
            curl_close($curl);
        
            if($response->success) {
                error_log("Token was successfully verified.");
                return true;
            } else {
                error_log("Error: Token verification failed.");
                return false;
            }
        } else {
            error_log("Error: Token was missing in POST request");
            return false;
        }
    }

Ersetze abschließend <API-KEY> sowie <SECRET> durch deinen individuellen API-Key bzw. Secret-Key .

Dein Vtiger-Login wird nun mit POWER CAPTCHA geschützt.