#! /usr/bin/perl
use strict;
use utf8;

use vars qw(@SPR $Fehler $FehlerCode);

no utf8;

require "_req_ol_new.pl";
require "_req_error_ac.pl";

# lgmc_wtl_2.pl - by Rolf Mohr (webmaster@standort-dortmund.de)

# AB NOVEMBER 2015: das Login wird optisch (CSS) umgebaut und mit dem Account Login verknüpft (login_2).pl.
# Alte Version ist "lgmc_wtl" (nur noch hier: offline)

# Login via "MitmachCode" für Teilnehmer im living.net
# der "MitmachCode" soll eine Tool-Teilnahme via Smartphone und Co erlauben. Codes werden beim Anlegen
# von Tools "global" vergeben und in /login/handycodes.pl gespeichert


# *****************************************************************************************************
# VARIABLE UND KONSTANTE
# *****************************************************************************************************

my $MailProg = '/usr/sbin/sendmail';
my $TFK = "4JuGsr52TrsHcVs9zTf36Gf7zRq4Gs7b";

my @Eingabeliste = (); my $Eingabe = 0; my $Eintrag = 0;
my $Name = 0; my $Wert = 0; my %Aufruf = ();

# *****************************************************************************************************

# Formulardaten (GET oder POST) einlesen und umformen ---------------------------------
if ($ENV{REQUEST_METHOD} eq "GET")
{
 @Eingabeliste = split(/&/, $ENV{'QUERY_STRING'});
}
else
{
 read(STDIN, $Eingabe, $ENV{'CONTENT_LENGTH'});
 @Eingabeliste = split(/[&;]/, $Eingabe);
}
foreach $Eintrag (@Eingabeliste)
{
 $Eintrag =~ s/\+/ /go;
 ($Name, $Wert) = split(/=/, $Eintrag);
 $Name =~ s/\%(..)/pack("c", hex($1))/ge;
 $Wert =~ s/\%(..)/pack("c", hex($1))/ge;
 $Wert =~ s/[{|+*}<>#~=\[\]\t\r\"\'\n]//g;
 $Aufruf{$Name} = $Wert;
}

$Fehler = "";
$FehlerCode = 0;

my $StartPageFlag = 0; # Steuert die Texte auf der Startseite (Login) -> siehe &Start

# Sprache laden - HIER ANDERER PFAD ALS IN DEN PROJEKTORDNERN!
$Name = lc($Aufruf{'L'}); $Wert = "login/login_order_$Name.pl";
if (-e $Wert) { open (DATEI,"<$Wert"); @SPR = <DATEI>;  close (DATEI);}
else { open (DATEI,"<login/login_order_d.pl"); @SPR = <DATEI>;  close (DATEI);}
for (@SPR) {chomp $_;}


if ($Aufruf{'S'} eq "A")			# Formular Start (wird eigentlich nie direkt aufgerufen)
{
 &Start;
}
elsif ($Aufruf{'S'} <= 1)		# Check
{
 &Check1;
 if ($Fehler ne "") {&Start;}
}


exit(0);

# *****************************************************************************************************
#        SUBROUTINEN
# *****************************************************************************************************


# Login. Check
# dies ist das Startscript! "MitmachCode" kommt als "MC" aus statischem Formular!
sub Check1
{
 my $Dummy = 0; my $DM = 0;
 my @Data1 = (); my @ET1 = (); my @MBR = (); my @DerCode = ();
 my $Test = 0; my $i = 0; my $k = 0; my $res = 0;
 my $TM = time(); my $Projektordner = "";

 $Aufruf{'MC'} = lc($Aufruf{'MC'});

 # DB einlesen und Code suchen
 $DM = "login/handycodes.pl"; open (DATEI,"<$DM"); @Data1 = <DATEI>; close (DATEI);

 $Test = 0;
 for (@Data1)
 {
  if (length($_) > 4)
  {
   @ET1 = split("\t", $_);
   if ($ET1[0] eq $Aufruf{'MC'}) {@DerCode = @ET1; $Test = 1; last;}
  }
 }

 if (! $Test) {$Fehler = "Falscher Code (1). Eingabe wiederholen"; return;}

 # Code gefunden, jetzt entsprechendes Tool einlesen.
 # Aufbau: Code, Systemverzeichnis, User ID 1,  TN ID (Stack[1]), Titel bzw das Ziel, Tool-ID, Linkverkürzung, Time

 # Stack des Users einlesen
 $DM = "../$DerCode[1]/cgi-bin/dt/$DerCode[2]/stack-".$DerCode[2].".pl";
 if (-e $DM)
 {
  open (DATEI,"<$DM"); @Data1 = <DATEI>; close (DATEI);
  $Test = 0;
  for (@Data1)
  {
   if (length($_) > 5)
   {
    @ET1 = split("\t", $_);
    if ($ET1[1] eq $DerCode[3] && $ET1[0] ne "X") {$Test = 1; last;}
   }
  }
  if (! $Test) {$Fehler = "Falscher Code (2). Eingabe wiederholen"; return;}
 }
 else {$Fehler = "Code nicht gefunden. Eingabe wiederholen"; return;}

 # normalen Header für Login aufbauen (neu ab Nov 2015)
 &NOV15_Build_Header;

 # 4er Navi aufbauen, MOBIL LOGIN aktiv (neu ab Nov 2015)
 &NOV15_Build_Top(2);

 # ab hier Login Bereich (umgebaut)

 print "<div class='login-content'>\n";

 # keine Texte ....
 # print "<h2>$SPR[176]</h2>\n"; # Ihr Mobil-Code ist gültig!
 # print "<p>\n";
 # print "$SPR[177]\n"; # Sie können nun am Dialog-Tool teilnehmen.
 # print "</p>\n\n";



 $Dummy = "pd".$DerCode[5].".pl"; # teilnehmer Modul gemäß Tool ID
 $DM = "../$DerCode[1]/cgi-bin/dt/$Dummy"."?$DerCode[6]=$DerCode[2]$DerCode[3]";
 print "<a href='$DM' class='rechts-weiterbutton-breit-a'>$SPR[178]</a>\n\n";

 print "</div>\n\n"; # login-content

 # neuer Abbinder (NOV 2015)
 print "<div class='footer-home'>\n";
 print "<a href='http://www.worktogether.net/living.html' target='_blank'>powered by worktogether.net</a>\n";
 print "</div>\n\n";

 print "</div>\n";
 print "</div>\n";
 print "</div>\n";

 print "</body>\n";

 print "</html>\n";

} # Check1

# Login: Start
sub Start
{
 my $Dummy = 0; my $DM = 0;
 my @Data1 = (); my @ET1 = ();

 # normalen Header für Login aufbauen (neu ab Nov 2015)
 &NOV15_Build_Header;

 # 4er Navi aufbauen, MOBIL LOGIN aktiv (neu ab Nov 2015)
 &NOV15_Build_Top(2);

 # ab hier Login Bereich (umgebaut)

 print "<div class='login-content'>\n";

 if ($Fehler ne "")
 {
  print "<p class='scl_errors head_login'>\n";
  print "$SPR[172]\n"; # Der Mobil-Code ist ungültig.
  print "</p>\n\n";
 }
 else
 {
  print "<p class='wtg-header'>\n";
  print "$SPR[167]\n"; # Bitte geben Sie den Mobil-Code ein ....
  print "</p>\n\n";
 }


 print "<form action='lgmc_wtl_2.pl' method='post'>\n";
 print "<input type='hidden' name='L' value='$Aufruf{'L'}'>\n";

 if ($Fehler ne "")
 {
  print "<input type='text' name='MC' size='25' value='$Aufruf{'MC'}'>\n";
 }
 else
 {
  print "<input type='text' name='MC' size='25' value='$SPR[168]' onfocus=\"if(this.value=='$SPR[168]') this.value=''\" onblur=\"if(this.value=='') this.value='$SPR[168]'\" />\n";
 }


 print "<input type='submit' class='mitmach-submit' value='$SPR[169]'/>\n";
 print "</form>\n\n";

 print "<p class='wtg-header'>\n";
 if ($Fehler ne "")
 {
  print "$SPR[173]\n"; # Bitte prüfen Sie Ihre Eingabe oder fragen Sie den Administrator, ob der Code geändert wurde.
 }
 else
 {
  print "$SPR[170]\n"; # Ihre Teilnahme am Dialog-Tool erfolgt über einen URL-Zugangslink ....
 }
 print "</p>\n\n";


 print "</div>\n\n"; # login-content


 # neuer Abbinder (NOV 2015)
 print "<div class='footer-home'>\n";
 print "<a href='http://www.worktogether.net/living.html' target='_blank'>powered by worktogether.net</a>\n";
 print "</div>\n\n";


 print "</div>\n";
 print "</div>\n";
 print "</div>\n";

 print "</body>\n";

 print "</html>\n";

} # Start


sub Ascii_2_Hex ($)
{
 (my $str = shift) =~ s/(.|\n)/sprintf("%02lx", ord $1)/eg;
 return $str;
}

sub Hex_2_Ascii ($)
{
 (my $str = shift) =~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg;
 return $str;
}