Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- # code.org && hourOfCode.com signUp bridge - anak@cpan.org - 19.08.2014 - GNU GPL v2 - rev. 28.09.2014 - ver 0.6
- use strict;
- use warnings;
- use feature 'say','switch';
- use Data::Dumper;
- use CGI ':standard';
- use CGI::Carp 'fatalsToBrowser';
- use Net::SMTP::SSL;
- use WWW::Mechanize;
- print "Content-Type: text/html\n\n";
- my @urlForm=(
- 'http://learn.code.org/users/sign_up',
- 'http://learn.code.org/users/sign_up?user%5Buser_type%5D=teacher',
- 'http://hourofcode.com/eu'
- );
- my $queryString=CGI->new();
- my $urlPageSignup=$queryString->param('urlPageSignup');
- my $userType=$queryString->param('userType');
- given ($urlPageSignup) {
- when (/($urlForm[0]|$urlForm[1])/) {
- my $idForm='new_user';
- if ($userType eq 'studente' || $userType eq 'student' || $userType eq 'altro tipo di utente no insegnante') {
- $userType='student'
- } else {
- $userType='teacher'
- }
- my $userAge=$queryString->param('userAge');
- if ($userAge <20 && $userType eq 'teacher') {
- $userAge=40
- }
- my %params=(
- 'user[user_type]' => $userType,
- 'user[locale]' => $queryString->param('userLocale'),
- 'user[name]' => $queryString->param('userName'),
- 'user[email]' => $queryString->param('userEmail'),
- 'user[password]' => $queryString->param('userPassword'),
- 'user[password_confirmation]' => $queryString->param('userPassword'),
- 'user[age]' => $userAge
- );
- if ($userType eq 'student') {
- $params{'user[gender]'}=$queryString->param('userGender');
- } else {
- $params{'user[school]'}=$queryString->param('userSchool');
- $params{'user[full_address]'}=$queryString->param('userFullAddress');
- }
- goToAction($urlPageSignup, $idForm, \%params)
- }
- when ($urlForm[2]) {
- my $idForm='hoc-signup-form';
- my $eventType=$queryString->param('event_type_s');
- if ($eventType eq 'a scuola') {
- $eventType='in_school'
- } else {
- $eventType='out_of_school'
- }
- my %params=(
- name_s => $queryString->param('name_s'),
- email_s => $queryString->param('email_s'),
- organization_name_s => $queryString->param('organization_name_s'),
- event_type_s => $eventType,
- event_location_s => $queryString->param('event_location_s'),
- entire_school_flag_b => $queryString->param('entire_school_flag_b'),
- send_posters_flag_b => $queryString->param('send_posters_flag_b'),
- send_posters_address_s => $queryString->param('send_posters_address_s'),
- special_event_flag_b => $queryString->param('special_event_flag_b'),
- special_event_details_s => $queryString->param('special_event_details_s'),
- hoc_country_s => $queryString->param('hoc_country_s')
- );
- my $urlTargetSignup=$queryString->param('urlTargetSignup');
- goToAction($urlTargetSignup, $idForm, \%params,'direct')
- }
- }
- say 'ok';
- exit;
- sub goToAction {
- my $urlPage=shift;
- my $idForm=shift;
- my $params=shift;
- my $method=shift;
- my %paramsToSend=%$params;
- my $httpResponse;
- my $maxAttempt=5;
- my $attempt=0;
- my $exitDo=0;
- my $mech=WWW::Mechanize->new(cookie_jar => {});
- do {
- if ($method ne 'direct') {
- $mech->get($urlPage);
- $mech->submit_form(
- form_id => $idForm,
- with_fields => {%paramsToSend}
- ) or die writeLog(\%paramsToSend)
- } else {
- $mech->post(
- $urlPage,
- [%paramsToSend]
- ) or die writeLog(\%paramsToSend)
- }
- $httpResponse=$mech->content();
- if ($httpResponse =~ /(Teacher Home Page|learn.code.org\/users\/sign_out|,"secret":)/) {
- $exitDo=1
- } else {
- $exitDo=0
- }
- $attempt++
- } while ($attempt < $maxAttempt && $exitDo == 0);
- writeLog($params) unless $exitDo
- }
- sub writeLog {
- my $params=shift;
- my %paramsToSend=%$params;
- my $timestamp=time();
- my $dateOfStamp=localtime();
- my $logFile=$ENV{DOCUMENT_ROOT}.'/logSignup/'.$timestamp.'.log';
- open my $fh, '>', $logFile or die $!;
- print $fh $dateOfStamp."\n\n";
- print $fh "-----------------------------\n\n";
- print $fh Dumper(%paramsToSend)."\n\n";
- print $fh "-----------------------------\n\n";
- foreach my $key ($queryString->param) {
- print $fh $key.'->'.$queryString->param($key)."\n"
- }
- close $fh;
- sendEmailTo('software@netlogica.it',$timestamp)
- }
- sub sendEmailTo {
- my $addressTo=shift;
- my $timestamp=shift;
- my $addressFrom='mailer@programmailfuturo.it';
- my $smtpServer='host'';
- my $smtpPass='password';
- my $smtpUser=$addressFrom;
- IO::Socket::SSL::set_ctx_defaults(
- SSL_verify_mode => 0
- );
- my $ssl='ssl';
- my $smtp=Net::SMTP::SSL->new($smtpServer, Port => 465) or die $!;
- $smtp->auth($smtpUser,$smtpPass);
- $smtp->mail($addressFrom);
- $smtp->recipient($addressTo);
- $smtp->data;
- $smtp->datasend('From: sender name <'.$addressFrom.'>'."\n");
- $smtp->datasend('To: recip name <'.$addressTo.'>'."\n");
- $smtp->datasend("Subject: BRIDGE ERROR\n");
- $smtp->datasend("\n");
- $smtp->datasend('File log: http://'.$ENV{HTTP_HOST}.'/logSignup/'.$timestamp.'.log');
- $smtp->dataend;
- $smtp->quit
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement