Hizmetin İçine Erişim

1.6k görüntülenme Markdown

Hizmetin arkasındaki panele ulaşan yedi uç: özet, araçlar, metotlar, giriş ve parola.

Genel Bakış

Bir hizmetin arkasında çoğu zaman bir panel vardır: barındırma paneli, sanallaştırma arayüzü ya da bir yazılım kurulumu. Bu yedi uç o panele ulaşır.

Hepsi canlı çağrıdır: WISECP kendi kayıtlarını değil, panelin o anki durumunu döndürür. Panel yavaşsa yanıt yavaşlar, panel kapalıysa uç hata verir.

Müşteriye açılan alan yönetim tarafına göre dar tutulmuştur. Kurma, askıya alma ve sonlandırma gibi işler buradan hiç erişilemez.

Referans

Panel Özetini Okuma

get/api/v1/client/services/{id}/dashboard
Services/GetServiceDashboard modüle canlı sorar

Hizmetin arkasındaki panelin özetini ve yeteneklerini döndürür.

Dönen alanlar data — 9
modulestringPanel modülünün adı.
panel_namestringPanelin görünen adı.
sso_availableboolTek oturum açma çalışır mı. Erişim kısıtlaması açıkken kapanır.
can_change_passwordboolPanel parolası bu uçlardan değiştirilebilir mi.
has_toolsboolModül bir araç arayüzü sunuyor mu.
has_managementboolMüşteri alanı bu hizmet için Yönetim sekmesi açar mı. Yalnız tek oturum açma sunan panelde false döner.
methodsarrayMüşterinin çağırabileceği modül metotları. Metot çalıştırma ucu yalnız bu listedekileri kabul eder.
quick_actionsarrayÖzet ekranı kısayolları. Her biri anahtar, etiket ve eylem olup olmadığını taşır.
overviewobjectPanelin bildirdiği durum.
gaugesarraySınırlı kaynaklar. Kullanılan, toplam ve birim taşır; toplam sıfır ya da altındaysa sınırsız demektir.
resourcesarrayModülün bildirdiği sayaç ve değerler.
accountarrayCanlı panel hesap bilgileri. Erişim kısıtlaması açıkken giriş bilgileri düşer.
Hatalar 4
not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.
not_actionable422Hizmet etkin durumda değil.
module_unavailable422Modül örneği kurulamadı. Panel şu an erişilemez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/dashboard' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/dashboard`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (data.sso_available) showOpenPanelButton();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/dashboard');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bu cagri PANELE CANLI gider: panel yavassa yanit yavaslar, ekranda onbellek kullanin.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];
$can = $d['methods'];

Araçları Listeleme

get/api/v1/client/services/{id}/tools
Services/GetServiceTools modüle canlı sorar

Hizmet üzerinde kullanılabilecek panel araçlarını döndürür.

Dönen alanlar data[] — 4
keystringAracın anahtarı. Veri ve eylem uçlarına bu değer verilir.
groupstringPanelin gruplaması.
labelstringGörünen adı.
capabilitiesarrayAracın desteklediği eylemler. Oluşturma, düzenleme, silme gibi.
Hatalar 3
not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.
tools_not_supported422Modülün araç arayüzü yok.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/tools' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const byGroup = Object.groupBy(data, (t) => t.group);
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Musteri listesi YONETIM listesinden DARDIR: yalniz musteri alanina acilan araclar gelir.
$tools = Kernel::internal('client:Services/GetServiceTools',
    ['owner_id' => $uid, 'id' => $id])['data'];
$keys = array_column($tools, 'key');

Araç Verisini Okuma

get/api/v1/client/services/{id}/tools/{tool}
Services/GetServiceToolData modüle canlı sorar

Bir aracın listelediği veriyi panelden çeker.

