From 329b3df928e15bdffc9c4945f96c29fe42b4e896 Mon Sep 17 00:00:00 2001 From: Atakan Date: Fri, 28 Nov 2025 15:50:32 +0300 Subject: [PATCH] last --- index.html | 4 +-- public/logo.png | Bin 0 -> 20124 bytes src/pages/Home.jsx | 78 +++++++++++++++++++++++++++++++------------ src/pages/Portal.jsx | 27 +++++++++++---- 4 files changed, 80 insertions(+), 29 deletions(-) create mode 100644 public/logo.png diff --git a/index.html b/index.html index d751e30..7b39d07 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@ - + - atakan-portal + Atakan
diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cd060ccafbf146f6a349851ba3ea492ce0ea6557 GIT binary patch literal 20124 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, desc: "Core & Enterprise" }, { name: "Spring Boot", icon: , desc: "Microservices" }, @@ -50,16 +44,49 @@ export default function Home() { const [isModalOpen, setIsModalOpen] = useState(false); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); + + // Yeni State'ler const [error, setError] = useState(""); + const [isLoading, setIsLoading] = useState(false); + const navigate = useNavigate(); - const handleLogin = (e) => { + const API_URL = "https://api.atakanzgn.com.tr/login"; + + const handleLogin = async (e) => { e.preventDefault(); - if (username === AUTH_CONFIG.username && password === AUTH_CONFIG.password) { - sessionStorage.setItem('isAuthenticated', 'true'); - navigate('/portal'); - } else { - setError("Hatalı kullanıcı adı veya şifre!"); + setError(""); + setIsLoading(true); + + try { + const response = await fetch(API_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + username: username, + password: password + }), + }); + + const data = await response.json(); + + if (response.ok) { + // Başarılı giriş: Token'ı sakla + // Backend'den { token: "..." } veya { accessToken: "..." } döndüğünü varsayıyoruz. + sessionStorage.setItem('authToken', data.token || data.accessToken); + sessionStorage.setItem('user', JSON.stringify(data.user)); // Opsiyonel: Kullanıcı bilgisini sakla + navigate('/portal'); + } else { + // Backend'den gelen hata mesajını göster + setError(data.message || "Giriş başarısız. Bilgileri kontrol edin."); + } + } catch (err) { + console.error("Login hatası:", err); + setError("Sunucuya bağlanılamadı. Lütfen daha sonra tekrar deneyin."); + } finally { + setIsLoading(false); } }; @@ -99,7 +126,6 @@ export default function Home() { {/* --- HERO BÖLÜMÜ --- */}
- {/* Renkleri Java/Backend temasına uygun (Turuncu/Kırmızı) güncelledim */}
@@ -124,7 +150,7 @@ export default function Home() {
- {/* --- HAKKIMDA (Güncellendi) --- */} + {/* --- HAKKIMDA --- */}

@@ -144,7 +170,7 @@ export default function Home() {

- {/* --- YETENEKLER (Güncellendi) --- */} + {/* --- YETENEKLER --- */}

Teknik Yetkinlikler

@@ -240,25 +266,35 @@ export default function Home() { setUsername(e.target.value)} + disabled={isLoading} />
setPassword(e.target.value)} + disabled={isLoading} />
{error &&

{error}

} - diff --git a/src/pages/Portal.jsx b/src/pages/Portal.jsx index 05751e4..f9e8fcb 100644 --- a/src/pages/Portal.jsx +++ b/src/pages/Portal.jsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { GitBranch, Video, Mail, Cloud, Puzzle, ArrowRight, ArrowLeft, LogOut } from 'lucide-react'; import { Link, useNavigate } from 'react-router-dom'; @@ -23,17 +23,31 @@ const cardVariants = { export default function Portal() { const navigate = useNavigate(); + // Kullanıcı adını state'ten veya storage'dan alalım + const [user, setUser] = useState({ name: "Atakan" }); // Sayfa yüklendiğinde güvenlik kontrolü yap useEffect(() => { - const isAuth = sessionStorage.getItem('isAuthenticated'); - if (isAuth !== 'true') { - navigate('/'); // Giriş yoksa ana sayfaya at + // Backend'den aldığımız token'ı kontrol ediyoruz + const token = sessionStorage.getItem('authToken'); + const userData = sessionStorage.getItem('user'); + + if (!token) { + navigate('/'); // Token yoksa ana sayfaya at + } + + if (userData) { + try { + setUser(JSON.parse(userData)); + } catch (e) { + // JSON parse hatası olursa varsayılan kalır + } } }, [navigate]); const handleLogout = () => { - sessionStorage.removeItem('isAuthenticated'); + sessionStorage.removeItem('authToken'); + sessionStorage.removeItem('user'); navigate('/'); }; @@ -54,7 +68,8 @@ export default function Portal() {

Yönetim Portalı

-

Hoş geldin, Atakan. Servisler aktif.

+ {/* Kullanıcı adını dinamik gösterelim */} +

Hoş geldin, {user.username || user.name || "Admin"}. Servisler aktif.