RFID download configuration for current IP
[koha.git] / ffzg / rfid / register.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use CGI;
7 use JSON;
8 use FindBin;
9 use IO::Socket::INET;
10
11 my $query = new CGI;
12
13 use Data::Dump qw(dump);
14 my $v = $query->Vars;
15 warn "# v ", dump( $v );
16
17 my $hash = {
18         remote_host => $query->remote_host,
19 };
20
21
22 if ( my $c = $query->cookie('rfid_reader') ) {
23         warn "## RFID cookie rfid_reader = $c\n";
24         $hash->{local_ip} = $c;
25         $hash->{have_reader} = 1;
26 }
27
28 if ( my $session = $query->cookie("CGISESSID") ) {
29         $hash->{session} = $session;
30         my $path = "/dev/shm/rfid.$session";
31         warn "## RFID session $path\n";
32         if ( -e $path ) {
33                 open(my $fh, '<', $path);
34                 $hash->{local_ip} = <$fh>;
35                 $hash->{have_reader} = 1;
36         }
37 }
38
39 my $dir = $FindBin::Bin;
40
41 if ( my $koha_login = $query->param('koha_login') ) {
42         my $path = "$dir/user/$koha_login";
43         $hash->{koha_login} = $koha_login;
44         if ( -e $path ) {
45                 nopen(my $fh, '<', $path);
46                 $hash->{local_ip} = <$fh>;
47                 $hash->{have_reader} = 1;
48                 warn "RFID: $koha_login -> $hash->{local_ip}\n";
49                 close $fh;
50         } else {
51                 #warn "# no $path";
52         }
53
54 } elsif ( $query->param('_last') ) {
55
56         my $v = $query->Vars;
57         my $ip = $v->{HTTP_LISTEN};
58
59         if ( ! $ip ) {
60                 die "RFID ERROR: no HTTP_LISTEN in ",dump($v);
61         }
62
63         my $path = "$dir/ip/$ip"; # FIXME
64         open(my $fh, '>', $path);
65         print $fh encode_json( $v );
66         close($fh);
67         warn "RFID $path $ip ", -s $path, "\n";
68
69         # XXX this place is too early to test connection, since our client is not listening yet
70         #my $sock = IO::Socket::INET->new($ip) || die "RFID $ip : $!"; # XXX
71
72         $hash->{local_ip} = $ip;
73
74         $path = "$dir/reader/$ip";
75         mkdir $path unless -e $path;
76         $path .= '/mainpage.pl';
77         symlink "$dir/koha-reader.pl", $path unless -e $path;
78
79         $hash->{have_reader} = -e $path;
80
81 } else {
82         warn $hash->{_error} = "ERROR: ", $hash->{remote_host}, " don't have RFID reader assigned";
83 }
84
85 sub js_console {
86         warn "RFID: ",@_;
87         return q|
88 //$(document).ready( function() {
89         console.log('|, join('', @_), qq|);
90 //}
91 |;
92 }
93
94 if ( $query->param('intranet-js') ) {
95         print "Content-type: application/javascript\r\n\r\n";
96
97         if ( exists $hash->{have_reader} ) {
98                 if ( my $local_ip = $hash->{local_ip} ) {
99                                 chomp $local_ip;
100                                 my $url = "/rfid/to/$local_ip";
101                                 open(my $js, '<', 'koha-rfid.js');
102                                 while(<$js>) {
103                                         s/local_ip/$local_ip/g;
104                                         s/localhost:9000/$url/g;
105                                         s{///$url}{$url}g; # relative urls
106                                         print;
107                                 }
108                                 close($js);
109                 } else {
110                         warn "## RFID no local_ip for ",dump($hash);
111                 }
112         } else {
113 #               warn "## RFID doesn't have reader ",dump($hash);
114         }
115
116 } elsif ( my $ip = $query->param('register_reader') ) {
117         my $url = $query->self_url;
118         $url =~ s{/koha/ffzg/rfid.*$}{/koha/mainpage.pl};
119         warn "## RFID register_rader $ip -> $url\n";
120         print "Location: $url\r\n",
121                 "Cookie: rfid_reader=$ip\r\n",
122                 "\r\n";
123 } else {
124         print "Content-type: application/json; charset=utf-8\r\n\r\n";
125         print encode_json $hash;
126 }
127 warn "## RFID hash = ",dump($hash);