# 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 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!