Files
balikci/devpan.md

1349 lines
59 KiB
Markdown
Raw Normal View History

# Oltalama Test Yönetim Paneli - Proje Tanımı ve Geliştirme Planı
## 📋 Proje Özeti
Güvenlik farkındalık eğitimleri için kullanılacak, **basit ve kullanışlı** bir phishing test yönetim sistemi. Karmaşık kampanya yönetimi yerine, **tek tıkla token oluştur, mail gönder, anlık Telegram bildirimi al** prensipleriyle çalışan, SQLite tabanlı hafif bir çözüm.
## 🎯 Proje Hedefleri
- **Basitlik**: Karmaşık konfigürasyon yok, Gmail + Telegram ile hızlı başla
- **Hızlı Token Oluşturma**: "Yeni Mail Oluştur" butonuyla saniyeler içinde tracking linki hazır
- **Gerçek Zamanlı Bildirim**: Link tıklandığında anında Telegram mesajı al
- **Detaylı Tracking**: IP, konum, cihaz bilgilerini otomatik kaydet
- **Tek Kullanıcı Odaklı**: Kişisel kullanım için optimize edilmiş, basit admin paneli
- **Taşınabilir**: SQLite sayesinde tüm veri tek dosyada, yedekleme ve taşıma çok kolay
## ⚡ Quickstart - Nasıl Çalışır?
### 1⃣ İlk Kurulum (5 dakika)
```bash
# Backend
cd backend && npm install
npm run db:migrate && npm run db:seed
# Default: username: admin, password: admin123
# Frontend
cd ../frontend && npm install
# Her ikisini de başlat
npm run dev
```
### 2⃣ Ayarları Yap (5 dakika)
- Panel'de **Settings** sayfasına git
- **Gmail App Password** ekle (rehber mevcut)
- **Telegram Bot** oluştur ve token ekle (rehber mevcut)
- **Test** butonlarıyla kontrol et
### 3⃣ İlk Şirketi Oluştur (30 saniye)
- **"Şirketler"** sayfasına git
- **"Yeni Şirket Ekle"** butonuna tıkla
- Form doldur:
- Şirket Adı: `Test Bank`
- Sektör: `Banking`
-ıklama: (opsiyonel)
- **"Kaydet"** tıkla
- İlk şirketin hazır! 🏢
### 4⃣ İlk Mail Testini Gönder (30 saniye)
- **"Yeni Mail Oluştur"** butonuna tıkla
- Form doldur:
- **Şirket Seç**: `Test Bank` (dropdown)
- Email: `test@example.com`
- Çalışan Adı: `Ahmet` (opsiyonel)
- Şablon: `Banka Şablonu`
- **"Oluştur + Gönder"** tıkla
- Mail otomatik gönderilir! 📧
### 4⃣ Tıklamayı İzle
- Hedef kişi maildeki linke tıkladığında
- Anında Telegram'a bildirim gelir 🚨
- Panel'de detayları gör: IP, konum, cihaz
**Bu kadar basit!** 🎉
## 🔑 Ana Özellikler
### 1. Basit Mail/Token Oluşturma
- **"Yeni Token Oluştur"** butonu ile hızlı token oluşturma
- **"Yeni Mail Oluştur"** butonu ile otomatik mail gönderimi
- Hedef kullanıcı mail adresi girişi
- Şirket adı ve çalışan adı (opsiyonel) bilgileri
- Otomatik benzersiz tracking URL oluşturma
- Gmail entegrasyonu (App Password ile)
### 2. Akıllı Mail Şablonu Sistemi
- **Şirket Adı** girişi (örn: "Türk Telekom", "İş Bankası")
- **Çalışan Adı** girişi (opsiyonel)
- Varsa: "Sayın [Çalışan Adı]," ile başlar
- Yoksa: "Sayın," ile başlar
- Otomatik oltalama mail içeriği oluşturma
- Şirket logolu, profesyonel görünümlü HTML mail
- Mail içinde tracking link'i otomatik ekleme
- Şablon kütüphanesi (Banka, E-Devlet, Kurumsal Email, vb.)
### 3. Dinamik Tracking URL Sistemi
- Her hedef için benzersiz token: `https://domain.com/t/{unique-token}`
- Token'a tıklandığında otomatik veri toplama
- Kısa ve profesyonel görünümlü URL'ler
- Landing page'e otomatik yönlendirme
### 4. Detaylı IP ve Aktivite Takibi
- **IP Adresi**: Tıklayan kişinin IP'si
- **Tıklama Zamanı**: Tam tarih ve saat
- **User Agent**: Tarayıcı, işletim sistemi, cihaz bilgisi
- **Coğrafi Konum**: IP bazlı şehir/ülke tespiti (GeoIP)
- **Referrer**: Hangi kaynaktan geldi
- **Tıklama Sayısı**: Aynı token'a kaç kez tıklandı
- Tüm veriler SQLite'da saklanır
### 5. Telegram Gerçek Zamanlı Bildirim
- ✅ Link tıklandığında anında Telegram bildirimi
- Bildirim içeriği:
- "🚨 Yeni Tıklama Algılandı!"
- "Hedef: [email]"
- "IP: [ip_address]"
- "Konum: [city, country]"
- "Cihaz: [browser, os]"
- "Zaman: [timestamp]"
- Telegram Bot API kullanımı
- Tek bir Telegram chat_id'ye bildirim
### 6. Basit Yönetim Paneli
- **Dashboard**: Tüm token'ların listesi
- Her token için:
- Hedef email
- Şirket adı
- Oluşturulma tarihi
- Tıklanma durumu (✅/❌)
- Toplam tıklama sayısı
- **Detay Sayfası**: Token'a tıklayan tüm IP'lerin listesi
- **Mail Şablonları**: Hazır şablonlar
- **Ayarlar**: Gmail ve Telegram konfigürasyonu
### 7. Güvenlik Özellikleri
- Basit login (username/password)
- Session tabanlı authentication
- API rate limiting (spam önleme)
- Güvenli token oluşturma (crypto.randomBytes)
- XSS ve SQL injection koruması
## 🏗️ Teknik Mimari
### Backend Stack
- **Runtime**: Node.js (v18+)
- **Framework**: Express.js
- **Database**: SQLite (tek dosya, kurulum gerektirmez)
- **ORM**: Sequelize (SQLite desteği ile)
- **Authentication**: express-session (basit session)
- **Mail**: Nodemailer + Gmail (App Password)
- **Telegram**: node-telegram-bot-api
- **Token Generator**: crypto (Node.js built-in)
- **Validation**: Joi
- **Logging**: Winston
- **GeoIP**: geoip-lite (ücretsiz)
### Frontend Stack
- **Framework**: React.js (Next.js önerilir)
- **State Management**: Redux Toolkit veya Zustand
- **UI Library**: Material-UI veya Ant Design
- **Charts**: Chart.js veya Recharts
- **HTTP Client**: Axios
- **Form Management**: React Hook Form
### DevOps & Infrastructure
- **Containerization**: Docker (opsiyonel - basit deployment için gerek yok)
- **Process Manager**: PM2
- **Reverse Proxy**: Nginx (opsiyonel)
- **SSL**: Let's Encrypt (Certbot) - production için
- **Monitoring**: PM2 built-in monitoring
- **Logging**: Winston (dosya bazlı)
## 📊 Database Schema (Şirket Yönetimi ile)
### Tabloları
#### 1. **companies** - Şirket Yönetimi
```sql
id: INTEGER PRIMARY KEY AUTOINCREMENT
name: VARCHAR(255) NOT NULL -- Şirket adı (örn: "Türk Telekom")
description: TEXT NULL -- Açıklama
logo_url: TEXT NULL -- Logo URL (opsiyonel)
industry: VARCHAR(100) NULL -- Sektör (Banka, Telecom, E-Devlet, vb.)
active: BOOLEAN DEFAULT 1 -- Aktif mi?
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-- İstatistikler (hesaplanan - denormalized için)
total_tokens: INTEGER DEFAULT 0 -- Toplam token sayısı
total_clicks: INTEGER DEFAULT 0 -- Toplam tıklama sayısı
click_rate: DECIMAL(5,2) DEFAULT 0 -- Tıklama oranı %
```
#### 2. **tracking_tokens** - Tracking Token'ları
```sql
id: INTEGER PRIMARY KEY AUTOINCREMENT
token: VARCHAR(64) UNIQUE NOT NULL -- Benzersiz tracking token (32 byte hex)
company_id: INTEGER NOT NULL -- FK -> companies.id (Hangi şirket için)
target_email: VARCHAR(255) NOT NULL -- Hedef mail adresi
employee_name: VARCHAR(255) NULL -- Çalışan adı (opsiyonel)
template_type: VARCHAR(50) DEFAULT 'bank' -- Mail şablonu tipi
mail_subject: VARCHAR(500) -- Mail konusu
mail_sent: BOOLEAN DEFAULT 0 -- Mail gönderildi mi?
sent_at: TIMESTAMP NULL -- Mail gönderim zamanı
clicked: BOOLEAN DEFAULT 0 -- Link tıklandı mı?
click_count: INTEGER DEFAULT 0 -- Toplam tıklama sayısı
first_click_at: TIMESTAMP NULL -- İlk tıklama zamanı
last_click_at: TIMESTAMP NULL -- Son tıklama zamanı
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
notes: TEXT NULL -- Notlar
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
```
#### 3. **click_logs** - Tıklama Kayıtları
```sql
id: INTEGER PRIMARY KEY AUTOINCREMENT
token_id: INTEGER NOT NULL -- FK -> tracking_tokens.id
ip_address: VARCHAR(45) NOT NULL -- Tıklayan IP adresi
country: VARCHAR(100) -- Ülke
city: VARCHAR(100) -- Şehir
latitude: DECIMAL(10, 8) NULL -- Enlem
longitude: DECIMAL(11, 8) NULL -- Boylam
user_agent: TEXT -- Tam User Agent string
browser: VARCHAR(100) -- Parse edilmiş tarayıcı
os: VARCHAR(100) -- Parse edilmiş işletim sistemi
device: VARCHAR(100) -- Parse edilmiş cihaz tipi
referer: TEXT NULL -- Referrer URL
clicked_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
telegram_sent: BOOLEAN DEFAULT 0 -- Telegram bildirimi gönderildi mi?
```
#### 4. **mail_templates** - Mail Şablonları
```sql
id: INTEGER PRIMARY KEY AUTOINCREMENT
name: VARCHAR(255) NOT NULL -- Şablon adı
template_type: VARCHAR(50) UNIQUE NOT NULL -- Tip (bank, edevlet, corporate, etc.)
subject_template: VARCHAR(500) -- Konu şablonu
body_html: TEXT NOT NULL -- HTML mail içeriği (template)
description: TEXT -- Şablon açıklaması
preview_image: TEXT NULL -- Preview resim URL (opsiyonel)
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
active: BOOLEAN DEFAULT 1 -- Aktif mi?
```
#### 5. **settings** - Sistem Ayarları
```sql
id: INTEGER PRIMARY KEY AUTOINCREMENT
key: VARCHAR(100) UNIQUE NOT NULL -- Ayar key (gmail_user, telegram_token, etc.)
value: TEXT -- Ayar value (encrypted for sensitive data)
is_encrypted: BOOLEAN DEFAULT 0 -- Encrypt edilmiş mi?
description: TEXT -- Açıklama
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
```
#### 6. **admin_user** - Admin Kullanıcı (tek kullanıcı)
```sql
id: INTEGER PRIMARY KEY CHECK (id = 1) -- Sadece 1 kayıt
username: VARCHAR(100) UNIQUE NOT NULL
password_hash: VARCHAR(255) NOT NULL -- bcrypt hash
last_login: TIMESTAMP NULL
created_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
updated_at: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
```
## 🔌 API Endpoints (Şirket Yönetimi ile)
### Authentication
```
POST /api/auth/login - Giriş (username + password)
POST /api/auth/logout - Çıkış
GET /api/auth/check - Session kontrolü
```
### Companies (Şirket Yönetimi)
```
GET /api/companies - Tüm şirketleri listele
POST /api/companies - Yeni şirket oluştur
GET /api/companies/:id - Şirket detayları + istatistikler
PUT /api/companies/:id - Şirket güncelle
DELETE /api/companies/:id - Şirket sil (cascade: tokenları da siler)
GET /api/companies/:id/tokens - Şirkete ait tüm tokenlar
GET /api/companies/:id/stats - Şirket istatistikleri detaylı
```
### Tracking Tokens
```
GET /api/tokens - Tüm token'ları listele (query: ?company_id=X)
POST /api/tokens/create - Yeni token oluştur (mail göndermeden)
Body: { company_id, target_email, employee_name, template_type }
POST /api/tokens/create-and-send - Yeni token oluştur ve mail gönder
Body: { company_id, target_email, employee_name, template_type }
GET /api/tokens/:id - Token detayları
PUT /api/tokens/:id - Token güncelle (notes)
DELETE /api/tokens/:id - Token sil
POST /api/tokens/:id/send - Mevcut token için mail gönder
GET /api/tokens/:id/clicks - Token'a ait tüm tıklama kayıtları
```
### Mail Templates
```
GET /api/templates - Tüm mail şablonları
GET /api/templates/:type - Belirli şablon detayı
POST /api/templates - Yeni şablon oluştur
PUT /api/templates/:id - Şablon güncelle
DELETE /api/templates/:id - Şablon sil
POST /api/templates/preview - Şablon önizleme (render et)
```
### Settings
```
GET /api/settings - Tüm ayarlar
PUT /api/settings/gmail - Gmail ayarları (email, app password)
PUT /api/settings/telegram - Telegram ayarları (bot token, chat_id)
POST /api/settings/test-gmail - Gmail bağlantı testi
POST /api/settings/test-telegram - Telegram test mesajı gönder
```
### Tracking (Public Endpoints - Auth Gerektirmez)
```
GET /t/:token - Token tracking endpoint
- IP, User-Agent, GeoIP kaydet
- Telegram bildirimi gönder
- Landing page'e redirect et
```
### Dashboard/Stats
```
GET /api/stats/dashboard - Dashboard özet istatistikleri
- Toplam şirket sayısı
- Toplam token sayısı
- Tıklanma oranı
- Son 24 saat aktivite
- Şirket bazlı özet
GET /api/stats/recent-clicks - Son tıklamalar (real-time için)
GET /api/stats/by-company - Şirket bazlı istatistikler (grafik için)
```
## 🔄 İş Akışı (Basitleştirilmiş Workflow)
### Senaryo 0: Şirket Oluştur (İlk Adım)
1. **Panel'e Giriş**: Admin kullanıcı adı/şifre ile giriş yapar
2. **"Şirketler" Sayfasına Git**
3. **"Yeni Şirket Ekle" Butonu**: Tıkla
4. **Form Doldur**:
- Şirket Adı: `Türk Telekom`
-ıklama: `Telekomünikasyon şirketi test kampanyası`
- Sektör: `Telecom` (dropdown)
- Logo URL: (opsiyonel)
5. **Şirket Oluşturulur**: Artık bu şirket için tokenlar oluşturabilirsin
### Senaryo 1: Token Oluştur + Manuel Mail
1. **Dashboard'dan "Yeni Token Oluştur" Butonu**: Tıkla
2. **Form Doldur**:
- **Şirket Seç**: `Türk Telekom` (dropdown - önceden oluşturulmuş)
- Hedef Email: `mehmet@example.com`
- Çalışan Adı: `Mehmet Yılmaz` (opsiyonel)
- Şablon Seç: `Banka Şablonu`
3. **Token Oluşturulur**:
- Benzersiz token: `a3f8b2e9c1d4f7e6...` (64 karakter hex)
- URL: `https://yourdomain.com/t/a3f8b2e9c1d4f7e6...`
- Şirkete bağlanır (`company_id = Türk Telekom`)
4. **Manuel Mail Gönderimi**:
- Token ve URL ekranda gösterilir
- Admin isterse kendi Gmail'inden manuel gönderir
### Senaryo 2: Token Oluştur + Otomatik Mail Gönder
1. **"Yeni Mail Oluştur" Butonu**: Tıkla
2. **Form Doldur** (şirket seçimi dahil)
3. **Mail Otomatik Gönderilir**:
- Gmail App Password ile Nodemailer kullanılır
- Mail içeriği şablondan oluşturulur:
```
Konu: Türk Telekom - Acil Güvenlik Bildirimi
Sayın Mehmet Yılmaz,
[Şablon içeriği - tracking linki içerir]
Linke tıklamak için: https://yourdomain.com/t/{token}
```
4. **Token + Mail Durumu Kaydedilir**:
- `mail_sent = 1`
- `sent_at = CURRENT_TIMESTAMP`
- Şirket istatistikleri güncellenir (`total_tokens++`)
### Tracking Mekanizması
#### Link Tıklama İzleme
```
URL: https://yourdomain.com/t/a3f8b2e9c1d4f7e6...
```
**Kullanıcı tıklayınca ne olur:**
1. ✅ Backend `/t/:token` endpoint'i çalışır
2. ✅ Token veritabanında aranır
3. ✅ IP adresi, User-Agent, Referer yakalanır
4. ✅ GeoIP ile konum belirlenir (geoip-lite)
5.`click_logs` tablosuna kayıt atılır:
```sql
INSERT INTO click_logs (
token_id, ip_address, country, city,
user_agent, browser, os, device, clicked_at
) VALUES (...)
```
6.`tracking_tokens` tablosu güncellenir:
```sql
UPDATE tracking_tokens SET
clicked = 1,
click_count = click_count + 1,
last_click_at = CURRENT_TIMESTAMP,
first_click_at = CASE WHEN first_click_at IS NULL
THEN CURRENT_TIMESTAMP
ELSE first_click_at END
```
7.**Telegram Bildirimi Gönderilir**:
```
🚨 YENİ TIKLAMA ALGILANDI!
🏢 Şirket: Türk Telekom
📧 Hedef: mehmet@example.com
👤 Çalışan: Mehmet Yılmaz
🌍 IP: 85.34.12.45
📍 Konum: Istanbul, Turkey
💻 Cihaz: Chrome 118.0 (Windows 10)
⏰ Zaman: 10 Kas 2025, 14:30:15
📊 Bu token için toplam tıklama: 1
📈 Şirket toplam tıklama: 15 (42 tokenden)
```
8. ✅ Kullanıcı landing page'e redirect edilir
9. ✅ Landing page: "Bu bir güvenlik farkındalık testiydi!"
### Mail Şablon Sistemi
#### Şablon Değişkenleri (Placeholders)
```html
<!-- Şablon HTML'inde kullanılabilir -->
{{company_name}} → Şirket adı
{{employee_name}} → Çalışan adı
{{tracking_url}} → Tracking linki
{{current_year}} → Yıl
```
#### Örnek Şablon: Banka
```html
<!DOCTYPE html>
<html>
<body>
<h2>{{company_name}} Güvenlik Bildirimi</h2>
{{#if employee_name}}
<p>Sayın {{employee_name}},</p>
{{else}}
<p>Sayın,</p>
{{/if}}
<p>Hesabınızda şüpheli aktivite tespit edildi.
Lütfen acilen kimliğinizi doğrulayın:</p>
<a href="{{tracking_url}}" style="...">
Hesabımı Doğrula
</a>
<p>© {{current_year}} {{company_name}}</p>
</body>
</html>
```
### Telegram Gerçek Zamanlı Bildirim
- **node-telegram-bot-api** kullanılır
- Her tıklamada anında bildirim
- Ayarlar'dan yapılandırılır:
- Bot Token: `1234567890:ABC...`
- Chat ID: `123456789` (kendi Telegram ID'n)
## 📈 Geliştirme Planı (Basitleştirilmiş - 6-7 Hafta)
### Faz 1: Temel Backend Altyapı (1 Hafta)
- [ ] Proje klasör yapısı oluşturma
- [ ] Node.js + Express.js setup
- [ ] SQLite database dosyası oluşturma
- [ ] Sequelize ile database models:
- [ ] **Company model** (ŞİRKET YÖNETİMİ)
- [ ] TrackingToken model (company_id FK ile)
- [ ] ClickLog model
- [ ] MailTemplate model
- [ ] Settings model
- [ ] AdminUser model
- [ ] Database migration ve seed dosyaları
- [ ] Örnek şirketler seed'leme (Türk Telekom, İş Bankası, vb.)
- [ ] Environment variables (.env)
- [ ] Logger implementasyonu (Winston)
- [ ] Error handling middleware
- [ ] Basic API routing structure
### Faz 2: Authentication & Session (2-3 Gün)
- [ ] express-session yapılandırması
- [ ] Login endpoint (`POST /api/auth/login`)
- [ ] Logout endpoint (`POST /api/auth/logout`)
- [ ] Session check middleware
- [ ] bcrypt ile password hashing
- [ ] İlk admin kullanıcısı seed'leme
### Faz 3: Şirket Yönetimi (3-4 Gün) **YENİ**
- [ ] Company CRUD endpoints:
- [ ] `GET /api/companies` - Tüm şirketleri listele
- [ ] `POST /api/companies` - Yeni şirket oluştur
- [ ] `GET /api/companies/:id` - Şirket detay + istatistikler
- [ ] `PUT /api/companies/:id` - Şirket güncelle
- [ ] `DELETE /api/companies/:id` - Şirket sil (cascade)
- [ ] `GET /api/companies/:id/tokens` - Şirkete ait tokenlar
- [ ] `GET /api/companies/:id/stats` - Şirket istatistikleri
- [ ] Company service layer
- [ ] Validation (Joi schemas)
- [ ] İstatistik hesaplama (total_tokens, total_clicks, click_rate)
### Faz 4: Token Yönetimi (1 Hafta)
- [ ] Token generation (crypto.randomBytes)
- [ ] Token CRUD endpoints:
- [ ] `POST /api/tokens/create` - Token oluştur (company_id dahil)
- [ ] `POST /api/tokens/create-and-send` - Token oluştur + mail gönder
- [ ] `GET /api/tokens` - Tüm tokenları listele (company_id filtresi ile)
- [ ] `GET /api/tokens/:id` - Token detay
- [ ] `PUT /api/tokens/:id` - Token güncelle
- [ ] `DELETE /api/tokens/:id` - Token sil
- [ ] Token service layer
- [ ] Company istatistiklerini güncelleme (token oluşturulunca/silinince)
- [ ] Validation (Joi schemas)
### Faz 5: Mail Sistemi (1 Hafta)
- [ ] Nodemailer + Gmail entegrasyonu
- [ ] Mail template engine (Handlebars)
- [ ] Template placeholders: {{company_name}}, {{employee_name}}, {{tracking_url}}
- [ ] HTML mail templates oluşturma:
- [ ] Banka şablonu
- [ ] E-Devlet şablonu
- [ ] Kurumsal email şablonu
- [ ] Mail gönderme servisi (şirket adını kullanarak)
- [ ] Mail template CRUD endpoints
- [ ] Template preview endpoint
- [ ] Gmail test endpoint
### Faz 6: Tracking & GeoIP (1 Hafta)
- [ ] `/t/:token` tracking endpoint (public)
- [ ] IP adresi yakalama (req.ip, x-forwarded-for)
- [ ] User-Agent parsing (useragent paketi)
- [ ] GeoIP integration (geoip-lite)
- [ ] Click log kaydetme (click_logs tablosu)
- [ ] Token istatistikleri güncelleme
- [ ] **Şirket istatistikleri güncelleme** (total_clicks++)
- [ ] Landing page HTML (static)
- [ ] Redirect logic
### Faz 7: Telegram Bildirimleri (2-3 Gün)
- [ ] node-telegram-bot-api kurulumu
- [ ] Telegram settings endpoints:
- [ ] `PUT /api/settings/telegram`
- [ ] `POST /api/settings/test-telegram`
- [ ] Bildirim formatı oluşturma (şirket adı dahil)
- [ ] Tıklama sonrası Telegram mesajı gönderimi
- [ ] Şirket bazlı toplam istatistikler bildirme
- [ ] Error handling (telegram down ise)
### Faz 8: Settings & Dashboard API (2-3 Gün)
- [ ] Settings CRUD (gmail, telegram ayarları)
- [ ] Encryption (sensitive data için)
- [ ] Dashboard stats endpoint:
- [ ] **Toplam şirket sayısı**
- [ ] Toplam token sayısı
- [ ] Tıklanan/tıklanmayan oranı
- [ ] Son 24 saat aktivite
- [ ] **Şirket bazlı özet tablosu**
- [ ] En çok tıklanan tokenlar
- [ ] Recent clicks endpoint (real-time için)
- [ ] Company-based stats endpoint (grafik için)
### Faz 9: Frontend - React SPA (2 Hafta)
- [ ] React (Vite) veya Next.js project setup
- [ ] UI framework: Material-UI (MUI) veya Tailwind CSS
- [ ] React Router setup
- [ ] Axios API client yapılandırması
#### Sayfalar:
- [ ] **Login Page** (`/login`)
- [ ] Login formu
- [ ] Session yönetimi
- [ ] **Dashboard** (`/`)
- [ ] Özet kartlar (Şirket sayısı, Total tokens, Click rate, etc.)
- [ ] **Şirket bazlı performans tablosu**
- [ ] Son tıklamalar listesi (real-time, şirket adı ile)
- [ ] Şirket bazlı grafik (Chart.js)
- [ ] **Companies** (`/companies`) **YENİ**
- [ ] Şirket kartları listesi
- [ ] "Yeni Şirket Ekle" butonu
- [ ] Her şirkette: İsim, Sektör, Token sayısı, Tıklama oranı
- [ ] Arama ve filtreleme
- [ ] **Company Detay** (`/companies/:id`) **YENİ**
- [ ] Şirket bilgileri (düzenlenebilir)
- [ ] Şirkete özel istatistikler
- [ ] Şirkete özel grafik (30 gün)
- [ ] Şirkete ait tokenların listesi
- [ ] "Yeni Token Ekle" butonu (şirket otomatik seçili)
- [ ] "Şirketi Sil" butonu
- [ ] **Tokens List** (`/tokens`)
- [ ] Tüm tokenları tablo halinde
- [ ] **Şirket bazlı filtreleme (dropdown)**
- [ ] Filtreleme (tıklanan/tıklanmayan)
- [ ] Arama (email, şirket adı, çalışan adı)
- [ ] "Yeni Token Oluştur" butonu
- [ ] "Yeni Mail Oluştur" butonu
- [ ] **Token Detay** (`/tokens/:id`)
- [ ] Token bilgileri
- [ ] **Şirket adı ve "Şirkete Git" linki**
- [ ] Tracking URL (copy to clipboard)
- [ ] Tıklama geçmişi tablosu (IP, konum, cihaz, zaman)
- [ ] Not ekleme
- [ ] **Create Token Modal/Page**
- [ ] Form: **Şirket Seç (dropdown)**, Email, Çalışan Adı, Şablon
- [ ] "Sadece Oluştur" ve "Oluştur + Mail Gönder" butonları
- [ ] Mail önizleme (şirket adı ile)
- [ ] **Templates** (`/templates`)
- [ ] Mail şablonları listesi
- [ ] Yeni şablon oluşturma
- [ ] Şablon düzenleme (HTML editor - basit textarea yeterli)
- [ ] Preview
- [ ] **Settings** (`/settings`)
- [ ] Gmail ayarları (email, app password)
- [ ] Telegram ayarları (bot token, chat_id)
- [ ] Test butonları
- [ ] Domain/Base URL ayarı
- [ ] **Responsive Design** (Mobile uyumlu)
### Faz 10: Güvenlik & Optimizasyon (2-3 Gün)
- [ ] API rate limiting (express-rate-limit)
- [ ] Input validation (Joi - tüm endpoints, şirket endpoints dahil)
- [ ] SQL injection prevention (ORM kullanımı)
- [ ] XSS protection (helmet.js)
- [ ] CORS yapılandırması
- [ ] Secure session cookies
- [ ] Database indexing (token, email, ip_address, company_id)
- [ ] Error logging
### Faz 11: Testing & Deployment (3-4 Gün)
- [ ] Backend unit tests (önemli servisler için)
- [ ] API endpoint tests (Postman collection)
- [ ] Company endpoints testi
- [ ] Token + Company ilişki testi
- [ ] Frontend test (manuel)
- [ ] .env.example dosyaları
- [ ] README.md:
- [ ] Kurulum talimatları
- [ ] Gmail App Password nasıl alınır
- [ ] Telegram Bot nasıl oluşturulur
- [ ] İlk şirket nasıl oluşturulur
- [ ] Deployment guide
- [ ] Production build test
- [ ] PM2 ecosystem.config.js
- [ ] SQLite backup scripti
- [ ] Database migration komutları
## 🎨 UI/UX Tasarım Önerileri
### Dashboard Ana Sayfa
```
┌─────────────────────────────────────────────────────────┐
│ 📊 Dashboard 👤 Admin ▼ │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 🏢 5 │ │ 📨 42 │ │ ✅ 15 │ │ 📈 35.7%│ │
│ │ Şirket │ │ Toplam │ │ Tıklanan│ │ Başarı │ │
│ │ │ │ Token │ │ │ │ Oranı │ │
│ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │
│ │
│ 📊 Şirket Bazlı Performans │
│ ┌────────────────────────────────────────────────┐ │
│ │ Şirket │ Tokenlar │ Tıklanan │ Oran │ │
│ ├────────────────────────────────────────────────┤ │
│ │ Türk Telekom │ 18 │ 8 │ 44.4% │ │
│ │ İş Bankası │ 12 │ 4 │ 33.3% │ │
│ │ PTT │ 7 │ 2 │ 28.6% │ │
│ │ E-Devlet │ 5 │ 1 │ 20.0% │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ 📈 Son 7 Gün Aktivite (Tüm Şirketler) │
│ ┌────────────────────────────────────────┐ │
│ │ [Çizgi grafiği - şirket bazlı] │ │
│ └────────────────────────────────────────┘ │
│ │
│ 🚨 Son Tıklamalar (Gerçek Zamanlı) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 🏢 Türk Telekom │ │
│ │ 14:35 • mehmet@example.com • 85.34.12.45 │ │
│ │ Istanbul, Turkey • Chrome (Windows) │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ 🏢 İş Bankası │ │
│ │ 13:22 • ayse@company.com • 92.45.67.89 │ │
│ │ Ankara, Turkey • Safari (iPhone) │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ [🔵 Yeni Token Oluştur] [📧 Yeni Mail Oluştur] │
└─────────────────────────────────────────────────────────┘
```
### Şirketler Sayfası
```
┌─────────────────────────────────────────────────────────┐
│ 🏢 Şirketler │
├─────────────────────────────────────────────────────────┤
│ │
│ 🔍 [Arama: şirket adı...] [ Yeni Şirket] │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 📊 TÜRK TELEKOM ✏️ │ │
│ │ Sektör: Telecom │ │
│ │ 📨 18 token • ✅ 8 tıklanan • 📈 44.4% │ │
│ │ Son aktivite: 2 saat önce │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 📊 İŞ BANKASI ✏️ │ │
│ │ Sektör: Banking │ │
│ │ 📨 12 token • ✅ 4 tıklanan • 📈 33.3% │ │
│ │ Son aktivite: 1 gün önce │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 📊 PTT ✏️ │ │
│ │ Sektör: Government │ │
│ │ 📨 7 token • ✅ 2 tıklanan • 📈 28.6% │ │
│ │ Son aktivite: 3 gün önce │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ [Her şirket kartına tıklayınca detay sayfasıılır] │
└─────────────────────────────────────────────────────────┘
```
### Token Listesi Sayfası
```
┌─────────────────────────────────────────────────────────┐
│ 🎯 Tracking Tokenlar │
├─────────────────────────────────────────────────────────┤
│ │
│ 🏢 [Tüm Şirketler ▼] 🔍 [Arama...] [Filtre ▼] [⬇] │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Email │ Şirket │ Durum │ Tıklama │ 📅│ │
│ ├──────────────────────────────────────────────────┤ │
│ │ mehmet@... │ T.Telekom │ ✅ │ 3× │10K│ │
│ │ ayse@... │ İş Bankası │ ✅ │ 1× │10K│ │
│ │ ali@... │ PTT │ ❌ │ 0× │09K│ │
│ │ zeynep@... │ T.Telekom │ ✅ │ 2× │08K│ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ [< Önceki] Sayfa 1/3 [Sonraki >] │
└─────────────────────────────────────────────────────────┘
```
### Token Oluştur Modal
```
┌──────────────────────────────────┐
│ 🎯 Yeni Token Oluştur [X] │
├──────────────────────────────────┤
│ │
│ 🏢 Şirket Seç * │
│ [▼ Türk Telekom ] │
│ │
│ 📧 Hedef Email * │
│ [mehmet@example.com ] │
│ │
│ 👤 Çalışan Adı (opsiyonel) │
│ [Mehmet Yılmaz ] │
│ │
│ 📝 Mail Şablonu * │
│ [▼ Banka Güvenlik Bildirimi ] │
│ │
│ ┌────────────────────────────┐ │
│ │ 👁️ Önizleme │ │
│ │ │ │
│ │ Konu: Türk Telekom - │ │
│ │ Acil Güvenlik... │ │
│ │ │ │
│ │ Sayın Mehmet Yılmaz, │ │
│ │ Hesabınızda şüpheli... │ │
│ └────────────────────────────┘ │
│ │
│ [Sadece Oluştur] [Oluştur+Gönder]│
└──────────────────────────────────┘
```
### Token Detay Sayfası
```
┌─────────────────────────────────────────────────────────┐
│ ← Geri Token Detayı
├─────────────────────────────────────────────────────────┤
│ │
│ 🏢 TÜRK TELEKOM [Şirkete Git →] │
│ 📧 mehmet@example.com │
│ 👤 Mehmet Yılmaz │
│ 📅 Oluşturuldu: 10 Kas 2025, 10:30 │
│ 📨 Mail gönderildi: ✅ Evet (10 Kas 2025, 10:31) │
│ │
│ 🔗 Tracking URL: │
│ ┌──────────────────────────────────────────┐ │
│ │ https://domain.com/t/a3f8b2e9c1d4f7... │ [📋 Kopyala]│
│ └──────────────────────────────────────────┘ │
│ │
│ 📊 İstatistikler │
│ • Toplam Tıklama: 3 │
│ • İlk Tıklama: 10 Kas 2025, 14:35 │
│ • Son Tıklama: 10 Kas 2025, 16:20 │
│ │
│ 🚨 Tıklama Geçmişi │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Zaman │ IP Adresi │ Konum │ Cihaz│ │
│ ├──────────────────────────────────────────────────┤ │
│ │ 16:20:15 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
│ │ 15:10:33 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
│ │ 14:35:12 │ 85.34.12.45 │ Istanbul, TR │ Chr..│ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ 📝 Notlar: │
│ [Buraya not ekleyebilirsiniz... ] │
│ [💾 Kaydet] │
│ │
│ [🗑️ Token'ı Sil] [📧 Yeniden Mail Gönder] │
└─────────────────────────────────────────────────────────┘
```
### Şirket Detay Sayfası
```
┌─────────────────────────────────────────────────────────┐
│ ← Geri Şirket Detayı
├─────────────────────────────────────────────────────────┤
│ │
│ 🏢 TÜRK TELEKOM [✏️ Düzenle]│
│ 📋 Sektör: Telecom │
│ 📝 Açıklama: Telekomünikasyon şirketi test kampanyası
│ │
│ 📊 Genel İstatistikler │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 📨 18 │ │ ✅ 8 │ │ 📈 44.4%│ │ 🕐 2saat │ │
│ │ Token │ │ Tıklanan│ │ Oran │ │ Son │ │
│ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │
│ │
│ 📈 Son 30 Gün Aktivite │
│ ┌────────────────────────────────────────┐ │
│ │ [Şirkete özel çizgi grafiği] │ │
│ └────────────────────────────────────────┘ │
│ │
│ 🎯 Token Listesi [ Yeni Token]│
│ ┌──────────────────────────────────────────────────┐ │
│ │ Email │ Çalışan │ Durum │ Tıklama │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ mehmet@ex... │ M. Yılmaz │ ✅ │ 3× │ │
│ │ ayse@exa... │ A. Kaya │ ✅ │ 2× │ │
│ │ ali@exam... │ A. Demir │ ❌ │ 0× │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ [🗑️ Şirketi Sil] [📊 Rapor İndir] │
└─────────────────────────────────────────────────────────┘
```
### Ayarlar Sayfası
```
┌─────────────────────────────────────────────────────────┐
│ ⚙️ Ayarlar │
├─────────────────────────────────────────────────────────┤
│ │
│ 📧 Gmail Ayarları
│ ┌──────────────────────────────────────────────────┐ │
│ │ Gmail Adresi: │ │
│ │ [myemail@gmail.com ] │ │
│ │ │ │
│ │ App Password: │ │
│ │ [•••••••••••••••• ] │ │
│ │ │ │
│ │ Gönderen Adı: │ │
│ │ [Güvenlik Ekibi ] │ │
│ │ │ │
│ │ [💾 Kaydet] [📧 Test Mail Gönder] │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ 💬 Telegram Ayarları
│ ┌──────────────────────────────────────────────────┐ │
│ │ Bot Token: │ │
│ │ [1234567890:ABCdefGHI... ] │ │
│ │ │ │
│ │ Chat ID: │ │
│ │ [123456789 ] │ │
│ │ │ │
│ │ Telegram Bot nasıl oluşturulur? [Rehber] │ │
│ │ │ │
│ │ [💾 Kaydet] [💬 Test Mesajı Gönder] │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ 🌐 Domain Ayarları
│ ┌──────────────────────────────────────────────────┐ │
│ │ Base URL: │ │
│ │ [https://domain.com ] │ │
│ │ │ │
│ │ [💾 Kaydet] │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## 🔒 Güvenlik Önlemleri
### Uygulama Güvenliği
- Tüm şifreler bcrypt ile hash'lenecek
- JWT token'lar kısa ömürlü (15-30 dakika), refresh token uzun ömürlü
- Rate limiting: API endpoint'lerine DDoS koruması
- Input validation: Tüm user input'lar validate edilecek
- SQL injection: Parameterized queries (ORM kullanımı)
- XSS: Output encoding, CSP headers
- CSRF protection: Token-based
- HTTPS zorunlu (production)
- Sensitive data encryption (at rest): SMTP passwords
### Etik ve Yasal Gereklilikler
⚠️ **ÖNEMLİ UYARI**: Bu sistem yalnızca yasal ve etik sınırlar içinde kullanılmalıdır:
- Yalnızca izin verilen organizasyonlarda test yapılmalı
- Hedef kullanıcılardan yazılı onay alınmalı (awareness training kapsamında)
- Gerçek phishing saldırısı düzenlenmemeli
- Toplanan veriler KVKK/GDPR uyumlu olmalı
- Audit log'lar düzenli tutulmalı
- Landing page'lerde açık uyarı yapılmalı ("Bu bir güvenlik testi idi")
### Audit ve Logging
- Tüm kritik işlemler loglanmalı (kim, ne, ne zaman)
- Login attempts tracking
- Failed authentication monitoring
- Campaign lifecycle events
- Admin actions logging
- Suspicious activity alerts
## 📦 Bağımlılıklar (package.json)
### Backend Dependencies
```json
{
"express": "^4.18.x",
"express-session": "^1.17.x",
"sqlite3": "^5.1.x",
"sequelize": "^6.35.x",
"bcrypt": "^5.1.x",
"nodemailer": "^6.9.x",
"handlebars": "^4.7.x",
"node-telegram-bot-api": "^0.64.x",
"joi": "^17.11.x",
"winston": "^3.11.x",
"dotenv": "^16.3.x",
"express-rate-limit": "^7.1.x",
"helmet": "^7.1.x",
"cors": "^2.8.x",
"geoip-lite": "^1.4.x",
"useragent": "^2.3.x",
"crypto": "built-in"
}
```
### Frontend Dependencies
```json
{
"react": "^18.2.x",
"next": "^14.0.x",
"axios": "^1.6.x",
"react-hook-form": "^7.48.x",
"@mui/material": "^5.14.x",
"chart.js": "^4.4.x",
"react-chartjs-2": "^5.2.x",
"zustand": "^4.4.x",
"date-fns": "^2.30.x"
}
```
## 📁 Proje Klasör Yapısı
```
oltalama/
├── backend/
│ ├── src/
│ │ ├── config/
│ │ │ ├── database.js # SQLite Sequelize config
│ │ │ ├── session.js # Express-session config
│ │ │ └── logger.js # Winston config
│ │ │
│ │ ├── models/ # Sequelize models
│ │ │ ├── index.js
│ │ │ ├── TrackingToken.js
│ │ │ ├── ClickLog.js
│ │ │ ├── MailTemplate.js
│ │ │ ├── Settings.js
│ │ │ └── AdminUser.js
│ │ │
│ │ ├── controllers/ # Route handlers
│ │ │ ├── auth.controller.js
│ │ │ ├── company.controller.js # ŞİRKET YÖNETİMİ
│ │ │ ├── token.controller.js
│ │ │ ├── template.controller.js
│ │ │ ├── settings.controller.js
│ │ │ ├── tracking.controller.js # Public /t/:token
│ │ │ └── stats.controller.js
│ │ │
│ │ ├── services/ # Business logic
│ │ │ ├── company.service.js # ŞİRKET SERVİSİ
│ │ │ ├── token.service.js
│ │ │ ├── mail.service.js
│ │ │ ├── telegram.service.js
│ │ │ ├── template.service.js
│ │ │ └── tracking.service.js
│ │ │
│ │ ├── middlewares/
│ │ │ ├── auth.middleware.js # Session check
│ │ │ ├── errorHandler.js
│ │ │ └── rateLimiter.js
│ │ │
│ │ ├── routes/
│ │ │ ├── auth.routes.js
│ │ │ ├── company.routes.js # ŞİRKET ROUTE'LARI
│ │ │ ├── token.routes.js
│ │ │ ├── template.routes.js
│ │ │ ├── settings.routes.js
│ │ │ ├── tracking.routes.js # Public routes
│ │ │ └── stats.routes.js
│ │ │
│ │ ├── validators/ # Joi validation schemas
│ │ │ ├── company.validator.js # ŞİRKET VALİDATOR
│ │ │ ├── token.validator.js
│ │ │ ├── template.validator.js
│ │ │ └── settings.validator.js
│ │ │
│ │ ├── utils/
│ │ │ ├── tokenGenerator.js # crypto.randomBytes
│ │ │ ├── geoip.js # geoip-lite wrapper
│ │ │ ├── userAgentParser.js # useragent wrapper
│ │ │ ├── encryption.js # Sensitive data encrypt/decrypt
│ │ │ └── logger.js # Winston logger
│ │ │
│ │ ├── templates/ # Handlebars mail templates
│ │ │ ├── layouts/
│ │ │ │ └── base.hbs
│ │ │ └── emails/
│ │ │ ├── bank.hbs
│ │ │ ├── edevlet.hbs
│ │ │ └── corporate.hbs
│ │ │
│ │ ├── public/ # Landing page HTML
│ │ │ └── landing.html
│ │ │
│ │ └── app.js # Express app entry point
│ │
│ ├── database/
│ │ └── oltalama.db # SQLite database file
│ │
│ ├── migrations/ # Sequelize migrations
│ │ ├── 001-create-tables.js
│ │ └── 002-seed-templates.js
│ │
│ ├── logs/ # Winston logs
│ │ ├── error.log
│ │ └── combined.log
│ │
│ ├── .env.example
│ ├── .gitignore
│ ├── package.json
│ └── README.md
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Layout/
│ │ │ │ ├── Sidebar.jsx
│ │ │ │ ├── Header.jsx
│ │ │ │ └── Layout.jsx
│ │ │ ├── Dashboard/
│ │ │ │ ├── StatCard.jsx
│ │ │ │ ├── ActivityFeed.jsx
│ │ │ │ ├── CompanyPerformanceTable.jsx # ŞİRKET PERFORMANS
│ │ │ │ └── ChartWidget.jsx
│ │ │ ├── Companies/ # ŞİRKET BİLEŞENLERİ
│ │ │ │ ├── CompanyList.jsx
│ │ │ │ ├── CompanyCard.jsx
│ │ │ │ ├── CompanyDetail.jsx
│ │ │ │ ├── CreateCompanyModal.jsx
│ │ │ │ └── CompanyStats.jsx
│ │ │ ├── Tokens/
│ │ │ │ ├── TokenList.jsx
│ │ │ │ ├── TokenDetail.jsx
│ │ │ │ ├── CreateTokenModal.jsx # Şirket seçimi ile
│ │ │ │ └── ClickHistoryTable.jsx
│ │ │ └── Common/
│ │ │ ├── Button.jsx
│ │ │ ├── Input.jsx
│ │ │ └── CompanySelector.jsx # Şirket dropdown
│ │ │
│ │ ├── pages/
│ │ │ ├── Login.jsx
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Companies.jsx # ŞİRKETLER SAYFASI
│ │ │ ├── CompanyDetail.jsx # ŞİRKET DETAY
│ │ │ ├── Tokens.jsx
│ │ │ ├── TokenDetail.jsx
│ │ │ ├── Templates.jsx
│ │ │ └── Settings.jsx
│ │ │
│ │ ├── services/
│ │ │ ├── api.js # Axios instance
│ │ │ ├── authService.js
│ │ │ ├── companyService.js # ŞİRKET SERVİSİ
│ │ │ ├── tokenService.js
│ │ │ ├── templateService.js
│ │ │ └── settingsService.js
│ │ │
│ │ ├── context/
│ │ │ └── AuthContext.jsx # Auth state
│ │ │
│ │ ├── utils/
│ │ │ ├── dateFormatter.js
│ │ │ └── copyToClipboard.js
│ │ │
│ │ ├── App.jsx
│ │ └── main.jsx
│ │
│ ├── public/
│ ├── .env.example
│ ├── package.json
│ ├── vite.config.js
│ └── README.md
├── docs/
│ ├── SETUP.md # Kurulum rehberi
│ ├── TELEGRAM.md # Telegram bot setup
│ ├── GMAIL.md # Gmail app password setup
│ └── API.md # API documentation
├── scripts/
│ └── backup-db.sh # SQLite backup script
├── .gitignore
├── README.md # Ana README
└── devpan.md # Bu dosya - Proje tanımı
```
## 🚀 Kurulum ve Çalıştırma
### Development
```bash
# Repository clone veya yeni proje oluştur
cd oltalama
# Backend setup
cd backend
npm install
cp .env.example .env
# .env dosyasını düzenle (PORT, JWT_SECRET, SMTP ayarları)
# SQLite database oluştur ve migrate et
npm run db:migrate
npm run db:seed
# Backend'i başlat
npm run dev # http://localhost:3000
# Frontend setup (yeni terminal)
cd ../frontend
npm install
cp .env.example .env
# API URL'sini ayarla (REACT_APP_API_URL=http://localhost:3000)
# Frontend'i başlat
npm run dev # http://localhost:3001
```
### Production Deployment
```bash
# PM2 ile production'da çalıştırma
cd backend
npm install --production
npm run db:migrate
# PM2 ile başlat
pm2 start src/app.js --name "oltalama-backend"
pm2 save
pm2 startup
# Frontend build
cd ../frontend
npm install
npm run build
# Static dosyaları serve et (nginx veya serve paketi ile)
npx serve -s build -p 3001
```
## 📊 Tahmini Süre ve Kaynak
- **Toplam Geliştirme Süresi**: 6-7 hafta (1.5-2 ay)
- **Developer Sayısı**: 1 full-stack developer yeterli
- **Teknoloji Seviyesi**: Intermediate Node.js, React bilgisi gerekli
- **Önerilen Çalışma Temposu**: Günde 4-6 saat odaklanmış çalışma
## 💾 SQLite Kullanmanın Avantajları
### Neden SQLite?
-**Sıfır Kurulum**: Ayrı database sunucusu gerektirmez
-**Tek Dosya**: Tüm veri `oltalama.db` dosyasında - kolayca yedeklenir
-**Taşınabilir**: Database dosyasını kopyala-yapıştır ile taşıyabilirsin
-**Hafif**: Düşük kaynak tüketimi, VPS'lerde mükemmel çalışır
-**Hızlı**: Küçük-orta ölçekli projeler için PostgreSQL kadar hızlı
-**Güvenilir**: Milyarlarca cihazda kullanılıyor (Android, iOS, her browser)
-**ACID Uyumlu**: Transaction desteği, veri güvenliği
-**Backup Kolay**: Tek dosya yedekleme - `cp oltalama.db oltalama.backup.db`
### Ne Zaman PostgreSQL'e Geçilmeli?
SQLite şu durumlarda yeterli:
- Günde 1000'den az mail gönderiyorsan
- Eşzamanlı 50'den az kullanıcı varsa
- Database 10GB'dan küçükse
PostgreSQL'e geç eğer:
- Çok yüksek concurrency gerekiyorsa (100+ eşzamanlı yazma)
- Multi-server deployment yapacaksan
- Çok büyük veri setleri varsa (10GB+)
- Replication/clustering gerekiyorsa
## 📱 Telegram Bot Kurulum Rehberi
### Adım 1: Bot Oluştur
1. Telegram'da **@BotFather**'ı ara
2. `/newbot` komutunu gönder
3. Bot'un adını gir (örn: "Oltalama Test Bot")
4. Bot'un username'ini gir (örn: "oltalama_test_bot")
5. BotFather sana bir **token** verecek:
```
1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ123456789
```
6. Bu token'ı kopyala, ayarlara yapıştıracaksın
### Adım 2: Chat ID'ni Öğren
1. Bot'unu aç ve `/start` gönder
2. Tarayıcıda şu URL'yi aç:
```
https://api.telegram.org/bot<TOKEN>/getUpdates
```
(`<TOKEN>` yerine kendi token'ını koy)
3. Dönen JSON'da `"chat":{"id":123456789}` şeklinde bir değer göreceksin
4. Bu sayıyı (123456789) kopyala, bu senin **Chat ID**'n
### Adım 3: Sisteme Ekle
- Panel'de **Ayarlar > Telegram** kısmına git
- Bot Token'ı yapıştır
- Chat ID'yi yapıştır
- **Test Mesajı Gönder** butonuna tıkla
- Telegram'da mesaj aldıysan hazırsın! 🎉
## 📧 Gmail App Password Kurulum Rehberi
### Neden App Password?
Gmail normal şifreni kullanmana izin vermiyor (2FA olsa bile). "App Password" özel bir şifre oluşturman gerekiyor.
### Adım 1: 2-Factor Authentication Aç
1. [Google Account](https://myaccount.google.com/) sayfasına git
2. **Security** kısmına tıkla
3. **2-Step Verification**'ı aktifleştir (eğer aktif değilse)
### Adım 2: App Password Oluştur
1. [App Passwords](https://myaccount.google.com/apppasswords) sayfasına git
2. "Select app" dropdown'ından **"Other (Custom name)"** seç
3. İsim gir: "Oltalama Test System"
4. **Generate** butonuna tıkla
5. Google sana 16 haneli bir şifre gösterecek:
```
abcd efgh ijkl mnop
```
6. Bu şifreyi kopyala (boşlukları silebilirsin)
### Adım 3: Sisteme Ekle
- Panel'de **Ayarlar > Gmail** kısmına git
- Gmail adresini gir: `myemail@gmail.com`
- App Password'u yapıştır: `abcdefghijklmnop`
- Gönderen Adı: `Güvenlik Ekibi` (mail'de görünecek)
- **Test Mail Gönder** butonuna tıkla
- Kendi mail adresine test maili gelirse hazırsın! 🎉
## 🎯 Gelecek Geliştirmeler (Roadmap v2.0)
- [ ] Toplu token oluşturma (CSV upload)
- [ ] Mail şablonu editörü (WYSIWYG)
- [ ] Custom landing page'ler (her token için farklı)
- [ ] WhatsApp Business API entegrasyonu
- [ ] SMS phishing desteği
- [ ] QR code phishing
- [ ] Multi-user support (ekip üyeleri)
- [ ] Webhook integrations
- [ ] Advanced reporting (PDF export)
- [ ] API documentation (diğer sistemlerle entegre)
- [ ] Mobile app (React Native)
## 📞 Destek ve İletişim
Projeyle ilgili sorular için:
- GitHub Issues
- Email: [email adresi]
- Documentation: `/docs`
---
**⚠️ ÖNEMLİ UYARI**: Bu sistem yalnızca etik ve yasal phishing testleri için tasarlanmıştır. Kötü niyetli kullanım kesinlikle yasaktır ve yasal sonuçlar doğurur.
---
## 📋 Proje Bilgileri
**Versiyon**: 1.0.0 (Basitleştirilmiş)
**Son Güncelleme**: 10 Kasım 2025
**Durum**: Planning Phase - Ready to Develop
**Tahmini Tamamlanma**: 6-7 hafta
### Temel Özellikler Özeti
**Şirket bazlı yönetim** (Her şirket ayrı takip)
✅ SQLite (tek dosya database)
✅ Gmail entegrasyonu (Nodemailer)
✅ Telegram gerçek zamanlı bildirimler (şirket bilgisi ile)
✅ Otomatik IP tracking + GeoIP
✅ Mail şablon sistemi (Handlebars)
✅ Basit admin paneli (React)
✅ Session-based authentication
✅ Responsive design
✅ Şirket bazlı istatistik ve raporlama
### Teknoloji Stack
**Backend**: Node.js + Express + SQLite + Sequelize
**Frontend**: React (Vite) + Material-UI
**Entegrasyonlar**: Gmail (SMTP), Telegram Bot API, GeoIP-Lite
### Geliştirme Adımları
1. ✅ Proje planı hazırlandı (Şirket yönetimi dahil)
2. ⏳ Backend altyapı + Company model (1 hafta)
3. ⏳ Authentication + Şirket yönetimi (3-4 gün)
4. ⏳ Token sistemi (company_id ile) (1 hafta)
5. ⏳ Mail & Tracking & Telegram (2 hafta)
6. ⏳ Frontend (Şirket sayfaları dahil) (2 hafta)
7. ⏳ Test & Deploy (3-4 gün)
**Toplam**: ~7-8 hafta geliştirme (şirket yönetimi eklendi)