Robert-2 / Robert2

Application web de gestion de parc de matériel destiné à la location ou au prêt
https://robertmanager.org
Other
42 stars 14 forks source link

Activer CORS à l'install plante l'assistant #386

Closed Nakio195 closed 1 year ago

Nakio195 commented 1 year ago

Bonjour à vous deux ! Une fois de plus merci beaucoup pour votre travail efficace et incroyable !

Dans une période d'inventaire et pour préparer la saison je me suis dis qu'il serais temps de passer de la 18 à la 20 ! Je lance donc une fresh install depuis la dernière release zippé et décide d'activer CORS car ça fais un moment que je réfléchis à gratter dans l'API depuis une appli compagnonne avec Qt. Malheureusement dès que les identifiants pour la BDD sont rentrés et que l'on passe à l'étape de migration je tombe sur cet erreur :

404 Not Found
The application could not run because of the following error:

Details
Type: Slim\Exception\HttpNotFoundException
Code: 404
Message: Not found.
File: /home/robert/html/Robert2_20/Robert2/src/App/App.php
Line: 137
Trace
#0 /SEB/Robert2/vendors/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(43): Robert2\API\App->Robert2\API\{closure}()
Robert-2/Robert#69 /SEB/Robert2/vendors/slim/slim/Slim/Routing/Route.php(384): Slim\Handlers\Strategies\RequestResponse->__invoke()
Robert-2/Robert#70 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\Routing\Route->handle()
Robert-2/Robert#68 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle()
Robert-2/Robert2#4 /SEB/Robert2/vendors/slim/slim/Slim/Routing/Route.php(341): Slim\MiddlewareDispatcher->handle()
Robert-2/Robert2#5 /SEB/Robert2/vendors/slim/slim/Slim/Routing/RouteRunner.php(84): Slim\Routing\Route->run()
Robert-2/Robert2#6 /SEB/Robert2/src/App/Middlewares/BodyParser.php(62): Slim\Routing\RouteRunner->handle()
Robert-2/Robert2#7 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(147): Robert2\API\Middlewares\BodyParser->process()
Robert-2/Robert2#8 /SEB/Robert2/src/App/Middlewares/Acl.php(35): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#9 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(313): Robert2\API\Middlewares\Acl->__invoke()
Robert-2/Robert2#10 /SEB/Robert2/src/App/Services/Auth.php(37): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#11 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(313): Robert2\API\Services\Auth->middleware()
Robert-2/Robert2#12 /SEB/Robert2/src/App/Middlewares/Pagination.php(20): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#13 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(313): Robert2\API\Middlewares\Pagination->__invoke()
Robert-2/Robert2#14 /SEB/Robert2/vendors/slim/slim/Slim/Middleware/RoutingMiddleware.php(59): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#15 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(147): Slim\Middleware\RoutingMiddleware->process()
Robert-2/Robert2#16 /SEB/Robert2/vendors/slim/slim/Slim/Middleware/ErrorMiddleware.php(107): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#17 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(147): Slim\Middleware\ErrorMiddleware->process()
Robert-2/Robert2#18 /SEB/Robert2/src/App/App.php(74): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#19 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(313): Robert2\API\App->Robert2\API\{closure}()
Robert-2/Robert2#20 /SEB/Robert2/vendors/slim/http-cache/src/Cache.php(67): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#21 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(147): Slim\HttpCache\Cache->process()
Robert-2/Robert2-Premium#329 /SEB/Robert2/vendors/slim/slim/Slim/MiddlewareDispatcher.php(81): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
Robert-2/Robert2#23 /SEB/Robert2/vendors/slim/slim/Slim/App.php(215): Slim\MiddlewareDispatcher->handle()
Robert-2/Robert2#24 /SEB/Robert2/vendors/slim/slim/Slim/App.php(199): Slim\App->handle()
Robert-2/Robert2#25 /SEB/Robert2/src/App/App.php(51): Slim\App->run()
Robert-2/Robert2#26 /SEB/Robert2/src/public/index.php(17): Robert2\API\App->run()
Robert-2/Robert2#27 {main}

J'ai vu que dans la stack on passais par la ligne 74@App.php qui correspond à la configuration de CORS https://github.com/Robert-2/Robert2/blob/f9f23d628370a967d5d71d81430c3a98c004c4ed/server/src/App/App.php#L74

Une fois désactivé dans le settings.conf on passe à l'étape de migration sans soucis !

Bon par contre j'ai des soucis de migrations de DB... C'est une autre histoire.

J'ai bien conscience que CORS n'est surement pas votre priorité mais au moins ça seras noté quelque part !

Merci encore pour votre boulot et à bientôt !

Théo pour [SEB]

Donov4n commented 1 year ago

Bonjour !

Merci pour votre retour !

