268 lines
6.0 KiB
Markdown
268 lines
6.0 KiB
Markdown
# 🚀 GAuth-Central - Quick Reference
|
||
|
||
## 🏃 Hızlı Başlatma
|
||
|
||
```bash
|
||
# Standalone Mode (Mevcut PostgreSQL & Redis ile)
|
||
./start.sh
|
||
|
||
# Docker ile (Tüm servisler)
|
||
./start-with-docker.sh
|
||
|
||
# Manuel
|
||
go run main.go
|
||
```
|
||
|
||
## 🔗 Önemli URL'ler
|
||
|
||
| Servis | URL | Açıklama |
|
||
|--------|-----|----------|
|
||
| API | http://localhost:8080 | Ana API |
|
||
| Swagger | http://localhost:8080/docs/index.html | API Dokümantasyonu |
|
||
| PostgreSQL | localhost:5432 | Database |
|
||
| Redis | localhost:6379 | Cache |
|
||
|
||
## 📝 Temel Komutlar
|
||
|
||
```bash
|
||
# Docker Servisleri
|
||
docker-compose up -d # Başlat
|
||
docker-compose down # Durdur
|
||
docker-compose down -v # Durdur + Volume'ları sil
|
||
docker-compose logs -f app # Logları izle
|
||
docker-compose ps # Servis durumları
|
||
|
||
# Go Komutları
|
||
go run main.go # Çalıştır
|
||
go build -o main . # Derle
|
||
go mod tidy # Bağımlılıkları temizle
|
||
swag init -g main.go # Swagger güncelle
|
||
|
||
# Redis Komutları
|
||
docker exec -it gauth_redis redis-cli
|
||
> PING # Bağlantı testi
|
||
> KEYS * # Tüm key'leri listele
|
||
> GET user:UUID # User cache getir
|
||
> DEL session:TOKEN # Session sil
|
||
> FLUSHDB # Tüm cache'i temizle
|
||
|
||
# PostgreSQL Komutları
|
||
docker exec -it gauth_postgres psql -U postgres -d gauth
|
||
\dt # Tabloları listele
|
||
\d users # Users tablosu yapısı
|
||
SELECT * FROM roles; # Rolleri listele
|
||
SELECT * FROM users LIMIT 10; # Kullanıcıları listele
|
||
```
|
||
|
||
## 🔧 Environment Variables
|
||
|
||
| Değişken | Varsayılan | Açıklama |
|
||
|----------|------------|----------|
|
||
| `PORT` | 8080 | Server portu |
|
||
| `DB_URL` | - | PostgreSQL bağlantısı |
|
||
| `REDIS_URL` | - | Redis bağlantısı |
|
||
| `JWT_SECRET` | - | JWT gizli anahtar |
|
||
| `GOOGLE_CLIENT_ID` | - | Google OAuth |
|
||
| `GITHUB_CLIENT_ID` | - | GitHub OAuth |
|
||
|
||
## 📡 API Endpoints
|
||
|
||
### Public Endpoints
|
||
|
||
```bash
|
||
# Register
|
||
POST /v1/auth/register
|
||
{
|
||
"email": "user@example.com",
|
||
"password": "SecurePass123!",
|
||
"user_name": "username"
|
||
}
|
||
|
||
# Login
|
||
POST /v1/auth/login
|
||
{
|
||
"email": "user@example.com",
|
||
"password": "SecurePass123!"
|
||
}
|
||
|
||
# OAuth
|
||
GET /v1/auth/google
|
||
GET /v1/auth/github
|
||
|
||
# Verify Email
|
||
GET /v1/auth/verify-email?token=...
|
||
|
||
# Refresh Token
|
||
POST /v1/auth/refresh
|
||
{
|
||
"refresh_token": "..."
|
||
}
|
||
```
|
||
|
||
### Protected Endpoints (Requires Authorization Header)
|
||
|
||
```bash
|
||
# Get User Info
|
||
GET /v1/auth/me
|
||
Authorization: Bearer <token>
|
||
|
||
# Validate Token
|
||
GET /v1/auth/validate
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
## 🛡️ Rate Limits
|
||
|
||
| Endpoint | Limit | Süre |
|
||
|----------|-------|------|
|
||
| `/v1/auth/login` | 5 | 1 dakika |
|
||
| `/v1/auth/register` | 3 | 5 dakika |
|
||
| Genel API | 100 | 1 dakika |
|
||
|
||
## 🗄️ Redis Keys
|
||
|
||
| Pattern | Açıklama | TTL |
|
||
|---------|----------|-----|
|
||
| `user:{id}` | User cache | 1 saat |
|
||
| `session:{token}` | Session data | 24 saat |
|
||
| `blacklist:{token}` | Invalidated tokens | 24 saat |
|
||
| `ratelimit:{key}` | Rate limit counters | Dinamik |
|
||
| `email_verify:{email}` | Email verification | Dinamik |
|
||
| `password_reset:{email}` | Password reset | Dinamik |
|
||
|
||
## 🧪 Test Komutları
|
||
|
||
```bash
|
||
# Health Check
|
||
curl http://localhost:8080/
|
||
|
||
# Register Test
|
||
curl -X POST http://localhost:8080/v1/auth/register \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"test@test.com","password":"Test123!","user_name":"testuser"}'
|
||
|
||
# Login Test
|
||
curl -X POST http://localhost:8080/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"test@test.com","password":"Test123!"}'
|
||
|
||
# Get User Info (with token)
|
||
curl http://localhost:8080/v1/auth/me \
|
||
-H "Authorization: Bearer YOUR_TOKEN_HERE"
|
||
```
|
||
|
||
## 🐛 Sorun Giderme
|
||
|
||
```bash
|
||
# Servis durumlarını kontrol et
|
||
docker-compose ps
|
||
|
||
# App loglarını kontrol et
|
||
docker-compose logs app
|
||
|
||
# Redis bağlantısı
|
||
docker exec -it gauth_redis redis-cli PING
|
||
|
||
# PostgreSQL bağlantısı
|
||
docker exec -it gauth_postgres pg_isready -U postgres
|
||
|
||
# Container'ı yeniden başlat
|
||
docker-compose restart app
|
||
|
||
# Tüm servisleri yeniden oluştur
|
||
docker-compose down
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
## 📊 Database Schema
|
||
|
||
```sql
|
||
-- Users Table
|
||
users (
|
||
id UUID PRIMARY KEY,
|
||
email VARCHAR UNIQUE,
|
||
user_name VARCHAR NOT NULL,
|
||
password_hash VARCHAR,
|
||
email_verified BOOLEAN,
|
||
email_verify_token VARCHAR,
|
||
created_at TIMESTAMP,
|
||
updated_at TIMESTAMP
|
||
)
|
||
|
||
-- Roles Table
|
||
roles (
|
||
id UUID PRIMARY KEY,
|
||
name VARCHAR UNIQUE,
|
||
description TEXT
|
||
)
|
||
|
||
-- Permissions Table
|
||
permissions (
|
||
id UUID PRIMARY KEY,
|
||
name VARCHAR UNIQUE,
|
||
description TEXT
|
||
)
|
||
```
|
||
|
||
## 🔐 CORS Yapılandırması
|
||
|
||
Varsayılan: `http://localhost:3000`
|
||
|
||
Değiştirmek için `main.go`:
|
||
```go
|
||
AllowOrigins: []string{
|
||
"http://localhost:3000",
|
||
"https://yourdomain.com",
|
||
}
|
||
```
|
||
|
||
## 📚 Cache Service Örnekleri
|
||
|
||
```go
|
||
import "gauth-central/internal/services"
|
||
|
||
cache := services.NewCacheService()
|
||
|
||
// User caching
|
||
cache.SetUser(userID, user, 1*time.Hour)
|
||
user, err := cache.GetUser(userID)
|
||
|
||
// Session
|
||
cache.SetSession(token, userID, 24*time.Hour)
|
||
userID, err := cache.GetSession(token)
|
||
|
||
// Rate limiting
|
||
count, err := cache.IncrementRateLimit("login:"+ip, 1*time.Minute)
|
||
if count > 5 {
|
||
// Rate limit exceeded
|
||
}
|
||
|
||
// Token blacklist
|
||
cache.BlacklistToken(token, 24*time.Hour)
|
||
isBlacklisted, err := cache.IsTokenBlacklisted(token)
|
||
```
|
||
|
||
## 🎯 Önemli Dosyalar
|
||
|
||
| Dosya | Açıklama |
|
||
|-------|----------|
|
||
| `main.go` | Ana uygulama |
|
||
| `config/config.go` | Yapılandırma |
|
||
| `internal/database/redis.go` | Redis bağlantısı |
|
||
| `internal/services/cache_service.go` | Cache servisi |
|
||
| `api/routes/routes.go` | Route tanımları |
|
||
| `api/middlewares/rate_limit_middleware.go` | Rate limiting |
|
||
| `docker-compose.yml` | Docker yapılandırması |
|
||
| `.env` | Environment variables |
|
||
|
||
## 📖 Dokümantasyon
|
||
|
||
- `README.md` - Genel proje bilgisi
|
||
- `SETUP.md` - Detaylı kurulum rehberi
|
||
- `CHANGELOG.md` - Versiyon geçmişi
|
||
- `QUICK_REFERENCE.md` - Bu dosya
|
||
|
||
---
|
||
|
||
💡 **İpucu**: Swagger UI'da tüm endpoint'leri test edebilirsiniz: http://localhost:8080/docs/index.html
|