Prosody kullanıcı roster’larının Openfire sunucusuna aktarımı

Prosody ve Openfire birer açık kaynaklı XMPP server uygulamasıdır. Şirket içi ve çalışanların dış bağlantıları için Prosody kullanılmaktaydı. Daha yetenekli olduğu için Openfire’a geçmeyi istiyorduk. Fakat hali hazırda Prosody’de her kullanıcının onlarca kişisel bağlantısı kayıtlıydı. Yıllar içinde birikmiş o kadar bağlantıyı yok edip herkese baştan ekleyin demek olmazdı. Normal şartlarda Prosody’nin ve Openfire’ın bu bağlantıları yani roster’ları aktarma özelliği bulunmamakta. Kullanıcıları elle yaratmakta bir sorun çünkü fazla bir sayıda kullanıcı yok. Ama her kullanıcının onlarca bağlantısı yani roster’ı olduğunu düşünürsek roster’ları tek tek elle eklemek çok zaman alıcı ve uğraştırıcı bir iş. Örneğin bizde toplam 178 roster kayıtlıydı.

Prosody roster dosyalarını incelediğimiz zaman bunları .dat dosyaları içinde tuttuğunu görebiliriz. Openfire kurulumu yaparken veritabanı olarak MySQL kullandık. Openfire roster kayıtlarını MySQL üzerinde ofRoster adlı tabloda tutuyor. Bize kalan .dat dosyalarındaki kayıtları parse edip ofRoster tablosuna insert edecek bir sql komutu haline çevirmek. Bu da basit bir betik ile halledilebilir. Awk dilinde yazılmış bu betik Prosody’de bulunmakta olan bütün kullanıcıların bütün kayıtlı bağlantılarını tek seferde alıp Openfire’a aktarımı sağlıyor. Geriye sadece kullanıcının istemciden login olması kalıyor. Kullanıcı açısından sanki hiç bir değişiklik yokmuş gibi kullanılmaya devam edilebiliyor. Transfer için bu yöntemi kullanırken dikkat edilmesi gerekenler başlıca şunlar:

#ofRoster tablosunun boş olması gerekiyor. Çünkü tabloya id=1’den başlayarak ekliyor. Eğer daha önce tabloya ekleme yapıldıysa çakışma olacak ve hata verecektir.
#Kullanıcıların elle yaratılması gerekiyor. Betik sadece roster eklemesi yapıyor. Sistemde kullanıcıların var olması veya yaratılması gerekiyor. Önce kullanıcıları yaratıp roster transferinin sonra yapılması tercih edilmelidir.
#Betik, takma adı bir, iki ve üç kelimeden oluşan rosterları ekleyecek şekilde yazıldı. Eğer farklı bir durum söz konusu ise ufak değişiklikler yapılmalı. Aksi takdirde o isimlerde yanlışlıklar olacaktır.
#Roster aktarımından sonra ofID tablosundan roster satırı güncellenmeli yoksa daha sonra yaratılacak rosterlarda çakışma olacak ve ekleme yapılamayacak. Güncelleme için idType=18 olan satırın id’si eklenen roster sayısının bir fazlasına getirilmeli.

Betik aşağıdaki gibidir.

Çalıştırmak için:

Komut çalıştığında mysql şifresi istenecek, girildiğinde transfer gerçekleşmiş olacak.

Kontol için veritabanından:

komutu ile roster tablosu incelenebilir.

Son olarak veritabanındaki roster id’nin güncellenmesi gerekiyor. Bunun için yine veritabanından

komutu kullanılabilir.

Artık istemciden giriş yapıp kullanılmaya başlanabilir.