def _handle_error(cls, exception): response = super()._handle_error(exception) is_frontend_request = bool(getattr(request, 'is_frontend', False)) if not is_frontend_request or not isinstance(response, HTTPException): # neither handle backend requests nor plain responses return response # minimal setup to serve frontend pages if not request.uid: cls._auth_method_public() cls._handle_debug() cls._frontend_pre_dispatch() request.params = request.get_http_params() code, values = cls._get_exception_code_values(exception) request.cr.rollback() if code == 500: values = cls._get_values_500_error(request.env, values, exception) try: code, html = cls._get_error_html(request.env, code, values) except Exception: code, html = 418, request.env['ir.ui.view']._render_template('http_routing.http_error', values) response = werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8') cls._post_dispatch(response) return response
def _serve_fallback(cls): # serve attachment before parent = super()._serve_fallback() if parent: # attachment return parent # minimal setup to serve frontend pages if not request.uid: cls._auth_method_public() cls._frontend_pre_dispatch() cls._handle_debug() request.params = request.get_http_params() website_page = cls._serve_page() if website_page: website_page.flatten() cls._register_website_track(website_page) cls._post_dispatch(website_page) return website_page redirect = cls._serve_redirect() if redirect: return request.redirect( _build_url_w_params(redirect.url_to, request.params), code=redirect.redirect_type, local=False ) # safe because only designers can specify redirects
def _auth_method_calendar(cls): token = request.get_http_params().get('token', '') error_message = False attendee = request.env['calendar.attendee'].sudo().search([('access_token', '=', token)], limit=1) if not attendee: error_message = """Invalid Invitation Token.""" elif request.session.uid and request.session.login != 'anonymous': # if valid session but user is not match user = request.env['res.users'].sudo().browse(request.session.uid) if attendee.partner_id != user.partner_id: error_message = """Invitation cannot be forwarded via email. This event/meeting belongs to %s and you are logged in as %s. Please ask organizer to add you.""" % (attendee.email, user.email) if error_message: raise BadRequest(error_message) cls._auth_method_public()