package API::CPanel::Mysql;

use strict;
use warnings;

use API::CPanel;
use Data::Dumper;

our $VERSION = 0.07;

# Добавляет пользователя в базу mysql
# IN:
#   - do_as_user - cPanel пользователь для которого создается mysql-пользователь
#   - username   - Имя mysql-пользователя для создания 
#                  (фактически будет создан mysql-пользователь с именем: <do_as_user>_<username>).
#   - password   - Пароль для mysql-пользователя.
sub adduser {
    my $params = shift;

    # Модуль Mysql cPanel'а с которым работаем относится к первой версии api
    $params->{'cpanel_xmlapi_apiversion'} = 1;
    # Добавляем нового пользователя в базу от имени пользователя передаваемого в параметре do_as_user
    # Фактически это значит что работая с cPanel от реселлера мы создаем mysql 
    # юзера для cPanel-пользователя с логином do_as_user
    $params->{'user'} = delete $params->{'do_as_user'};

    $params->{'cpanel_xmlapi_module'} = 'Mysql';
    $params->{'cpanel_xmlapi_func'}   = 'adduser';

    $params->{'arg-0'}  = delete $params->{'username'};
    $params->{'arg-1'}  = delete $params->{'password'};

    return unless $params->{'user'}  &&
                  $params->{'arg-0'} &&
                  $params->{'arg-1'};

    my $result = API::CPanel::action_abstract(
        params         => $params,
        func           => 'cpanel',
        want_hash      => '1',
        allowed_fields => '
            user 
            cpanel_xmlapi_module 
            cpanel_xmlapi_func 
            cpanel_xmlapi_apiversion 
            arg-0
            arg-1',
    );

    return $result->{event}->{result};
}

# Добавляет базу mysql
# IN:
#   - do_as_user - cPanel пользователь для которого создается mysql-база
#   - dbname     - Имя бд для создания 
#                  (фактически будет создана бд с именем: <do_as_user>_<dbname>).
sub adddb {
    my $params = shift;

    # Модуль Mysql cPanel'а с которым работаем относится к первой версии api
    $params->{'cpanel_xmlapi_apiversion'} = 1;
    # Добавляем бд от имени пользователя передаваемого в параметре do_as_user
    # Фактически это значит что работая с cPanel от реселлера мы создаем бд
    # для cPanel-пользователя с логином do_as_user
    $params->{'user'} = delete $params->{'do_as_user'};

    $params->{'cpanel_xmlapi_module'} = 'Mysql';
    $params->{'cpanel_xmlapi_func'}   = 'adddb';

    $params->{'arg-0'}  = delete $params->{'dbname'};

    return unless $params->{'user'} &&
                  $params->{'arg-0'};


    my $result = API::CPanel::action_abstract(
        params         => $params,
        func           => 'cpanel',
        want_hash      => '1',
        allowed_fields => '
            user 
            cpanel_xmlapi_module 
            cpanel_xmlapi_func 
            cpanel_xmlapi_apiversion 
            arg-0',
    );

    return $result->{event}->{result};
}

# Устанавливает разрешения к базе
# IN:
#   - do_as_user - cPanel пользователь для которого создается mysql-база
#   - dbname     - Имя бд
#   - dbuser     - Имя пользователя
#   - perms_list - Список разрешений:
#                       alter      => ALTER
#                       temporary  => CREATE TEMPORARY TABLES
#                       routine    => CREATE ROUTINE
#                       create     => CREATE
#                       delete     => DELETE
#                       drop       => DROP
#                       select     => SELECT
#                       insert     => INSERT
#                       update     => UPDATE
#                       references => REFERENCES
#                       index      => INDEX
#                       lock       => LOCK TABLES
#                       all        => ALL
sub grant_perms {
    my $params = shift;

    # Модуль Mysql cPanel'а с которым работаем относится к первой версии api
    $params->{'cpanel_xmlapi_apiversion'} = 1;
    # Добавляем бд от имени пользователя передаваемого в параметре do_as_user
    # Фактически это значит что работая с cPanel от реселлера мы создаем бд
    # для cPanel-пользователя с логином do_as_user
    $params->{'user'} = delete $params->{'do_as_user'};

    $params->{'cpanel_xmlapi_module'} = 'Mysql';
    $params->{'cpanel_xmlapi_func'}   = 'adduserdb';

    $params->{'arg-0'}  = delete $params->{'dbname'};
    $params->{'arg-1'}  = delete $params->{'dbuser'};
    $params->{'arg-2'}  = delete $params->{'perms_list'};

    return unless $params->{'user'}  &&
                  $params->{'arg-0'} &&
                  $params->{'arg-1'} &&
                  $params->{'arg-2'};

    my $result = API::CPanel::action_abstract(
        params         => $params,
        func           => 'cpanel',
        want_hash      => '1',
        allowed_fields => '
            user 
            cpanel_xmlapi_module 
            cpanel_xmlapi_func 
            cpanel_xmlapi_apiversion 
            arg-0
            arg-1
            arg-2',
    );

    return $result->{event}->{result};
}




1;
