Advertisement
Anakthewolf

signUp bridge

Oct 24th, 2014
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.93 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # code.org && hourOfCode.com signUp bridge - anak@cpan.org - 19.08.2014 - GNU GPL v2 - rev. 28.09.2014 - ver 0.6
  4.  
  5. use strict;
  6. use warnings;
  7. use feature 'say','switch';
  8.  
  9. use Data::Dumper;
  10. use CGI ':standard';
  11. use CGI::Carp 'fatalsToBrowser';
  12. use Net::SMTP::SSL;
  13. use WWW::Mechanize;
  14.  
  15. print "Content-Type: text/html\n\n";
  16.  
  17. my @urlForm=(
  18.     'http://learn.code.org/users/sign_up',
  19.     'http://learn.code.org/users/sign_up?user%5Buser_type%5D=teacher',
  20.     'http://hourofcode.com/eu'
  21. );
  22.  
  23. my $queryString=CGI->new();
  24. my $urlPageSignup=$queryString->param('urlPageSignup');
  25.  
  26. my $userType=$queryString->param('userType');
  27.        
  28. given ($urlPageSignup) {
  29.  
  30.     when (/($urlForm[0]|$urlForm[1])/) {
  31.         my $idForm='new_user';
  32.  
  33.         if ($userType eq 'studente' || $userType eq 'student' || $userType eq 'altro tipo di utente no insegnante') {
  34.             $userType='student'
  35.         } else {
  36.             $userType='teacher'
  37.         }
  38.         my $userAge=$queryString->param('userAge');
  39.         if ($userAge <20 && $userType eq 'teacher') {
  40.             $userAge=40
  41.         }
  42.        
  43.         my %params=(
  44.             'user[user_type]' => $userType,
  45.             'user[locale]' => $queryString->param('userLocale'),
  46.             'user[name]' => $queryString->param('userName'),
  47.             'user[email]' => $queryString->param('userEmail'),
  48.             'user[password]' => $queryString->param('userPassword'),
  49.             'user[password_confirmation]' => $queryString->param('userPassword'),
  50.             'user[age]' => $userAge
  51.         );
  52.        
  53.         if ($userType eq 'student') {
  54.             $params{'user[gender]'}=$queryString->param('userGender');
  55.         } else {
  56.             $params{'user[school]'}=$queryString->param('userSchool');
  57.             $params{'user[full_address]'}=$queryString->param('userFullAddress');
  58.         }
  59.         goToAction($urlPageSignup, $idForm, \%params)
  60.     }
  61.    
  62.     when ($urlForm[2]) {
  63.         my $idForm='hoc-signup-form';
  64.  
  65.         my $eventType=$queryString->param('event_type_s');
  66.         if ($eventType eq 'a scuola') {
  67.             $eventType='in_school'
  68.         } else {
  69.             $eventType='out_of_school'
  70.         }
  71.        
  72.         my %params=(
  73.             name_s => $queryString->param('name_s'),
  74.             email_s => $queryString->param('email_s'),
  75.             organization_name_s => $queryString->param('organization_name_s'),
  76.             event_type_s => $eventType,
  77.             event_location_s => $queryString->param('event_location_s'),
  78.             entire_school_flag_b => $queryString->param('entire_school_flag_b'),
  79.             send_posters_flag_b => $queryString->param('send_posters_flag_b'),
  80.             send_posters_address_s => $queryString->param('send_posters_address_s'),
  81.             special_event_flag_b => $queryString->param('special_event_flag_b'),
  82.             special_event_details_s => $queryString->param('special_event_details_s'),
  83.             hoc_country_s => $queryString->param('hoc_country_s')
  84.         );
  85.  
  86.         my $urlTargetSignup=$queryString->param('urlTargetSignup');
  87.         goToAction($urlTargetSignup, $idForm, \%params,'direct')
  88.     }
  89. }
  90.  
  91. say 'ok';
  92. exit;
  93.  
  94. sub goToAction {
  95.     my $urlPage=shift;
  96.     my $idForm=shift;
  97.     my $params=shift;
  98.     my $method=shift;
  99.    
  100.     my %paramsToSend=%$params;
  101.  
  102.     my $httpResponse;
  103.     my $maxAttempt=5;
  104.     my $attempt=0;
  105.     my $exitDo=0;
  106.  
  107.     my $mech=WWW::Mechanize->new(cookie_jar => {});
  108.  
  109.     do {
  110.         if ($method ne 'direct') {
  111.             $mech->get($urlPage);
  112.             $mech->submit_form(
  113.                 form_id => $idForm,
  114.                 with_fields => {%paramsToSend}
  115.             ) or die writeLog(\%paramsToSend)
  116.         } else {
  117.             $mech->post(
  118.                 $urlPage,
  119.                 [%paramsToSend]
  120.             ) or die writeLog(\%paramsToSend)
  121.         }
  122.  
  123.         $httpResponse=$mech->content();
  124.         if ($httpResponse =~ /(Teacher Home Page|learn.code.org\/users\/sign_out|,"secret":)/) {
  125.             $exitDo=1
  126.         } else {
  127.             $exitDo=0
  128.         }
  129.         $attempt++
  130.     } while ($attempt < $maxAttempt && $exitDo == 0);
  131.  
  132.     writeLog($params) unless $exitDo
  133. }
  134.  
  135. sub writeLog {
  136.     my $params=shift;
  137.     my %paramsToSend=%$params;
  138.    
  139.     my $timestamp=time();
  140.     my $dateOfStamp=localtime();
  141.     my $logFile=$ENV{DOCUMENT_ROOT}.'/logSignup/'.$timestamp.'.log';
  142.  
  143.     open my $fh, '>', $logFile or die $!;
  144.         print $fh $dateOfStamp."\n\n";
  145.         print $fh "-----------------------------\n\n";
  146.         print $fh Dumper(%paramsToSend)."\n\n";
  147.         print $fh "-----------------------------\n\n";
  148.         foreach my $key ($queryString->param) {
  149.             print $fh $key.'->'.$queryString->param($key)."\n"
  150.         }
  151.     close $fh;
  152.     sendEmailTo('software@netlogica.it',$timestamp)
  153. }
  154.  
  155. sub sendEmailTo {
  156.     my $addressTo=shift;
  157.     my $timestamp=shift;
  158.  
  159.     my $addressFrom='mailer@programmailfuturo.it';
  160.     my $smtpServer='host'';
  161.     my $smtpPass='password';
  162.     my $smtpUser=$addressFrom;
  163.    
  164.     IO::Socket::SSL::set_ctx_defaults(
  165.          SSL_verify_mode => 0
  166.     );
  167.    
  168.     my $ssl='ssl';
  169.     my $smtp=Net::SMTP::SSL->new($smtpServer, Port => 465) or die $!;
  170.     $smtp->auth($smtpUser,$smtpPass);
  171.  
  172.     $smtp->mail($addressFrom);
  173.     $smtp->recipient($addressTo);
  174.  
  175.     $smtp->data;
  176.     $smtp->datasend('From: sender name <'.$addressFrom.'>'."\n");
  177.     $smtp->datasend('To: recip name <'.$addressTo.'>'."\n");
  178.     $smtp->datasend("Subject: BRIDGE ERROR\n");
  179.     $smtp->datasend("\n");
  180.     $smtp->datasend('File log: http://'.$ENV{HTTP_HOST}.'/logSignup/'.$timestamp.'.log');
  181.     $smtp->dataend;
  182.     $smtp->quit
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement