#!/usr/bin/perl
#############################################################
# Userverwaltung Login, Registrieren und Passwort zusenden
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Powered by XL-SOFT
# E-Mail: info@xl-soft.de
# Webseite: http://www.xl-soft.de
#############################################################
use CGI::Carp qw(fatalsToBrowser);
# Dateiflock
use Fcntl qw(:DEFAULT :flock);
use CGI qw(:standard);
use CGI;
use DBI;
$object = new CGI;
@names = $object->param();
%FORM = map {$_ => $object->param($_)} $object->param();
$| = 1;
##############################################################
# Name des Programms
$progname = "login.cgi";
# Name der Userdatei
$userprog = "user.cgi";
# Benoetigte Dateien einbinden
require "setup/setup.pl";
require "setup/version.pl";
require "setup/extraconfig.pl";
require "routinen/module/scriptlibrary.pl";
require "routinen/module/datenbank.pl";
use lib "routinen/module/";
use Archive::FRWtools;
# Mit DB Verb
&verbinden;
# Fehlerpruefung
$fehlermeldung = "";
$fehler_gefunden = "";
# -----------------------------------------------------------------------
$errormeldung = "
Der Shopserver ist derzeit wegen Wartungsarbeiten geschlossen\n" ;
if (-e "$cgipfad/setup/globalclose.txt") {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
# -----------------------------------------------------------------------
if ($fehler_gefunden) {
&fehlerausgabeverwaltung;
exit;
}
$hauptmenue = &hauptmenue;
# Logintestfiles nach 1 Tag loeschen
FRWtools::daytmpdel("$cgipfad/logins", "1");
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Aufrufparameter der Haupt und Modulroutinen
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
$subaufrufparameter = $FORM{'aktion'};
if ($subaufrufparameter eq '') {
&login;
}
elsif ($subaufrufparameter =~ m/^(logincheck|pwsend|register|sendadmin|sendkey|sendfree|key|keycheck|pc|pcfree)$/) {
&$subaufrufparameter;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Loginformular und Passwortversand fuer registrierte Benutzer
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub login {
$sektionstitel = "Login und Passwort versenden Formular";
&Headerout;
print &tparser("$cgipfad/templates/user/header.html");
print &tparser("$cgipfad/templates/user/contentkopf.html");
print qq~
~;
print &tparser("$cgipfad/templates/user/contentfuss.html");
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Logincheck und Cookiesetzen
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub logincheck {
$loginpass = datensaver($FORM{'loginpass'});
$loginuser = datensaver($FORM{'loginuser'});
if (($loginuser eq '') || ($loginpass eq '')) {
$loginfehlertext = "Kein Username oder Passwort angegeben!";
&login($loginfehlertext);
exit;
}
# mid, vname, nname, strnr, plz, ort, land, email, datum, user, pass, newpw, free, aktiv, shopvz
my $members = $prefix . "members";
my $sth = $dbh->prepare("SELECT mid, user, pass, free FROM $members WHERE user = '$loginuser' LIMIT 1");
$sth->execute or die DBI->errstr;
($memberid, $memberuser, $memberpw, $memberfree) = $sth->fetchrow();
my $salt = substr($memberpw, 0,2);
my $cryptedlogin = crypt($loginpass, $salt);
$ende_cookdate = datumsroutine("EI","1","0");
if ($loginuser eq $memberuser && $cryptedlogin eq $memberpw && $memberfree != 1) {
$loginfehlertext = "Ihr Shopserverserverzugang ist nicht freigeschaltet oder fordert gerade ein neues Passwort an";
&login($loginfehlertext);
exit;
} elsif ($loginuser ne $memberuser || $cryptedlogin ne $memberpw) {
$loginfehlertext = "Keine oder falsche Zugangsdaten eingegeben!";
&login($loginfehlertext);
exit;
} elsif ($loginuser eq $memberuser && $cryptedlogin eq $memberpw && $memberfree == 1) {
print "Set-Cookie: usershoplogin=$memberid|$memberuser|$cryptedlogin; expires=$ende_cookdate\n";
$savelogmd = "$memberid|$memberuser|$cryptedlogin";
FRWtools::writelinie("$savelogmd", "$cgipfad/logins/$memberid.pl");
# Statistik updaten ###########################################
# stid, shopid, startdatum, kundenzahl, wkanzahl, letzterwk, bestellungen, gesamtwert, artikelanzahl, verkaufteartikel, logins, letzter_login
my $shopvz = sprintf("%6d",$memberid);
$shopvz =~ tr/ /0/;
$shopvznummer = 's' . $shopvz;
if (-e "$cgipfad/shops/$shopvznummer/index.cgi") {
my $login_sek = datumsroutine("HI");
my $shopstatistik = $prefix . "shopstatistik";
my $sth = $dbh->prepare("UPDATE $shopstatistik SET logins = logins + 1, letzter_login = '$login_sek' WHERE shopid = '$memberid'");
$sth->execute or die DBI->errstr;
}
###############################################################
print "Location: $cgiverzeichnis/$userprog \n\n";
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# E-Mail pruefen und neuen Passwortfreischaltcode zusenden
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub pwsend {
my $useremail = datensaver($FORM{'useremail'});
$useremail = lc($useremail);
if ($useremail ne '') {
my $members = $prefix . "members";
my $sth = $dbh->prepare("SELECT mid, vname, nname, email, free FROM $members WHERE email = '$useremail' LIMIT 1");
$gefunden = $sth->execute or die DBI->errstr;
$gefundenanz = $gefunden eq "0E0" ? 0 : $gefunden;
@mdata = $sth->fetchrow_array();
}
# mid, vname, nname, strnr, plz, ort, land, email, datum, user, pass, newpw, free, aktiv, shopvz
# Fehlerpruefung
$fehlermeldung = "";
$fehler_gefunden = "";
# -----------------------------------------------------------------------
$errormeldung = "Es wurden keine Daten eingegeben im Formular!\n" ;
if ($useremail eq '') {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "Dieser Account ist noch nicht freigeschaltet oder fordert gerade ein neues Paswort an!\n" ;
if ($mdata[4] != 1) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "Es wurden keine Daten zur angegebenen E-Mail Adresse gefunden!\n" ;
if (!$gefundenanz) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
# -----------------------------------------------------------------------
if ($fehler_gefunden) {
&fehlerausgabeverwaltung;
exit;
} else {
$newuserkey = FRWtools::pw_gen("15", "3", "0");
my $members = $prefix . "members";
my $sth = $dbh->prepare("UPDATE $members SET pass = '', newpw = '$newuserkey', free = '0' WHERE mid = '$mdata[0]'");
$sth->execute or die DBI->errstr;
# mid, vname, nname, strnr, plz, ort, land, email, datum, user, pass, newpw, free, aktiv, shopvz
# Mail an User
my $mailbodyt = <\n";
print MAIL "To: $mdata[3] ($mdata[1] $mdata[2])\n";
print MAIL "From: $adminemail ($sitetitel)\n";
print MAIL "Subject: Ihre Passwortanforderung zum Shopserverlogin\n\n";
print MAIL "$mailbodyt\n\n";
close MAIL;
###################### HTML Output
&Headerout;
$sektionstitel = "Daten wurden gesendet!";
print &tparser("$cgipfad/templates/user/header.html");
print qq~
| $sektionstitel |
Wichtiger Hinweis!
Es wurde eine Mail mit einem Freischaltcode an die gefundene E-Mail Adresse gesendet. Um das neue Passwort zu erhalten
befolgen Sie bitte die Hinweise in der E-Mail.
Sie werden in 30 Sekunden automatisch weitergeleitet, wenn ihr Browser keine Weiterleitung unterstützt klicken Sie bitte auf
diesen Link
|
| $scriptversionsinfo |