Page 1 of 1

Блокировка WEB Домена из стороннего скрипта

Posted: Fri Jun 14, 2013 7:29 am
by AlexART
Добрый день,
где хранятся данные о заблокированных web доменах?

Идея в следующем, необходима возможность заблокировать домен не вручную, а из моего скрипта php. Так сказать возможность для биллинговой системы.

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Fri Jun 14, 2013 10:10 am
by skid
Пользовательские данные хранятся в текстовых файлах, в папке /usr/local/vesta/data/users/%username%
Файл называется web.conf
Однако, изменение ключа SUSPENDED само по себе ничего не дает. Чтобы увидеть результат, нужно будет пересоздать конфигурационные файлы командой v-rebuild-web %username%, но я советую использовать другой подход.

Для решения этой задачи лучше использовать Web API. Оно работает без сохранения состояний и дает практически полный доступ к возможностям консольного ядра. Для дого чтобы из консоли заблокировать сайт test.com, который принадлежит пользователю demo, надо выполнить

Code: Select all

v-suspend-web-domain demo test.com
Для того чтобы выполнить эту команду через Web API, нужно сформировать POST запрос к https://servername:8083/api/, передав следующие параметры

Code: Select all

user=admin
password=%ADMIN_PASSWORD%
cmd=v-suspend-web-domain
arg1=demo
arg2=test.com
returncode=yes
Вместо ADMIN_PASSWORD нужно подставить админский пароль. Если полученный ответ сервера равен 0, значит все хорошо, домен заблокирован. Если больше нуля, значит что-то не так.

Посмотрите на то как реализована функция vesta_SuspendAccoun в модуле WHMCS

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Fri Jun 14, 2013 12:12 pm
by AlexART
Спасибо огромное.

Если вам не сложно, могли бы вы набросать примерный набор параметров $params для функции:

Code: Select all

function vesta_SuspendAccount($params) {
    // Execute only if there is assigned server
    if ($params["server"] == 1) {

        // Prepare variables
        $postvars = array(
          'user' => $params["serverusername"],
          'password' => $params["serverpassword"],
          'hash' => $params["serveraccesshash"],
          'cmd' => 'v-suspend-user',
          'arg1' => $params["username"]
        );
        $postdata = http_build_query($postvars);

        // Susupend user account
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://' . $params["serverhostname"] . ':8083/api/');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
        $answer = curl_exec($curl);
    }

    if($answer == 'OK') {
        $result = "success";
    } else {
        $result = $answer;
    }

}
Заранее очень благодарен.

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Sat Jun 15, 2013 9:31 am
by skid
Ок, ловите пример ;)

Code: Select all

<?php

// Define params for
$params['hostname'] = 'vesta-server-host.com';
$params['port'] = '8083';
$params['user'] = 'admin';
$params['password'] = 'p4sw0rd';
$params['cmd'] = 'v-suspend-web-domain';
$params['returncode'] = 'yes';
$params['arg1'] = 'demo';
$params['arg2'] = 'test.com';

function vesta_api_query($params) {
    // Prepare post request
    $postvars = array(
        'user' => $params['user'],
        'password' => $params['password'],
        'returncode' =>  $params['returncode'],
        'cmd' => $params['cmd'],
        'arg1' => $params['arg1'],
        'arg2' => $params['arg2'],
    );
    $postdata = http_build_query($postvars);

    // Run api query
    $curl = curl_init();
    $curl_url = 'https://' . $params["hostname"];
    $curl_url .= ':' . $params["port"] .'/api/';
    curl_setopt($curl, CURLOPT_URL, $curl_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    $answer = curl_exec($curl);

    // Check result
    if ($answer == 0) {
        return true;
    }
    return false;
}

if (vesta_api_query($params)) {
    echo "Query successfuly completed\n";
} else {
    echo "Query returned error\n";
}

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Sat Jun 15, 2013 9:32 am
by skid
Для разблокировки домена, замените v-suspend-web-domain на v-unsuspend-web-domain

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Sat Jun 15, 2013 9:33 am
by skid
Иногда удобно блокировать всего пользователя целиком.

Code: Select all

$params['cmd'] = 'v-suspend-user';
$params['arg1'] = 'demo';
В arg2, в таком случае не нужно ничего передавать

Re: Блокировка WEB Домена из стороннего скрипта

Posted: Sun Jun 16, 2013 12:17 pm
by AlexART
Спасибо)