Projet

Général

Profil

Bug #8658

Erreur de thème sur requêtes invalides

Ajouté par Serghei Mihai il y a plus de 8 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
-
Version cible:
-
Début:
15 octobre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Traces périodiques sur admin@:

Exception:
  type = '<class 'requests.exceptions.HTTPError'>', value = '403 Client Error: FORBIDDEN'
...
     self = <RemoteTemplate object at 0x4b3d510>
     theme_skeleton_url = 'https://www.mymeaux.fr/__skeleton__/'
...
  locals: 
     self = <publisher.WcsPublisher instance at 0x33da950>
     stdin = <open file '<socket>', mode 'r' at 0x3819930>
     request = <qommon.http_request.HTTPRequest instance at 0x4359248>
     env = {'HTTP_X_AU_QUOTIDIEN_LOCKED': 'False', 'HTTP_REFERER': 'https://echirolles.au-quotidien.com/etat-civil/copie-d-acte-de-naissance/' <---- ??


Demandes liées

Dupliqué par w.c.s. - Bug #16691: mic mac sur le publisher lors de la récupération d'un template par wcs, qui demande le template d'un autre siteRejeté05 juin 2017

Actions

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 8 ans

  • Projet changé de Publik à w.c.s.
  • Sujet changé de Erreurs 403 sur la récuperation du thème pour wcs à Erreur de thème sur requêtes invalides
  • Priorité changé de Normal à Bas

Dans la suite :

     output = <htmltext '<div id="info"><h2>Invalid request</h2><div class="error-page"><p>Unable to parse HTTP request.</p></div></div>'>
     start_time = 1444911464.676738
     request = <qommon.http_request.HTTPRequest instance at 0x4359248>
     exc = RequestError()
     self = <publisher.WcsPublisher instance at 0x33da950>

Et le même genre de trace a eu lieu sur de l'affichage de page 404 sur un domaine non déclaré (pour contourner ça j'ai mis en place une redirection vers publik.entrouvert.com pour les domaines non déclarés).

Il doit y avoir dans une situation d'affichage d'erreur (via self.finish_failed_request) un truc qui ne tourne pas rond (peut-être parce que ça recrée un objet HTTPResponse avec quelques raccourcis).

#2

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

    def process_request(self, request):                               
        """(request : HTTPRequest) -> HTTPResponse                    

        Process a single request, given an HTTPRequest object.  The
        try_publish() method will be called to do the work and 
        exceptions will be handled here.
        """ 
        self._set_request(request)
        start_time = time.time()
        try:
            self.parse_request(request)
            output = self.try_publish(request)                        
        except PublishError, exc:
            # Exit the publishing loop and return a result right away.
            output = self.finish_interrupted_request(exc)
        except:                             
            # Some other exception, generate error messages to the logs, etc.
            output = self.finish_failed_request()
        output = self.filter_output(request, output)
        self.logger.log_request(request, start_time)
        if output:
            if self.config.compress_pages and request.get_encoding(["gzip"]):
                compress = True
            else:                           
                compress = False
            request.response.set_body(output, compress)
        self._clear_request()
        return request.response

À mon avis l'erreur a lieu dans le self.parse_request() or comme le set_app_dir() a lieu dans le try_publish() exécuté juste après, on est encore dans le app_dir précédent et donc si l'app_dir précédent utilise un RemoteTemplate on va interroger son combo et il ne va pas accepter le host qu'il reçcoit (Publisher._set_request() ayant été exécuté on a bien la bonne requête à ce moment là).

Il faudrait faire le set_app_dir() plus tôt, avant tout traitement de la requête.

#3

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Aussi je ne sais pas pourquoi mais on perd le champ public_msg dans le template des erreurs, ça nous aiderait à savoir pourquoi cette requête est initialement refusée.
Quand je grep wcs/quixote je vois qu'il y a tout un tas d'erreurs de parsing possible qu'on ne retrouve pas dans la page d'erreur:

auquo:/usr/share/pyshared# grep -Ri 'RequestError' quixote wcs
quixote/errors.py:class RequestError(PublishError):
quixote/http_request.py:from quixote.errors import RequestError
quixote/http_request.py:        raise RequestError('unknown charset %r' % charset)
quixote/http_request.py:        raise RequestError('invalid %r encoded string' % charset)
quixote/http_request.py:        raise RequestError('expected Content-Disposition: form-data '
quixote/http_request.py:            raise RequestError('invalid content-length header')
quixote/http_request.py:            raise RequestError('unexpected end of request body')
quixote/http_request.py:            raise RequestError('multipart/form-data missing boundary')
quixote/http_request.py:            raise RequestError('unexpected end of multipart/form-data')
quixote/http_request.py:            raise RequestError('expected Content-Disposition header')
quixote/http_request.py:            raise RequestError('expected Content-Disposition: form-data'
wcs/qommon/http_request.py:from quixote.errors import RequestError
wcs/qommon/http_request.py:                raise RequestError('invalid json payload (%s)' % str(e))

Ça a l'air d'une décision délibérée de ne pas l'afficher1 mais vu que PublishtError.__repr__() ne le donne pas non plus l'information est finalement complètement perdue même dans la trace.

[1]:

def format_publish_error(exc):
    return template.error_page(_(exc.description), _(exc.title))

#4

Mis à jour par Frédéric Péters il y a plus de 8 ans

Benjamin Dauvergne a écrit :

Ça a l'air d'une décision délibérée de ne pas l'afficher1 mais vu que PublishError.__repr__() ne le donne pas non plus l'information est finalement complètement perdue même dans la trace.

Décision sans doute très réfléchie en cet agréable début d'après-midi du 6 septembre 2005. (sérieusement, si tu veux faire un patch permettant de voir ce message, vas-y)

#5

Mis à jour par Frédéric Péters il y a presque 7 ans

  • Dupliqué par Bug #16691: mic mac sur le publisher lors de la récupération d'un template par wcs, qui demande le template d'un autre site ajouté
#6

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Nouveau à Fermé

La récupération du squelette de thème passe désormais par le code commun dans hobo et n'a plus ce problème.

Formats disponibles : Atom PDF