Apache2-ApacheMobileFilter

 view release on metacpan or  search on metacpan

lib/Apache2/AMFLiteDetectionFilter.pm  view on Meta::CPAN

  if ($ENV{AMFCheckVersion}) {
	$checkVersion=$ENV{AMFCheckVersion};
  }
  if ($ENV{AMFMobileHome}) {
	  $configMobileFile="$ENV{AMFMobileHome}/amflitedetection.config";
	  $configTabletFile="$ENV{AMFMobileHome}/amflitedetection_tablet.config";
	  $configTouchFile="$ENV{AMFMobileHome}/amflitedetection_touch.config";
	  $configTVFile="$ENV{AMFMobileHome}/amflitedetection_tv.config";
   }  else {
	  $CommonLib->printLog("AMFMobileHome not exist. Please set the variable AMFMobileHome into httpd.conf");
	  ModPerl::Util::exit();
   }
   if ($ENV{AMFProductionMode}) {
	$cookiecachesystem=$ENV{AMFProductionMode};
	$CommonLib->printLog("AMFProductionMode is: $cookiecachesystem");
   } else {
	$CommonLib->printLog("AMFProductionMode is not setted the default value is $cookiecachesystem");			   
   }
   if ($ENV{AMFMobileKeys}) {
	my @dummyMobileKeys = split(/,/, $ENV{AMFMobileKeys});
	foreach my $dummy (@dummyMobileKeys) {
		$MobileArray{$dummy}='mobile';
	}
	$CommonLib->printLog("AMFMobileKeys is: $ENV{AMFMobileKeys}");
    }
    if ($ENV{RestMode}) {
			$restmode=$ENV{RestMode};
			$CommonLib->printLog("RestMode is: $restmode");
    }
    if ($ENV{AMFDownloadParam}) {
	                        $downloadparam=$ENV{AMFDownloadParam};
                            $CommonLib->printLog("DownloadAMFParam is: $downloadparam");
    }
    if ($downloadparam eq 'true' && $forceBlockDownload eq "false") {
        &readMobileParamFromUrl;	
        &readTabletParamFromUrl;
        &readTouchParamFromUrl;
        &readTVParamFromUrl;
    } else {
   	    &readMobileParamFromFile;		
        &readTabletParamFromFile;
        &readTouchParamFromFile;
        &readTVParamFromFile;
    }
    if ($ENV{ForceTabletAsFullBrowser}) {
		if ($ENV{ForceTabletAsFullBrowser} eq 'true') {
			$CommonLib->printLog("AMFMobileHome not exist. Please set the variable AMFMobileHome into httpd.conf");
			$forcetablet="true";
		} else {
			$forcetablet="false";
		}
     }
     if ($ENV{FullBrowserMobileAccessKey}) {
                          $mobilenable="$ENV{FullBrowserMobileAccessKey}";
                          $CommonLib->printLog("FullBrowserMobileAccessKey is: $ENV{FullBrowserMobileAccessKey}");
                          $CommonLib->printLog("For access the device to fullbrowser set the link: <url>?$mobilenable=true");
     }
