Ana içeriğe geç

Bağlantılar

Bağlantı, bir TEBHOS hesabını TEBHOS dışındaki bir şeye bağlar: kullanıcının denetiminde olduğunu kanıtladığı bir alan adına veya desteklenen harici bir hizmetteki bir hesaba. Görüntüleyenin görmesine izin verilen doğrulanmış bağlantılar, kullanıcının profilinde connected_accounts içinde görünür (bkz. Kullanıcılar).

Her /users/@me/connections yolu bir kullanıcı oturum token'ı gerektirir; yalnızca Bağlantıları listele ayrıca connections kapsamlı bir OAuth2 erişim token'ını da kabul eder. Geçerli bir bot token'ı 403 ACCESS_DENIED ile reddedilir (geçersiz olanı 401 ile); diğer bağlantı yollarındaki geçerli bir erişim token'ı da öyle. Bağlantı kimlikleri snowflake değil, dizedir.

Hesap bağlantı sınırı

Bir hesap tüm türlerde toplam en fazla 20 bağlantıya sahip olabilir. Bir tane daha oluşturmak 400 BAD_REQUEST döndürür.

Bağlantı nesnesi

Bir bağlantı, türü ve id değerinden oluşan çiftle tanımlanır. İkisi de bağlantı başına her yolun adresinde yer alır.

Yapı

Alan Tür Açıklama
id string Bağlantı kimliği, kendi türü içinde benzersizdir. domain için 64 küçük harfli onaltılık karakterdir ve hesap aynı alan adını yeniden oluşturursa değişmez. Sağlayıcı türü için o hizmetteki hesap kimliğidir
type string Bağlantı türü
name string Bağlantı için gösterilen etiket: alan adı veya hesabın harici hizmetteki görünen adı
verified boolean En son kanıtın başarılı olup olmadığı
visibility_flags integer Bağlantı görünürlük bayrakları
sort_order integer Hesabın bağlantı listesindeki konum. Yeni bir bağlantı, kendisinden önce var olan bağlantı sayısını alır

Örnek

{
  "id": "12345678",
  "type": "github",
  "name": "partyparrot",
  "verified": true,
  "visibility_flags": 1,
  "sort_order": 0
}

Bağlantı türleri

Değer Ad Nasıl oluşturulur
domain Alan adı Bağlantı başlat, ardından Doğrula ve bağlantı oluştur
github GitHub Sağlayıcı yetkilendirmesini başlat
spotify Spotify Sağlayıcı yetkilendirmesini başlat
steam Steam Sağlayıcı yetkilendirmesini başlat
twitch Twitch Sağlayıcı yetkilendirmesini başlat
reddit Reddit Sağlayıcı yetkilendirmesini başlat
twitter X Sağlayıcı yetkilendirmesini başlat
riot Riot Games Sağlayıcı yetkilendirmesini başlat

Bir sağlayıcı türü yalnız örnekte (instance) onun için kimlik bilgileri varsa kullanılabilir. Hangilerinin etkin olduğunu Bağlantı sağlayıcılarını listele bildirir. Steam OpenID kullanır ve her zaman etkindir.

TEBHOS'ta desteklenmez

Bluesky (bsky) bağlantıları kullanılamaz. Bluesky yolları uyumluluk için vardır ve her zaman Bluesky'nin etkin olmadığını bildirir; bkz. Bluesky yolları.

Bağlantı görünürlük bayrakları

Bayraklar, sahibin profilini görüntüleyenlerden hangilerinin bir bağlantıyı göreceğine karar verir.

Değer Ad Açıklama
1 << 0 EVERYONE Profili görüntüleyebilen herkes bağlantıyı görür
1 << 1 FRIENDS Arkadaşlar bağlantıyı görür
1 << 2 MUTUAL_GUILDS Sahibin de bulunduğu bir sunucunun üyeleri bağlantıyı görür

