# Copyright 2016,2022 Therp BV . # Copyright 2016 Antonio Espinosa . # Copyright 2018 Ignacio Ibeas . # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). # pylint: disable=too-few-public-methods,no-self-use """This controller handles the acme challenge call from Letsencrypt.""" import logging import os from odoo import _, http from odoo.http import request from ..models.letsencrypt import _get_challenge_dir _logger = logging.getLogger(__name__) class Letsencrypt(http.Controller): """This controller handles the acme challenge call from Letsencrypt.""" @http.route("/.well-known/acme-challenge/", auth="none") def acme_challenge(self, filename): """Handle the acme challenge.""" path = os.path.join(_get_challenge_dir(), filename) try: with open(path, encoding="utf-8") as key: return key.read() except IOError: _logger.exception(_("Error opening file %s"), path) return request.not_found()