lider-ahenk-docs/general/mesaj_formatlari.md

347 lines
12 KiB
Markdown
Raw Normal View History

#Lider - Ahenk Mesaj Tipleri ve JSON Yapıları
##Mesaj Tipleri
**Ahenk** ile **Lider** birbirlerine Ejabberd üzerinden mesaj göndererek haberleşir. Bu mesaj **JSON** formatındadır. Ve mesajlar farklı tiplerde olsa da **type** ve **timestamp** alan isimleri her mesajda bulunur.
**Ahenk** kurulu olduğu bilgisayarda ilk kez çalışırken kendini **Ejabberd server**, **veri tabanı**na ve **ldap**'a kaydetmesi üzere bir takım bilgiyi Lider'e gönderir. Bu işlem **Registration**'dır ve mesaj tipi **REGISTER**'dır. Registration mesajına Lider **REGISTRATION_RESPONSE** tipinde bir json mesajı döndürür.
Ahenk kurulu bilgisayarlarda kullanıcılar **LDAP** üzerinden authenticate olurlar. Oturum açma işlemi sırasında Ahenk, Lider'e 2 adet mesaj gönderir. Bunlar **LOGIN** ve **GET_POLICIES** mesajlarıdır. **LOGIN** mesajında Lider'e hangi kullanıcının oturum açtığını bildirilir. **GET_POLICIES** mesajında (varsa önceden gönderilmiş politikanın bilgisi gönderilir) giriş yapan kullanıcı ile çalışmakta olan ajan bilgisayar üzerine önceden tanımlanmış politikaları Lider'den ister.
**GET_POLICIES** tipindeki mesaja Lider, **EXECUTE_POLICY** tipinde mesaj gönderir. Bu mesaj varsa kullanıcı ve ajan bilgisayar üzerinde tanımlı olan politikaların içeriği hakkında cevap döndürür. Burada **dikkat edilmesi gereken nokta**; Ahenk **GET_POLICIES** mesajıyla hali hazırda kayıtlı kullanıcı ve ajan politikalarının versiyonlarını Lidere gönderir. Lider bu kullanıcı-ajan üzerinde bu versiyondan daha yeni bir versiyon politika olmadığını görürse profili null olarak döndürür fakat geçerli politika versiyonunu yazar. Ahenk, Liderden dönen **EXECUTE_POLICY** mesajı ile gelen politikalara bakıp, yeni politika geldi ise veritabanını günceller. Ahenk güncel politikaları çalıştırmaya başlar. Eğer politika versiyonları null ise bu kullanıcı ya da ajan için politika tanımlanmamış demektir.
**EXECUTE_TASK** tipindeki mesajlar ise o anda çalıştırılması gereken görev için kullanılan gereklili parametreleri barındıran mesajdır.
Çalıştırılan her görev ya da Politika Profili sonunda Ahenk, Lidere **RESPONSE** gönderir. Response mesajı ile çalıştırılan görev/politikanın başarı durumu, varsa döndürülen data bu mesaj ile iletilir.
Ahenk bir görev ya da politika çalıştırmayı denediğinde eğer ilgili eklentiyi bulamazsa **MISSING_PLUGIN** tipinde bir mesaj gönderir.
Lider'e **MISSING_PLUGIN** tipinde mesaj eriştiğinde eğer ilgili eklentinin Lider tarafındaki yapılandırma dosyasında bu eklentinin ahenk tarafının deb versiyonuna nasıl erişilebileceği hakkında distro bilgileri tanımlandıysa **INSTALL_PLUGIN** tipinde bir mesaj döndürür.
_ _ _
###REGISTER (A>>>L)
**from:** alınmak istenen ejabberd jid.
**password:** alınacak ejabberd hesabının şifresi.
**hostname,ipAddresses,macAddresses** makine temel bilgileri..
**data:** çalışan işletim sistemi, donanım, oturumlar, vs... hakkında genişleyebilir veriler. Bu verilerin miktarı değişebilir ve Lider tarafında gruplandırma vs.. gibi işlemlerde gerekli olabilir.
```json
{
"type":"REGISTER",
"timestamp":"07-06-2016 09:58",
"from":"2559305d-a415-38e7-8498-2dbc458662a7",
"password":"41b6eeb5-1927-459a-b596-3115a40dfade",
"hostname":"volkansahin",
"ipAddresses":"'192.168.1.121', '192.168.56.1'",
"macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'",
"data":{
"hardware.disk.used":86574,
"hardware.cpu.architecture":"x86_64",
"hardware.disk.partitions":[
["/dev/sda2","/","ext4","rw,errors=remount-ro"],
["/dev/sda1","/boot/efi","vfat","rw"]],
"os.name":"Linux",
"hostname":"volkansahin",
"ipAddresses":"'192.168.1.121', '192.168.56.1'",
"sessions.userNames":["volkan"],
"hardware.cpu.physicalCoreCount":2,
"os.distributionVersion":"17",
"macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'",
"hardware.memory.total":7112,
"hardware.disk.total":104790,
"os.kernel":"3.13.0-24-generic",
"hardware.disk.free":12869,
"os.architecture":"64bit",
"os.version":"#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014",
"os.distributionName":"LinuxMint",
"hardware.network.ipAddresses":[
"192.168.1.121",
"192.168.56.1"],
"hardware.cpu.logicalCoreCount":4,
"os.distributionId":"qiana"
}
}
```
_ _ _
###REGISTRATION_RESPONSE (L>>>A)
**status:** Kayıt işleminin sonucu. (status **REGISTERED, REGISTERED_WITHOUT_LDAP, ALREADY_EXISTS, REGISTRATION_ERROR** değerlerinden biri olabilir)
**message:** Kayıt işleminin sonucu (text alan)
**agentDn:** LDAP kayıtı gerçekleştirdiyse LDAP kaydının DN değeri.
**REGISTRATION_ERROR** mesajı dönerse Ahenk belli miktarda tekrar REGISTRATION isteği gönderir. Deneme sayısı biterse hata mesajı oluşturup kendisini kapatır.
```json
{"type":"REGISTRATION_RESPONSE",
"status":"ALREADY_EXISTS",
"message":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org already exists! Updated its password and database properties with the values submitted.",
"agentDn":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org",
"timestamp":1465282735658}
```
_ _ _
###LOGIN (A>>>L)
**username:** Giriş yapan kullanıcının adı.
```json
{"type": "LOGIN",
"username": "volkan",
"timestamp": "07-06-2016 10:01"}
```
_ _ _
###LOGOUT (A>>>L)
**username:** Çıkış yapan kullanıcının adı.
```json
{
"type":"LOGOUT",
"username":"volkan",
"timestamp":"07-06-2016 11:11"
}
```
_ _ _
###GET_POLICIES (A>>>L)
**userPolicyVersion:** Kayıtlı kullanıcı politikası versiyonu
**agentPolicyVersion:** Kayıtlı ajan politikası versiyonu
**username:** İstenilen politikanın sahibi.
(aşağıdaki örnekte kayıtlı bir versiyon bulunmadığı için değerler null atanmış)
```json
{
"type":"GET_POLICIES",
"userPolicyVersion":null,
"agentPolicyVersion":null,
"username":"volkan",
"timestamp":"07-06-2016 10:01"
}
```
_ _ _
###EXECUTE_POLICY (L>>>A)
**username**: Kullanıcı politikasının sahibinin kullanıcı adı.
**userPolicyProfiles**: Kullanıcı politikasının barındırdığı profillerin içeriği. Json array formatındadır.
**userPolicyVersion**: Kullanıcı politikasının versiyonu
**userCommandExecutionId**: Kullanıcı politikasının çalıştırma id'si
**agentPolicyVersion**: Ajan politikasının versiyonu
**agentPolicyProfiles**: Ajan politikasının barındırdığı profillerin içeriği. Json array formatındadır.
**agentCommandExecutionId**: Ajan politikasının çalıştırma id'si
Aşağıdaki örnekte **userPolicyProfiles** ve **userPolicyVersion** değerleri null atanmış; çünkü gelen **GET_POLICIES** mesajındakinden daha gündel bir versiyon bulunmamakta.
**userPolicyProfiles** ve **agentPolicyProfiles** aynı formattadırlar ve barındırdıkları profillerde id,çalışacakları plugin hakkında bilgileri, profil adı, tanımı, console'da oluşturulan parametreler (**profileData**)bulunur.
```json
{
"type":"EXECUTE_POLICY",
"username":"volkan",
"userPolicyProfiles":null,
"userPolicyVersion":null,
"userCommandExecutionId":null,
"agentPolicyVersion":"2701-1",
"agentCommandExecutionId":2454,
"agentPolicyProfiles":[
{
"id":2651,
"plugin":{
"id":1801,
"name":"browser",
"version":"1.0.0",
"description":"Lider Browser Plugin",
"active":true,
"deleted":true,
"machineOriented":false,
"userOriented":true,
"policyPlugin":true,
"xBased":false,
"createDate":1464254239000,
"modifyDate":1465203376000
},
"label":"volkan_t",
"description":"anasayfa",
"overridable":false,
"active":true,
"deleted":false,
"profileData":{
"preferences":[
{
"preferenceName":"extensions.BlockSite.enabled",
"value":"false"
},
{
"preferenceName":"extensions.BlockSite.showWarning",
"value":"false"
},
{
"preferenceName":"extensions.BlockSite.removeLinks",
"value":"false"
},
....
]
},
"createDate":1464263525000,
"modifyDate":null
}
],
"timestamp":1465282879781
}
```
_ _ _
###EXECUTE_TASK (L>>>A)
**task**: Çalıştırılacak görev hakkında bilgiler bulunur. Yapısı **(user/agent)PolicyProfiles**' e benzerdir. Konsoldan gelen parametreler **parameterMap**'tedir.
```json
{
"type":"EXECUTE_TASK",
"task":{
"id":21856,
"plugin":{
"id":1951,
"name":"network-inventory",
"version":"1.0.0",
"description":"Lider Network Inventory Plugin",
"active":true,
"deleted":false,
"machineOriented":true,
"userOriented":false,
"policyPlugin":false,
"xBased":false,
"createDate":1464254876000,
"modifyDate":1465283994000
},
"commandClsId":"SCANNETWORK",
"parameterMap":{
"timingTemplate":"3",
"ipRange":"192.168.1.100-101",
"executeOnAgent":true
},
"deleted":false,
"cronExpression":null,
"createDate":1465285670481,
"modifyDate":null
},
"timestamp":"07-06-2016 10:47"
}
```
_ _ _
###POLICY RESPONSE (A>>>L)
**policyVersion**: Çalıştırılan politika versiyonu
**commandExecutionId**: Polikanın çalıştırılma id'si
**responseMessage**: Sonuç mesajı(free text)
**responseCode**:Politikanın çalıştırılma durumuna göre POLICY_ERROR,POLICY_KILLED,POLICY_PROCESSED,POLICY_RECEIVED,POLICY_TIMEOUT,POLICY_WARNING değerlerini alabilir.
**responseData**: Varsa politika sonucu döndürülmek istenen data.
**contentType**: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON
```json
{
"timestamp":"07-06-2016 03:43",
"type":"POLICY_STATUS",
"policyVersion":"2551-1",
"commandExecutionId":"2502",
"responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ",
"responseCode":"POLICY_PROCESSED",
"responseData":null,
"contentType":null
}
```
_ _ _
###TASK RESPONSE (A>>>L)
**taskId**: Çalıştırılan görevin id'si
**responseMessage**: Sonuç mesajı(free text)
**responseCode**:Görevin çalıştırılma durumuna göre TASK_ERROR,TASK_KILLED,TASK_PROCESSED,TASK_TIMEOUT,TASK_WARNING,TASK_RECEIVED değerlerini alabilir.
**responseData**: Varsa görev sonucu döndürülmek istenen data.
**contentType**: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON
```json
{
"timestamp":"07-06-2016 03:43",
"type":"POLICY_STATUS",
"taskId":"2502",
"responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ",
"responseCode":"POLICY_PROCESSED",
"responseData":null,
"contentType":null
}
```
_ _ _
###MISSING_PLUGIN (A>>>L)
**pluginName:** Eksik ahenk eklentisinin adı.
**pluginVersion:** Eksik ahenk eklentisinin versiyonu.
```json
{
"pluginVersion":"1.0.0",
"type":"MISSING_PLUGIN",
"pluginName":"browser"
}
```
_ _ _
###INSTALL_PLUGIN (L>>>A)
**pluginName**: Kurulacak Ahenk eklentisinin adı.
**pluginVersion**:Kurulacak Ahenk eklentisinin versiyonu.
**protocol**: Kurma yönteminin protokolu. (ssh,htttp,torrent)
**parameterMap**: Seçilen protokole bağlı parametre isterleri
```json
{
"type":"INSTALL_PLUGIN",
"pluginName":"browser",
"pluginVersion":"1.0.0",
"protocol":"HTTP",
"parameterMap":{
2017-04-25 10:06:07 +03:00
"url":"http://www.liderahenk.org"
},
"timestamp":1465282879968
}
```
_ _ _
**(L>>>A) Liderden Ahenk' e giden mesaj tipleri</br>(A>>>L) Ahenk'ten Lider'e giden mesaj tipleri**