commit 307daff9468bccfb8e4a8792baca162ab1164339 Author: Pablo Sarria Date: Tue Jun 27 13:12:26 2017 +0200 Commit Inicial diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d2e968b --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2016, Kristián Feldsam, FELDSAM s.r.o. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d21cb85 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# ISPConfig WebDNS module + +Este módulo crea las DNS y Sitio web introduciendo el dominio y un cliente. + +This module is compatible with ISPConfig version 3.1.3 + +## Installation + +-Crear nuevo registro en la tabla dns_template lanzando el archivo webdns_db.sql 'mysql -u root -p < webdns_db.sql' +-Copiar el módulo en la carpeta web de ispconfig. +-Activa el módulo desde ispconfig en System->CP Users->Admin User->Check "webdns" y guardar. +-Logout y login para ver el módulo. \ No newline at end of file diff --git a/form/new_service_webdns.tform.php b/form/new_service_webdns.tform.php new file mode 100644 index 0000000..a03c60e --- /dev/null +++ b/form/new_service_webdns.tform.php @@ -0,0 +1,123 @@ + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Form Definition + + Tabledefinition + + Datatypes: + - INTEGER (Forces the input to Int) + - DOUBLE + - CURRENCY (Formats the values to currency notation) + - VARCHAR (no format check, maxlength: 255) + - TEXT (no format check) + - DATE (Dateformat, automatic conversion to timestamps) + + Formtype: + - TEXT (Textfield) + - TEXTAREA (Textarea) + - PASSWORD (Password textfield, input is not shown when edited) + - SELECT (Select option field) + - RADIO + - CHECKBOX + - CHECKBOXARRAY + - FILE + + VALUE: + - Wert oder Array + + Hint: + The ID field of the database table is not part of the datafield definition. + The ID field must be always auto incement (int or bigint). + + Search: + - searchable = 1 or searchable = 2 include the field in the search + - searchable = 1: this field will be the title of the search result + - searchable = 2: this field will be included in the description of the search result + + +*/ + +$form["title"] = "Nuevo servicio Web"; +$form["description"] = ""; +$form["name"] = "new_service_webdns"; +$form["action"] = "new_service_webdns.php"; +$form["db_table"] = "server"; +$form["db_table_idx"] = "server_id"; +$form["db_history"] = "no"; +$form["tab_default"] = "webdns"; +$form["auth"] = 'yes'; // yes / no + +$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user +$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user +$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete + +$form["tabs"]['webdns'] = array( + 'title' => "Alta", + 'description' => 'Crea un el sitio web y su dominio.', + 'width' => 100, + 'template' => "templates/new_service_webdns.htm", + 'fields' => array ( + 'domain' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'IDNTOASCII'), + 1 => array( 'event' => 'SHOW', + 'type' => 'IDNTOUTF8'), + 2 => array( 'event' => 'SAVE', + 'type' => 'TOLOWER') + ), + 'validators' => array ( + 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'domain_error_empty'), + 2 => array ( 'type' => 'REGEX', + 'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/', + 'errmsg'=> 'domain_error_regex'), + ), + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'client_id' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'SELECT', + 'default' => '', + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => "SELECT sys_group.groupid, sys_group.client_id, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name", + 'keyfield'=> 'client_id', + 'valuefield'=> 'contactname' + ), + 'value' => '' + ), + ) +); \ No newline at end of file diff --git a/lib/admin.conf.php b/lib/admin.conf.php new file mode 100644 index 0000000..d886b2c --- /dev/null +++ b/lib/admin.conf.php @@ -0,0 +1,6 @@ += 0.'; +$wb["pm_ondemand_hint_txt"] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!'; +$wb['generate_password_txt'] = 'Generate Password'; +$wb['repeat_password_txt'] = 'Repeat Password'; +$wb['password_mismatch_txt'] = 'The passwords do not match.'; +$wb['password_match_txt'] = 'The passwords do match.'; +$wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; +$wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; +$wb['available_nginx_directive_snippets_txt'] = 'Available nginx Directive Snippets:'; +$wb['proxy_directives_txt'] = 'Proxy Directives'; +$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:'; +$wb['no_server_error'] = 'No server selected.'; +$wb['no_backup_txt'] = 'No backup'; +$wb['daily_backup_txt'] = 'Daily'; +$wb['weekly_backup_txt'] = 'Weekly'; +$wb['monthly_backup_txt'] = 'Monthly'; +$wb['rewrite_rules_txt'] = 'Rewrite Rules'; +$wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules'; +$wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:'; +$wb['configuration_error_txt'] = "CONFIGURATION ERROR"; +$wb['variables_txt'] = 'Variables'; +$wb['added_by_txt'] = 'Added by'; +$wb['added_date_txt'] = 'Added date'; +$wb['backup_excludes_txt'] = 'Excluded Directories'; +$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)'; +$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.'; +$wb['invalid_custom_php_ini_settings_txt'] = 'Invalid php.ini settings'; +$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group'; +$wb['apache_directive_blocked_error'] = 'Apache directive blocked by security settings:'; +$wb['http_port_txt'] = 'HTTP Port'; +$wb['https_port_txt'] = 'HTTPS Port'; +$wb['http_port_error_regex'] = 'HTTP Port invalid.'; +$wb['https_port_error_regex'] = 'HTTPS Port invalid.'; +?> \ No newline at end of file diff --git a/lib/lang/en_template.lng b/lib/lang/en_template.lng new file mode 100644 index 0000000..758a98f --- /dev/null +++ b/lib/lang/en_template.lng @@ -0,0 +1,81 @@ += 0.'; +$wb["pm_ondemand_hint_txt"] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!'; +$wb["pm_max_children_txt"] = 'PHP-FPM pm.max_children'; +$wb["pm_start_servers_txt"] = 'PHP-FPM pm.start_servers'; +$wb["pm_min_spare_servers_txt"] = 'PHP-FPM pm.min_spare_servers'; +$wb["pm_max_spare_servers_txt"] = 'PHP-FPM pm.max_spare_servers'; +$wb["error_php_fpm_pm_settings_txt"] = 'Values of PHP-FPM pm settings must be as follows: pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0'; +$wb["pm_max_children_error_regex"] = 'PHP-FPM pm.max_children must be a positive integer value.'; +$wb["pm_start_servers_error_regex"] = 'PHP-FPM pm.start_servers must be a positive integer value.'; +$wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.'; +$wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.'; +$wb["apache_directives_txt"] = 'Apache Directives'; +$wb["nginx_directives_txt"] = 'Nginx Directives'; +$wb["proxy_directives_txt"] = 'Proxy Directives'; +$wb["custom_php_ini_txt"] = 'Custom php.ini settings'; +$wb["seo_redirect_txt"] = 'SEO Redirect'; +$wb['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS'; +$wb["no_redirect_txt"] = 'No redirect'; +$wb["none_txt"] = 'None'; +$wb["php_fpm_use_socket_txt"] = 'Use Socket For PHP-FPM'; +$wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.'; +$wb['traffic_quota_error_empty'] = 'Traffic quota is empty.'; +$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.'; +$wb['hd_quota_error_empty'] = 'Harddisk quota is 0 or empty.'; +$wb["btn_save_txt"] = 'Save'; +$wb["btn_cancel_txt"] = 'Cancel'; +$wb["variables_txt"] = 'Variables'; +$wb["disabled_txt"] = 'Disabled'; +$wb["template_name_txt"] = 'Template name'; +$wb["template_name_error_empty"] = 'Template name can not be empty!'; +$wb["policy_txt"] = 'Spamfilter'; +$wb["no_policy"] = '- not enabled -'; +$wb["dkim_txt"] = 'Enable DKIM'; +$wb['dkim_selector_txt'] = 'DKIM-Selector'; +$wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; +$wb["remote_access_txt"] = 'Remote Access'; +$wb["remote_ips_txt"] = 'Remote Access IPs (separate by , and leave blank for any)'; +$wb["database_charset_txt"] = 'Database charset'; +$wb["database_remote_error_ips"] = 'At least one of the entered ip addresses is invalid.'; +$wb['limit_database_quota_txt'] = 'Database quota'; +$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.'; +$wb["quota_files_txt"] = 'Filequota'; +$wb["quota_files_unity_txt"] = 'Files'; +$wb["ul_ratio_txt"] = 'Upload ratio'; +$wb["dl_ratio_txt"] = 'Download ratio'; +$wb["ul_bandwidth_txt"] = 'Upload bandwidth'; +$wb["dl_bandwidth_txt"] = 'Download bandwidth'; +$wb['shell_txt'] = "Shell"; +$wb['chroot_txt'] = "Chroot Shell"; +$wb['shell_error_regex'] = 'Invalid shell'; +$wb['shell_error_empty'] = 'Shell is empty!'; +$wb["enablesmtp_txt"] = 'Enable SMTP (sending)'; +$wb["enableimap_txt"] = 'Enable IMAP'; +$wb["enablepop3_txt"] = 'Enable POP3'; +$wb["mailbox_quota_txt"] = 'Mailbox quota (0 for unlimited)'; +$wb["quota_error_isint"] = 'Mailbox size must be a number.'; +$wb["quota_error_value"] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1'; +$wb['http_port_txt'] = 'HTTP Port'; +$wb['https_port_txt'] = 'HTTPS Port'; \ No newline at end of file diff --git a/lib/lang/es_new_service_webdns.lng b/lib/lang/es_new_service_webdns.lng new file mode 100644 index 0000000..2d47078 --- /dev/null +++ b/lib/lang/es_new_service_webdns.lng @@ -0,0 +1,183 @@ + www'; +$wb['www_to_non_www_txt'] = 'www -> non-www'; +$wb['php_fpm_use_socket_txt'] = 'Usar Socket para PHP-FPM'; +$wb['error_no_sni_txt'] = 'SNI para SSL no está activado en este servidor. Sólo es posible activar un certificado SSL en cada dirección IP.'; +$wb['python_txt'] = 'Python'; +$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children'; +$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers'; +$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers'; +$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers'; +$wb['error_php_fpm_pm_settings_txt'] = 'Los valores de configuración de PHP-FPM pm debe ser como sigue: pm.max_children> = pm.max_spare_servers> = pm.start_servers> = pm.min_spare_servers> 0'; +$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children debe ser un valor entero positivo.'; +$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers debe ser un valor entero positivo.'; +$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers debe ser un valor entero positivo.'; +$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers debe ser un valor entero positivo.'; +$wb['ssl_key_txt'] = 'SSL Key'; +$wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; +$wb['perl_txt'] = 'Perl'; +$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.'; +$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.'; +$wb['fastcgi_php_version_txt'] = 'PHP Version'; +$wb['pm_txt'] = 'PHP-FPM Process Manager'; +$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout'; +$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests'; +$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout must be a positive integer value.'; +$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests must be an integer value >= 0.'; +$wb['pm_ondemand_hint_txt'] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!'; +$wb['generate_password_txt'] = 'Generate Password'; +$wb['repeat_password_txt'] = 'Repeat Password'; +$wb['password_mismatch_txt'] = 'The passwords do not match.'; +$wb['password_match_txt'] = 'The passwords do match.'; +$wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; +$wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; +$wb['available_nginx_directive_snippets_txt'] = 'Available nginx Directive Snippets:'; +$wb['proxy_directives_txt'] = 'Proxy Directives'; +$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:'; +$wb['no_server_error'] = 'No server selected.'; +$wb['no_backup_txt'] = 'No backup'; +$wb['daily_backup_txt'] = 'Daily'; +$wb['weekly_backup_txt'] = 'Weekly'; +$wb['monthly_backup_txt'] = 'Monthly'; +$wb['rewrite_rules_txt'] = 'Rewrite Rules'; +$wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules'; +$wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:'; +$wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; +$wb['variables_txt'] = 'Variables'; +$wb['added_by_txt'] = 'Added by'; +$wb['added_date_txt'] = 'Added date'; +$wb['backup_excludes_txt'] = 'Excluded Directories'; +$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)'; +$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.'; +$wb['invalid_custom_php_ini_settings_txt'] = 'Invalid php.ini settings'; +$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group'; +$wb['apache_directive_blocked_error'] = 'Apache directive blocked by security settings:'; +$wb['http_port_txt'] = 'HTTP Port'; +$wb['https_port_txt'] = 'HTTPS Port'; +$wb['http_port_error_regex'] = 'HTTP Port invalid.'; +$wb['https_port_error_regex'] = 'HTTPS Port invalid.'; +?> diff --git a/lib/lang/es_template.lng b/lib/lang/es_template.lng new file mode 100644 index 0000000..7c67b55 --- /dev/null +++ b/lib/lang/es_template.lng @@ -0,0 +1,81 @@ += 0.'; +$wb["pm_ondemand_hint_txt"] = 'Por favor verifica que la version PHP es >= 5.3.9 para usar process manager ondemand. Si seleccionas ondemand para una version mas antigua PHP no se iniciara!'; +$wb["pm_max_children_txt"] = 'PHP-FPM pm.max_children'; +$wb["pm_start_servers_txt"] = 'PHP-FPM pm.start_servers'; +$wb["pm_min_spare_servers_txt"] = 'PHP-FPM pm.min_spare_servers'; +$wb["pm_max_spare_servers_txt"] = 'PHP-FPM pm.max_spare_servers'; +$wb["error_php_fpm_pm_settings_txt"] = 'Los ajustes de PHP-FPM pm settings deben cumplir esto: pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0'; +$wb["pm_max_children_error_regex"] = 'El valor de PHP-FPM pm.max_children debe ser un valor de entero positivo.'; +$wb["pm_start_servers_error_regex"] = 'El valor de PHP-FPM pm.start_servers debe ser un valor de entero positivo.'; +$wb["pm_min_spare_servers_error_regex"] = 'El valor de PHP-FPM pm.min_spare_servers debe ser un valor de entero positivo.'; +$wb["pm_max_spare_servers_error_regex"] = 'El valor de PHP-FPM pm.max_spare_servers debe ser un valor de entero positivo.'; +$wb["apache_directives_txt"] = 'Directivas Apache'; +$wb["nginx_directives_txt"] = 'Directivas Nginx'; +$wb["proxy_directives_txt"] = 'Directivas Proxy'; +$wb["custom_php_ini_txt"] = 'Ajustes php.ini personalizados'; +$wb["seo_redirect_txt"] = 'Redireccion SEO'; +$wb['rewrite_to_https_txt'] = 'Rewrite HTTP a HTTPS'; +$wb["no_redirect_txt"] = 'No redirigir'; +$wb["none_txt"] = 'Ninguno'; +$wb["php_fpm_use_socket_txt"] = 'Usar Socket para PHP-FPM'; +$wb["traffic_quota_error_regex"] = 'Cuota de trafico erronea.'; +$wb['traffic_quota_error_empty'] = 'Cuota de trafico vacia.'; +$wb['hd_quota_error_regex'] = 'Cuota de disco erronea.'; +$wb['hd_quota_error_empty'] = 'Cuota de disco 0 o vacia.'; +$wb["btn_save_txt"] = 'Guardar'; +$wb["btn_cancel_txt"] = 'Cancelar'; +$wb["variables_txt"] = 'Variables'; +$wb["disabled_txt"] = 'Desactivado'; +$wb["template_name_txt"] = 'Nombre plantilla'; +$wb["template_name_error_empty"] = 'El nombre de la plantilla no puede estar vacio!'; +$wb["policy_txt"] = 'Spamfilter'; +$wb["no_policy"] = '- not enabled -'; +$wb["dkim_txt"] = 'Habilitar DKIM'; +$wb['dkim_selector_txt'] = 'Selector-DKIM'; +$wb['dkim_selector_error'] = 'Selector-DKIM erroneo. Usa unicamente caracteres alfanumericos en minusculas (a-z o 0-9) con un maximo de 63 caracteres'; +$wb["remote_access_txt"] = 'Accesso remoto'; +$wb["remote_ips_txt"] = 'IPs de acceso remoto (separadas por , o dejalo en blanco para todas)'; +$wb["database_charset_txt"] = 'Database charset'; +$wb["database_remote_error_ips"] = 'Al menos una de las IPs introducidas es erronea.'; +$wb['limit_database_quota_txt'] = 'Cuota de base de datos'; +$wb['limit_database_quota_error_notint'] = 'La cuota de base de datos debe ser un numero.'; +$wb["quota_files_txt"] = 'Cuota de archivos'; +$wb["quota_files_unity_txt"] = 'Archivos'; +$wb["ul_ratio_txt"] = 'Ratio de subida'; +$wb["dl_ratio_txt"] = 'Ratio de descarga'; +$wb["ul_bandwidth_txt"] = 'Ancho de banda de subida'; +$wb["dl_bandwidth_txt"] = 'Ancho de banda de descarga'; +$wb['shell_txt'] = "Shell"; +$wb['chroot_txt'] = "Chroot Shell"; +$wb['shell_error_regex'] = 'Shell erronea'; +$wb['shell_error_empty'] = 'Shell vacia!'; +$wb["enablesmtp_txt"] = 'Habilitar SMTP (envio)'; +$wb["enableimap_txt"] = 'Habilitar IMAP'; +$wb["enablepop3_txt"] = 'Habilitar POP3'; +$wb["mailbox_quota_txt"] = 'Cuota del buzon (0 para ilimitada)'; +$wb["quota_error_isint"] = 'La cuota debe ser un numero.'; +$wb["quota_error_value"] = 'Valor de cuota erroneo. Los valores permitidos son: 0 para ilimitada o numeros > 1'; +$wb['http_port_txt'] = 'Puerto HTTP'; +$wb['https_port_txt'] = 'Puerto HTTPS'; diff --git a/lib/module.conf.php b/lib/module.conf.php new file mode 100644 index 0000000..22cd491 --- /dev/null +++ b/lib/module.conf.php @@ -0,0 +1,51 @@ + 'Nuevo servicio web', + 'target' => 'content', + 'link' => 'webdns/new_service_webdns.php', + 'html_id' => 'new_service_webdns'); + +/*$items[] = array( 'title' => 'Sitio Web', + 'target' => 'content', + 'link' => 'customdns/webdns_vhost_domain_edit.php?type=domain' + //'../sites/web_vhost_domain_edit.php?type=domain' + ); +$items[] = array( 'title' => 'Web DNS2', + 'target' => 'content', + 'link' => 'customdns/new_service_dns2.php', + 'html_id' => 'new_service_dns2');*/ + + + +// Append the menu $items defined above to a menu section labeled 'Support' +$module['nav'][] = array( 'title' => 'WebDNS', + 'open' => 1, + 'items' => $items + ); \ No newline at end of file diff --git a/lib/remote.conf.php b/lib/remote.conf.php new file mode 100644 index 0000000..a9ef323 --- /dev/null +++ b/lib/remote.conf.php @@ -0,0 +1,12 @@ + diff --git a/list/template.list.php b/list/template.list.php new file mode 100644 index 0000000..7ba67a0 --- /dev/null +++ b/list/template.list.php @@ -0,0 +1,58 @@ + "template_name", + 'datatype' => "VARCHAR", + 'formtype' => "TEXT", + 'op' => "like", + 'prefix' => "%", + 'suffix' => "%", + 'width' => "", + 'value' => ""); \ No newline at end of file diff --git a/new_service_webdns.php b/new_service_webdns.php new file mode 100644 index 0000000..69c2f2e --- /dev/null +++ b/new_service_webdns.php @@ -0,0 +1,359 @@ + +All rights reserved. +*/ + + +/****************************************** +* Begin Form configuration +******************************************/ +//Solo se puede tener una variable para cargar los distintos formularios +$tform_def_file = "form/new_service_webdns.tform.php"; + +/****************************************** +* End Form configuration +******************************************/ + +require_once '../../lib/config.inc.php'; +require_once '../../lib/app.inc.php'; + +//* Check permissions for module +$app->auth->check_module_permissions('webdns'); + +// Check the module permissions and redirect if not allowed. +/*if(!stristr($_SESSION['s']['user']['modules'],'customdns')) { + header('Location: ../index.php'); + die; +}*/ + +// Loading classes +$app->uses('tpl,tform,tform_actions,remoting,tools_sites,remoting_lib'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + //Con esta funcion se parsean y preparan los campos del formulario, new_service_dns.tform.php + //justo después de la carga de este. + /*function onShowEnd() { + global $app, $conf;*/ + //FORMULARIO + //Con esta llamada a al clase $app cargo todos los campos definidos en el formulario, + //en este caso, los definidos en el array $form["tabs"]['webdns']; + //$fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true); + + // select first template as default + /*if($fields['dns_template_id'] == 0) + { + $first_template = $app->db->queryOneRecord("SELECT template_id FROM dns_template WHERE visible = 'Y' ORDER BY name ASC"); + $fields['dns_template_id'] = $first_template['template_id']; + }*/ + //BASE DE DATOS - TEMPLATE + //Cargo todos los valores de la tabla dns_template que coincidan con id del template seleccionado. + ///$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = ?", $fields['dns_template_id']); + //IMPORTANTE, aquí cargo el campo fields de la tabla dns_template + //que contiene una lista de los campos que se muestran en el template(vista) + /*$fields = explode(',', $template_record['fields']); + if(is_array($fields)) { + foreach($fields as $field) { + $app->tpl->setVar($field."_VISIBLE", 1); + $field = strtolower($field); + $app->tpl->setVar($field, $_POST['dns_'.$field]); + } + }*/ + + /*parent::onShowEnd(); + }*/ + + + function onSubmit() { + global $app, $conf; + //Carga de campos del formulario. + $fields = $app->tform->encode($this->dataRecord, $app->tform->getCurrentTab(), true); + + // check for domain unique name + if($app->db->queryOneRecord('SELECT domain_id FROM domain WHERE domain = "'.$fields['domain'].'"')) { + $app->tform->errorMessage = $app->tform->wordbook['domain_error_unique']; + } + + if($app->tform->errorMessage) + { + $this->onError(); + return; + } + //Esta variable nos llega por jQuery desde el htm para el control de errores en la vista. + if($_POST['create'] != 1) + { + $app->tform->errorMessage = 'DUMMY'; + $app->tpl->setVar($this->dataRecord); + $this->onShow(); + return; + } + + // Domain OK, continue + $remote = new remote_actions; + + // client prefix and group id + $res = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($fields['client_id'])); + $client_group_id = $res['groupid']; + $client_prefix = 'c'.$fields['client_id']; + + // add domain. Llamada que inserta el dominio en la tabla domain + $domain_id = $remote->insert_query('../client/form/domain.tform.php', $fields['client_id'], array('domain' => $fields['domain'])); + + + //Carga del formulario dns_soa para guardar en base de datos + $tform_def_file = "../dns/form/dns_soa.tform.php"; + $app->tform->loadFormDef($tform_def_file); + + // Carga y seleccion de dns_template, si no esta creado se informa de que tiene que crearse + $template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE visible = 'Y' AND name = 'webdns'"); /*'open6hosting'");*/ + + /*if($template_record) { + //echo '

