LiteSpeed Linux server2.poyrazhosting.com 3.10.0-962.3.2.lve1.5.77.el7.x86_64 #1 SMP Mon Dec 12 07:06:14 EST 2022 x86_64 safemode : OFF MySQL: OFF | Perl: OFF | cURL: ON | WGet: OFF > / home / cuneytsener53 / maps2.snrsoft.com.tr / classes / | Server Ip : 172.67.216.244 |
Filename | /home/cuneytsener53/maps2.snrsoft.com.tr/classes/Auth.php |
Size | 11.79 kb |
Permission | rw-r--r-- |
Owner | |
Create time | 27-Mar-2025 13:57 |
Last modified | 27-Mar-2025 13:57 |
Last accessed | 29-Mar-2025 23:21 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
class Auth {
public function __construct() {
// Output buffering başlat
if (!headers_sent() && ob_get_level() == 0) {
ob_start();
}
// Session başlatma kontrolü
if (session_status() === PHP_SESSION_NONE) {
if (!headers_sent()) {
@session_start();
}
}
}
public function requireAuth() {
// Kullanıcı giriş yapmamışsa login sayfasına yönlendir
if (!$this->isLoggedIn()) {
header('Location: index.php');
exit;
}
// Kullanıcı giriş yapmış ama sözleşmeyi kabul etmemişse, sözleşme sayfasına yönlendir
if (!$this->hasAcceptedTerms() && !$this->isTermsPage()) {
header('Location: terms_of_use.php');
exit;
}
}
// Kullanıcının sözleşmeyi kabul edip etmediğini kontrol et
public function hasAcceptedTerms() {
return isset($_SESSION['terms_accepted']) && $_SESSION['terms_accepted'] === true;
}
// Mevcut sayfanın sözleşme kabul sayfası olup olmadığını kontrol et
private function isTermsPage() {
$currentPage = basename($_SERVER['SCRIPT_NAME']);
return $currentPage === 'terms_of_use.php';
}
// Kullanıcının sözleşmeyi kabul ettiğini kaydet
public function acceptTerms() {
$_SESSION['terms_accepted'] = true;
$_SESSION['terms_accepted_date'] = date('Y-m-d H:i:s');
try {
// Veritabanı sınıfını dahil et
require_once __DIR__ . '/../config/database.php';
// Veritabanına kullanıcının kabul ettiğini kaydet
$database = Database::getInstance();
$conn = $database->getConnection();
// Tablo var mı kontrol et
$checkTableQuery = "SHOW TABLES LIKE 'terms_acceptance'";
$tableExists = $conn->query($checkTableQuery);
// Tablo yoksa oluştur
if ($tableExists && $tableExists->num_rows == 0) {
$createTableQuery = "CREATE TABLE IF NOT EXISTS `terms_acceptance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`acceptance_date` timestamp NOT NULL DEFAULT current_timestamp(),
`terms_version` varchar(10) NOT NULL DEFAULT '1.0',
`ip_address` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
$conn->query($createTableQuery);
}
$userId = $this->getUserId();
$date = date('Y-m-d H:i:s');
// IP adresini al
$ip_address = $_SERVER['REMOTE_ADDR'];
// Önce kullanıcı kaydının olup olmadığını kontrol et
$checkQuery = "SELECT id FROM terms_acceptance WHERE user_id = ?";
$checkStmt = $conn->prepare($checkQuery);
if ($checkStmt) {
$checkStmt->bind_param("i", $userId);
$checkStmt->execute();
$result = $checkStmt->get_result();
if ($result->num_rows > 0) {
// Kayıt varsa güncelle
$updateQuery = "UPDATE terms_acceptance SET
acceptance_date = ?,
terms_version = '1.0',
ip_address = ?
WHERE user_id = ?";
$updateStmt = $conn->prepare($updateQuery);
if ($updateStmt) {
$updateStmt->bind_param("ssi", $date, $ip_address, $userId);
$updateStmt->execute();
}
} else {
// Kayıt yoksa ekle
$insertQuery = "INSERT INTO terms_acceptance
(user_id, acceptance_date, terms_version, ip_address)
VALUES (?, ?, '1.0', ?)";
$insertStmt = $conn->prepare($insertQuery);
if ($insertStmt) {
$insertStmt->bind_param("iss", $userId, $date, $ip_address);
$insertStmt->execute();
}
}
}
} catch (Exception $e) {
// Hata oluşsa bile kullanıcının devam etmesine izin ver
// Hatayı loglayabilirsiniz
error_log("Terms acceptance kayıt hatası: " . $e->getMessage());
}
}
public function isLoggedIn() {
return isset($_SESSION['user_id']);
}
public function getUserId() {
return $_SESSION['user_id'] ?? null;
}
public function getUserName() {
return $_SESSION['user_name'] ?? null;
}
public function getUserEmail() {
return $_SESSION['user_email'] ?? null;
}
public function isAdmin() {
if (!$this->isLoggedIn()) {
return false;
}
// Session'da role varsa kontrol et
if (isset($_SESSION['user_role'])) {
return $_SESSION['user_role'] === 'admin';
}
try {
// Veritabanından kullanıcı rolünü kontrol et
require_once __DIR__ . '/../config/database.php';
$database = Database::getInstance();
$conn = $database->getConnection();
$userId = $this->getUserId();
$sql = "SELECT role FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
return false;
}
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$role = $row['role'];
// Rolü session'a kaydet
$_SESSION['user_role'] = $role;
return $role === 'admin';
}
return false;
} catch (Exception $e) {
error_log("Admin kontrolü hatası: " . $e->getMessage());
return false;
}
}
public function verifyPassword($password) {
if (!$this->isLoggedIn()) {
return false;
}
try {
// Veritabanı bağlantısını al
require_once __DIR__ . '/../config/database.php';
$database = Database::getInstance();
$conn = $database->getConnection();
// Kullanıcının şifresini veritabanından al
$userId = $this->getUserId();
$sql = "SELECT password FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
return false;
}
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
// Şifreyi doğrula
return password_verify($password, $row['password']);
}
return false;
} catch (Exception $e) {
error_log("Şifre doğrulama hatası: " . $e->getMessage());
return false;
}
}
public function login($userId, $userName, $userEmail = null) {
$_SESSION['user_id'] = $userId;
$_SESSION['user_name'] = $userName;
if ($userEmail) {
$_SESSION['user_email'] = $userEmail;
}
try {
// Database sınıfını dahil et
require_once __DIR__ . '/../config/database.php';
// Tablo var mı kontrol et
$database = Database::getInstance();
$conn = $database->getConnection();
// E-posta oturumda yoksa veritabanından al
if (!isset($_SESSION['user_email'])) {
$query = "SELECT email FROM users WHERE id = ?";
$stmt = $conn->prepare($query);
if ($stmt) {
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$_SESSION['user_email'] = $row['email'];
}
}
}
// Sözleşme tablosu var mı kontrol et
$checkTableQuery = "SHOW TABLES LIKE 'terms_acceptance'";
$tableExists = $conn->query($checkTableQuery);
error_log("Sözleşme tablosu kontrolü: " . ($tableExists && $tableExists->num_rows > 0 ? "Tablo var" : "Tablo yok"));
// Eğer tablo varsa kullanıcının sözleşmeyi kabul edip etmediğini kontrol et
if ($tableExists && $tableExists->num_rows > 0) {
$query = "SELECT * FROM terms_acceptance WHERE user_id = ?";
$stmt = $conn->prepare($query);
if ($stmt) {
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
error_log("Kullanıcının sözleşme kaydı sorgusu: " . ($result && $result->num_rows > 0 ? "Kayıt var" : "Kayıt yok"));
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$_SESSION['terms_accepted'] = true;
$_SESSION['terms_accepted_date'] = $row['acceptance_date'];
error_log("Kullanıcı sözleşmeyi önceden kabul etmiş. Tarih: " . $row['acceptance_date']);
} else {
$_SESSION['terms_accepted'] = false;
error_log("Kullanıcının sözleşme kaydı bulunamadı, terms_accepted=false");
}
} else {
// Sorgu hazırlanmazsa, sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Sözleşme sorgusu hazırlanamadı, terms_accepted=false");
}
} else {
// Tablo yoksa, sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Sözleşme tablosu bulunamadı, terms_accepted=false");
}
} catch (Exception $e) {
// Hata durumunda sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Terms acceptance kontrol hatası: " . $e->getMessage());
}
// Debug için son oturum durumunu logla
error_log("Login sonrası oturum durumu: user_id=" . $_SESSION['user_id'] . ", terms_accepted=" . ($_SESSION['terms_accepted'] ? "true" : "false"));
return true;
}
public function logout() {
session_destroy();
header('Location: index.php');
exit;
}
}
?>
class Auth {
public function __construct() {
// Output buffering başlat
if (!headers_sent() && ob_get_level() == 0) {
ob_start();
}
// Session başlatma kontrolü
if (session_status() === PHP_SESSION_NONE) {
if (!headers_sent()) {
@session_start();
}
}
}
public function requireAuth() {
// Kullanıcı giriş yapmamışsa login sayfasına yönlendir
if (!$this->isLoggedIn()) {
header('Location: index.php');
exit;
}
// Kullanıcı giriş yapmış ama sözleşmeyi kabul etmemişse, sözleşme sayfasına yönlendir
if (!$this->hasAcceptedTerms() && !$this->isTermsPage()) {
header('Location: terms_of_use.php');
exit;
}
}
// Kullanıcının sözleşmeyi kabul edip etmediğini kontrol et
public function hasAcceptedTerms() {
return isset($_SESSION['terms_accepted']) && $_SESSION['terms_accepted'] === true;
}
// Mevcut sayfanın sözleşme kabul sayfası olup olmadığını kontrol et
private function isTermsPage() {
$currentPage = basename($_SERVER['SCRIPT_NAME']);
return $currentPage === 'terms_of_use.php';
}
// Kullanıcının sözleşmeyi kabul ettiğini kaydet
public function acceptTerms() {
$_SESSION['terms_accepted'] = true;
$_SESSION['terms_accepted_date'] = date('Y-m-d H:i:s');
try {
// Veritabanı sınıfını dahil et
require_once __DIR__ . '/../config/database.php';
// Veritabanına kullanıcının kabul ettiğini kaydet
$database = Database::getInstance();
$conn = $database->getConnection();
// Tablo var mı kontrol et
$checkTableQuery = "SHOW TABLES LIKE 'terms_acceptance'";
$tableExists = $conn->query($checkTableQuery);
// Tablo yoksa oluştur
if ($tableExists && $tableExists->num_rows == 0) {
$createTableQuery = "CREATE TABLE IF NOT EXISTS `terms_acceptance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`acceptance_date` timestamp NOT NULL DEFAULT current_timestamp(),
`terms_version` varchar(10) NOT NULL DEFAULT '1.0',
`ip_address` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
$conn->query($createTableQuery);
}
$userId = $this->getUserId();
$date = date('Y-m-d H:i:s');
// IP adresini al
$ip_address = $_SERVER['REMOTE_ADDR'];
// Önce kullanıcı kaydının olup olmadığını kontrol et
$checkQuery = "SELECT id FROM terms_acceptance WHERE user_id = ?";
$checkStmt = $conn->prepare($checkQuery);
if ($checkStmt) {
$checkStmt->bind_param("i", $userId);
$checkStmt->execute();
$result = $checkStmt->get_result();
if ($result->num_rows > 0) {
// Kayıt varsa güncelle
$updateQuery = "UPDATE terms_acceptance SET
acceptance_date = ?,
terms_version = '1.0',
ip_address = ?
WHERE user_id = ?";
$updateStmt = $conn->prepare($updateQuery);
if ($updateStmt) {
$updateStmt->bind_param("ssi", $date, $ip_address, $userId);
$updateStmt->execute();
}
} else {
// Kayıt yoksa ekle
$insertQuery = "INSERT INTO terms_acceptance
(user_id, acceptance_date, terms_version, ip_address)
VALUES (?, ?, '1.0', ?)";
$insertStmt = $conn->prepare($insertQuery);
if ($insertStmt) {
$insertStmt->bind_param("iss", $userId, $date, $ip_address);
$insertStmt->execute();
}
}
}
} catch (Exception $e) {
// Hata oluşsa bile kullanıcının devam etmesine izin ver
// Hatayı loglayabilirsiniz
error_log("Terms acceptance kayıt hatası: " . $e->getMessage());
}
}
public function isLoggedIn() {
return isset($_SESSION['user_id']);
}
public function getUserId() {
return $_SESSION['user_id'] ?? null;
}
public function getUserName() {
return $_SESSION['user_name'] ?? null;
}
public function getUserEmail() {
return $_SESSION['user_email'] ?? null;
}
public function isAdmin() {
if (!$this->isLoggedIn()) {
return false;
}
// Session'da role varsa kontrol et
if (isset($_SESSION['user_role'])) {
return $_SESSION['user_role'] === 'admin';
}
try {
// Veritabanından kullanıcı rolünü kontrol et
require_once __DIR__ . '/../config/database.php';
$database = Database::getInstance();
$conn = $database->getConnection();
$userId = $this->getUserId();
$sql = "SELECT role FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
return false;
}
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$role = $row['role'];
// Rolü session'a kaydet
$_SESSION['user_role'] = $role;
return $role === 'admin';
}
return false;
} catch (Exception $e) {
error_log("Admin kontrolü hatası: " . $e->getMessage());
return false;
}
}
public function verifyPassword($password) {
if (!$this->isLoggedIn()) {
return false;
}
try {
// Veritabanı bağlantısını al
require_once __DIR__ . '/../config/database.php';
$database = Database::getInstance();
$conn = $database->getConnection();
// Kullanıcının şifresini veritabanından al
$userId = $this->getUserId();
$sql = "SELECT password FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
return false;
}
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
// Şifreyi doğrula
return password_verify($password, $row['password']);
}
return false;
} catch (Exception $e) {
error_log("Şifre doğrulama hatası: " . $e->getMessage());
return false;
}
}
public function login($userId, $userName, $userEmail = null) {
$_SESSION['user_id'] = $userId;
$_SESSION['user_name'] = $userName;
if ($userEmail) {
$_SESSION['user_email'] = $userEmail;
}
try {
// Database sınıfını dahil et
require_once __DIR__ . '/../config/database.php';
// Tablo var mı kontrol et
$database = Database::getInstance();
$conn = $database->getConnection();
// E-posta oturumda yoksa veritabanından al
if (!isset($_SESSION['user_email'])) {
$query = "SELECT email FROM users WHERE id = ?";
$stmt = $conn->prepare($query);
if ($stmt) {
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$_SESSION['user_email'] = $row['email'];
}
}
}
// Sözleşme tablosu var mı kontrol et
$checkTableQuery = "SHOW TABLES LIKE 'terms_acceptance'";
$tableExists = $conn->query($checkTableQuery);
error_log("Sözleşme tablosu kontrolü: " . ($tableExists && $tableExists->num_rows > 0 ? "Tablo var" : "Tablo yok"));
// Eğer tablo varsa kullanıcının sözleşmeyi kabul edip etmediğini kontrol et
if ($tableExists && $tableExists->num_rows > 0) {
$query = "SELECT * FROM terms_acceptance WHERE user_id = ?";
$stmt = $conn->prepare($query);
if ($stmt) {
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
error_log("Kullanıcının sözleşme kaydı sorgusu: " . ($result && $result->num_rows > 0 ? "Kayıt var" : "Kayıt yok"));
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
$_SESSION['terms_accepted'] = true;
$_SESSION['terms_accepted_date'] = $row['acceptance_date'];
error_log("Kullanıcı sözleşmeyi önceden kabul etmiş. Tarih: " . $row['acceptance_date']);
} else {
$_SESSION['terms_accepted'] = false;
error_log("Kullanıcının sözleşme kaydı bulunamadı, terms_accepted=false");
}
} else {
// Sorgu hazırlanmazsa, sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Sözleşme sorgusu hazırlanamadı, terms_accepted=false");
}
} else {
// Tablo yoksa, sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Sözleşme tablosu bulunamadı, terms_accepted=false");
}
} catch (Exception $e) {
// Hata durumunda sözleşme kabul edilmemiş varsay
$_SESSION['terms_accepted'] = false;
error_log("Terms acceptance kontrol hatası: " . $e->getMessage());
}
// Debug için son oturum durumunu logla
error_log("Login sonrası oturum durumu: user_id=" . $_SESSION['user_id'] . ", terms_accepted=" . ($_SESSION['terms_accepted'] ? "true" : "false"));
return true;
}
public function logout() {
session_destroy();
header('Location: index.php');
exit;
}
}
?>