• [^] # Re: Fragment

    Posté par . En réponse à l’entrée du suivi Impossible de mettre un lien vers un salon matrix dans les liens d'une dépêche. Évalué à 3 (+0/-0). Dernière modification le 05 janvier 2023 à 23:27.

    Les liens dans les dépèches et dans les bookmarks sont validés comme suit et refuse l'URL matrix.to:

    validates :url, http_url: { protocols: PROTOCOLS, message: "L'adresse n'est pas valide" },

    Le site web personnel de l'utilisateur est validé comme suit et accepte l'URL matrix.to:

    validates_format_of :homesite, message: "L’adresse du site Web personnel n’est pas valide", with: URI::regexp(%w(http https)), allow_blank: true

    Les bookmarks utilisent le même procédé pour indiquer que l'URL est mauvaise si la validation échoue:

    flash.now[:alert] = "Votre lien semble invalide. Le confimez‐vous ?" unless @bookmark.link =~ /\A#{URI::regexp(['http', 'https'])}\z/

    Ça vaudrait peut-être la peine d'uniformiser tout ça. :-)

    A priori ce http_url vient de app/validators/http_url_validator.rb, qui utilise URI.parse mais échoue:

    irb(main):001:0> URI.parse("https://matrix.to/#/#copie-publique:codelutin.com")
    URI::InvalidURIError: bad URI(is not URI?): https://matrix.to/#/#copie-publique:codelutin.com
     from /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:67:in `split'
     from /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:73:in `parse'
     from /usr/lib/ruby/2.3.0/uri/common.rb:227:in `parse'
     from (irb):1
     from /usr/bin/irb:11:in `<main>'
    

    Donc ruby n'est pas capable de parser une URI que sa regexp considère comme valide...