#!/usr/bin/perl # file KLEIDER/src/pinw/like.cgs # # Verarbeitet einen "Like" (http://kleider.herbaer.de) # 2020-09-04 Herbert Schiemann use utf8; use CGI::Simple::Util qw(unescape); use DBI; use Digest::MD5 qw(md5_base64); binmode (STDOUT, ":encoding(utf8)"); # s=LOCATION&l=LANG&n=$NAME&v=VIEW # Alle Angaben außer LOCATION sind optional my $q = $ENV{"QUERY_STRING"} || ""; # LOCATION my $s = unescape($1) if $q =~ /(?:^|&)s=([-_a-zA-Z0-9%]+)(?:&|$)/; # HASH-Teil der LOCATION my $f = $1 if $s =~ s/#(.*)//; my $r = $ENV{"REMOTE_ADDR"} || ""; my $a = $ENV{"HTTP_USER_AGENT"} || ""; # Datenbankfelder my $tm = time; # Kennung der "story" my $st = $1 if $s =~ /^(?:[^\/?]+\/)*?s([a-z0-9_]+)/; # Nummer des Abschnitts der Bildergeschichte my $sc = $1 if $f =~ /(?:^|_)s([1-9][0-9]*)(?:_|$)/; # Kennung des Bildes my $im = $1 if $f =~ /_([a-z0-9]{4,})/; # Sprache my $lg = lc($1) if $q =~ /(?:^|&)l=([a-zA-Z]+)/; if (!$lg) { $lg = $ENV{"HTTP_ACCEPT_LANGUAGE"} || ""; $lg =~ s/[-,;].*//; $lg = lc ($lg); } # VIEW: Ansicht (wie pinw, ...) # Normalerweise nicht im Query-String angegeben, # sondern Teil der Quell-URL $s=.... my $vw = $q =~ /(?:^|&)v=([-_a-zA-Z0-9%]+)(?:&|$)/ ? unescape ($1) : $s =~ /^(?:[^\/?]+\/)*?s[a-z0-9_]+\/([a-z]+)$/ ? $1 : ""; # Zur Kennzeichnung eines Besuchs: Digest von Adresse und User-Agent my $vs = md5_base64("$r:$a"); # Login-Name my $nm = $q =~ /(?:^|&)n=([-_a-zA-Z0-9%_.!~*'()]+)(?:&|$)/ ? md5_base64(unescape($1)) : ""; my $dbh = DBI -> connect ( "DBI:mysql:${mysql.likedb.name}", "${mysql.likedb.user}", "${mysql.likedb.password}" ); if (!$dbh) { print "Status: 503 Database Unavailable\n\n"; exit; } my $stm = $dbh -> prepare ( "INSERT INTO lk (tm, st, sc, im, lg, vw, vs, nm) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" ); $stm -> execute ($tm, $st, $sc, $im, $lg, $vw, $vs, $nm); print "Status: 204 no response\n\n"; # end of file KLEIDER/src/pinw/like.cgs