Sinkronisasi penuh folder bersama, kontak, kalender antara server Kerio Connect yang didistribusikan

Selamat siang, Habr!



Sebuah tugas



Di organisasi saya, server email digunakan pada platform Kerio Connect, server email yang melayani penggunanya dipasang di berbagai kota. Awalnya, tidak ada struktur terdistribusi, karena domain berbeda di tingkat ketiga, yang menunjukkan kota situs. Semuanya bekerja dan semua orang senang. Suatu hari - manajemen menetapkan tugas, kalender urusan umum antara semua situs!



Latar Belakang



Awalnya, idenya adalah untuk meningkatkan domain surat Kerio Terdistribusi dan dia akan melakukan semuanya sendiri. Dikatakan, domain terdistribusi telah dibuat, tetapi tidak ada di sana, server siap menyinkronkan kalender, folder, kontak - antara domain yang terletak di server yang sama, tetapi sama sekali tidak akan menyinkronkan data antara beberapa server.



Tentu saja, saya tidak mengharapkan trik seperti itu dan untuk waktu yang lama tidak bisa percaya pada tidak adanya fungsi yang saya butuhkan. Kemudian saya menemukan konfirmasi dokumenter tentang fakta ini. Daripada saya sangat bingung dan kecewa.



Tugas lancar berubah menjadi masalah.



Apa saja pilihannya



  • Buat dua klien di server yang berbeda, yang bertukar data yang diperlukan dengan beberapa perangkat lunak pihak ketiga. Itu perlu untuk menemukan perangkat lunak pihak ketiga ini yang akan mengimplementasikan fungsi ini - saya tidak suka menyapu, tetapi sepertinya ini adalah satu-satunya solusi cepat.
  • . , Kerio , , - , , - .


, Kerio , , β€” .



, β€œ ”, 6 :



  • – .
  • β€” .


, – DFS







  • , OS Windows. ( Linux. OS)
  • , β€” .
  • DFS .
  • Kerio, , , Kerio . ( )
  • DFS.
  • - ( )




( )



1. Kerio Distributed domain





Master , .



, Kerio , ,



:







, Master :







β€”



β€” .



! , ( β€” )



β€” , .

β€” ( ) .



2. Kerio



, . , , .



– , , , - , .



.



~DataMail\mail\#public\ \#msgs

~DataMail\mail\**Domain**\#public\ \#msgs



, , #msgs β€” , .



3. DFS



DFS, , .



DFS β€” Windows Server, ,

MS DFS



DFS – .







.





( β€” ) .



.



4.





(DFS), β€” - - , - .



, , . 6 – 12 .



, - , DFS, - , #msgs , .



Kerio , , 6 .

, index.fld, Kerio . , , , , , Kerio - index.fld

β€” - - .



, - β€” , , , .



?



.





, β€”



. , - #msgs, , . .



, , (15 ) 3-4 .



, , .



Kerio API







, , –

session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)



, , - , .



, , , .





CMD



Re-index.bat



@echo off
set dir=%~dp0
%dir:~0,2%
CD "%~dp0\"
md "%CD%\LOG\"
md "%CD%\Setup\"

ECHO -Start- >> "%CD%\LOG\%Computername%.log"
ECHO Start -> %Computername% %Date% %Time% >> "%CD%\LOG\%Computername%.log"

SetLocal EnableDelayedExpansion
for /f "UseBackQ Delims=" %%A IN ("%CD%\Setup\%Computername%.List") do (
  set /a c+=1
  set "m!c!=%%A"
)

set d=%c%
Echo Folder = %c%
ECHO Folder = %c% >> "%CD%\LOG\%Computername%.log"
ECHO.
ECHO. >> "%CD%\LOG\%Computername%.log"

:start
cls
if %c% LSS 1 exit
set /a id=1
set R=0

:Find
REM PF-Start
if "%id%" gtr "%c%" if %R% == 1 Goto Reindex 
if "%id%" gtr "%c%" timeout 60 && Goto start

For /F "tokens=1-3" %%a IN ('Dir "!m%id%!\#msgs\" /-C/S/A:-D') Do Set 2DirSize!id!=!DS!& Set DS=%%c
if "2DirSize!id!" == "" set 1DirSize!id!=!2DirSize%id%!

echo %id%
ECHO !m%id%!
echo Count        [ !1DirSize%id%! -- !2DirSize%id%! ]

if "!1DirSize%id%!" == "!2DirSize%id%!" ECHO Synk

REM DEL index.fld
if "!1DirSize%id%!" NEQ "!2DirSize%id%!" del /f /q !m%id%!\index.fld && del /f /q !m%id%!\indexlog.fld && del /f /q !m%id%!\search.fld && set R=1 && ECHO RE-index Count && ECHO RE-index Count %Date% %Time% - Delete !m%id%! >> "%CD%\LOG\%Computername%.log"

set 1DirSize!id!=!2DirSize%id%!

ECHO.
ECHO.

set /a id+=1
goto Find

:Reindex
ECHO. >> "%CD%\LOG\%Computername%.log"
ECHO --- RE-INDEX - Start - %Date% %Time% --- >> "%CD%\LOG\%Computername%.log"
ECHO. >> ----------------------------------- >> "%CD%\LOG\%Computername%.log"
call PublicFolders.py
timeout 60
goto start

exit


( , )



\Setup\%Computername%.List



%Computername% β€” ( .)



%Computername%.List – , , .



, , .



.



, , , : index.fld, indexlog.fld, search.fld β€” .



LOG .





Proses pengindeksan Proses pengindeksan dikurangi menjadi menjalankan fungsi API Kerio

Session = callMethod ("Domains.checkPublicFoldersIntegrity", {}, token)



Contoh eksekusi diberikan dalam - python

PublicFolders.py



import json
import urllib.request
import http.cookiejar
""" Cookie storage is necessary for session handling """
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """

server = "http://127.0.0.1:4040"
username = "user"
password = "password"

def callMethod(method, params, token = None):
    """
    Remotely calls given method with given params.
    :param: method string with fully qualified method name
    :param: params dict with parameters of remotely called method
    :param: token CSRF token is always required except login method. Use method "Session.login" to obtain this token.
    """
    data =  {"method": method ,"id":1, "jsonrpc":"2.0", "params": params}

    req = urllib.request.Request(url = server + '/admin/api/jsonrpc/')
    req.add_header('Content-Type', 'application/json')
    if (token is not None):
        req.add_header('X-Token', token)    

    httpResponse = urllib.request.urlopen(req, json.dumps(data).encode())

    if (httpResponse.status == 200):
        body = httpResponse.read().decode()
        return json.loads(body)

session = callMethod("Session.login", {"userName":username, "password":password, "application":{"vendor":"Kerio", "name":"Control Api-Local", "version":"Python"}})
token = session["result"]["token"]
print (session)

session = callMethod("Domains.checkPublicFoldersIntegrity",{"domainId": "test2.local"}, token)
print (session)

callMethod("Session.logout",{}, token)


http://127.0.0.1:4040 dapat dibiarkan apa adanya, namun jika Anda memerlukan HTTPS - python harus mempercayai sertifikat Kerio.



Juga dalam file Anda harus menentukan akun dengan hak untuk melakukan fungsi ini (Admin - folder surat bersama) dari server surat.



Saya harap artikel saya akan berguna bagi administrator Kerio Connect.




All Articles