Teplate '.$template_record.', '; + $app->tform->errorMessage = 'Error hay que crear un template llamado webdns'; + $this->onError(); + return; + } else { + $app->tform->errorMessage = 'Error hay que crear un template llamado webdnsssssss'; + $this->onError(); + return; + }*/ + + /*if($app->tform->errorMessage) + { + $this->onError(); + return; + }*/ + + //$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE visible = 'Y' AND name = 'webdns'"); /*'open6hosting'");*/ + + //Llamada a la tabla server_ip para recuperar la ip4 e ip6 + $dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$app->functions->intval($fields['client_id']. " AND ip_type='IPv4'")); + + $dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = ".$fields['client_id']." AND ip_type='IPv6'"); + + //Comprobamos que el resultado para el cliente seleccionado no esta vacío, + //si lo esta tomamos los datos del cliente id 0 + if(!$dns_ip_servidor_ipv6){ + $dns_ip_servidor = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 0 AND ip_type='IPv4'"); + $dns_ip_servidor_ipv6 = $app->db->queryOneRecord("SELECT ip_type, ip_address FROM server_ip WHERE client_id = 0 AND ip_type='IPv6'"); + /*echo '

Valor de la consulta '.$dns_ip_servidor_ipv6[ip_address].' '; + echo '

Valor de la consulta '.$dns_ip_servidor[ip_address].' ';*/ + } + + + $tpl_content = $template_record['template']; + // Reemplazo la variable que nos encontramos en base de datos por el valor que se ha introducido en el formulario + $tpl_content = str_replace('{DOMAIN}', $fields['domain'], $tpl_content); + + //Carga de los datos en las variables ns + $tpl_content = str_replace('{IP}', $dns_ip_servidor['ip_address'], $tpl_content); + $tpl_content = str_replace('{IPV6}', $dns_ip_servidor_ipv6['ip_address'], $tpl_content); + /*$tpl_content = str_replace('{NS1}', '.open6servers.com', $tpl_content); + $tpl_content = str_replace('{NS2}', '.open6servers.com', $tpl_content); */ + + $enable_dnssec = 'N';//(($_POST['dns_dnssec'] == 'Y') ? 'Y' : 'N'); + + // Parse the template + $tpl_rows = explode("\n", $tpl_content); + $section = ''; + $vars = array(); + $vars['xfer']=''; + $dns_rr = array(); + foreach($tpl_rows as $row) { + $row = trim($row); + if(substr($row, 0, 1) == '[') { + if($row == '[ZONE]') { + $section = 'zone'; + } elseif($row == '[DNS_RECORDS]') { + $section = 'dns_records'; + } else { + die('Unknown section type'); + } + } else { + if($row != '') { + // Handle zone section + if($section == 'zone') { + $parts = explode('=', $row); + $key = trim($parts[0]); + $val = trim($parts[1]); + if($key != '') $vars[$key] = $val; + } + // Handle DNS Record rows + if($section == 'dns_records') { + $parts = explode('|', $row); + $dns_rr[] = array( + 'name' => $parts[1], + 'type' => $parts[0], + 'data' => $parts[2], + 'aux' => $parts[3], + 'ttl' => $parts[4] + ); + } + } + } + } // end foreach + + + + $dns_error = ''; + + /*if($vars['origin'] == '') $dns_error .= $app->lng('error_origin_empty').'
'; + if($vars['ns'] == '') $dns_error .= $app->lng('error_ns_empty').'
'; + if($vars['mbox'] == '') $dns_error .= $app->lng('error_mbox_empty').'
'; + if($vars['refresh'] == '') $dns_error .= $app->lng('error_refresh_empty').'
'; + if($vars['retry'] == '') $dns_error .= $app->lng('error_retry_empty').'
'; + if($vars['expire'] == '') $dns_error .= $app->lng('error_expire_empty').'
'; + if($vars['minimum'] == '') $dns_error .= $app->lng('error_minimum_empty').'
'; + if($vars['ttl'] == '') $dns_error .= $app->lng('error_ttl_empty').'
'; + + // check for dns errors + if($dns_error) + { + $app->tform->errorMessage = $dns_error; + $this->onError(); + return; + }*/ + + //Llamada a la tabla client para recuperar el client_id y su default_dnsserver + $dns_servidor = $app->db->queryOneRecord("SELECT client_id, default_dnsserver, default_webserver FROM client WHERE client_id = ".$app->functions->intval($fields['client_id'])); + $valor_recuperado1 = $dns_servidor['client_id']; + /*$valor_recuperado2 = $dns_servidor['default_dnsserver']; + $valor_recuperado3 = $dns_servidor['default_webserver']; +*/ + // Insert the soa record + $sys_userid = $_SESSION['s']['user']['userid']; + $origin = $vars['origin']; + $ns = $vars['ns']; + $mbox = str_replace('@', '.', $vars['mbox']); + $refresh = $vars['refresh']; + $retry = $vars['retry']; + $expire = $vars['expire']; + $minimum = $vars['minimum']; + $ttl = $vars['ttl']; + $xfer = $vars['xfer']; + $also_notify = $vars['also_notify']; + $update_acl = $vars['update_acl']; + $serial = $app->validate_dns->increase_serial(0); + + $insert_data = array( + "sys_userid" => $sys_userid, + "sys_groupid" => $client_group_id, + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', + "sys_perm_other" => '', + "server_id" => $dns_servidor['default_dnsserver'], + "origin" => $origin, + "ns" => $ns, + "mbox" => $mbox, + "serial" => $serial, + "refresh" => $refresh, + "retry" => $retry, + "expire" => $expire, + "minimum" => $minimum, + "ttl" => $ttl, + "active" => 'Y', + "xfer" => $xfer, + "also_notify" => $also_notify, + "update_acl" => $update_acl, + "dnssec_wanted" => $enable_dnssec + ); + $dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id'); + + // Insert the dns_rr records + if(is_array($dns_rr) && $dns_soa_id > 0) { + foreach($dns_rr as $rr) { + $insert_data = array( + "sys_userid" => $sys_userid, + "sys_groupid" => $client_group_id, + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', + "sys_perm_other" => '', + "server_id" => $dns_servidor['default_dnsserver'], + "zone" => $dns_soa_id, + "name" => $rr['name'], + "type" => $rr['type'], + "data" => $rr['data'], + "aux" => $rr['aux'], + "ttl" => $rr['ttl'], + "active" => 'Y' + ); + $dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id'); + } + } + //sites_web_domain_add + $tform_def_file = "../sites/form/web_vhost_domain.tform.php"; + $app->tform->loadFormDef($tform_def_file); + + //$app->remoting_lib->loadFormDef($tform_def_file); + + // add site + $paramsite = array( + 'type' => 'vhost', + 'domain' => $fields['domain'], + 'server_id' => $dns_servidor['default_webserver'], + 'ip_address' => '*', //$dns_ip_servidor['ip_address'], + 'ipv6_address' => $dns_ip_servidor_ipv6['ip_address'], + 'traffic_quota' => '-1', + 'hd_quota' => '0', + 'cgi' => 'y', + 'ssi' => 'y', + 'suexec' => 'y', + 'ruby' => 'n', + 'python' => 'n', + 'perl' => 'n', + 'errordocs' => '1', + 'subdomain' => 'www', + 'php' => 'php-fpm', + 'fastcgi_php_version' => '', + 'seo_redirect' => '', + 'rewrite_to_https' => 'n', + 'allow_override' => 'All', + 'http_port' => 80, + 'https_port' => 443, + 'apache_directives' => '', + 'nginx_directives' => '', + 'php_fpm_use_socket' => 'y', + 'pm' => 'ondemand', + 'pm_max_children' => 10, + 'pm_start_servers' => 1, + 'pm_min_spare_servers' => 1, + 'pm_max_spare_servers' => 5, + 'pm_process_idle_timeout' => 10, + 'pm_max_requests' => 0, + 'custom_php_ini' => '', + 'active' => 'y', + 'document_root' => '-', + 'system_user' => '-', + 'system_group' => '-', + 'log_retention' => 30, + 'client_group_id' => $client_group_id, + ); + + //El último parámetro es para lanzar un evento que llama a la función on_after_insert que prepara los campos document_root, system_user y system_group + $site_id = $remote->insert_query('../sites/form/web_vhost_domain.tform.php', $fields['client_id'], $paramsite, 'sites:web_vhost_domain:on_after_insert'); + + // get site data + $app->uses('remoting_lib'); + $app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php'); + $site_data = $app->remoting_lib->getDataRecord($site_id); + + //$remote->insert_query('../sites/form/web_vhost_domain.tform.php', $fields['client_id'], $paramsite); + + //Si todo va bien, el resultado + echo '