sub readMobileParamFromUrl {
		$CommonLib->printLog("Read data from ".$urlmobile);

        my $req = HTTP::Request->new(HEAD => $urlmobile);
        $req->header('Accept' => 'text/html');
        
        my $res = $ua->request($req);
        
        if ($res->is_success) {
            $CommonLib->printLog("Redirect to:" . $res->request()->uri());
            $urlmobile=$res->request()->uri();
            my $request = $ua->get ($urlmobile);
            my $content=$request->content;
            if ($content) {
                $CommonLib->printLog("Download OK");
                $content =~ s/\n//g;
                my @dummyMobileKeys = split(/,/, lc($content));
                foreach my $dummy (@dummyMobileKeys) {
                    $MobileArray{$dummy}='mobile';
                }
                 open (MYFILE, ">$configMobileFile") || die ("Cannot Open File: $configMobileFile");
                    print MYFILE $content;
                 close (MYFILE);
             } else {
                $CommonLib->printLog("Download error ".$correctHostName);
                $CommonLib->printLog("Try download previews version");
                &readMobileParamFromFile;	
            }
        } else {
                $CommonLib->printLog("Download error ".$correctHostName);
                $CommonLib->printLog("Try download previews version");
                &readMobileParamFromFile;	
        }
}
sub readMobileParamFromFile {
		$CommonLib->printLog("Read for mobile data from $configMobileFile");
		my $content="";
		if (open (IN,$configMobileFile)) {
			while (<IN>) {
				$content=$content.$_;				 
			}
			close IN;
		} else {
			$CommonLib->printLog("Error open file:$configMobileFile");
			ModPerl::Util::exit();
		}
        $content =~ s/\n//g;
		my @dummyMobileKeys = split(/,/, lc($content));
		foreach my $dummy (@dummyMobileKeys) {
			$MobileArray{$dummy}='mobile';
		}
}
sub readTabletParamFromUrl {
		$CommonLib->printLog("Read data for tablet detection from ".$urlTablet);
        my $req = HTTP::Request->new(HEAD => $urlTablet);
        $req->header('Accept' => 'text/html');
        
        my $res = $ua->request($req);
        
        if ($res->is_success) {
            $CommonLib->printLog("Redirect to:" . $res->request()->uri());
            $urlTablet=$res->request()->uri();
            my $request = $ua->get ($urlTablet);
            my $content=$request->content;
            if ($content) {
                $CommonLib->printLog("Download OK");
                $content =~ s/\n//g;
                my @dummyMobileKeys = split(/,/, lc($content));
                foreach my $dummy (@dummyMobileKeys) {
                    $MobileTabletArray{$dummy}='mobile';
                }
                 open (MYFILE, ">$configTabletFile") || die ("Cannot Open File: $configMobileFile");
                    print MYFILE $content;
                 close (MYFILE);
             } else {
                $CommonLib->printLog("Download error from ".$correctHostName);
                $CommonLib->printLog("Try download previews version");
                &readTabletParamFromFile;	
            }
        } else {
            $CommonLib->printLog("Error: " . $res->status_line);
            $CommonLib->printLog("Download error from ".$correctHostName);
            $CommonLib->printLog("Try download previews version");
            &readTabletParamFromFile;	
        }
        
}
sub readTabletParamFromFile {
		$CommonLib->printLog("Read for tablet data from $configTabletFile");
		my $content="";
		if (open (IN,$configTabletFile)) {
			while (<IN>) {
				$content=$content.$_;				 
			}
			close IN;
		} else {
			$CommonLib->printLog("Error open file:$configTabletFile");
			ModPerl::Util::exit();
		}
                $content =~ s/\n//g;
		my @dummyMobileKeys = split(/,/, lc($content));
		foreach my $dummy (@dummyMobileKeys) {
			$MobileTabletArray{$dummy}='mobile';
		}
}
sub readTouchParamFromUrl {
		$CommonLib->printLog("Read for touch data for touch detection from ".$urlTouch);
        my $req = HTTP::Request->new(HEAD => $urlTouch);
        $req->header('Accept' => 'text/html');
        
        my $res = $ua->request($req);
        
        if ($res->is_success) {
            $CommonLib->printLog("Redirect to:" . $res->request()->uri());
            $urlmobile=$urlmobile;
            my $request = $ua->get ($urlTouch);
            my $content=$request->content;
    
            if ($content) {
                $CommonLib->printLog("Download OK");
                $content =~ s/\n//g;
                my @dummyMobileKeys = split(/,/, lc($content));
                foreach my $dummy (@dummyMobileKeys) {
                    $MobileTouchArray{$dummy}='mobile';
                }
                 open (MYFILE, ">$configTouchFile") || die ("Cannot Open File: $configMobileFile");
                    print MYFILE $content;
                 close (MYFILE);
             } else {
                $CommonLib->printLog("Download error from ".$correctHostName);
                $CommonLib->printLog("Try download previews version");
                &readTouchParamFromFile;	
            }
        } else {
            $CommonLib->printLog("Error: " . $res->status_line);
            $CommonLib->printLog("Download error from ".$correctHostName);
            $CommonLib->printLog("Try download previews version");
            &readTouchParamFromFile;	
        }
}
sub readTouchParamFromFile {
		$CommonLib->printLog("Read data from $configTouchFile");
		my $content="";
		if (open (IN,$configTouchFile)) {
			while (<IN>) {
				$content=$content.$_;				 
			}
			close IN;
		} else {
			$CommonLib->printLog("Error open file:$configTouchFile");
			ModPerl::Util::exit();
		}
                $content =~ s/\n//g;
		my @dummyMobileKeys = split(/,/, lc($content));
		foreach my $dummy (@dummyMobileKeys) {
			$MobileTouchArray{$dummy}='mobile';
		}
}
sub readTVParamFromUrl {
		$CommonLib->printLog("Read data for TV detection from ".$urlTv);
        my $req = HTTP::Request->new(HEAD => $urlTv);
        $req->header('Accept' => 'text/html');
        
        my $res = $ua->request($req);
        
        if ($res->is_success) {
            $CommonLib->printLog("Redirect to:" . $res->request()->uri());
            $urlmobile= $res->request()->uri();
            my $request = $ua->get ($urlTv);
            my $content=$request->content;
    
            if ($content) {
                $CommonLib->printLog("Download OK");
                $content =~ s/\n//g;
                my @dummyMobileKeys = split(/,/, lc($content));
                foreach my $dummy (@dummyMobileKeys) {
                    $MobileTVArray{$dummy}='mobile';
                }
                 open (MYFILE, ">$configTVFile") || die ("Cannot Open File: $configTVFile");
                    print MYFILE $content;
                 close (MYFILE);
             } else {
                $CommonLib->printLog("Download error from ".$correctHostName);
                $CommonLib->printLog("Try download previews version");
                &readTVParamFromFile;	
            }
        } else {
            $CommonLib->printLog("Error: " . $res->status_line);
            $CommonLib->printLog("Download error from ".$correctHostName);
            $CommonLib->printLog("Try download previews version");
            &readTVParamFromFile;	
        }
}
sub readTVParamFromFile {
		$CommonLib->printLog("Read for tv data from $configTVFile");
		my $content="";
		if (open (IN,$configTVFile)) {
			while (<IN>) {
				$content=$content.$_;				 
			}
			close IN;
		} else {
			$CommonLib->printLog("Error open file:$configTVFile");
			ModPerl::Util::exit();
		}
                $content =~ s/\n//g;
		my @dummyMobileKeys = split(/,/, lc($content));
		foreach my $dummy (@dummyMobileKeys) {
			$MobileTVArray{$dummy}='mobile';
		}
}
sub isMobile {
  my ($UserAgent) = @_;
  my $ind=0;
  my $isMobileValue='false';
  my $pair;
  my $length=0;
  foreach $pair (sort keys %MobileArray) {
	if ($UserAgent =~ m/\Q$pair\E/) {
		$isMobileValue='true';
	}



( run in 1.205 second using v1.01-cache-2.11-cpan-2398b32b56e )