Fryboyter

Etherpad Lite - Links der Pads herausfinden

Es gibt bei einem Projekt die Überlegung, ob man von Etherpad Lite auf HedgeDoc umsteigt. Bei der Umstellung sollen ggf. alle Inhalte übernommen werden. Und die bisherigen Links auf die jeweiligen Pads sollen entsprechend auf HedgeDoc weiterleiten.

Also habe ich mir überlegt, wie man vorgehen könnte. Die Links der Pads würde ich aus der Datenbank von Etherpad Lite exportieren. Was sich allerdings als keine allzu gute Idee herausgestellt hat. Denn es wird eine MariaDB-Datenbank verwendet, die sozusagen als Key-Value-Store genutzt wird. Was zur Folge hat, dass es nur eine Tabelle mit zwei Spalten gibt. Und in dieser Tabelle findet man beispielsweise folgende Einträge.

pad:faq
{"atext":{"text":"Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https://etherpad.org\n\n","attribs":"|6+6d"},"pool":{"numToAttrib":{},"nextNum":0},"head":0,"chatHead":-1,"publicStatus":false,"passwordHash":null,"savedRevisions":[]}

Um die Namen der vorhandenen Pads aus der Datenbank auszulesen, kann man folgende Abfrage nutzen.

SELECT 
	DISTINCT SUBSTRING(store.key, 5, LOCATE(":", store.key, 5)-5) AS pads
FROM
	store
WHERE
	store.key LIKE "pad:%"

Diese Abfrage zeigt aber tatsächlich nur den Namen der Pads an. Zum Beispiel faq. Aber bessere wäre es, wenn der gesamte Link ausgegeben wird. Also um bei dem Beispiel zu bleiben https://ep.domain.de/p/faq. Da aber die Domain nicht in der Datenbank gespeichert ist, muss man etwas kreativ werden. Was aber in diesem Fall keine große Herausforderung ist.

SELECT 
	DISTINCT CONCAT("https://ep.domain.de/p/", SUBSTRING(store.key, 5, LOCATE(":", store.key, 5)-5)) AS pad
FROM
	store
WHERE
	store.key LIKE "pad:%"

Mittels CONCAT wird im Grunde nur https://ep.domain.de/p/ vor dem jeweiligen Namen der Pads eingefügt, sodass schlussendlich richtige Links angezeigt werden, die man weiterverarbeiten kann.

OSBN