Altas Web y DNS del dominio '.$fields['domain'].', ¡Creadas correctamente!
'; + + + //parent::onSubmit(); + } + +} + +class remote_actions extends remoting { + public function insert_query($formdef_file, $client_id, $params, $event_identifier = '') { + return $this->insertQuery($formdef_file, $client_id, $params, $event_identifier); + } +} + +$page = new page_action; +$page->onLoad(); diff --git a/templates/new_service_webdns.htm b/templates/new_service_webdns.htm new file mode 100644 index 0000000..4be4380 --- /dev/null +++ b/templates/new_service_webdns.htm @@ -0,0 +1,429 @@ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ + +
+
+ + + \ No newline at end of file diff --git a/webdns_db.sql b/webdns_db.sql new file mode 100644 index 0000000..b2d311c --- /dev/null +++ b/webdns_db.sql @@ -0,0 +1,37 @@ +/* +Copyright (c) 2017, David Ramos García, Open6Hosting +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*CONFIGURACIÓN WEBDNS*/ +USE `dbispconfig`; + +INSERT INTO `dns_template` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES +(1, 1, 'riud', 'riud', '', 'webdns', 'DOMAIN,IP,IPV6,NS1,NS2,EMAIL', '[ZONE]\r\norigin={DOMAIN}.\r\nns=119.open6servers.com.\r\nmbox=soporte@open6hosting.com.\r\nrefresh=7200\r\nretry=540\r\nexpire=604800\r\nminimum=3600\r\nttl=3600\r\n\r\n[DNS_RECORDS]\r\nA|{DOMAIN}.|{IP}|0|3600\r\nA|www|{IP}|0|3600\r\nA|mail|{IP}|0|3600\r\nA|smtp|{IP}|0|3600\r\nA|ftp|{IP}|0|3600\r\nNS|{DOMAIN}.|119.open6servers.com.|0|3600\r\nNS|{DOMAIN}.|119a.open6servers.com.|0|3600\r\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\r\nTXT|{DOMAIN}.|v=spf1 mx a ip6:{IPV6}/64 -all|0|3600\r\nAAAA|{DOMAIN}.|{IPV6}|0|3600\r\nAAAA|www|{IPV6}|0|3600\r\nAAAA|ftp|{IPV6}|0|3600\r\nAAAA|smtp|{IPV6}|0|3600\r\nAAAA|mail|{IPV6}|0|3600', 'Y'); + + + +