Skip to content
Permalink
398615020d
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
executable file 153 lines (123 sloc) 2.8 KB
#!/usr/local/bin/perl -w
use strict;
use warnings;
use URI::Escape;
use CGI qw(-utf8 -no_xhtml :standard);
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
use Barcode;
my $NOW = time(); # this event time, atomic
my $q = CGI->new;
my $SC = $ENV{PATH_INFO}; $SC =~ s{^/}{};
my ($SERIAL,$CODE) = split('/',$SC,2);
my $REMOTE = $ENV{REMOTE_ADDR};
#
# defaults if not defined
#
# FROM ? / WHICH SCANNER ? / WHAT WAS SCANNED ?
$REMOTE ||= 'unknown'; # host who sent code
$SERIAL ||= 'unknown'; # serial of barcode-scanner
$CODE ||= 'unknown'; # scanned code
log_scan($REMOTE,$SERIAL,$CODE, $NOW);
store_in_db($REMOTE,$SERIAL,$CODE, $NOW);
my ($type,$url) = code2url($CODE);
if ($type ne 'unknown') {
print $q->redirect($url);
exit;
}
print $q->header(-type => 'text/html',-charset=>'utf-8');
print <<"__EOHTML__";
<!DOCTYPE html>
<html>
<head>
</head>
<body>
__EOHTML__
print "<xmp> $type / $url \n" . Dumper(\%CONF) . "</xmp>";
my $TEST = 'lastscanned';
if ( open O,'>',$TEST ) {
print O uri_unescape($CODE);
close O;
}
print <<"__EOHTML__";
</body>
__EOHTML__
exit;
sub log_scan {
my ( $REMOTE, $READERID, $CODE, $TIME ) = @_;
my $l = scalar localtime($TIME) . ": $REMOTE:$READERID:$CODE";
my $BC = $CONF{path}->{logfile};
if ( open O,'>>',$BC ) {
print O "$l\n";
close O;
print "$l\n";
}
else {
die "error logging: $BC $?:$!\n";
}
}
sub store_in_db {
my ( $REMOTE, $READERID, $CODE , $TIME) = @_;
use DBI;
our $dbh;
my $db = $CONF{path}->{dbfile};
sub db_open {
my $f = shift;
$dbh=DBI->connect("dbi:SQLite:dbname=$f","","",{
# AutoCommit=>1,
PrintError=>0,
RaiseError=>1,
PrintWarn=>1,
# sqlite_use_immediate_transaction => 1,
});
$dbh or die "$DBI::errstr\n";
}
sub db_create {
#print "creating tables ...\n";
$dbh->do('CREATE TABLE codes ( time INTEGER, remote TEXT, readerid TEXT, code TEXT );');
}
#
# try to open database
#
db_open($db);
if (! -e $db or -z $db) {
db_create();
}
$dbh->do('INSERT INTO codes(rowid, time,remote,readerid,code) VALUES(NULL,?,?,?,?)',undef,
$TIME,
$REMOTE,
$READERID,
$CODE
)
}
sub repl {
my $find = shift;
my $replace = shift;
my $var = shift;
my @items = ( $var =~ $find );
$var =~ s/$find/$replace/;
for( reverse 0 .. $#items ){
my $n = $_ + 1;
$var =~ s/\$$n/${items[$_]}/g ;
}
return $var;
};
sub code2url {
my $code = shift;
my $type = 'unknown';
my $url = '';
for my $fr ( keys %{$CONF{re2url}} ) {
if ($code =~ m/$fr/) {
my $to = $CONF{re2url}->{$fr};
if ( exists($CONF{retype}->{$fr}) ) {
$type = $CONF{retype}->{$fr};
}
if ( $url = repl( $fr, $to, $code ) ) {
last;
}
}
}
# if ($url =~ /^http:/) {
# }
return ($type,$url);
};