1417 lines
41 KiB
Plaintext
1417 lines
41 KiB
Plaintext
|
#!/usr/bin/perl -wT
|
||
|
|
||
|
#----------------------------------------------------------------------
|
||
|
# heading : Configuration
|
||
|
# description : ddclient
|
||
|
# navigation : 3000 3400
|
||
|
#----------------------------------------------------------------------
|
||
|
#----------------------------------------------------------------------
|
||
|
# copyright (C) 2002 Mitel Networks Corporation
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software
|
||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
#
|
||
|
# Technical support for this program is available from Mitel Networks
|
||
|
# Please visit our web site www.mitel.com/sme/ for details.
|
||
|
#----------------------------------------------------------------------
|
||
|
|
||
|
#package esmith;
|
||
|
|
||
|
use strict;
|
||
|
use CGI ':all';
|
||
|
use CGI::Carp qw(fatalsToBrowser);
|
||
|
use esmith::FormMagick;
|
||
|
|
||
|
my $fm = esmith::FormMagick->new();
|
||
|
$fm->parse_xml();
|
||
|
|
||
|
use esmith::cgi;
|
||
|
use esmith::util;
|
||
|
use esmith::ConfigDB;
|
||
|
use esmith::AccountsDB;
|
||
|
|
||
|
sub showInitial ($$);
|
||
|
sub genContentMenu ($$);
|
||
|
sub createDomain ($);
|
||
|
sub performCreateDomain ($);
|
||
|
sub modifyDomain ($);
|
||
|
sub performModifyDomain ($);
|
||
|
sub deleteDomain ($);
|
||
|
sub performDeleteDomain ($);
|
||
|
sub ddcreateDomain ($);
|
||
|
sub ddperformCreateDomain ($);
|
||
|
sub ddmodifyDomain ($);
|
||
|
sub ddperformModifyDomain ($);
|
||
|
sub dddeleteDomain ($);
|
||
|
sub ddperformDeleteDomain ($);
|
||
|
sub genServer ($$);
|
||
|
|
||
|
sub genRetrieve($$);
|
||
|
sub genRetrieveMethod($$);
|
||
|
sub performRetrieve($);
|
||
|
|
||
|
#######################################################################
|
||
|
BEGIN
|
||
|
{
|
||
|
# Clear PATH and related environment variables so that calls to
|
||
|
# external programs do not cause results to be tainted. See
|
||
|
# "perlsec" manual page for details.
|
||
|
|
||
|
$ENV {'PATH'} = '';
|
||
|
$ENV {'SHELL'} = '/bin/bash';
|
||
|
delete $ENV {'ENV'};
|
||
|
}
|
||
|
|
||
|
esmith::util::setRealToEffective ();
|
||
|
|
||
|
$CGI::POST_MAX=1024 * 100; # max 100K posts
|
||
|
$CGI::DISABLE_UPLOADS = 1; # no uploads
|
||
|
|
||
|
my $conf = esmith::ConfigDB->open() or die "Unable to open configuration db";
|
||
|
tie my %conf, 'esmith::config', '/home/e-smith/db/configuration';
|
||
|
if ( ! %conf) {
|
||
|
tie %conf, 'esmith::config', '/home/e-smith/configuration';
|
||
|
}
|
||
|
|
||
|
my $domaindb = esmith::ConfigDB->open('/home/e-smith/db/domains')
|
||
|
or die "Unable to open domains db";
|
||
|
my $edb;
|
||
|
|
||
|
$edb = esmith::ConfigDB->open('/home/e-smith/db/ddclient')
|
||
|
or $edb = esmith::ConfigDB->create('/home/e-smith/db/ddclient');
|
||
|
#------------------------------------------------------------
|
||
|
# examine state parameter and display the appropriate form
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $q = new CGI;
|
||
|
|
||
|
if (! grep (/^state$/, $q->param))
|
||
|
{
|
||
|
showInitial ($q, '');
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "create")
|
||
|
{
|
||
|
createDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "performCreate")
|
||
|
{
|
||
|
performCreateDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "modify")
|
||
|
{
|
||
|
modifyDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "performModify")
|
||
|
{
|
||
|
performModifyDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "delete")
|
||
|
{
|
||
|
deleteDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "performDelete")
|
||
|
{
|
||
|
performDeleteDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "ddcreate") {
|
||
|
ddcreateDomain ($q);
|
||
|
}
|
||
|
elsif ($q->param ('state') eq "ddperformCreate") {
|
||
|
ddperformCreateDomain ($q);
|
||
|
}
|
||
|
elsif ($q->param ('state') eq "ddmodify") {
|
||
|
ddmodifyDomain ($q);
|
||
|
}
|
||
|
elsif ($q->param ('state') eq "ddperformModify") {
|
||
|
ddperformModifyDomain ($q);
|
||
|
}
|
||
|
elsif ($q->param ('state') eq "dddelete") {
|
||
|
dddeleteDomain ($q);
|
||
|
}
|
||
|
elsif ($q->param ('state') eq "ddperformDelete") {
|
||
|
ddperformDeleteDomain ($q);
|
||
|
}
|
||
|
|
||
|
elsif ($q->param ('state') eq "performRetrieve") {
|
||
|
performRetrieve($q);
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
esmith::cgi::genStateError ($q, \%conf);
|
||
|
}
|
||
|
|
||
|
exit (0);
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# subroutine to display initial form
|
||
|
#------------------------------------------------------------
|
||
|
sub get_dns_labels {
|
||
|
#
|
||
|
# dns service names from ddclient
|
||
|
#
|
||
|
# Better here would be to extract this list from the ddclient package.
|
||
|
my $Labels = (
|
||
|
[
|
||
|
'CUSTOMDNS' ,
|
||
|
'DYNDNS1' ,
|
||
|
'DYNDNS2' ,
|
||
|
'DYNDNS3' ,
|
||
|
'ZONEDIT' ,
|
||
|
'EASYDNS' ,
|
||
|
'HAMMER' ,
|
||
|
'DSLREPORTS' ,
|
||
|
'EURODYNDNS' ,
|
||
|
'DTDNS' ,
|
||
|
'LOOPIA' ,
|
||
|
'DNSPARK' ,
|
||
|
'DYNHOST' ,
|
||
|
'NOIP' ,
|
||
|
'CHANGEIP' ,
|
||
|
'NAMECHEAP' ,
|
||
|
'SPDNS' ,
|
||
|
'SITELUTIONS',
|
||
|
'FREEDNS',
|
||
|
'NSUPDATE',
|
||
|
'CLOUDFLARE',
|
||
|
'GOOGLEDOMAINS',
|
||
|
'DUCKDNS',
|
||
|
'FREEMYIP',
|
||
|
'WOIMA',
|
||
|
'YANDEX',
|
||
|
'DNSMADEEASY',
|
||
|
'DONDOMINIO',
|
||
|
'NFSN',
|
||
|
'OVH',
|
||
|
'CLOUDNS'
|
||
|
]
|
||
|
);
|
||
|
return $Labels;
|
||
|
}
|
||
|
|
||
|
|
||
|
sub genServer ($$)
|
||
|
{
|
||
|
my ($q, $curSetting) = @_;
|
||
|
|
||
|
if ((! defined $curSetting) || ($curSetting eq ''))
|
||
|
{
|
||
|
$curSetting = 'dyndns1';
|
||
|
}
|
||
|
|
||
|
my $Labels = get_dns_labels();
|
||
|
# Create translated description for them
|
||
|
my %LabelDescriptions;
|
||
|
foreach my $lab (@$Labels){
|
||
|
$LabelDescriptions{$lab}= $fm->localise($lab);
|
||
|
};
|
||
|
return esmith::cgi::genCell ($q, $q->popup_menu (-name => 'dns',
|
||
|
-values => $Labels,
|
||
|
-default => $curSetting,
|
||
|
-labels => \%LabelDescriptions));
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
sub genRetrieve($$) {
|
||
|
my ($q, $curSetting) = @_;
|
||
|
|
||
|
if ((! defined $curSetting) || ($curSetting eq ''))
|
||
|
{
|
||
|
$curSetting = 'yes';
|
||
|
}
|
||
|
|
||
|
my %Labels = (
|
||
|
'yes' => $fm->localise('yes'),
|
||
|
'no' => $fm->localise('no'),
|
||
|
);
|
||
|
|
||
|
return esmith::cgi::genCell ($q, $q->popup_menu (-name => 'retrievessl',
|
||
|
-values => [
|
||
|
'yes','no'
|
||
|
],
|
||
|
-default => $curSetting,
|
||
|
-labels => \%Labels));
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
sub genRetrieveMethod($$) {
|
||
|
my ($q, $curSetting) = @_;
|
||
|
|
||
|
if ((! defined $curSetting) || ($curSetting eq ''))
|
||
|
{
|
||
|
$curSetting = 'web';
|
||
|
}
|
||
|
|
||
|
my %Labels = (
|
||
|
'smeIF' => $fm->localise('SME external interface'),
|
||
|
'smeCMD' => $fm->localise('SME configuration DB'),
|
||
|
'web' => $fm->localise('web'),
|
||
|
'if' => $fm->localise('Interface'),
|
||
|
'ip' => $fm->localise('IP'),
|
||
|
'cmd' => $fm->localise('Command'),
|
||
|
);
|
||
|
|
||
|
return esmith::cgi::genCell ($q, $q->popup_menu (-name => 'retrievemethod',
|
||
|
-values => [
|
||
|
'smeIF','smeCMD','web','if','ip','cmd'
|
||
|
],
|
||
|
-default => $curSetting,
|
||
|
-labels => \%Labels));
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
sub showInitial ($$)
|
||
|
{
|
||
|
my ($q, $msg) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# If there's a message, we just finished an operation so show the
|
||
|
# status report. If no message, this is a new list of domains.
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
if ($msg eq '')
|
||
|
{
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf, $fm->localise('FORM_TITLE'));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf, $fm->localise('OPERATION_STATUS_REPORT'));
|
||
|
print $q->p ($msg);
|
||
|
print $q->hr;
|
||
|
}
|
||
|
|
||
|
print $q->p ($fm->localise('FORM_DESCRIPTION'));
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# get the ip retrieve method
|
||
|
#------------------------------------------------------------
|
||
|
my $ddretrieve=$conf->get('ddclient');
|
||
|
my $ExtIF=$conf->get('ExternalInterface');
|
||
|
my $DeamonUpdate=$ddretrieve->prop('DeamonUpdate')|| '300';
|
||
|
my $urlcheckip=$ddretrieve->prop('urlcheckip')|| 'checkip.dyndns.org';
|
||
|
my $ssl=$ddretrieve->prop('SSL')|| 'yes';
|
||
|
my $method=$ddretrieve->prop('method')||'web';
|
||
|
my $Extinterface=$ddretrieve->prop('Extinterface')||'';
|
||
|
my $cmd=$ddretrieve->prop('cmd')||'';
|
||
|
my $forceIP=$ddretrieve->prop('ForceIP')||'';
|
||
|
|
||
|
print $q->startform (-method => 'POST',
|
||
|
-action => $q->url (-absolute => 1));
|
||
|
|
||
|
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||
|
$q->Tr (esmith::cgi::genCell($q,
|
||
|
$fm->localise('RETRIEVE_SSL').":", 'sme-noborders-label' ),
|
||
|
genRetrieve($q,$ssl)),
|
||
|
# esmith::cgi::genWidgetRow ($q, $fm->localise('RETRIEVE_SSL')),
|
||
|
# $q->popup_menu (-name => 'SSL',
|
||
|
# -values => ['yes', 'no'],
|
||
|
# -default => $ssl),
|
||
|
# -labels => \%status)) ,
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_DEAMONUPDATE'),
|
||
|
"retrievedeamonupdate",$DeamonUpdate)),
|
||
|
$q->Tr (esmith::cgi::genCell ($q,$fm->localise('RETRIEVE_METHOD').":", 'sme-noborders-label' ),
|
||
|
genRetrieveMethod($q,$method)),
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_IF'),
|
||
|
"retrieveinterface",$Extinterface)),
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_CMD'),
|
||
|
"retrievecmd",$cmd)),
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_IP'),
|
||
|
"retrieveip",$forceIP)),
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_URLCHECKIP'),
|
||
|
"retrieveurlcheckip",$urlcheckip)),
|
||
|
esmith::cgi::genButtonRow ( $q,
|
||
|
$q->submit (-name => 'action',
|
||
|
-value => $fm->localise('APPLY')))
|
||
|
);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'performRetrieve');
|
||
|
|
||
|
print $q->endform;
|
||
|
print $q->hr;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Look up domains and domain descriptions
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $key;
|
||
|
my @virtualDomains = ();
|
||
|
foreach my $domain ($domaindb->get_all_by_prop(type=>'domain'))
|
||
|
{
|
||
|
$key = $domain->key;
|
||
|
push (@virtualDomains, $key);
|
||
|
}
|
||
|
|
||
|
print $q->p ($fm->localise('FORM_DESCRIPTION'));
|
||
|
|
||
|
my $numDomains = @virtualDomains;
|
||
|
if ($numDomains == 0)
|
||
|
{
|
||
|
print $q->p ($q->b ($fm->localise('NO_VIRTUAL_DOMAINS')));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print $q->p ($q->b ($fm->localise('CURRENT_LIST_OF_DOMAINS')));
|
||
|
|
||
|
print $q->table ({border => 1, cellspacing => 1, cellpadding => 4});
|
||
|
|
||
|
print $q->Tr (esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('DOMAIN'))),
|
||
|
esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('DESCRIPTION'))),
|
||
|
esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('CONTENT', ))),
|
||
|
esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('PUBLICATION', ))),
|
||
|
$q->td (' '),
|
||
|
$q->td (' '));
|
||
|
|
||
|
my $domain;
|
||
|
foreach $domain (sort @virtualDomains)
|
||
|
{
|
||
|
my %properties = $domaindb->get($domain)->props;
|
||
|
|
||
|
my $test=$domaindb->get($domain) || '';
|
||
|
|
||
|
my %extraprops;
|
||
|
if($test ne '')
|
||
|
{
|
||
|
%extraprops = $domaindb->get($domain)->props;
|
||
|
}
|
||
|
|
||
|
my $content;
|
||
|
if ($properties{'Content'} eq 'wwwpublic')
|
||
|
{
|
||
|
$content = $fm->localise('PRIMARY_SITE');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$content = $fm->localise('CONTENT',
|
||
|
{content => $properties{'Content'}});
|
||
|
}
|
||
|
|
||
|
my $public;
|
||
|
if ($test eq '')
|
||
|
{
|
||
|
print $q->Tr (esmith::cgi::genSmallCell ($q, $domain),
|
||
|
esmith::cgi::genSmallCell ($q, $properties{'Description'}),
|
||
|
esmith::cgi::genSmallCell ($q, $content),
|
||
|
esmith::cgi::genSmallCell ($q, ' '),
|
||
|
esmith::cgi::genSmallCell ($q, ' '),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=create&domain="
|
||
|
. $domain}, $fm->localise('CREATE', ))),
|
||
|
esmith::cgi::genSmallCell ($q, ' ')
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print $q->Tr (esmith::cgi::genSmallCell ($q, $domain),
|
||
|
esmith::cgi::genSmallCell ($q, $properties{'Description'}),
|
||
|
esmith::cgi::genSmallCell ($q, $content),
|
||
|
esmith::cgi::genSmallCell ($q, $fm->localise($extraprops{'dns'})),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=modify&domain="
|
||
|
. $domain}, $fm->localise('MODIFY', ))),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=delete&domain="
|
||
|
. $domain}, $fm->localise('DELETE', )))
|
||
|
);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
print '</table>';
|
||
|
}
|
||
|
print $q->hr;
|
||
|
#########################################################################################################################################
|
||
|
# now the free form part
|
||
|
#
|
||
|
my @FreeDomains = ();
|
||
|
foreach my $domain ($edb->get_all_by_prop(type=>'ddhost'))
|
||
|
{
|
||
|
my $key = $domain->key;
|
||
|
push (@FreeDomains, $key);
|
||
|
}
|
||
|
|
||
|
print $q->p ($fm->localise('FREE_FORM_DESCRIPTION'));
|
||
|
|
||
|
$numDomains = @FreeDomains;
|
||
|
|
||
|
print $q->p ($q->b ($fm->localise('CURRENT_LIST_OF_DOMAINS')));
|
||
|
|
||
|
print $q->table ({border => 1, cellspacing => 1, cellpadding => 4});
|
||
|
|
||
|
print $q->Tr (esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('DOMAIN'))),
|
||
|
esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('DESCRIPTION'))),
|
||
|
esmith::cgi::genSmallCell ($q, $q->b ($fm->localise('PUBLICATION'))),
|
||
|
$q->td (' '),
|
||
|
$q->td (' ')
|
||
|
);
|
||
|
|
||
|
if ( $numDomains > 0 ) {
|
||
|
foreach my $domain (sort @FreeDomains) {
|
||
|
my $vals = $edb->get($domain);
|
||
|
my $content = $vals->prop('desc');
|
||
|
my $publish = $fm->localise($vals->prop('dns'));
|
||
|
print $q->Tr (esmith::cgi::genSmallCell ($q, $domain),
|
||
|
esmith::cgi::genSmallCell ($q, $content),
|
||
|
esmith::cgi::genSmallCell ($q, $publish),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=ddmodify&domain="
|
||
|
. $domain}, $fm->localise('MODIFY', ))),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=dddelete&domain="
|
||
|
. $domain}, $fm->localise('DELETE', )))
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
print $q->Tr (($q->td(' ')),
|
||
|
($q->td(' ')),
|
||
|
($q->td(' ')),
|
||
|
($q->td(' ')),
|
||
|
esmith::cgi::genSmallCell ($q,
|
||
|
$q->a ({href => $q->url (-absolute => 1)
|
||
|
. "?state=ddcreate"}, $fm->localise('CREATE', )))
|
||
|
);
|
||
|
print '</table>';
|
||
|
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub genContentMenu ($$)
|
||
|
{
|
||
|
my ($q, $currentSetting) = @_;
|
||
|
|
||
|
if ((! defined $currentSetting) || ($currentSetting eq ''))
|
||
|
{
|
||
|
$currentSetting = 'wwwpublic'; # this chooses the primary web site
|
||
|
}
|
||
|
|
||
|
my $acctdb = esmith::AccountsDB->open();
|
||
|
|
||
|
my %labels = ();
|
||
|
my @values = ();
|
||
|
|
||
|
foreach my $ibay ($acctdb->get_all_by_prop(type=>'ibay'))
|
||
|
{
|
||
|
my $key = $ibay->key;
|
||
|
my %properties = $ibay->props;
|
||
|
$labels {$key} = $properties {'Name'};
|
||
|
}
|
||
|
|
||
|
@values = sort (keys %labels);
|
||
|
|
||
|
$labels {'wwwpublic'} = $fm->localise('PRIMARY_SITE');
|
||
|
unshift @values, 'wwwpublic';
|
||
|
|
||
|
return esmith::cgi::genCell ($q, $q->popup_menu (-name => 'domainContent',
|
||
|
-values => \@values,
|
||
|
-default => $currentSetting,
|
||
|
-labels => \%labels));
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
sub performRetrieve($) {
|
||
|
my ($q) = @_;
|
||
|
my $deamonupdate =$q->param('retrievedeamonupdate');
|
||
|
my $urlcheckip =$q->param('retrieveurlcheckip');
|
||
|
my $ssl = $q->param('retrievessl');
|
||
|
my $retrievemethod = $q->param('retrievemethod');
|
||
|
my $retrieveinterface = $q->param('retrieveinterface');
|
||
|
my $retrievecmd = $q->param('retrievecmd');
|
||
|
my $retrieveip = $q->param('retrieveip');
|
||
|
|
||
|
my $ddclient=$conf->get('ddclient');
|
||
|
$ddclient->set_prop('urlcheckip' => $urlcheckip);
|
||
|
$ddclient->set_prop('DeamonUpdate' => $deamonupdate);
|
||
|
$ddclient->set_prop('SSL' => $ssl);
|
||
|
$ddclient->set_prop('method' => $retrievemethod);
|
||
|
$ddclient->set_prop('Extinterface' => $retrieveinterface );
|
||
|
$ddclient->set_prop('cmd' => $retrievecmd);
|
||
|
$ddclient->set_prop('ForceIP' => $retrieveip);
|
||
|
|
||
|
$domaindb->reload();
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "smeserver-ddclient-update");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_MODIFIED_RETRIEVE_IP'));
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
sub createDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
my $domain=$q->param('domain');
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable
|
||
|
($q, \%conf, $fm->localise('CREATE_TITLE'));
|
||
|
|
||
|
my %properties = $domaindb->get($domain)->props;
|
||
|
|
||
|
my $test=$domaindb->get($domain) || '';
|
||
|
|
||
|
my %extraprops;
|
||
|
if($test ne '')
|
||
|
{
|
||
|
%extraprops = $domaindb->get($domain)->props;
|
||
|
}
|
||
|
|
||
|
my $content;
|
||
|
if ($properties{'Content'} eq 'wwwpublic')
|
||
|
{
|
||
|
$content = $fm->localise('PRIMARY_SITE');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$content = $fm->localise('CONTENT',
|
||
|
{content => $properties{'Content'}});
|
||
|
}
|
||
|
|
||
|
|
||
|
print $q->startform (-method => 'POST',
|
||
|
-action => $q->url (-absolute => 1));
|
||
|
|
||
|
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q,$fm->localise('DOMAIN_NAME')),
|
||
|
esmith::cgi::genCell ($q,$q->b($domain))),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell($q,$fm->localise('DESCRIPTION_BRIEF')),
|
||
|
esmith::cgi::genCell($q,$properties{'Description'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q,$fm->localise('CONTENT')),
|
||
|
esmith::cgi::genCell ($q, $q->b($content))),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q, $fm->localise('SERVERS_LABEL')),
|
||
|
genServer($q, $extraprops{'dns'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('NAME_LABEL'),
|
||
|
"login","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('PASSWORD_LABEL'),
|
||
|
"password","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('MX'),
|
||
|
"mx","")),
|
||
|
|
||
|
esmith::cgi::genButtonRow ( $q,
|
||
|
$q->submit (-name => 'action',
|
||
|
-value => $fm->localise('CREATE'))));
|
||
|
|
||
|
print $q->hidden (-name => 'domainName',
|
||
|
-override => 1,
|
||
|
-default => $domain);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'performCreate');
|
||
|
|
||
|
print $q->endform;
|
||
|
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub performCreateDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Validate parameters and untaint them
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domainName = $q->param ('domainName');
|
||
|
if ($domainName =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$domainName = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainLogin = $q->param ('login');
|
||
|
if ($domainLogin =~ /^([\-\'\w][\-\'\w\s\.\@]*)$/)
|
||
|
{
|
||
|
$domainLogin = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_LOGIN_VALIDATION_ERROR',
|
||
|
{domainLogin => $domainLogin}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainPassword = $q->param ('password');
|
||
|
if ($domainPassword =~ /^(.*)$/)
|
||
|
{
|
||
|
$domainPassword = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_PASSWORD_VALIDATION_ERROR',
|
||
|
{domainPassword => $domainPassword}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainMX = $q->param ('mx');
|
||
|
#------------------------------------------------------------
|
||
|
# Looks good. Find out if this domain has been taken
|
||
|
# or if the domain is a reserved to provide a secured webserver
|
||
|
# for a previous domain
|
||
|
#------------------------------------------------------------
|
||
|
my $dns = $q->param ('dns');
|
||
|
|
||
|
my %properties = ();
|
||
|
$properties{'type'} = 'domain';
|
||
|
$properties{'dns'} = $dns;
|
||
|
$properties{'login'} = $domainLogin;
|
||
|
$properties{'password'} = $domainPassword;
|
||
|
$properties{'mx'} = $domainMX;
|
||
|
|
||
|
$domaindb->new_record($domainName, \%properties);
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-create");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_CREATED',
|
||
|
{domainName => $domainName,dns => $fm->localise($dns) }));
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub modifyDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf,
|
||
|
$fm->localise('MODIFY_TITLE'));
|
||
|
|
||
|
print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1));
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
my $value = $domaindb->get($domain);
|
||
|
my $evalue = $domaindb->get($domain);
|
||
|
|
||
|
if ($value)
|
||
|
{
|
||
|
my %properties = $value->props;
|
||
|
my %eprops = $evalue->props;
|
||
|
my $content;
|
||
|
if ($properties{'Content'} eq 'wwwpublic')
|
||
|
{
|
||
|
$content = $fm->localise('PRIMARY_SITE');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$content = $fm->localise('CONTENT',
|
||
|
{content => $properties{'Content'}});
|
||
|
}
|
||
|
|
||
|
print $q->h3 ($fm->localise('CUSTOM_DESCRIPTION'));
|
||
|
print $q->p;
|
||
|
|
||
|
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||
|
$q->Tr (esmith::cgi::genCell ($q,
|
||
|
$fm->localise('DOMAIN_NAME')),
|
||
|
esmith::cgi::genCell ($q, $domain)),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q,
|
||
|
$fm->localise('DESCRIPTION_BRIEF')),
|
||
|
esmith::cgi::genCell ($q, $properties {'Description'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q,
|
||
|
$fm->localise('CONTENT')),
|
||
|
esmith::cgi::genCell ($q, $content)),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q, $fm->localise('SERVERS_LABEL')),
|
||
|
genServer($q, $eprops{'dns'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOMDNS_LABEL'),
|
||
|
"customdns",
|
||
|
$eprops{'customdns'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOM_PROTOCOL_LABEL'),
|
||
|
"customprotocol",
|
||
|
$eprops{'customprotocol'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('NAME_LABEL'),
|
||
|
"login",
|
||
|
$eprops{'login'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('PASSWORD_LABEL'),
|
||
|
"password",
|
||
|
$eprops{'password'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('MX'),
|
||
|
"mx",$eprops{'mx'})),
|
||
|
|
||
|
esmith::cgi::genButtonRow ($q,
|
||
|
$q->submit (-name => 'action',
|
||
|
-value => $fm->localise('MODIFY'))));
|
||
|
|
||
|
print $q->hidden (-name => 'domainName',
|
||
|
-override => 1,
|
||
|
-default => $domain);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'performModify');
|
||
|
|
||
|
}
|
||
|
|
||
|
print $q->endform;
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub performModifyDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Validate parameters and untaint them
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domainName = $q->param ('domainName');
|
||
|
if ($domainName =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$domainName = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainLogin = $q->param ('login');
|
||
|
if ($domainLogin =~ /^([\-\'\w][\-\'\w\s\.\@]*)$/)
|
||
|
{
|
||
|
$domainLogin = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_LOGIN_VALIDATION_ERROR',
|
||
|
{domainLogin => $domainLogin}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainPassword = $q->param ('password');
|
||
|
if ($domainPassword =~ /^(.*)$/)
|
||
|
{
|
||
|
$domainPassword = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('DOMAIN_PASSWORD_VALIDATION_ERROR',
|
||
|
{domainPassword => $domainPassword}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainMX = $q->param ('mx');
|
||
|
my $customDNS = $q->param('customdns');
|
||
|
my $customPROTOCOL = $q->param('customprotocol');
|
||
|
|
||
|
my $dns = $q->param ('dns');
|
||
|
if ($dns eq 'CUSTOMDNS')
|
||
|
{
|
||
|
if ($customDNS =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$customDNS = $1;
|
||
|
}
|
||
|
else
|
||
|
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('CUSTOMDNS_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
# Looks good. Find out if this domain has been taken
|
||
|
# or if the domain is a reserved to provide a secured webserver
|
||
|
# for a previous domain
|
||
|
#------------------------------------------------------------
|
||
|
# my $dns = $q->param ('dns');
|
||
|
|
||
|
my $dom=$domaindb->get($domainName);
|
||
|
|
||
|
$dom->set_prop('dns' => $dns);
|
||
|
$dom->set_prop('login' => $domainLogin);
|
||
|
$dom->set_prop('password' => $domainPassword);
|
||
|
$dom->set_prop('mx' => $domainMX);
|
||
|
$dom->set_prop('customdns' => $customDNS);
|
||
|
$dom->set_prop('customprotocol' => $customPROTOCOL);
|
||
|
|
||
|
$domaindb->reload();
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-modify");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_MODIFIED',
|
||
|
{domainName => $domainName,dns => $fm->localise($dns)}));
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub deleteDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf, $fm->localise('REMOVE_TITLE'));
|
||
|
|
||
|
print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1));
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
my $value = $domaindb->get($domain);
|
||
|
my $evalue = $domaindb->get($domain);
|
||
|
|
||
|
if ($value)
|
||
|
{
|
||
|
my %properties = $value->props;
|
||
|
my $type = $properties{'type'};
|
||
|
my $domainDesc = $properties{'Description'};
|
||
|
my %eprops = $evalue->props;
|
||
|
my $dns=$fm->localise($eprops{'dns'});
|
||
|
|
||
|
print $q->p($fm->localise('REMOVE_DESCRIPTION',
|
||
|
{domain => $domain,
|
||
|
domainDesc => $domainDesc,
|
||
|
dns => $dns } ));
|
||
|
|
||
|
print $q->submit (-name => 'action', -value => $fm->localise('REMOVE'));
|
||
|
print $q->hidden (-name => 'domain', -override => 1, -default => $domain);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'performDelete');
|
||
|
}
|
||
|
|
||
|
print $q->endform;
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub performDeleteDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Attempt to delete domain
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
|
||
|
if ($domain =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$domain = $1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('ERROR_WHILE_REMOVING_DOMAIN',
|
||
|
{domain => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $value = $domaindb->get($domain);
|
||
|
unless ($value)
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('NONEXISTENT_DOMAIN_ERROR',
|
||
|
{domainName => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my %properties = $value->props;
|
||
|
my $type = $properties{'type'};
|
||
|
if ($type ne 'domain')
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('NONEXISTENT_DOMAIN_ERROR',
|
||
|
{domainName => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $evalue = $domaindb->get($domain);
|
||
|
my %props = $evalue->props;
|
||
|
my $dns = $fm->localise($props{'dns'});
|
||
|
|
||
|
$evalue->set_prop('dns' => '');
|
||
|
$evalue->set_prop('login' => '');
|
||
|
$evalue->set_prop('password' => '');
|
||
|
$evalue->set_prop('customdns' => '');
|
||
|
$evalue->set_prop('customprotocol' => '');
|
||
|
|
||
|
$domaindb->reload();
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-delete");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_DELETED',
|
||
|
{domain => $domain, dns => $dns}));
|
||
|
}
|
||
|
|
||
|
#######################################################################
|
||
|
# create a free publish
|
||
|
#
|
||
|
sub ddcreateDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable
|
||
|
($q, \%conf, $fm->localise('CREATE_TITLE'));
|
||
|
|
||
|
print $q->startform (-method => 'POST',
|
||
|
-action => $q->url (-absolute => 1));
|
||
|
print $q->h3 ($fm->localise('CUSTOM_DESCRIPTION'));
|
||
|
print $q->p;
|
||
|
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('DOMAIN_NAME_LABEL'),
|
||
|
"domainName","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow($q,$fm->localise('DESCRIPTION_LABEL'),
|
||
|
"desc","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q, $fm->localise('SERVERS_LABEL')),
|
||
|
genServer($q, '')),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOMDNS_LABEL'),
|
||
|
"customdns",'')),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOM_PROTOCOL_LABEL'),
|
||
|
"customprotocol",'')),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('NAME_LABEL'),
|
||
|
"login","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('PASSWORD_LABEL'),
|
||
|
"password","")),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('MX'),
|
||
|
"mx","")),
|
||
|
|
||
|
esmith::cgi::genButtonRow ( $q,
|
||
|
$q->submit (-name => 'action',
|
||
|
-value => $fm->localise('CREATE'))));
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'ddperformCreate');
|
||
|
|
||
|
print $q->endform;
|
||
|
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub ddperformCreateDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Validate parameters and untaint them
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domainName = $q->param ('domainName');
|
||
|
if ($domainName =~ /^([a-zA-Z0-9\-\.]+)$/) {
|
||
|
$domainName = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
###############################################
|
||
|
foreach my $domain ($domaindb->get_all_by_prop(type=>'domain'))
|
||
|
{
|
||
|
my $key = $domain->key;
|
||
|
if ( $key eq $domainName ) {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_ALREADY_EXIST',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach my $domain ($edb->get_all_by_prop(type=>'ddhost'))
|
||
|
{
|
||
|
my $key = $domain->key;
|
||
|
if ( $key eq $domainName ) {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_ALREADY_EXIST',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#############################################
|
||
|
|
||
|
my $domainDesc = $q->param ('desc');
|
||
|
my $domainLogin = $q->param ('login');
|
||
|
if ($domainLogin =~ /^([\-\'\w][\-\'\w\s\.\@]*)$/) {
|
||
|
$domainLogin = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_LOGIN_VALIDATION_ERROR',
|
||
|
{domainLogin => $domainLogin}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainPassword = $q->param ('password');
|
||
|
if ($domainPassword =~ /^(.*)$/) {
|
||
|
$domainPassword = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_PASSWORD_VALIDATION_ERROR',
|
||
|
{domainPassword => $domainPassword}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainMX = $q->param ('mx');
|
||
|
##Custom dns retrieve
|
||
|
my $customDNS = $q->param('customdns');
|
||
|
my $customPROTOCOL = $q->param('customprotocol');
|
||
|
|
||
|
my $dns = $q->param ('dns');
|
||
|
if ($dns eq 'CUSTOMDNS')
|
||
|
{
|
||
|
if ($customDNS =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$customDNS = $1;
|
||
|
}
|
||
|
else
|
||
|
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('CUSTOMDNS_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
# Looks good. Find out if this domain has been taken
|
||
|
# or if the domain is a reserved to provide a secured webserver
|
||
|
# for a previous domain
|
||
|
#------------------------------------------------------------
|
||
|
# my $dns = $q->param ('dns');
|
||
|
|
||
|
my %properties = ();
|
||
|
$properties{'type'} = 'ddhost';
|
||
|
$properties{'dns'} = $dns;
|
||
|
$properties{'login'} = $domainLogin;
|
||
|
$properties{'password'} = $domainPassword;
|
||
|
$properties{'mx'} = $domainMX;
|
||
|
$properties{'desc'} = $domainDesc;
|
||
|
$properties{'customdns'} = $customDNS;
|
||
|
$properties{'customprotocol'} = $customPROTOCOL;
|
||
|
$edb->new_record($domainName, \%properties);
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-create");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_CREATED',
|
||
|
{domainName => $domainName,dns => $fm->localise($dns) }));
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub ddmodifyDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf,
|
||
|
$fm->localise('MODIFY_TITLE'));
|
||
|
|
||
|
print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1));
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
my $evalue = $edb->get($domain);
|
||
|
|
||
|
if (defined $evalue)
|
||
|
{
|
||
|
my %eprops = $evalue->props;
|
||
|
|
||
|
print $q->h3 ($fm->localise('CUSTOM_DESCRIPTION'));
|
||
|
print $q->p;
|
||
|
|
||
|
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||
|
$q->Tr (esmith::cgi::genCell ($q, $fm->localise('DOMAIN_NAME_LABEL')),
|
||
|
esmith::cgi::genCell ($q, $domain)),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q, $fm->localise('DESCRIPTION_LABEL'),
|
||
|
"desc",
|
||
|
$eprops{'desc'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genCell ($q, $fm->localise('SERVERS_LABEL')),
|
||
|
genServer($q, $eprops{'dns'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOMDNS_LABEL'),
|
||
|
"customdns",
|
||
|
$eprops{'customdns'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('CUSTOM_PROTOCOL_LABEL'),
|
||
|
"customprotocol",
|
||
|
$eprops{'customprotocol'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('NAME_LABEL'),
|
||
|
"login",
|
||
|
$eprops{'login'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('PASSWORD_LABEL'),
|
||
|
"password",
|
||
|
$eprops{'password'})),
|
||
|
|
||
|
$q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('MX'),
|
||
|
"mx",$eprops{'mx'})),
|
||
|
|
||
|
esmith::cgi::genButtonRow ($q,
|
||
|
$q->submit (-name => 'action',
|
||
|
-value => $fm->localise('MODIFY')))
|
||
|
);
|
||
|
|
||
|
print $q->hidden (-name => 'domainName',
|
||
|
-override => 1,
|
||
|
-default => $domain);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'ddperformModify');
|
||
|
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('ERROR_ON_EXTRA_DATABASE',
|
||
|
{domainName => $domain }));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
print $q->endform;
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub ddperformModifyDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Validate parameters and untaint them
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domainName = $q->param ('domainName');
|
||
|
if ($domainName =~ /^([a-zA-Z0-9\-\.]+)$/) {
|
||
|
$domainName = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_NAME_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainLogin = $q->param ('login');
|
||
|
if ($domainLogin =~ /^([\-\'\w][\-\'\w\s\.\@]*)$/) {
|
||
|
$domainLogin = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_LOGIN_VALIDATION_ERROR',
|
||
|
{domainLogin => $domainLogin}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainPassword = $q->param ('password');
|
||
|
if ($domainPassword =~ /^(.*)$/) {
|
||
|
$domainPassword = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('DOMAIN_PASSWORD_VALIDATION_ERROR',
|
||
|
{domainPassword => $domainPassword}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $domainMX = $q->param ('mx');
|
||
|
my $desc = $q->param ('desc');
|
||
|
my $customDNS = $q->param('customdns');
|
||
|
my $customPROTOCOL = $q->param('customprotocol');
|
||
|
|
||
|
my $dns = $q->param ('dns');
|
||
|
|
||
|
if ($dns eq 'CUSTOMDNS')
|
||
|
{
|
||
|
if ($customDNS =~ /^([a-zA-Z0-9\-\.]+)$/)
|
||
|
{
|
||
|
$customDNS = $1;
|
||
|
}
|
||
|
else
|
||
|
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('CUSTOMDNS_VALIDATION_ERROR',
|
||
|
{domainName => $domainName}));
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
#------------------------------------------------------------
|
||
|
# Looks good. Find out if this domain has been taken
|
||
|
# or if the domain is a reserved to provide a secured webserver
|
||
|
# for a previous domain
|
||
|
#------------------------------------------------------------
|
||
|
# my $dns = $q->param ('dns');
|
||
|
|
||
|
my $dom=$edb->get($domainName);
|
||
|
|
||
|
$dom->set_prop('desc' => $desc);
|
||
|
$dom->set_prop('dns' => $dns);
|
||
|
$dom->set_prop('login' => $domainLogin);
|
||
|
$dom->set_prop('password' => $domainPassword);
|
||
|
$dom->set_prop('mx' => $domainMX);
|
||
|
$dom->set_prop('customdns' => $customDNS);
|
||
|
$dom->set_prop('customprotocol' => $customPROTOCOL);
|
||
|
|
||
|
$edb->reload();
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-modify");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_MODIFIED',
|
||
|
{domainName => $domainName,dns => $fm->localise($dns)}));
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub dddeleteDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
esmith::cgi::genHeaderNonCacheable ($q, \%conf, $fm->localise('REMOVE_TITLE'));
|
||
|
|
||
|
print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1));
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
my $evalue = $edb->get($domain);
|
||
|
|
||
|
if (defined $evalue)
|
||
|
{
|
||
|
my %eprops = $evalue->props;
|
||
|
my $domainDesc = $eprops{'desc'};
|
||
|
my $dns = $fm->localise($eprops{'dns'});
|
||
|
|
||
|
print $q->p($fm->localise('REMOVE_DESCRIPTION',
|
||
|
{domain => $domain,
|
||
|
domainDesc => $domainDesc,
|
||
|
dns => $dns } ));
|
||
|
|
||
|
print $q->submit (-name => 'action', -value => $fm->localise('REMOVE'));
|
||
|
print $q->hidden (-name => 'domain', -override => 1, -default => $domain);
|
||
|
|
||
|
print $q->hidden (-name => 'state',
|
||
|
-override => 1,
|
||
|
-default => 'ddperformDelete');
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('ERROR_ON_EXTRA_DATABASE',
|
||
|
{domainName => $domain }));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
print $q->endform;
|
||
|
esmith::cgi::genFooter ($q);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
#
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
sub ddperformDeleteDomain ($)
|
||
|
{
|
||
|
my ($q) = @_;
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Attempt to delete domain
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
my $domain = $q->param ('domain');
|
||
|
|
||
|
if ($domain =~ /^([a-zA-Z0-9\-\.]+)$/) {
|
||
|
$domain = $1;
|
||
|
} else {
|
||
|
showInitial ($q, $fm->localise('ERROR_WHILE_REMOVING_DOMAIN',
|
||
|
{domain => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my $evalue = $edb->get($domain);
|
||
|
unless ($evalue)
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('NONEXISTENT_DOMAIN_ERROR',
|
||
|
{domainName => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
my %properties = $evalue->props;
|
||
|
my $type = $properties{'type'};
|
||
|
my $dns = $fm->localise($properties{'dns'});
|
||
|
|
||
|
if ($type ne 'ddhost')
|
||
|
{
|
||
|
showInitial ($q, $fm->localise('NONEXISTENT_DOMAIN_ERROR',
|
||
|
{domainName => $domain}));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
# $evalue = $edb->get($domain);
|
||
|
$evalue->delete;
|
||
|
$edb->reload();
|
||
|
|
||
|
system ("/sbin/e-smith/signal-event", "domain-delete");
|
||
|
|
||
|
showInitial ($q, $fm->localise('SUCCESSFULLY_DELETED',
|
||
|
{domain => $domain, dns => $dns}));
|
||
|
}
|
||
|
|
||
|
#######################################################################
|
||
|
|
||
|
__DATA__
|
||
|
<form>
|
||
|
</form>
|