Compare commits
3 Commits
main
...
feature/au
Author | SHA1 | Date | |
---|---|---|---|
![]() |
49a8f6a1dc | ||
![]() |
78e1e72eba | ||
![]() |
4fa775f326 |
55
Controller/AuthController.php
Normal file
55
Controller/AuthController.php
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Blog\Controller;
|
||||||
|
|
||||||
|
use Blog\Model\AuthModel;
|
||||||
|
|
||||||
|
class AuthController
|
||||||
|
{
|
||||||
|
protected $view;
|
||||||
|
private $db;
|
||||||
|
private $validData = array();
|
||||||
|
private $errors = array();
|
||||||
|
private $labels = array("name" => "Name", "email" => "E-Mail-Adresse", "content" => "Nachricht");
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct($view)
|
||||||
|
{
|
||||||
|
$this->db = new AuthModel();
|
||||||
|
$this->view = $view;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function showAuthForm()
|
||||||
|
{
|
||||||
|
$this->view->setVars([
|
||||||
|
'labels' => $this->labels,
|
||||||
|
'validData' => $this->validData,
|
||||||
|
'errors' => $this->errors
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function showConfirmation()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validateForm(){
|
||||||
|
foreach ($this->labels as $index => $value) {
|
||||||
|
if (!isset($_POST[$index]) || empty($_POST[$index])) {
|
||||||
|
$this->errors[$index] = "Bitte " . $value . " angeben";
|
||||||
|
} else {
|
||||||
|
$this->validData[$index] = $_POST[$index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($this->errors) > 0) {
|
||||||
|
$this->view->setDoMethodName("showContactForm");
|
||||||
|
$this->showContactForm();
|
||||||
|
} else {
|
||||||
|
if ($this->db->writeContactData($this->validData)) {
|
||||||
|
$this->view->setDoMethodName("showConfirmation");
|
||||||
|
$this->showConfirmation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
149
Model/AuthModel.php
Normal file
149
Model/AuthModel.php
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Blog\Model;
|
||||||
|
|
||||||
|
use PDOException;
|
||||||
|
|
||||||
|
class AuthModel extends Database
|
||||||
|
{
|
||||||
|
public function login($email, $password){
|
||||||
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
|
||||||
|
$params=array();
|
||||||
|
$params[":email"] = $email;
|
||||||
|
$params[":password"] = $hashedPassword;
|
||||||
|
|
||||||
|
$sql = "SELECT email, password, validUntil FROM user WHERE email = $email AND password = $password";
|
||||||
|
|
||||||
|
$pdo = $this->linkDB();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute($params);
|
||||||
|
$result = $sth->fetchAll();
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e);
|
||||||
|
die;
|
||||||
|
}
|
||||||
|
if(new \DateTime() <= DateTime($result['validUntil']))
|
||||||
|
return $result ? true : false;
|
||||||
|
else
|
||||||
|
return "Ihr Passwort ist abgelaufen \n bitte erstellen Sie ein neues über: Passwort Vergessen";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function register($email, $password, $straße, $hausnr, $ort, $postleitzahl, $land, $vorname, $nachname, $tel)
|
||||||
|
{
|
||||||
|
$rtn = $this->pwRequirementCheck($password);
|
||||||
|
if($rtn !== true){
|
||||||
|
return $rtn;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
|
||||||
|
$sql = "INSERT INTO user (email, passwort, straße, hausnr, ort, postleitzahl,land, vorname, nachname, tel)
|
||||||
|
VALUES (:email, :password, :straße, :hausnr, :ort, :postleitzahl, :land, :vorname, :nachname, :tel)";
|
||||||
|
|
||||||
|
try{
|
||||||
|
$pdo = $this->linkDB();
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
return $stmt->execute([
|
||||||
|
':email' => $email,
|
||||||
|
':password' => $hashedPassword,
|
||||||
|
':straße' => $straße,
|
||||||
|
':hausnr' => $hausnr,
|
||||||
|
':ort' => $ort,
|
||||||
|
':postleitzahl' => $postleitzahl,
|
||||||
|
':land' => $land,
|
||||||
|
':vorname' => $vorname,
|
||||||
|
':nachname' => $nachname,
|
||||||
|
':tel' => $tel
|
||||||
|
]);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e);
|
||||||
|
die;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function pwRequirementCheck($password){
|
||||||
|
$error = [];
|
||||||
|
|
||||||
|
if(strlen($password) <= 8)
|
||||||
|
$error[] = "min 8 Charackter";
|
||||||
|
if(!preg_match("/[A-Z]/", $password))
|
||||||
|
$error[] = "min one large Character";
|
||||||
|
if(!preg_match("/[a-z]/", $password))
|
||||||
|
$error[] = "min one small charakter";
|
||||||
|
if(!preg_match("/[0-9]/", $password))
|
||||||
|
$error[] = "min one number";
|
||||||
|
if(!preg_match("/[ <>|°^,;·.:…\-_–#'’+*~!¹\"²§³\$¼%½&¬/{([)]=}?ß\\\`¸´¡⅛£¤⅜⅝⅞™±¿˛¯˘—÷×»«¢„“”µþø→↓←ŧ¶€ſ@æſðđŋħ.ĸłµ”“„¢«»›‹©‚‘’ºÆẞЪŊĦ˙&ŁΩ§€®Ŧ¥↑ıØÞ ]/", $password));
|
||||||
|
$error[] = "min one of these: <>|°^,;·.:…\-_–#'’+*~!¹\"²§³\$¼%½&¬/{([)]=}?ß\\\`¸´¡⅛£¤⅜⅝⅞™±¿˛¯˘—÷×»«¢„“”µþø→↓←ŧ¶€ſ@æſðđŋħ.ĸłµ”“„¢«»›‹©‚‘’ºÆẞЪŊĦ˙&ŁΩ§€®Ŧ¥↑ıØÞ";
|
||||||
|
|
||||||
|
if(empty($error))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function pwForgot($email){
|
||||||
|
$randomPw = bin2hex(random_bytes(12 / 2));
|
||||||
|
$hashedPassword = password_hash($randomPw, PASSWORD_DEFAULT);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$betreff = "Passwort zurücksetzen bei bibArts";
|
||||||
|
$nachricht = "Hallo,\n\nhier ihr temporäres Passwort:\n\n $randomPw \n\n Bitte beachten Sie, dass das Passwort nur 2 stunden Gülltig ist. \nViele Grüße,\nbibArts Team";
|
||||||
|
|
||||||
|
$header = "From: noreply@edu.bib.de\r\n";
|
||||||
|
$header .= "Content-Type: text/plain; charset=UTF-8\r\n";
|
||||||
|
|
||||||
|
$maxTries = 5;
|
||||||
|
$try = 0;
|
||||||
|
$success = false;
|
||||||
|
|
||||||
|
while ($try < $maxTries && !$success) {
|
||||||
|
$erfolg = mail($email, $betreff, $nachricht, $header);
|
||||||
|
$try++;
|
||||||
|
if (!$erfolg) {
|
||||||
|
error_log("Mailversuch $try an $email fehlgeschlagen.");
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function forgottenPwUpdate($email, $hashedPassword)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$pdo = $this->linkDB();
|
||||||
|
|
||||||
|
$sqlCheck = "SELECT COUNT(*) FROM user WHERE email = :email";
|
||||||
|
$stmt = $pdo->prepare($sqlCheck);
|
||||||
|
$stmt->execute([':email' => $email]);
|
||||||
|
if ($stmt->fetchColumn() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "UPDATE user
|
||||||
|
SET passwort = :password
|
||||||
|
WHERE email = :email";
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
return $stmt->execute([
|
||||||
|
':email' => $email,
|
||||||
|
':password' => $hashedPassword
|
||||||
|
]);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren der Daten.", $e);
|
||||||
|
die;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkDoublePw($password1, $password2){
|
||||||
|
if($password1 === $password2){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
138
bibarts.sql
Normal file
138
bibarts.sql
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
CREATE TABLE user (
|
||||||
|
userid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
vorname VARCHAR(50),
|
||||||
|
nachname VARCHAR(50),
|
||||||
|
straße VARCHAR(100),
|
||||||
|
hausnr VARCHAR(10),
|
||||||
|
postleitzahl VARCHAR(10),
|
||||||
|
ort VARCHAR(50),
|
||||||
|
land VARCHAR(50),
|
||||||
|
tel VARCHAR(20),
|
||||||
|
email VARCHAR(100) UNIQUE,
|
||||||
|
isAdmin BOOLEAN DEFAULT FALSE,
|
||||||
|
password VARCHAR(255)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE standort (
|
||||||
|
standortid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
straße VARCHAR(100),
|
||||||
|
hausnr VARCHAR(10),
|
||||||
|
postleitzahl VARCHAR(10),
|
||||||
|
ort VARCHAR(50),
|
||||||
|
land VARCHAR(50),
|
||||||
|
tel VARCHAR(20),
|
||||||
|
email VARCHAR(100)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE ausstellung (
|
||||||
|
austellungid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
standortid INT,
|
||||||
|
datum_von DATE,
|
||||||
|
datum_bis DATE,
|
||||||
|
name VARCHAR(100),
|
||||||
|
beschreibung TEXT,
|
||||||
|
max_tickets INT,
|
||||||
|
FOREIGN KEY (standortid) REFERENCES Standort(standortid)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE ticket (
|
||||||
|
ticketid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
userid INT,
|
||||||
|
eventid INT,
|
||||||
|
kaufdatum DATE,
|
||||||
|
gültigkeitsdatum DATE,
|
||||||
|
preis DECIMAL(10,2),
|
||||||
|
FOREIGN KEY (userid) REFERENCES User(userid),
|
||||||
|
FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE gutschein (
|
||||||
|
gutscheinid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
code VARCHAR(50) UNIQUE,
|
||||||
|
rabatt INT CHECK (rabatt BETWEEN 0 AND 100),
|
||||||
|
eventid INT,
|
||||||
|
gültigkeit DATE,
|
||||||
|
FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE news (
|
||||||
|
newsid INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
name VARCHAR(100),
|
||||||
|
beschreibung TEXT,
|
||||||
|
datum DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
--Testdaten
|
||||||
|
|
||||||
|
INSERT INTO user (vorname, nachname, straße, hausnr, postleitzahl, ort, land, tel, email, isAdmin, password)
|
||||||
|
VALUES
|
||||||
|
('Max', 'Muster', 'Musterstraße', '1', '12345', 'Musterstadt', 'Deutschland', '0123456789', 'max@muster.de', FALSE, 'passwort123'),
|
||||||
|
('Anna', 'Beispiel', 'Beispielweg', '5a', '54321', 'Beispielstadt', 'Deutschland', '0987654321', 'anna@beispiel.de', TRUE, 'adminpass');
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO standort (straße, hausnr, postleitzahl, ort, land, tel, email)
|
||||||
|
VALUES
|
||||||
|
('Galeriestraße', '10', '10115', 'Berlin', 'Deutschland', '030123456', 'kontakt@galerie-berlin.de'),
|
||||||
|
('Kunstallee', '22b', '50667', 'Köln', 'Deutschland', '0221123456', 'info@kunst-koeln.de');
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO ausstellung (standortid, datum_von, datum_bis, name, beschreibung, max_tickets)
|
||||||
|
VALUES
|
||||||
|
(1, '2025-07-01', '2025-08-31', 'Moderne Meisterwerke', 'Eine Sammlung moderner Kunstwerke aus Europa.', 200),
|
||||||
|
(2, '2025-09-10', '2025-10-20', 'Kunst der Antike', 'Ausstellung antiker Skulpturen und Gemälde.', 150);
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO gutschein (code, rabatt, eventid, gültigkeit)
|
||||||
|
VALUES
|
||||||
|
('SOMMER2025', 15, 1, '2025-08-31'),
|
||||||
|
('HERBST25', 25, 2, '2025-10-15');
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO ticket (userid, eventid, kaufdatum, gültigkeitsdatum, preis)
|
||||||
|
VALUES
|
||||||
|
(1, 1, '2025-06-01', '2025-07-15', 12.50),
|
||||||
|
(2, 2, '2025-06-05', '2025-09-15', 10.00);
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO news (name, beschreibung, datum)
|
||||||
|
VALUES
|
||||||
|
('Neuer Standort eröffnet', 'Unsere Galerie in Köln ist jetzt geöffnet!', '2025-06-01'),
|
||||||
|
('Frühbucher-Rabatt', 'Sichern Sie sich jetzt 15% Rabatt auf unsere Sommerausstellung.', '2025-05-20');
|
||||||
|
|
||||||
|
--Änderungen:
|
||||||
|
|
||||||
|
ALTER TABLE austellung
|
||||||
|
ADD preis decimal NOT NULL
|
||||||
|
|
||||||
|
ALTER TABLE ticket
|
||||||
|
DROP COLUMN preis
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE user
|
||||||
|
MODIFY COLUMN userid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE ticket
|
||||||
|
MODIFY COLUMN ticketid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE standort
|
||||||
|
MODIFY COLUMN standortid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE news
|
||||||
|
MODIFY COLUMN newsid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE gutschein
|
||||||
|
MODIFY COLUMN gutscheinid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE ausstellung
|
||||||
|
MODIFY COLUMN austellungid INT NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
|
ALTER TABLE user
|
||||||
|
MODIFY COLUMN isAdmin BOOLEAN DEFAULT FALSE;
|
||||||
|
|
||||||
|
ALTER TABLE user
|
||||||
|
ADD validUntil DATETIME NOT NULL DEFAULT '3025-01-01 00:00:00';
|
Loading…
x
Reference in New Issue
Block a user