84 |
$d->{security} = $tags_security->{$_}; |
$d->{security} = $tags_security->{$_}; |
85 |
push @{ $json->{tags} }, $d; |
push @{ $json->{tags} }, $d; |
86 |
} keys %$tags; |
} keys %$tags; |
87 |
print $client "HTTP/1.0 200 OK\r\nContent-Type: application/x-javascript\r\n\r\n", |
print $client "HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n", |
88 |
$param->{callback}, "(", to_json($json), ")\r\n"; |
$param->{callback}, "(", to_json($json), ")\r\n"; |
89 |
} elsif ( $method =~ m{/program} ) { |
} elsif ( $method =~ m{/program} ) { |
90 |
|
|
91 |
my $status = 501; # Not implementd |
my $status = 501; # Not implementd |
92 |
|
|
93 |
foreach my $p ( keys %$param ) { |
foreach my $p ( keys %$param ) { |
94 |
next unless $p =~ m/^tag_(\S+)/; |
next unless $p =~ m/^(E[0-9A-F]{15})$/; |
95 |
my $tag = $1; |
my $tag = $1; |
96 |
my $content = "\x04\x11\x00\x01" . $param->{$p}; |
my $content = "\x04\x11\x00\x01" . $param->{$p}; |
97 |
$content = "\x00" if $param->{$p} eq 'blank'; |
$content = "\x00" if $param->{$p} eq 'blank'; |
99 |
|
|
100 |
warn "PROGRAM $tag $content\n"; |
warn "PROGRAM $tag $content\n"; |
101 |
write_tag( $tag, $content ); |
write_tag( $tag, $content ); |
102 |
|
secure_tag_with( $tag, $param->{$p} =~ /^130/ ? 'DA' : 'D7' ); |
103 |
} |
} |
104 |
|
|
105 |
print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n"; |
print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n"; |
106 |
|
|
107 |
|
} elsif ( $method =~ m{/secure(.js)} ) { |
108 |
|
|
109 |
|
my $json = $1; |
110 |
|
|
111 |
|
my $status = 501; # Not implementd |
112 |
|
|
113 |
|
foreach my $p ( keys %$param ) { |
114 |
|
next unless $p =~ m/^(E[0-9A-F]{15})$/; |
115 |
|
my $tag = $1; |
116 |
|
my $data = $param->{$p}; |
117 |
|
$status = 302; |
118 |
|
|
119 |
|
warn "SECURE $tag $data\n"; |
120 |
|
secure_tag_with( $tag, $data ); |
121 |
|
} |
122 |
|
|
123 |
|
if ( $json ) { |
124 |
|
print $client "HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n", |
125 |
|
$param->{callback}, "({ ok: 1 })\r\n"; |
126 |
|
} else { |
127 |
|
print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n"; |
128 |
|
} |
129 |
|
|
130 |
} else { |
} else { |
131 |
print $client "HTTP/1.0 404 Unkown method\r\n"; |
print $client "HTTP/1.0 404 Unkown method\r\n\r\n"; |
132 |
} |
} |
133 |
} else { |
} else { |
134 |
print $client "HTTP/1.0 500 No method\r\n"; |
print $client "HTTP/1.0 500 No method\r\n\r\n"; |
135 |
} |
} |
136 |
close $client; |
close $client; |
137 |
} |
} |
419 |
return $hash; |
return $hash; |
420 |
} |
} |
421 |
|
|
422 |
|
sub forget_tag { |
423 |
|
my $tag = shift; |
424 |
|
delete $tags_data->{$tag}; |
425 |
|
delete $visible_tags->{$tag}; |
426 |
|
} |
427 |
|
|
428 |
sub read_tag { |
sub read_tag { |
429 |
my ( $tag ) = @_; |
my ( $tag ) = @_; |
430 |
|
|
513 |
rename $path, $to; |
rename $path, $to; |
514 |
print ">> $to\n"; |
print ">> $to\n"; |
515 |
|
|
516 |
# force re-read of tag |
forget_tag $tag; |
517 |
delete $tags_data->{$tag}; |
} |
518 |
delete $visible_tags->{$tag}; |
|
519 |
|
sub secure_tag_with { |
520 |
|
my ( $tag, $data ) = @_; |
521 |
|
|
522 |
|
cmd( |
523 |
|
"d6 00 0c 09 $tag $data BEEF", "secure $tag -> $data", |
524 |
|
"d6 00 0c 09 00 $tag BEEF", sub { assert() }, |
525 |
|
); |
526 |
|
|
527 |
|
forget_tag $tag; |
528 |
} |
} |
529 |
|
|
530 |
sub secure_tag { |
sub secure_tag { |
533 |
my $path = "$secure_path/$tag"; |
my $path = "$secure_path/$tag"; |
534 |
my $data = substr(read_file( $path ),0,2); |
my $data = substr(read_file( $path ),0,2); |
535 |
|
|
536 |
cmd( |
secure_tag_with( $tag, $data ); |
|
"d6 00 0c 09 $tag $data BEEF", "secure $tag -> $data", |
|
|
"d6 00 0c 09 00 $tag BEEF", sub { assert() }, |
|
|
); |
|
537 |
|
|
538 |
my $to = $path; |
my $to = $path; |
539 |
$to .= '.' . time(); |
$to .= '.' . time(); |