Sorgu 1
actionstringOkuma eylemi. Verilmezse aracın varsayılan listesi alınır.
Dönen alanlar data
dataobjectAracın döndürdüğü veri. Şekli araca ve modüle göre değişir; sabit bir sözleşme yoktur.
Hatalar 5
not_found404Araç bilinmiyor ya da hizmet bulunamadı.
tools_not_supported422Modülün araç arayüzü yok.
tool_rejected422Bir kanca çağrıyı reddetti.
tool_data_failed500Panel çağrısı başarısız oldu.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/tools/databases' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools/${tool}`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools/' . $tool);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Donen sekil MODULE aittir, API sozlesmesi degil: sunucu paneli degisirse alanlar da degisir.
$rows = Kernel::internal('client:Services/GetServiceToolData',
    ['owner_id' => $uid, 'id' => $id, 'tool' => $tool])['data'];

Araç Eylemi Çalıştırma

post/api/v1/client/services/{id}/tools/{tool}/{action}
Services/RunServiceToolAction sunucuda değişiklik

Bir araç üzerinde oluşturma, düzenleme ya da silme çalıştırır. DNS kaydı düzenlemesi (dns-zone-editor/edit) yalnız gönderdiğinizi değiştirir: gönderilmeyen ad, TTL ya da öncelik kaydın mevcut değerini korur.

Gövde —
*objectAraca özgü serbest gövde. Alanları modülün beklediği şekildedir.
Dönen alanlar data
dataobjectModülün eylem sonucu.
Hatalar 5
not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.
tools_not_supported422Modülün araç arayüzü yok.
tool_rejected422Bir kanca çağrıyı reddetti.
tool_action_failed500Panel çağrısı hata fırlattı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/tools/databases/create' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"shop"}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/tools/${tool}/${action}`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload),
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/tools/' . $tool . '/' . $action);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bu cagri SUNUCUDA gercek degisiklik yapar ve geri alinamaz: silme eylemlerini onay arkasina alin.
$out = Kernel::internal('client:Services/RunServiceToolAction',
    ['owner_id' => $uid, 'id' => $id, 'tool' => $tool, 'action' => 'create'] + $payload);

Modül Metodu Çalıştırma

post/api/v1/client/services/{id}/module-method
Services/UseServiceModuleMethod beyanlı metotlar

Modülün müşteriye açtığı bir metodu çalıştırır.

Gövde 1
methodstringreqÇalıştırılacak metot. Panel özetindeki metot listesinden alınır.
Dönen alanlar data — 4
methodstringÇalıştırılan metot.
redirect_urlstringModülün ürettiği adres. İndirme ve yönlendirme akışlarında dolar.
resultobjectMetodun dönüş değeri.
outputstringMetot dönüş yerine yazdırdıysa yakalanan çıktı.
Hatalar 6
not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.
method_required422Metot adı gönderilmemiş.
invalid_method422Metot müşteriye açık beyan edilmemiş.
module_unavailable422Modül örneği kurulamadı.
tool_rejected422Bir kanca çağrıyı reddetti.
module_method_failed500Modül metodu hata fırlattı.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/module-method' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"method":"backup_download"}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/module-method`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method }),
});

const { data } = await res.json();
if (data.redirect_url) window.location = data.redirect_url;
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/module-method');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['method' => $method]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// YALNIZ beyanli metotlar cagrilir: kurma, askiya alma ve sonlandirma buradan asla erisilemez.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];

if (in_array($method, $d['methods'], true))
    Kernel::internal('client:Services/UseServiceModuleMethod',
        ['owner_id' => $uid, 'id' => $id, 'method' => $method]);

Panele Tek Oturum Açma

post/api/v1/client/services/{id}/sso
Services/GetServiceSso kısa ömürlü adres

Panele parolasız giriş için tek kullanımlık bir adres üretir.

Gövde —
——Gövde gerekmez, boş gönderin. Panel hesabı hizmet kaydından çözülür.
Dönen alanlar data — 1
urlstringPanele açılan adres. Kısa ömürlüdür ve saklanmaya uygun değildir.
Hatalar 5
not_found404Hizmet bulunamadı, modülsüz, etkin değil ya da erişim kısıtlanmış.
sso_not_supported422Modülde tek oturum açma yok.
tool_rejected422Bir kanca çağrıyı reddetti.
sso_failed500Modül bir adres döndürmedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/sso' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/sso`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
window.open(data.url, '_blank');
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/sso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Adres KISA OMURLUDUR ve tek kullanimliktir: onbelleklemeyin, her acilista yeniden uretin.
$sso = Kernel::internal('client:Services/GetServiceSso',
    ['owner_id' => $uid, 'id' => $id])['data'];
header('Location: ' . $sso['url']);

Panel Parolasını Değiştirme

post/api/v1/client/services/{id}/password
Services/ChangeServicePassword barındırma ve sunucu

Hizmetin panel parolasını değiştirir.

Gövde 1
passwordstringreqYeni panel parolası. Operatörün asgari uzunluğunu karşılamalıdır.
Dönen alanlar data
dataobjectDeğişimin sonucu.
Hatalar 5
not_found404Hizmet bulunamadı, size ait değil, modülsüz ya da etkin değil.
password_too_short422Parola asgari uzunluğun altında. Asgari değer yanıtın ayrıntısında gelir.
password_not_supported422Hizmet türü uygun değil, erişim kısıtlanmış ya da modülde bu yetenek yok.
password_change_failed422Panel değişikliği reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/password' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"password":"a-long-new-secret"}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/password`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ password }),
});

if (res.status === 422) showRule(await res.json());
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/password');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['password' => $new]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Panel parolasi HESAP parolasi degildir: buradaki degisim musterinin giris bilgilerine dokunmaz.
$d = Kernel::internal('client:Services/GetServiceDashboard',
    ['owner_id' => $uid, 'id' => $id])['data'];

if ($d['can_change_password'])
    Kernel::internal('client:Services/ChangeServicePassword',
        ['owner_id' => $uid, 'id' => $id, 'password' => $new]);

Tuzaklar

Bu uçlar panele canlı gider

Özet, araçlar ve araç verisi WISECP veritabanından değil panelin kendisinden gelir. Panel yavaşladığında yanıt süresi uzar, panel erişilemez olduğunda uç hata döndürür. Bu uçları bir listeleme ekranında satır başına çağırmayın; kullanıcı gerçekten istediğinde çağırın.

Yalnız beyan edilmiş metotlar çağrılabilir

Metot çalıştırma ucu, modülün müşteriye açık diye beyan ettiği metotları kabul eder. Yönetim tarafındaki genişlik burada yoktur: kurma, askıya alma ve sonlandırma metotlarına bu uçtan asla ulaşılamaz. Listeyi panel özetinden okuyun.

Araç verisinin şekli bir sözleşme değildir

Araç uçlarının döndürdüğü yapı modülün kendi çıktısıdır ve sunucu paneli değiştiğinde değişebilir. Alan adlarına sıkı bağlanan bir arayüz bir modül güncellemesiyle kırılır. Yetenekleri araç listesinden okuyup buna göre çizin.

Erişim kısıtlaması iki ucu birden kapatır

Operatör bir ürün için erişim kısıtlamasını açtığında hem tek oturum açma hem panel parolası değişimi kapanır, ayrıca özet ekranındaki giriş bilgileri düşer. Araçlar ise çalışmaya devam eder. Bunu bir hata sanmayın; özetteki iki bayrağı okuyun.

Tek oturum adresi saklanmaz

Tek oturum açma adresi kısa ömürlü ve tek kullanımlıktır. Bir yere kaydedip sonra açmak çalışmaz, üstelik o adres o anda panele giriş yetkisi taşır. Her açılışta yeniden üretin ve hiçbir günlüğe yazmayın.

Panel parolası hesap parolası değildir

Bu uçtan değiştirilen parola sunucudaki panelin parolasıdır; müşterinin WISECP giriş bilgileri etkilenmez. Yetenek yalnız barındırma ve sunucu türündeki hizmetlerde vardır ve modülün desteklemesi gerekir.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.