Quantcast
Channel: Topluluk Sayfası
Viewing all articles
Browse latest Browse all 30

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

$
0
0

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.

awk '

function urlDecode(url) {
    for (i = 0x20; i < 0x40; ++i) {
        repl = sprintf("%c", i);
        if ((repl == "&") || (repl == "\\")) {
            repl = "\\" repl;
        }
        url = gensub(sprintf("%%%02X", i), repl, "g", url);
        url = gensub(sprintf("%%%02x", i), repl, "g", url);
    }
    return url;
}

BEGIN {count = 1
    print  "INSERT INTO ofRoster(ROSTERID, USERNAME, JID, SUB, ASK, RECV, NICK) VALUES (\47 1\47, \47test\47,\47test@test.com\47,\47 3\47,\47 -1\47, \47-1\47, \47 "
}
{
    
	ORS = ""
	isim = ""
    if($0 ~ /@/ ) {
    if($1 ~ /@/){
    count = count + 1
 print"\47),\n (\47" count "\47, \47"substr(urlDecode(FILENAME),0, length(urlDecode(FILENAME))-4)"\47,\47"  substr($1, 3, length($1)-4) "\47,\47" "3\47,\47 -1\47, \47-1\47, \47"
}
}
    if($0 ~ /name/){
    if(NF==3)
    print  substr($3, 2, length($3)-3)
    if(NF==4)
    print  substr($3,2, length($3)), substr($4, 1, length($4)-2)
    else if(NF==5)
    print  substr($3,2, length($3)), $4, substr($5, 1, length($5)-2)
}
}
END {print "\47);"} '   file1.dat file2.dat file3.dat ...

Çalıştırmak için:

./betik.sh | mysql -u kullanici --database=veritabanı_adı -p

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

Kontol için veritabanından:

select * from ofRoster;

komutu ile roster tablosu incelenebilir.

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

update ofID set id='insert_edilen_satır_sayısı+1' where idType='18';

komutu kullanılabilir.

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


Viewing all articles
Browse latest Browse all 30

Trending Articles


Mide ağrısı için


Alessandra Torre - Karanlık Yalanlar


Şekilli süslü hazır floodlar


Flatcast Güneş ve Ay Flood Şekilleri


Gone Are the Days (2018) (ENG) (1080p)


Yildiz yükseltme


yc82


!!!!!!!!!! Amın !!!!!!!!!


Celp At Nalı (Sahih Tılsım)


SCCM 2012 Client Installation issue