From 9917a827974426eff18d451fb22b60bc90fad64c Mon Sep 17 00:00:00 2001 From: Sergey Kiselev Date: Tue, 24 Jul 2018 17:15:01 +0500 Subject: [PATCH] =?UTF-8?q?yamd=20-=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yamd | 179 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 151 insertions(+), 28 deletions(-) diff --git a/yamd b/yamd index 0e598bd..426cb4e 100755 --- a/yamd +++ b/yamd @@ -46,104 +46,178 @@ use LWP::UserAgent; use HTTP::Request; our $api_url = "https://pddimp.yandex.ru/api2/admin"; -our $query_options = Load(<{$check}) { - die "'$check' is undefined in '$task_file'\n"; + die "'" . $check . "' is undefined in '" . $task_file . "'\n"; + } else { + if (!ref($task->{$check})) { + if ($task->{$check} =~ /^-?\d+\.?\d*/) { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; + } + } else { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; + } } } my $request_url = ""; my $request_type = ""; my $request_content_type = ""; +my $service = $task->{service}; +my $sub_service = $task->{sub_service}; +my $query = $task->{query}; +my $options = $task->{options}; +my $api_request = undef; +my @check_list; + +# Checking mandatory parameters of the request +if (defined $sub_service) { + $api_request = $api_requests->{$service}->{$sub_service}->{$query}; +} else { + $api_request = $api_requests->{$service}->{$query}; +} -{ - my $service = $task->{service}; - my $sub_service = $task->{sub_service}; - my $query = $task->{query}; - - $request_url = $api_url . "/" . $service; - $request_url .= (defined $sub_service) ? "/" . $sub_service : ""; - $request_url .= "/" . $query; +if (defined $api_request->{parameters}->{required}) { + @check_list = @{$api_request->{parameters}->{required}}; +} - if ( $service eq "import" && $query eq "start_import_file" ) { - $request_url .= "?domain=" . $task->{domain}; - foreach my $k (keys %{$task->{options}}) { - $request_url .= "&" . $k . "=" . $task->{options}->{$k}; +foreach my $check (@check_list) { + if (defined $task->{$check}) { + if (!ref($task->{$check})) { + if ($task->{$check} =~ /^-?\d+\.?\d*/) { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; + } + } else { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; + } + } elsif (defined $options->{$check}) { + if (!ref($options->{$check})) { + if ($options->{$check} =~ /^-?\d+\.?\d*/) { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; + } + } else { + die "Incorrect value of '" . $check . "' in '" . $task_file . "'\n"; } - } - - if (defined $sub_service) { - $request_type = $query_options->{$service}->{$sub_service}->{$query}->{query_type}; - $request_content_type = $query_options->{$service}->{$sub_service}->{$query}->{content_type}; } else { - $request_type = $query_options->{$service}->{$query}->{query_type}; - $request_content_type = $query_options->{$service}->{$query}->{content_type}; + die "'" . $check . "' is undefined in '" . $task_file . "'\n"; } +} + +$request_url = $api_url . "/" . $service; +$request_url .= (defined $sub_service) ? "/" . $sub_service : ""; +$request_url .= "/" . $query; - if (!defined $request_content_type) { - $request_content_type = $query_options->{default_content_type}; +if ( $service eq "import" && $query eq "start_import_file" ) { + $request_url .= "?domain=" . $task->{domain}; + foreach my $k (keys %{$task->{options}}) { + $request_url .= "&" . $k . "=" . $task->{options}->{$k}; } } +if (defined $sub_service) { + $request_type = $api_request->{query_type}; + $request_content_type = $api_request->{content_type}; +} else { + $request_type = $api_request->{query_type}; + $request_content_type = $api_request->{content_type}; +} + +if (!defined $request_content_type) { + $request_content_type = $api_requests->{default_content_type}; +} +if (!defined $sub_service) { + $sub_service = ""; +} + my $ua = new LWP::UserAgent; my $request = new HTTP::Request($request_type => $request_url); -if ( $task->{service} eq "domain" && - $task->{sub_service} eq "logo" && - $task->{query} eq "set" ) { +if ( $service eq "domain" && + $sub_service eq "logo" && + $query eq "set" ) { { my $boundary = 'X'; my @rand = ('a'..'z', 'A'..'Z'); @@ -266,7 +385,11 @@ if ( $task->{service} eq "domain" && 'Content-type' => $request_content_type ); - my $request_content = "domain=" . $task->{domain}; + my $request_content = ""; + if (defined $task->{domain}) { + $request_content = "domain=" . $task->{domain}; + } + foreach my $k (keys %{$task->{options}}) { $request_content .= "&" . $k . "="; $request_content .= encode("utf8",$task->{options}->{$k});