From 103026a344a7c3cc9dcc6601dff71778b1ffe36b Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 26 Jan 2017 22:31:27 +0100 Subject: [PATCH] RFID: first working association with koha session --- ffzg/rfid/README | 4 +++ ffzg/rfid/koha-reader.pl | 45 +++++++++++++++++++++++++++++++ ffzg/rfid/register.pl | 58 ++++++++++++++++++++++++++++++---------- 3 files changed, 93 insertions(+), 14 deletions(-) create mode 100755 ffzg/rfid/koha-reader.pl diff --git a/ffzg/rfid/README b/ffzg/rfid/README index 1d06c1e41e..ab89a24a5d 100644 --- a/ffzg/rfid/README +++ b/ffzg/rfid/README @@ -22,3 +22,7 @@ of RFID reader inside it 5. assign new reader to user cp ip/10.60.1.210 user/dpavlin@ffzg.hr + +6. assosicate reader through url - this will force login into koha and associate reader with session + +https://ffzg.koha-dev.rot13.org:8443/cgi-bin/koha/ffzg/rfid/reader/10.60.0.92:9000/take.pl diff --git a/ffzg/rfid/koha-reader.pl b/ffzg/rfid/koha-reader.pl new file mode 100755 index 0000000000..255468ea86 --- /dev/null +++ b/ffzg/rfid/koha-reader.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl + +use Modern::Perl; +use CGI qw ( -utf8 ); +use lib '/srv/koha_ffzg'; +use C4::Auth; +use C4::Output; +use Data::Dump qw(dump); + +my $query = new CGI; + +# fake koha login so we can get valid session +my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( + { + template_name => "intranet-main.tt", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { catalogue => 1, }, + } +); + +my $session = $query->cookie('CGISESSID'); +my $url = $query->self_url; +my ( $redirect, $reader_ip_port ) = ( $1 . '/mainpage.pl', $2 ) if $url =~ s{(^.+)/ffzg/rfid/reader/([^/]+)/.+$}{$1}; + +warn "## $cookie $session $url"; + +open(my $fh, '>', "/dev/shm/rfid.$session"); +print $fh $reader_ip_port; +close($fh); + +output_html_with_http_headers $query, $cookie, qq{ + +$redirect +
+$reader_ip_port
+
+ + +}; diff --git a/ffzg/rfid/register.pl b/ffzg/rfid/register.pl index e49e884b8d..d043b5ecb9 100755 --- a/ffzg/rfid/register.pl +++ b/ffzg/rfid/register.pl @@ -10,15 +10,29 @@ use FindBin; my $query = new CGI; use Data::Dump qw(dump); -#warn "# query ", dump( $query ); +warn "# Vars ", dump( $query->Vars ); my $hash = { remote_host => $query->remote_host, }; -my $dir = $FindBin::Bin; -my $path = "$dir/ip/" . $hash->{remote_host}; +if ( my $c = $query->cookie('rfid_reader') ) { + warn "## RFID cookie rfid_reader = $c\n"; + $hash->{local_ip} = $c; + $hash->{have_reader} = 1; +} +if ( my $session = $query->cookie("CGISESSID") ) { + $hash->{session} = $session; + warn "## RFID session $session\n"; + my $path = "/dev/shm/rfid.$session"; + if ( -e $path ) { + open(my $fh, '<', $path); + $hash->{local_ip} = <$fh>; + } +} + +my $dir = $FindBin::Bin; if ( my $koha_login = $query->param('koha_login') ) { my $path = "$dir/user/$koha_login"; @@ -33,21 +47,29 @@ if ( my $koha_login = $query->param('koha_login') ) { #warn "# no $path"; } -} elsif ( my $ip = $query->param('local_ip') ) { +} elsif ( $query->param('_last') ) { - $hash->{local_ip} = $ip; + my $v = $query->Vars; + my $ip; + foreach ( keys %$v ) { + if ( $v->{$_} =~ m/^10\.60\./ ) { # FIXME our local network + $ip = $v->{$_}; + last; + } + } + + if ( ! $ip ) { + die "RFID ERROR: can't find local IP in ",dump($v); + } + + $hash->{intranet_ip} = $ip; + + my $path = "$dir/ip/$ip"; # FIXME open(my $fh, '>', $path); - print $fh $hash->{local_ip}; + print $fh encode_json( $v ); close($fh); warn "RFID $path $ip ", -s $path, "\n"; -} elsif ( -e $path ) { - open(my $fh, '<', $path); - my $ip = <$fh>; - chomp $ip; - $hash->{local_ip} = $ip; - close($fh); - } else { warn $hash->{_error} = "ERROR: ", $hash->{remote_host}, " don't have RFID reader assigned"; } @@ -71,7 +93,7 @@ if ( $query->param('intranet-js') ) { open(my $js, '<', 'koha-rfid.js'); while(<$js>) { s/local_ip/$local_ip/g; - s/localhost/$url/g; + s/localhost:9000/$url/g; s{///$url}{$url}g; # relative urls print; } @@ -82,6 +104,14 @@ if ( $query->param('intranet-js') ) { } else { # warn "## RFID doesn't have reader ",dump($hash); } + +} elsif ( my $ip = $query->param('register_reader') ) { + my $url = $query->self_url; + $url =~ s{/koha/ffzg/rfid.*$}{/koha/mainpage.pl}; + warn "## RFID register_rader $ip -> $url\n"; + print "Location: $url\r\n", + "Cookie: rfid_reader=$ip\r\n", + "\r\n"; } else { print "Content-type: application/json; charset=utf-8\r\n\r\n"; print encode_json $hash; -- 2.20.1