first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:35:24 +03:00
commit bbbf76b184
592 changed files with 246870 additions and 0 deletions

229
README.md Normal file
View File

@@ -0,0 +1,229 @@
# GAuth-Central - Centralized Authentication Service
Modern, ölçeklenebilir ve güvenli bir kimlik doğrulama servisi. PostgreSQL ve Redis ile desteklenir.
## 🚀 Özellikler
- ✅ JWT tabanlı kimlik doğrulama
- ✅ OAuth2 entegrasyonu (Google, GitHub)
- ✅ Email doğrulama
- ✅ Redis ile session yönetimi ve caching
- ✅ PostgreSQL ile veri saklama
- ✅ Rate limiting
- ✅ Token blacklist (logout)
- ✅ CORS desteği
- ✅ Swagger/OpenAPI dokümantasyonu
- ✅ Docker & Docker Compose desteği
## 📋 Gereksinimler
- Go 1.25+
- PostgreSQL 17+
- Redis 7+
- Docker & Docker Compose (opsiyonel)
## 🛠️ Kurulum
### 1. Repository'yi klonlayın
```bash
git clone <repository-url>
cd atahango
```
### 2. Environment dosyasını ayarlayın
```bash
cp .env.example .env
# .env dosyasını kendi ayarlarınıza göre düzenleyin
```
### 3. Bağımlılıkları yükleyin
```bash
go mod download
```
### 4a. Standalone Mode (Mevcut PostgreSQL & Redis kullanarak)
Eğer zaten çalışan PostgreSQL ve Redis sunucularınız varsa:
```bash
# .env dosyasında DB_URL ve REDIS_URL'i ayarlayın
# Örnek:
# DB_URL="host=10.80.80.70 user=cloud password=xxx dbname=go_gauth port=5432 sslmode=disable"
# REDIS_URL=redis://default:xxx@10.80.80.70:6379/0
# Uygulamayı başlat
./start.sh
# veya manuel
go run main.go
```
### 4b. Docker ile çalıştırma
```bash
# Tüm servisleri başlat (PostgreSQL, Redis, App)
docker-compose up -d
# Logları takip et
docker-compose logs -f app
```
### 4b. Docker ile çalıştırma
Docker ile tüm servisleri (PostgreSQL, Redis, App) birlikte başlatmak için:
```bash
# Tüm servisleri başlat (PostgreSQL, Redis, App)
docker-compose up -d
# Logları takip et
docker-compose logs -f app
```
### 5. Bağlantı Testi
```bash
# API sağlık kontrolü
curl http://localhost:8080/
# Swagger dokümantasyonu
open http://localhost:8080/docs/index.html
```
## 🔧 Yapılandırma
### Environment Variables
| Değişken | Açıklama | Örnek |
|----------------------|------------------------------|-----------------------------------------------------------------------------------|
| `PORT` | Uygulama portu | `8080` |
| `DB_URL` | PostgreSQL bağlantı string'i | `host=localhost user=postgres password=pass dbname=gauth port=5432 sslmode=disable` |
| `REDIS_URL` | Redis bağlantı URL'i | `redis://default:password@localhost:6379/0` |
| `JWT_SECRET` | JWT için gizli anahtar | `your_secret_key` |
| `GOOGLE_CLIENT_ID` | Google OAuth Client ID | \- |
| `GOOGLE_CLIENT_SECRET` | Google OAuth Client Secret | \- |
| `GITHUB_CLIENT_ID` | GitHub OAuth Client ID | \- |
| `GITHUB_CLIENT_SECRET` | GitHub OAuth Client Secret | \- |
| `CLIENT_CALLBACK_URL` | OAuth callback URL | `http://localhost:8080/v1/auth` |
## 📚 API Dokümantasyonu
Swagger UI: `http://localhost:8080/docs/index.html`
### Temel Endpoint'ler
#### Authentication
- `POST /v1/auth/register` - Yeni kullanıcı kaydı
- `POST /v1/auth/login` - Kullanıcı girişi
- `GET /v1/auth/verify-email` - Email doğrulama
- `POST /v1/auth/refresh` - Token yenileme
- `GET /v1/auth/:provider` - OAuth ile giriş (google, github)
- `GET /v1/auth/:provider/callback` - OAuth callback
#### Protected Routes (Authorization gerekli)
- `GET /v1/auth/me` - Kullanıcı bilgilerini getir
- `GET /v1/auth/validate` - Token doğrulama
## 🗄️ Veritabanı Yapısı
### PostgreSQL Tables
- `users` - Kullanıcı bilgileri
- `social_accounts` - OAuth hesap bağlantıları
- `roles` - Kullanıcı rolleri
- `permissions` - İzinler
### Redis Cache Keys
- `user:{id}` - Kullanıcı cache
- `session:{token}` - Session yönetimi
- `blacklist:{token}` - Token blacklist
- `ratelimit:{key}` - Rate limiting
- `email_verify:{email}` - Email doğrulama token'ları
- `password_reset:{email}` - Şifre sıfırlama token'ları
## 🔒 Güvenlik
- Şifreler bcrypt ile hashlenmiş olarak saklanır
- JWT token'lar Authorization header'da Bearer token olarak gönderilir
- CORS politikaları yapılandırılmıştır
- Rate limiting Redis ile yönetilir
- Logout sonrası token'lar blacklist'e eklenir
## 🐳 Docker Compose
Uygulama 3 servis ile çalışır:
1. **PostgreSQL** - Ana veritabanı (Port: 5432)
2. **Redis** - Cache ve session store (Port: 6379)
3. **App** - Go backend (Port: 8080)
```bash
# Servisleri başlat
docker-compose up -d
# Servisleri durdur
docker-compose down
# Volume'ları da sil
docker-compose down -v
```
## 🧪 Development
### Swagger Docs Güncelleme
```bash
# Swagger dokümantasyonunu güncelle
swag init -g main.go
```
### Database Migration
Uygulama ilk çalıştırıldığında otomatik olarak migration yapar ve seed data'yı ekler.
## 📝 Cache Service Kullanımı
```go
cacheService := services.NewCacheService()
// Kullanıcı cache
cacheService.SetUser(userID, user, 1*time.Hour)
user, err := cacheService.GetUser(userID)
// Session
cacheService.SetSession(token, userID, 24*time.Hour)
userID, err := cacheService.GetSession(token)
// Rate limiting
count, err := cacheService.IncrementRateLimit("login:"+ip, 1*time.Minute)
// Token blacklist
cacheService.BlacklistToken(token, 24*time.Hour)
isBlacklisted, err := cacheService.IsTokenBlacklisted(token)
```
## 🤝 Contributing
1. Fork the project
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## 📄 License
This project is licensed under the MIT License.
## 👨‍💻 Author
GAuth-Central Team
---
⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın!