danielmarschall / oidplus

OIDplus 2.0 - An OpenSource online Registration Authority for OIDs and other Object Types
https://www.oidplus.com
Apache License 2.0
10 stars 6 forks source link

Handle 404 method $request argument if OIDplus has a weburi base path #50

Open wehowski opened 1 month ago

wehowski commented 1 month ago

Hallo Daniel, ...Neuigkeiten sind in Arbeit, noch etwas Geduld...

Wenn OIDplus nicht im Webroot liegt sondern in einem Unterverzeichnis ( so wie z.B. https://weid.info/plus/ ), dann stimmt das $request Argument an die handle404 Methode nicht so ganz!

Hier mal ein Workaround um den Pfad zu korrigieren:

   public function handle404(string $request): bool {
        //die($request);
        $CDN_BASEPATH = OIDplus::baseConfig()->getValue('FRDLWEB_CDN_RELATIVE_URI', self::DEFAULT_CDN_BASEPATH );
        $BASE_URI = rtrim(OIDplus::webpath(OIDplus::localpath(),OIDplus::PATH_ABSOLUTE_CANONICAL), '/ ').'/'.trim($CDN_BASEPATH, '/ ').'/';
       $rel_url_original =substr($_SERVER['REQUEST_URI'], strlen(OIDplus::webpath(null, OIDplus::PATH_RELATIVE_TO_ROOT)));

       /*
        if(!str_starts_with($request, $CDN_BASEPATH)){
            print_r([$request, $CDN_BASEPATH, $rel_url_original]);
            die();
            return false;
        }
        */
        $request = $rel_url_original;
danielmarschall commented 1 month ago

Hallo Till, kannst du mir mal ein Beispiel geben bei dem es (was?) nicht funktioniert? Mein OIDplus funktioniert doch https://hosted.oidplus.com/viathinksoft/

wehowski commented 1 month ago

Hallo Daniel, es geht darum das die custom REST routes nicht funktionieren im handle404 handler, es sei denn ich bearbeite den Request wie siehe oben.

Es ist auch super wichtig das z.b. https://hosted.oidplus.com/viathinksoft/oid/2.999 oder https://hosted.oidplus.com/viathinksoft/custom-rdap-path/2.999 funktioniert, da rdap per query-parameter von der Spezifikation nicht erlaubt ist (es sei den für lokale/spezielle look-ups im OIDplus).

....

Viele Grüße Till

danielmarschall commented 1 month ago

Hallo Till,

ja, https://hosted.oidplus.com/viathinksoft/oid/2.999 wäre schön, aber hier haben wir ein großes Problem, nämlich bräuchten wir hier Rewrite Regeln o.ä. und das ist bei jedem Servertyp anders. Bei Apache weiß ich wie man das macht mit .htaccess (aber: nicht jeder Server hat mod_rewrite installiert), aber wie man es bei nginx und Microsoft IIS funktioniert, weiß ich nicht. Daher ist es leider gar nicht trivial das zu realisieren. Es ist wichtig, dass OIDplus auf Windows, Linux und Mac läuft, mit zumindest den Servern Apache, IIS und nginx.

Bzgl. deinem Codesnippet von oben, du meinst also ich sollte FRDLWEB_CDN_RELATIVE_URI in den Kern einbauen? Gibt es da nicht eine alternative Möglichkeit? Ich möchte eigentlich Drittanbieter-Sachen möglichst nicht in den Kern (includes/classes/) einbauen. Wir müssten dem Ding zumindest einen anderen Namen geben, sodass die Funktion allgemeingültig und für andere Drittanbieter auch verwendet werden kann.

Außerdem, ich bräuchte noch die Info welchen Code du genau meinst, denn ich steh ziemlich auf dem Schlauch. Die Funktion handle404 gibt es laut GitHub fünf Mal im Code https://github.com/search?q=repo%3Adanielmarschall%2Foidplus%20handle404&type=code

Viele Grüße Daniel

wehowski commented 1 month ago

Hallo Daniel, meinst also ich sollte FRDLWEB_CDN_RELATIVE_URI in den Kern einbauen? NEIN, das ist der falsche approach.

Viele Spezifikationen z.B. auch RDAP verlangen ein bestimmtes Muster an "sauberen" REST-Routes! Alternative Request-Handler können zusätzlich existieren bzw. je nach Aufgabe.

...