İstek başka bir değer belirtmedikçe yeni bir bağlantı EVERYONE (1) alır. 0 değeri bağlantıyı, sahibinin kendi profiline bakışı dahil herkesten gizler. Doğrulanmamış bir bağlantı, bayrakları ne olursa olsun profilde asla görünmez. Bağlantıları listele bayrakları yok sayar ve hesabın sahip olduğu her bağlantıyı döndürür.

Bağlantı doğrulama nesnesi

Bağlantı başlat tarafından döndürülür. Doğrula ve bağlantı oluştur başarılı olana kadar bağlantı oluşmaz.

Yapı

Alan Tür Açıklama
token string Kanıt olarak alan adında yayımlanacak değer, 64 küçük harfli onaltılık karakter
type string Her zaman domain
id string Alan adı, gönderildiği biçimde
instructions string Token'ın nasıl yayımlanacağına dair insanlar için okunabilir talimatlar
initiation_token string Doğrula ve bağlantı oluştur tarafından kabul edilen imzalı token. Verilişinden 30 dakika sonra süresi dolar ve yalnız onu isteyen hesap için çalışır

Kanıt token'ı yalnız hesaba ve küçük harfe çevrilmiş alan adına bağlıdır; bu yüzden aynı alan adı için Bağlantı başlat yinelendiğinde aynı token döner ve yayımlanan bir kayıt denemeler boyunca yerinde kalabilir.

Başlatma token'ını koruyun

initiation_token günlüğe yazılmamalı veya başkasına iletilmemelidir. Yalnız token yayımlanmak içindir.

Alan adı sahipliği kanıtı

Token iki yoldan biriyle yayımlanır:

  • DNS: _tebhos.<domain> adresinde değeri tam olarak tebhos-verification=<token> olan bir TXT kaydı. TEBHOS kaydı DNS-over-HTTPS üzerinden çözümler; bu yüzden doğrulamadan önce DNS değişikliklerinin yayılması için zaman tanınmalıdır.
  • HTTPS: yalın token https://<domain>/.well-known/tebhos-verification adresinden sunulur. Yanıtın durumu 2xx olmalı, gövdesi en fazla 4096 bayt olmalı ve boşluklar kırpıldıktan sonra token'a eşit olmalıdır. Yönlendirmeler izlenmez ve istek 5 saniye sonra zaman aşımına uğrar.

Önek yalnız DNS kaydında bulunur

DNS değeri tebhos-verification=<token> olur; HTTPS belgesi yalnız token'ı içerir.

Alan adı bir . içermeli ve yalnız ASCII harfler, rakamlar, . ve - karakterlerinden oluşmalıdır. Diğer her değer kanıtta başarısız olur.

Bağlantıları listele

GET /users/@me/connections

Hesabın sahip olduğu her bağlantı nesnesinden oluşan, sort_order değerine göre sıralanmış bir dizi döndürür. Bağlantısı olmayan bir hesap boş dizi alır.

connections kapsamlı bir OAuth2 erişim token'ını da kabul eder; bu kapsamı olmayan bir token 403 MISSING_OAUTH_SCOPE alır.

Hız sınırı

connection:list kovasında her hesap için dakikada 60 istek.

Bağlantı sağlayıcılarını listele

GET /users/@me/connections/providers

Sağlayıcı bağlantı türlerini ve her birinin bu örnekte etkin olup olmadığını döndürür.

Yanıt

Durum Gövde Koşul
200 array[object] Her öğe {type, name, enabled} biçimindedir, örneğin {"type": "github", "name": "GitHub", "enabled": true}

Bağlantı başlat

POST /users/@me/connections

Alan adı sahipliği doğrulamasını başlatır ve bir bağlantı doğrulama nesnesi döndürür. Henüz bağlantı oluşturulmaz.

JSON gövdesi

Alan Tür Açıklama
type string domain olmalıdır
identifier string Sahipliği kanıtlanacak alan adı

Yanıt

Durum Gövde Koşul
201 bağlantı doğrulama nesnesi Doğrulama başlatıldı
400 hata yanıtı Tür domain değil (bsky dahil) veya hesabın zaten 20 bağlantısı var
409 hata yanıtı Hesabın bu alan adı için zaten bir bağlantısı var