Pour ce qui est du souci que vous rencontrez avec CORS, pouvez-vous fournir les détails de la requête envoyée et qui renvoie une 404 (méthode, url (uniquement la partie "path"), header (en cachant les données sensibles s'il y en a) etc.)


Concernant les soucis de migrations de base de données, étant donné que cette version améliore la structure de la base au niveau des techniciens et bénéficiaires, il se peut que la migration rencontrent des soucis si des erreurs ce sont glissés au fil du temps dans vos tables liées.

À ce sujet, vous pouvez consulter le forum ou nous avons couvert ce type de soucis plusieurs fois récemment:

Nakio195 commented 1 year ago

Bonjour ! Pour la migration c'est effectivement les deux sujets qui m'ont permis de résoudre le problème.

Concernant le problème, je ne fais aucune requêtes pour l'instant c'est bien lors des étapes de l'assistant d'installation que je tombe sur cette erreur.

Pour reproduire l'erreur :

  1. Installe neuve depuis la dernière release zip github
  2. Activer CORS lorsque cela est proposé
  3. Après la saisie des infos de la BDD cette erreur apparait et empêche l'accès à l'étape de migration

Pour info je n'ai pas refais cette procédure mais j'essaye dès que j'ai le temps.

Donov4n commented 1 year ago

Votre problème survient donc au moment ou la configuration est réellement mise à jour (même si vous remplissez des infos pendant quelques étapes avant d'arriver à l'étape de bdd, ce n'est qu'à ce moment là qu'elles sont réellement persistées en tant que paramètres de l'application).

Ce qui est surprenant c'est que je ne reproduis absolument pas le souci. Il faudrait quand même nous transmettre les données de la requête que votre navigateur envoie au serveur à ce moment là (en ouvrant vos outils de développeur AVANT que le problème se produise et en allant dans l'onglet network, c'est la première requête de la liste), voir l'exemple ci-dessous:

Capture d’écran 2023-04-20 à 16 59 27

Nakio195 commented 1 year ago

Voici la requête effectuée par mon navigateur

image

Donov4n commented 1 year ago

Merci pour le screenshot. À première vu il n'y a rien de suspect, on a même les CORS d'activés en réponse.

Malheureusement, pour aller plus loin il va sans doute falloir que l'on investigue ensemble le problème, en appel avec partage d'écran. Pour cela, vous pouvez me contacter en privé via le formulaire de contact du site et nous conviendrons d'un RDV pour voir ça ensemble.

Note: En temps normal ce genre de service est payant (la session de debug personnalisée), mais comme vous êtes de généreux donateurs, ceci vous est proposé gratuitement 🙂 .

Donov4n commented 1 year ago

Je viens de me rendre compte de quelque chose: Le routing semble considérer votre requête comme une requête d'API et renvoie une 404 car /install ne fait pas parti de ce scope.

N'y aurait-il pas un souci de configuration du apiUrl dans votre fichier src/App/Config/settings.json ?
La valeur ne doit pas contenir de /api à la fin (e.g. http://robert-dev.votre-domain.tld). Il faut aussi vérifier l'URL Rewriting dans votre configuration Apache.

Quoi qu'il en soit, n'hésitez pas à prendre contact avec moi comme dit plus haut.

Nakio195 commented 1 year ago

Bonjour, pas de /api dans le settings.conf

{
    "apiUrl": "https://robert-dev.coucou.fr",
    "enableCORS": true,
    "displayErrorDetails": true,
    "useRouterCache": true,
    "useHTTPS": true,
    "sessionExpireHours": 12,
    "JWTSecret": "[REDACTED]",
    "httpAuthHeader": "Authorization",
    "defaultLang": "fr",
    "currency": {
        "symbol": "€",
        "name": "Euro",
        "iso": "EUR",
        "symbol_intl": "€",
        "decimal_digits": 2,
        "rounding": 0
    },
    "billingMode": "partial",
    "degressiveRateFunction": "daysCount",
    "maxItemsPerPage": 100,
    "db": {
        "host": "localhost",
        "username": "coucou",
        "password": "lala",
        "database": "coucou",
        "prefix": ""
    },
    "companyData": {
        "country": "",
        "email": "",
        "legalNumbers": [
            {
                "name": "SIRET",
                "value": ""
            },
            {
                "name": "APE",
                "value": ""
            }
        ],
        "locality": "coucou",
        "logo": null,
        "name": "coucou",
        "phone": "",
        "street": "coucou",
        "vatNumber": "",
        "vatRate": 0,
        "zipCode": "01234"
    }
}

Et le Rewrite est bien activé et fonctionnel car j'arrive à réécrire d'autres URL et que la version 20 de Robert fonctionne correctement.

D'ailleurs sur la version 20 fonctionnelle j'ai tenté de réactiver CORS et impossible d'accéder à la page login (redirections infinies) image

Proposition de RDV envoyée :)

Merci encore !

Donov4n commented 1 year ago

Après investigation en session de support personnalisée, le problème venait du fait que le cache n'avait pas été vidé lors de la mise à jour ET / OU l'extension OpCache de PHP servait encore une version compilée obsolète des fichiers de l'application.

Pour résoudre le problème il a donc fallu: