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});