Hız sınırı

connection:create kovasında her hesap için dakikada 5 istek.

Doğrula ve bağlantı oluştur

POST /users/@me/connections/verify

Bir başlatma token'ı için alan adı sahipliği kanıtını denetler; başarılı olursa bağlantı nesnesini oluşturur ve 201 durumuyla döndürür.

JSON gövdesi

Alan Tür Açıklama
initiation_token string Bağlantı başlat yanıtındaki token
visibility_flags? integer Bağlantı görünürlük bayrakları (varsayılan EVERYONE)

Yanıt

Durum Gövde Koşul
201 bağlantı nesnesi Kanıt başarılı oldu ve bağlantı oluşturuldu
400 hata yanıtı Başlatma token'ı geçersiz, süresi dolmuş veya başka bir hesaba ait; hesabın zaten 20 bağlantısı var; ya da kanıt başarısız oldu
409 hata yanıtı Alan adı zaten bağlı

Başlatma token'ı süresi dolana kadar kullanılabilir kalır; bu yüzden kanıtı henüz görünür olmayan bir istemci aynı token ile yeniden deneyebilir.

Yan etkiler

Başarı durumunda eksiksiz, sıralanmış liste hesabın oturumlarına {"connections": [...]} yüküyle bir USER_CONNECTIONS_UPDATE Gateway olayı olarak gönderilir.

Hız sınırı

connection:verify_and_create kovasında her hesap için dakikada 5 istek.

Bir bağlantıyı yeniden doğrula

POST /users/@me/connections/{type}/{connection_id}/verify

Mevcut bir domain bağlantısının sahiplik kanıtını yeniden çalıştırır. Başarılı olursa güncellenmiş bağlantı nesnesini döndürür.

Yol parametreleri

Alan Tür Açıklama
type string Bağlantı türü; domain olmalıdır
connection_id string Bağlantı kimliği

Yanıt

Durum Gövde Koşul
200 bağlantı nesnesi Kanıt başarılı oldu
400 hata yanıtı Bağlantı bir alan adı bağlantısı değil veya kanıt başarısız oldu
404 hata yanıtı Hesapta böyle bir bağlantı yok

Başarısız bir kanıt, daha önce doğrulanmış bir bağlantıyı doğrulanmamış olarak işaretler ve bu da onu profilden kaldırır. Bir hesabın doğrulanmış alan adı bağlantılarını yeniden denetleyen bir arka plan görevi de aynısını yapabilir.

Hız sınırı

connection:verify kovasında her hesap için dakikada 5 istek.

Bağlantıyı güncelle

PATCH /users/@me/connections/{type}/{connection_id}

Bir bağlantının görünürlüğünü veya konumunu günceller. Atlanan alan değişmeden kalır. Güncellenmiş bağlantı nesnesini döndürür.

Yol parametreleri

Alan Tür Açıklama
type string Bağlantı türü
connection_id string Bağlantı kimliği

JSON gövdesi

Alan Tür Açıklama
visibility_flags? integer Bağlantı görünürlük bayrakları
sort_order? integer Yeni konum

İki yol parametresi de aynı bağlantıyı belirtmelidir: yanlış tür altında doğru bir kimlik 404 döndürür. İki bağlantı aynı sort_order değerini paylaşabilir.

Yanıt

Durum Gövde Koşul
200 bağlantı nesnesi Bağlantı güncellendi
404 hata yanıtı Hesapta böyle bir bağlantı yok

Yan etkiler

Eksiksiz listeyi USER_CONNECTIONS_UPDATE içinde gönderir.

Hız sınırı

connection:update kovasında her hesap için dakikada 30 istek; Bağlantıları yeniden sırala ile paylaşılır.

Bağlantıyı sil

DELETE /users/@me/connections/{type}/{connection_id}

Bir bağlantıyı kaldırır. 204 döndürür.

Yol parametreleri

Alan Tür Açıklama
type string Bağlantı türü
connection_id string Bağlantı kimliği

