Liman'da Eklenti Geliştirme
Published: 2020-10-27 11:24:01

Bize tanımlanmış IP üzerinden Liman’a giriş yaptıktan sonra **Sistem Ayarları** sekmesine gelerek **Eklentiler**’i seçiniz. Eğer burada **Yeni** sekmesini görmüyorsanız Mert Çelen’in paylaştığı [rehber](https://dev.to/liman/eklenti-gelistirme-ortami-kurulumu-3ofm)den **Eklenti Geliştirme Ortamı Kurulumu**nu yapmanız gerekmektedir.

Yeni butonuna basarak eklentinizin ismini girerek oluşturmaya başlayalım.

Eklentimizi geliştirmek için eklentiyi bir sunucuya atamamız gerekmektedir. Bu atamayı sol taraftan Sunucular sekmesine giderek yapabiliriz. Açılan ekranda **+** işaretine basıp eklemek istediğiniz sunucuyu seçiniz. (Eğer görünürde bir sunucunuz yoksa, ilk önce sunucu oluşturmanız gerekmektedir.)

Liman’da yapacağımız işlemler şimdilik bu kadar. Geliştirme ortamınız da hazırsa Visual Studio Code yardımı ile eklentimizi geliştirebiliriz.

Visual Studio Code’u açalım ve Remote SSH ile Liman sunucumuza bağlanalım. Bağlandıktan sonra sol üstten **Open Folder** diyerek **/liman/extensions/** klasörüne gelip oluşturduğunuz eklentiyi seçiniz. 

Açılan eklentide **view** klasörü altında bir **functions.php** ve bir tane de **index.blade.php** adında iki tane dosyamızın olduğunu göreceğiz. Şimdi, Liman sunucumuzdaki bilgileri ya da sizin bilgisayarınızın bileşenlerinin bilgilerini çektiğimiz bir eklenti yapabiliriz. Aşağıdaki kodu functions.php dosyasına yapıştıralım.

```php
<?php
function index(){
    return view("index");
}

function getHOSTinfo(){
    $hostInfo = runCommand("hostname");
    return respond($hostInfo,200);
}

function getIPinfo(){
    $ipInfo = runCommand("ip a");
    return respond($ipInfo,200);
}

?>
```
Şimdi burada tam olarak neler oluyor? **getHOSTinfo** fonksiyonunda, içerisinde bulunan runCommand’e **hostname** değerini gönderdik. Bu komut içerisine gönderdiğimiz değeri sunucumuzda terminal’e yazdığımızda çıkan sonucu döndürmektedir. Terminal’i açıp hostname yazdığımızda sunucumuzun adının yazdığını görürüz. Biz de bu eklentide sunucumuzun adını çağırmak istiyoruz ve çıkan sonucu eklentimize eklemek istiyoruz. Altındaki **getIPinfo** fonksiyonu da aynı işlemi yapmaktadır, IP bilgilerini öğrenmek için **ip a** komutunu runCommand’e gönderiyoruz. Ve son olarak da return respond ile eğer gönderdiğimiz HTTP talebinden 200 kodu dönüyorsa bu komutları tanımladığımız değeri gönder diyoruz.

Şimdi de index.blade.php dosyamıza geçelim. Aşağıda paylaştığım kodu index.blade.php dosyasına yapıştırın. 

```php
<ul class="nav nav-tabs" role="tablist" style="margin-bottom: 15px;">
  <li class="nav-item">
    <a class="nav-link active" onclick="getIP()" href="#ipTab" data-toggle="tab">IP Bilgileri</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" onclick="getHost()" href="#hostTab" data-toggle="tab">Host Bilgileri</a>
  </li>
</ul>

<div class="tab-content">
    <div id="ipTab" class="tab-pane active">
    <pre id="ipPre"></pre>
    </div>

    <div id="hostTab" class="tab-pane">
    <pre id="hostPre"></pre>
    </div>

</div>

<script>
function getIP(){
  request(API("getIPinfo"), new FormData(), function(response){
    msg = JSON.parse(response).message;
    $('#ipPre').html(msg);
  }, function(response){
    console.log("HATA!");
  });
}
function getHost(){
  request(API("getHOSTinfo"), new FormData(), function(response){
    msg = JSON.parse(response).message;
    $('#hostPre').html(msg);
  }, function(response){
    console.log("HATA!");
  });
}

if(location.hash === ""){
    getIP();
}
</script>

```
Verimizi direkt yazdırmamız mümkün, fakat daha şık bir görüntü olsun diye Tab’lı yapıda veriyi kullanmak istedim. Şimdi ise **getIP** ve **getHost** fonksiyonlarında neler döndüğünü inceleyelim. İki fonksiyonda da sunucumuza request (talep) gönderiyoruz. Endpoint URL’mizin sonuna function.php’de yazdığımız fonksiyonların adını yazdığımızda orada dönen verinin JSON biçimin de döndüğünü görebiliriz. Biz de bir FormData oluşturarak, eğer requestimizden bir response dönüyorsa veriyi parse et ve sadece message başlığını döndür diyoruz ve bu mesajı yukarıda belirttiğimiz id’ye gönderiyoruz. Eğer response dönmüyorsa, ikinci satıra gir ve konsola Hata! yaz dedik. Bunu da debug yaparken response’un durumunu takip etmek için kullanabiliriz. 

Son olarak da if(location.hash === “”) diyerek sayfa yüklendiğinde index’te ise yüklemesini istediğimiz fonksiyonu yazıyoruz. Yani eklentiyi ilk açtığımızda karşımız IP bilgileri gözükecek.