RRZE-Webteam / rrze-shorturl

WordPress-Plugin to enable a shorturl redirection service run on two servers (WP + PHP-only)
https://www.shorturl.rrze.fau.de
GNU General Public License v3.0
0 stars 1 forks source link

Services nicht shorten #37

Closed thenickless closed 3 months ago

thenickless commented 4 months ago

es wäre unsinnig, weil die index.php ohnehin zurückrechnet

Meldung: Domain zählt zu unseren Services, etc etc

xwolfde commented 4 months ago

Genau. Siehe #2 . Dazu hast du ja eben die Servicenummer als führende Zahl. Ab der zweiten Ziffer kommt dann der berechnete String, der dann auf eine Zahl rückrechnet. In der Serviceliste wird dann diese berechnete Zahl als Variable in dem bekannten Aufrufstring zum Service eingefügt:

Beispiel OTRS (Nur ein Parameter)

1. Erstellung einer Shorturl:

Ein Ticket mit der URL https://www.helpdesk.rrze.fau.de/otrs/index.pl?Action=AgentTicketZoom;TicketID=1167490 wird die Zahl 1167490 aut der berechnungsformel in wa22 umwandeln.

Davor kommt die Serviceid 9. Also ist der Shortcode dann: http://go.fau.de/9wa22

2. Aufruf der Shorturl http://go.fau.de/9wa22

Auf go.fau.de wiederum kommt dann /9wa22 am.

In der .htaccess steht RewriteRule ^(x0+[0-9A-Za-z\-\.]+)/?$ fau-redirect.php?code=$1 [L]

Das bedeutet, der Aufruf /9wa22 auf go.fau.de wird also umgeleitet auf fau-redirect.php?code=9wa22

Und in fau-redirect.php wird dann die 9 als erste Ziffer dem Dienst Helpdesk zugeordnet und die wa22 eben als Code. wa22 wird aufgrund der Rechenformel wieder zurückgerechnet auf 1167490.

In der Service-Datenbank steht die Target-URL so: https://www.helpdesk.rrze.fau.de/otrs/index.pl?Action=AgentZoom&TicketID=$id. Die $id wird dann ersetzt durch 1167490. Somit wird die komplette URL also wieder zu https://www.helpdesk.rrze.fau.de/otrs/index.pl?Action=AgentTicketZoom;TicketID=1167490 zusammengesetzt. Und zu dieser wird dann redirectet.

Konsequenzen und Vorteile

Somit braucht auch bei Shorturls, die mit einer Dienst-ID beginnen keinerlei Dateinbankeintrag gemacht werden und auch externe Dineste, wie der Helpdesk müssen nichts über irgendwelche API abfragen. Die müssen nur wissen welche Serviceid die haben und die Berechnungsformel kennen. Auch die Programmiersprache ist egal. Die Berechnungsformell ist nur einne Transformation und somit hin und zurück eindeutig kalkulierbar. Dies kann man in Perl, PHP, JS oder jeder anderen Programmiersprache umsetzen.

Weiteres steht in #2 . Dort ist auch bei dem (nicht aktiven!) Service des Blogdienst die Variante beschrieben, wo man ein Service auch mit mehr als einer Zahlenid in den Parametern nutzen kann.

xwolfde commented 4 months ago

Anmerkung: Bei der Verwaltung der Services reicht es nicht, nur die Domain anzugeben, du brauchst da auch eine Angabe der parameterisierten URL mit den GET Parametern. Die für Helpdesk wäre also https://www.helpdesk.rrze.fau.de/otrs/index.pl?Action=AgentZoom&TicketID=$id

Ein Beispiel für mehr zwei zahlenparameter sähe so aus: https://blogs.fau.de/skript/$p1/$p2

eines mit drei so: https://irgendwasanderes.fau.de/irgendwasanderes?blubparameter&dies=$p1&das=$p2/$p3

Es wird also immer nach $[a-z0-9]+ gesucht. ob da $id oder $p1 oder $blub steht ist egal, es wird von vorne durchgezählt. Aber auch das ist eigentlich in #2 beschrieben.