Bedrud, Fiber web framework’ünü kullanır (Go için Express benzeri API).
Yönlendirme Mantığı
Rotalar internal/server/server.go dosyasında tanımlanır. Ara katman veya önekleri kolayca uygulamak için rotalar gruplandırılır.
Ana Gruplar:
/api/auth: Kimlik doğrulama için açık ve korumalı rotalar./api/room: Oda yönetimi için korumalı rotalar./api/admin: Yalnızcasuperadminrolüne sahip kullanıcılarla sınırlandırılmış rotalar./livekit: İstekleri gömülü LiveKit ses/video sunucusuna gönderen özel vekil grubu.
Özelleşmiş İşleyici Mantığı
Oda Yönetimi (internal/handlers/room.go)
RoomHandler, Bedrud’un oda meta verileri ile LiveKit’in medya motoru arasında çeviri yapar.
1. Oda Oluşturma
POST /api/room/create üzerinden bir oda oluşturulduğunda:
- Normalizasyon: Oda adları kırpılır ve küçük harfe dönüştürülür.
- Otomatik Üretim: Sağlanan ad yoksa, Bedrud rastgele URL uyumlu bir ad üretir (ör.
fancy-blue-whale). - Eşzamanlı Oluşturma: Arka uç önce medya oturumunu oluşturmak için dahili LiveKit API’sini çağırır, ardından meta verileri yerel veritabanına kaydeder.
2. Katılım ve Jetonlar
Bir kullanıcı POST /api/room/join üzerinden katıldığında:
- Erişim Kontrolü: Arka uç odanın var olup olmadığını ve kullanıcının yetkili olup olmadığını denetler.
- Jeton Üretimi: Şunları içeren imzalı bir JWT (Katılım Jetonu) üretilir:
Identity: Bedrud’daki Kullanıcı Kimliği.Name: Kullanıcının Görünen Adı.Grants:CanJoin,CanPublish,CanSubscribegibi belirli izinler.
- İstemci El Sıkışması: Ön uç, hem yerel oda meta verilerini hem de WebRTC bağlantısını başlatmak için LiveKit jetonunu alır.
Yönetici ve Kullanıcı Yönetimi (internal/handlers/users.go)
/api/admin altındaki rotalar RequireAccess("superadmin") ara katmanı tarafından sıkıca korunur.
1. Kullanıcı Kontrolü
UsersHandler, yöneticilere şu imkânları sağlar:
- Tüm Kullanıcıları Listeleme: Kimlik doğrulama sağlayıcısı ve son giriş meta verileri dahil kayıtlı kullanıcıların tam dizinini getirir.
- Durum Güncelleme: Hesap erişimini anında etkinleştirir veya devre dışı bırakır. Bir kullanıcıyı devre dışı bırakmak, oturum açmasını veya jetonlarını yenilemesini hemen engeller.
2. Oda Genel Görünümü
Yönetici rotaları, kim tarafından oluşturulduğuna bakılmaksızın tüm aktif ve geçmiş odaları platform genelinde listelemeye olanak tanır. Bu, platform moderasyonu için tasarlanmıştır.
İstek Yaşam Döngüsü
-
İstek gelir: Fiber HTTP isteğini alır.
-
Ara Katman:
recover: Hata oluşursa sunucunun çökmesini engeller.cors: Çapraz Kökenli Kaynak Paylaşımını (CORS) yönetir.Protected: (İsteğe bağlı)Authorizationbaşlığında geçerli bir JWT olup olmadığını denetler.
-
İşleyici:
internal/handlersiçindeki fonksiyon çağrılır.- Varsa JSON gövdesini
c.BodyParserkullanarak ayrıştırır. - Gerekli Hizmeti veya Depoyu çağırır.
c.JSONkullanarak bir JSON yanıtı döndürür.
- Varsa JSON gövdesini
Örnek: Oda Oluşturma İşleyicisi
func (h *RoomHandler) CreateRoom(c *fiber.Ctx) error {
var input struct {
Name string `json:"name"`
}
// 1. Parse Input
if err := c.BodyParser(&input); err != nil {
return c.Status(400).JSON(fiber.Map{"error": "Invalid input"})
}
// 2. Business Logic (via Repository)
room := &models.Room{Name: input.Name}
if err := h.roomRepo.Create(room); err != nil {
return c.Status(500).JSON(fiber.Map{"error": "Failed to create room"})
}
// 3. Response
return c.Status(201).JSON(room)
}Statik Dosyalar (Ön Uç)
Web ön ucu, derleme zamanında Go ikili dosyasına gömülüdür. Fiber, React dosyalarını filesystem.New kullanarak frontend/ dizininden sunar.
/api ile başlamayan her rota, React uygulamasının index.html dosyasına yönlendirilir. Bu, sayfa yenilemesinde 404 hatası olmadan istemci taraflı yönlendirmeyi mümkün kılar.