invalid command name "SESSION"
while executing
"SESSION activate"
(in namespace eval "::request" script line 31)
invoked from within
"namespace eval ::request $script"
("::try" body line 12)
OUTPUT BUFFER:
# haendlerportal/index.tcl
#
# Über dieses Skript laufen
# - Einstieg in das Händlerportal
# - Login
# - Passwortanforderung
#
set text_plain "\Hi there,
Here are your new login details for the Velometrik Dealer Portal – you're all set to go!
Link: https://www.dashaendlerportal.de
Username: \$email
Password: \$password
Just enter the password without quotation marks along with your email address (\$email).
If you have any questions or run into any issues, feel free to reach out – we’re happy to help!
Email: support@velometrik.de
Phone: +49 (0) 34342 509760
Wishing you lots of success and fun with your Velometrik system!
Best regards,
Your Velometrik Team
"
SESSION activate
set login 0; # login erforderlich
# login_reason wird nur gesetzt, wenn eine spezielle Notwendigkeit für eine (Neu)Anmeldung vorliegt.
# Handelt es sich um eine Anmeldung ?
if {[::rivet::var exists login]} {; #{{{ (Neu)Anmeldung
set email [::rivet::var get email {}]
# Das geht über DIO, weil die Tabelle in der Datenbank mit den Sessiondaten ist.
set sql_select "SELECT TRIM(vmk_kdnr) AS vmk_kdnr FROM haendler WHERE kontaktemail = '$email' AND password = md5('[::rivet::var get passwd {}]'::TEXT)"
set result [DIO_haendlerportal exec $sql_select]
if {"[$result errorcode]" == "PGRES_TUPLES_OK"} {
if {[$result next -list vmk_kdnr]} {; # Datensatzgefunden, d.h. email/passwort O.K.
SESSION store haendler email $email
SESSION store haendler vmk_kdnr $vmk_kdnr
# Die haendler_id muß aus einer anderen Datenbank geholt werden.
set vmk_kdnr [lindex $vmk_kdnr 0]
if {![::vmkprodukte select "SELECT haendler_id FROM haendler WHERE vmk_kdnr = '$vmk_kdnr'" haendler_ids]} {; # Fehler
# Der Fehler ist hier schon protokolliert.
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
}
if {[llength $haendler_ids] != 1} {
::rivet::apache_log_error err "Fehlende oder mehrdeutige vmk_kdnr in vmkprodukte: '$vmk_kdnr'"
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
}
set haendler_id [dict get [lindex $haendler_ids 0] haendler_id]
unset haendler_ids
SESSION store haendler id $haendler_id
} else {
set login 1
set login_reason "Email oder Passwort falsch."
::rivet::apache_log_error notice "Loginversuch mit unbekannter email: $email"
}
} else {; # Fehler
::rivet::apache_log_error err "[$result errorcode]: [$result errorinfo]"
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
}
#}}}
} elseif {[::rivet::var exists newpwd]} {; #{{{ Passwortanforderung
set email [::rivet::var get email {}]
set login 1
if {"$email" == ""} {; # Email nicht angegeben
set login_reason "Email zum Zuschicken des Passworts bitte angeben!"
} else {
# Gibt es die angegebene Email?
# Aktuelles Passwort für den Fall holen, daß es zurückgesetzt werden muß.
set sql_select "SELECT TRIM(vmk_kdnr) AS vmk_kdnr, password FROM haendler WHERE kontaktemail='$email'"
set result [DIO_haendlerportal exec $sql_select]
if {"[$result errorcode]" == "PGRES_TUPLES_OK"} {
if {[$result next -list row]} {; # Die email ist bekannt.
set vmk_kdnr [lindex $row 0]
set password_old [lindex $row 1]
# Passwort generieren
set password [::vmkprodukte::utils::generatePassword]
# Passwort speichern
set sql_update "UPDATE haendler SET password = md5('$password') WHERE vmk_kdnr = '$vmk_kdnr'"
set result [DIO_haendlerportal exec $sql_update]
if {"[$result errorcode]" != "PGRES_COMMAND_OK"} {; # Neues Passwort konnte nicht gespeichert werden.
::rivet::apache_log_error err "[$result errorcode]: [$result errorinfo]"
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
}
# Passwort abschicken
# Für die Anschrift wird noch der Händlername geholt
set sql_select "SELECT bezeichnung FROM haendler WHERE vmk_kdnr = '$vmk_kdnr'"
if {[::vmkprodukte select $sql_select row]} {
set to_name [dict get [lindex $row 0] bezeichnung]
} else {; # Fehler
set to_name "Velometrikkunde"
}
# text_plain enthält die Variablen $password und $email, die hier gesetzt sein müssen.
set content [::mime::initialize -canonical "text/plain; charset=UTF-8" -string [subst $text_plain]]
set result [::smtp::sendmessage $content \
-recipients $email -originator $::smtp_sender \
-header [list Subject "Your New Password for the Dealer Portal"] \
-header [list From "\"Velometrik Support\" "] \
-header [list To "\"$to_name\" <$email>"] \
-servers $::smtp_server \
-ports $::smtp_port \
-usetls $::smtp_tls \
-username $::smtp_user -password $::smtp_pwd]
if {[llength $result] == 0} {; # Kein Empfaenger zurueckgewiesen
::rivet::apache_log_error notice "Neues Passwort (md5 = '[::md5::md5 -hex $password]') an $email verschickt."
set login_reason "The password has been sent to $email."
# Das bedeutet leider noch nicht, daß sie angekommen ist.
} else {; # Emailversand definitiv gescheitert
::rivet::apache_log_error err "$result"
set login_reason "Fehler! Das Passwort konnte nicht verschickt werden."
# => Zurücksetzen auf altes Passwort.
set sql_update "UPDATE haendler SET password = '$password_old' WHERE vmk_kdnr = '$vmk_kdnr'"
set result [DIO_haendlerportal exec $sql_update]
if {"[$result errorcode]" != "PGRES_COMMAND_OK"} {; # Neues Passwort konnte nicht zurückgesetzt werden.
::rivet::apache_log_error err "[$result errorcode]: [$result errorinfo]"
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
} else {
append login_reason "\nDas alte Passwort wurde wieder hergestellt."
}
}
} else {
set login_reason "$email ist bei Velometrik nicht bekannt."
::rivet::apache_log_error notice "Passwortanforderung mit unbekannter email: $email"
}
} else {; # Fehler
::rivet::apache_log_error err "[$result errorcode]: [$result errorinfo]"
puts [::rivet::include ./internal_server_error.html]
DIO_haendlerportal close
return
}
}; # else email für Passwortanforderung wurde angegeben
#}}}
} else {; #{{{ Anderweitiger Seitenaufruf (weder Anmeldung noch Passwortanforderung)
if {[SESSION is_new_session]} {
set login 1
if {"[SESSION new_session_reason]" == "timeout"} {
set login_reason "Die Sitzung ist abgelaufen."
}
} else {
# Daß die Session existiert, heißt noch nicht, daß eine Anmeldung erfolgt ist.
# => 'mal nachschauen
set email [SESSION fetch haendler email]
if {"$email" == ""} {
# Da ist noch nichts.
unset email
set login 1
}
}
#}}}
}
DIO_haendlerportal close
if {$login} {
# Login erforderlich
puts [::rivet::parse ./login.rvt]
} else {
# Login ist bereits erfolgt.
source ./uebersicht.tcl
}