Yanıt

Durum Gövde Koşul
204 boş Bağlantı silindi
404 hata yanıtı Hesapta böyle bir bağlantı yok

Silme işlemi anında gerçekleşir ve geri alınamaz. Diğer bağlantılar sort_order değerlerini korur. Bir sağlayıcı bağlantısını silmek harici hizmette hiçbir şeyi iptal etmez.

Yan etkiler

Kalan listeyi USER_CONNECTIONS_UPDATE içinde gönderir.

Hız sınırı

connection:delete kovasında her hesap için dakikada 10 istek.

Bağlantıları yeniden sırala

PATCH /users/@me/connections/reorder

Listelenen bağlantıların görüntülenme sırasını dizideki konumlarına göre ayarlar. 204 döndürür.

JSON gövdesi

Alan Tür Açıklama
connection_ids array[string] Yeni sıralarıyla bağlantı kimlikleri

Listelenen her bağlantı, sıfırdan başlayan dizi indeksini sort_order olarak alır. Bilinmeyen kimlikler yok sayılır; listelenmeyen bağlantılar mevcut değerlerini korur, bu yüzden kısmi bir liste iki bağlantının aynı konumu paylaşmasına yol açabilir.

Yan etkiler

Hiçbir şey değişmemiş olsa bile eksiksiz listeyi USER_CONNECTIONS_UPDATE içinde gönderir.

Hız sınırı

connection:update kovasında her hesap için dakikada 30 istek; Bağlantıyı güncelle ile paylaşılır.

Sağlayıcı yetkilendirmesini başlat

POST /users/@me/connections/{provider}/authorize

Harici bir hesabı bağlamayı başlatır. {"authorize_url": string} döndürür; bu URL bir tarayıcı penceresinde açılır (TEBHOS bir açılır pencere açar).

Yol parametreleri

Alan Tür Açıklama
provider string Bir sağlayıcı bağlantı türü: github, spotify, steam, twitch, reddit, twitter veya riot

Yanıt

Durum Gövde Koşul
200 {"authorize_url": string} Kullanıcı authorize_url adresine gönderilir
400 hata yanıtı Sağlayıcı bilinmiyor veya bu örnekte etkin değil

Akışı tamamlama

Harici hizmet tarayıcıyı API üzerindeki GET /connections/{provider}/callback adresine geri döndürür. İstemciler bu yolu kendileri çağırmaz. Yol, sonucu bildiren ve kısa bir süre sonra pencereyi kapatan küçük bir HTML sayfasıyla yanıt verir.

Yetkilendirme durumu on dakika geçerlidir ve bir kez tamamlanabilir. Spotify ve X, PKCE kullanır.

Başarı durumunda TEBHOS, id değeri harici hizmetteki hesap kimliği, name değeri o hesabın görünen adı olan, EVERYONE görünürlüğünde doğrulanmış bir bağlantı oluşturur ve USER_CONNECTIONS_UPDATE gönderir. Aynı harici hesabı yeniden bağlamak, kopya oluşturmak yerine adını ve doğrulama zamanını yeniler. Kullanıcı iptal ettiğinde, durumun süresi dolduğunda, değişim başarısız olduğunda veya hesabın zaten 20 bağlantısı olduğunda sayfa bir hata bildirir.

Bluesky yolları

Bu yollar, Bluesky bağlantıları için geliştirilmiş istemcilerin açık bir yanıt alması için vardır. Bluesky TEBHOS'ta etkin değildir.

Yol Yanıt
POST /users/@me/connections/bluesky/authorize 400 BAD_REQUEST, Bluesky etkin değil. Kullanıcı oturumu gerektirir; connection:create kovasında dakikada 5 istek
GET /connections/bluesky/client-metadata.json {"error": "Bluesky OAuth is not enabled"} ile 404
GET /connections/bluesky/jwks.json {"error": "Bluesky OAuth is not enabled"} ile 404
GET /connections/bluesky/callback https://tebhos.com/connection-callback?status=error&reason=not_enabled adresine 302