Alle unsere APIs

Soll F-Droid vertrauenswürdig sein, müssen wir transparent sein. Machen wir es den Leuten leicht, in alle Abläufe und Verfahren, die wir verwenden, Einblicke zu gewinnen, dann hilft uns das verlässlich zu bleiben. Dies sind die APIs mit den Schlüsselinformationen über den Veröffentlichungsprozess.

Aktive Pakete

Es gibt eine über https://f-droid.org/api/v1/packages zugängliche API je App, die dazu verwendet werden kann, Informationen über die Anwendungen im Hauptrepository abzufragen. Die JSON API listet derzeit die veröffentlichten und vorgeschlagenen Versionen. Archivierte Anwendungen und Pakete sind an dieser API nicht abrufbar.

Beispielanfrage:

GET https://f-droid.org/api/v1/packages/org.fdroid.fdroid HTTP/1.1

Beispielantwort:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
  "packageName": "org.fdroid.fdroid",
  "suggestedVersionCode": 1009000,
  "packages": [
    {
      "versionName": "1.10-alpha0",
      "versionCode": 1010000
    },
    {
      "versionName": "1.9",
      "versionCode": 1009000
    }
  ]
}

Diese API wird bereits vom Projekt „shields.io“ verwendet, um F-Droid mit Emblemen, wie diesem, auszustatten.

Der Repository-Index

F-Droid ist rund um ein signiertes Verzeichnis (Index) aller erhältlichen Apps und Pakete aufgebaut. Dies ist eine JSON-Datei, dabei mehr Index als eine API, da sämtliche Informationen über eine einzelne Datei zur Verfügung gestellt werden. Der Repo-Index liegt in Form einer signierten JAR-Datei vor, die index-v1.json enthält. Das beste Verfahren ist es, die JAR-Signatur zu überprüfen, dann die index-v1.json zu extrahieren, wenn sie validiert ist. Die Python-Bibliothek von fdroidserver stellt fdroidserver.download_repo_index() bereit, um dies leicht zu erledigen. Es ist auch möglich, index-v1.json einfach mittels jeder ZIP-Library zu lesen.

Build-Metadaten der App

Jede App in f-droid.org besitzt eine zugehörige Build-Metadaten-Datei in fdroiddata. Um mehr kreative Wiederverwendung zu fördern, lassen wir unsere Daten in Standardformaten an leicht zu findenden Plätzen. Die gesamte App-Sammlung ist im YAML-Format. Auf die Datei kann direkt zugegriffen werden, über die Application-ID mittels des GitLab Raw URL https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/<ApplicationID>.yml (e.g. https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/org.fdroid.fdroid.yml). Der Repo-Index und die GitLab Repository Files API können zur Abfrage verwendet werden, welche App-IDs zur Verfügung stehen. Diese Dateien sind auch verfügbar über den Spiegelserver auf GitHub, z. B. https://raw.githubusercontent.com/f-droid/fdroiddata/master/metadata/org.fdroid.fdroid.ymlzur Verfügung.

Buildserver-Status von f-droid.org

Die vier Hauptschritte des Build-Zyklus sind: checkupdates, build, update, und deploy. Es gibt für jeden von ihnen eine JSON-Datei mit Statusinformationen. Diese werden angezeigt, sobald der Schritt vollständig durchlaufen ist. Der aktuell laufende Schritt wird als running angezeigt.

Zwei Beispiele, wie diese JSON-APIs genutzt werden können, sind die Website des F-Droid Monitor und die App F-Droid Build Status.

Spiegel- und Repository-Überwachung

mirror-monitor und repo-monitor sind automatisierte Aufgaben, die verschiedene Statistiken über Spiegel von f-droid.org bzw. Drittanbieter-Repos kontrollieren. Jede von ihnen liefert ein einzelnes, großes JSON-Protokoll jedes Mal, wenn die Kontrollen durchgeführt wurden:

Reproduzierbare Builds

verification.f-droid.org ist ein Rebuilder, der die offiziellen Versionen aus f-droid.org erneut herstellt, dann prüft, ob sie reproduzierbar hergestellt wurden. Es gibt pro APK eine JSON-Datei, die kontrolliert werden muss. In ihr folgt der Dateiname dem Muster <ApplicationId>_<VersionCode>.apk.json, zum Beispiel: https://verification.f-droid.org/org.fdroid.fdroid_1010050.apk.json

Es gibt auch eine Auflistung aller erfolgreich verifizierter APKs: https://verification.f-droid.org/verified.json

Protokolle zur Binärdateien-Transparenz

Binärdateien-Transparenz folgt der Idee, dass alle freigegebenen Pakete protokolliert werden sollen, wenn sie veröffentlicht werden. Dies bietet die Möglichkeit, zu prüfen, ob ein bestimmtes binäres Paket vom Herausgeber erstellt wurde oder von irgendwoher sonst kommt, z.B. als ein Exploit. fdroidserver bringt Tools zur Handhabung eines Protokolls für die Binärdateien-Transparenz der indexierten Dateien als Teil des Veröffentlichungsprozesses mit. Ermöglicht wird dies im Repo des Guardian Project: https://github.com/guardianproject/binary_transparency_log

Es gibt auch einen Prototyp für den Betrieb eines Binärdateien-Transparenz-Logs für f-droid.org. https://gitlab.com/eighthave/f-droid.org-binary-transparency

Nachdem Gradle und das Team für die Google Android Tools keines veröffentlicht, hat es F-Droid getan. Die Basis-API ist eine JSON-Datei mit einer Auflistung aller URLs, die als Herausgeber bekannt sind. Jeder URL enthält dann eine Liste von SHA-256-Checksums, die der Protokollablauf gesehen hat. Es werden hier auch andere Dateien überwacht, abhängig davon was der Herausgeber bereitstellt.

issuebot

issuebot läuft bei Merge Requests einer App und Anträgen auf Packaging (RFP), um Prüfern Informationen zur App bereitzustellen. Viele dieser Informationen werden ebenfalls im JSON-Format herausgegeben. Jeder Bericht wird aus Daten erstellt, die aus Modulen stammen, die in einer speziellen App ablaufen. Es gibt zwei Zugangspunkte:

Kennzahlen

Nutzungsdaten werden von verschiedenen Internetseiten von F-Droid gesammelt und ohne persönlich identifizierbare Informationen (PII) veröffentlicht. Sie werden in einer wöchentlichen JSON-Datei in einer JSON-Indexdatei pro Website herausgegeben. Beispielsweise hier Kennzahlen zur Suche in einer Woche: https://fdroid.gitlab.io/metrics/search.f-droid.org/2021-01-18.json

Obwohl nicht wirklich eine API, liefert der Spiegelserver einige Kennzahlen: https://ftp.fau.de/cgi-bin/show-ftp-stats.cgi

Git-Statistiken

Jedes git Repo hat eine Vielzahl interessanter Metadaten. Das Projekt GitStats erzeugt nette Charts aus diesen Daten. Das ist nicht ganz eine API, aber es ist ähnlich, da es öffentliche Projektdaten verwendet. Vorgefertigte Seiten zu jedem der zentralen Git-Repos sind hier zu sehen: https://fdroid.gitlab.io/.