first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:37:58 +03:00
commit 8b1fbdee99
104 changed files with 23398 additions and 0 deletions

76
AGENTS.md Normal file
View File

@@ -0,0 +1,76 @@
# Proje: GAuth-Central (Go-Gin Merkezi Kimlik Doğrulama Servisi)
## 1. Proje Özeti
Bu proje, birden fazla istemci uygulama (özellikle Django backend) için merkezi bir kimlik doğrulama ve yetkilendirme (Identity Provider) hizmeti sunar. Go (Gin Framework) ile geliştirilecek olan bu servis; klasik e-posta kaydı, Google ve GitHub OAuth2 girişlerini yönetir ve başarılı giriş sonrası JWT (JSON Web Token) üretir.
## 2. Teknoloji Yığını
- **Dil:** Go (Golang)
- **Web Framework:** Gin Gonic
- **Veritabanı:** PostgreSQL (GORM üzerinden)
- **Kimlik Doğrulama:**
- JWT (github.com/golang-jwt/jwt/v5)
- OAuth2 (golang.org/x/oauth2 ve github.com/markbates/goth)
- **Güvenlik:** Bcrypt (şifre hashleme), CORS, Rate Limiting.
## 3. Klasör Yapısı
```text
/gauth-central
├── /api
│ ├── /handlers # HTTP istek işleyicileri
│ ├── /middlewares # JWT ve Auth kontrolleri
│ └── /routes # Route tanımları
├── /config # Env ve Konfigürasyon yönetimi
├── /internal
│ ├── /models # DB Modelleri (User, SocialAccount)
│ ├── /services # Auth ve JWT iş mantığı
│ └── /database # DB Bağlantısı ve Migration
├── /pkg # Yardımcı araçlar (utils)
├── .env # Gizli anahtarlar
├── go.mod
└── main.go
```
## 4. Veritabanı Modeli (GORM)
- **User:** `ID`, `Email`, `Password` (hash), `CreatedAt`, `UpdatedAt`.
- **SocialAccount:** `ID`, `UserID` (FK), `Provider` (google/github), `ProviderID`, `Email`.
## 5. API Uç Noktaları (Endpoints)
### Klasik Auth
- `POST /v1/auth/register`: E-posta ve şifre ile kayıt.
- `POST /v1/auth/login`: E-posta ve şifre ile giriş -> JWT döner.
### OAuth2 (Social Login)
- `GET /v1/auth/:provider`: (google/github) Kullanıcıyı ilgili platforma yönlendirir.
- `GET /v1/auth/:provider/callback`: Platformdan dönen veriyi işler, kullanıcıyı DB'de eşleştirir/oluşturur -> JWT döner.
### Doğrulama ve Yönetim
- `GET /v1/auth/validate`: İstemci uygulama (Django) bu endpoint'e JWT gönderir, servis kullanıcı bilgilerini doğrular.
- `POST /v1/auth/refresh`: Refresh token ile yeni Access Token üretimi.
## 6. JWT Tasarımı
- **Payload:**
```json
{
"sub": "user_uuid",
"email": "user@example.com",
"exp": 1738500000,
"iss": "gauth-central"
}
```
- **İmzalama:** HS256 veya RS256 algoritması kullanılmalıdır.
## 7. İstemci Entegrasyon Mantığı (Örn: Django)
1. Django, kullanıcıyı `GAuth/v1/auth/google` adresine yönlendirir.
2. GAuth işlemi tamamlar ve kullanıcıyı Django'nun callback URL'ine bir `?token=...` query parametresi ile geri gönderir.
3. Django, bu token'ı alır ve kendi session'ını oluşturmak için GAuth'un `/v1/auth/validate` servisini kullanır.
## 8. Gemini İçin Talimatlar (Implementation Rules)
- Kodları modüler yaz (Handlers, Services, Models ayrımı).
- `.env` dosyasından `CLIENT_ID`, `CLIENT_SECRET` ve `JWT_SECRET` okumayı unutma.
- Hata yönetimini (Error Handling) profesyonelce yap ve JSON formatında hata mesajları dön.
- CORS ayarlarını tüm istemciler (Django vb.) için yapılandırılabilir kıl.
- `github.com/markbates/goth` kütüphanesini kullanarak multi-provider desteğini uygula.
---
**Not:** Bu dosya projenin teknik rehberidir. Kod üretim aşamasında bu mimariye sadık kalınmalıdır.