From f50e202d3aaa5e0b3eff42e83b3b20cbdf8d6b3d Mon Sep 17 00:00:00 2001 From: f Date: Sat, 7 Aug 2021 17:38:01 -0300 Subject: [PATCH] Los servicios ocultos son direcciones en base32 --- app/models/deploy_hidden_service.rb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/models/deploy_hidden_service.rb b/app/models/deploy_hidden_service.rb index 642209af..8ca4b082 100644 --- a/app/models/deploy_hidden_service.rb +++ b/app/models/deploy_hidden_service.rb @@ -3,7 +3,7 @@ # Alojar el sitio como un servicio oculto de Tor, que en realidad es un # link simbólico al DeployLocal. class DeployHiddenService < DeployWww - validates :hostname, format: { with: /\A[a-f0-9]{56}.onion\z/ } + validates :hostname, format: { with: /\A[a-z2-7]{56}.onion\z/ } # Los servicios ocultos son su propio transporte cifrado y # autenticado. @@ -17,11 +17,9 @@ class DeployHiddenService < DeployWww # través de la API. El hostname por defecto es un nombre temporal que # se parece a una dirección OnionV3. # - # TODO: En el panel se muestra esta dirección como si fuera la real. - # # @return [String] def default_hostname - "#{SecureRandom.hex(28)}.onion" + "temporal#{random_base32}.onion" end private @@ -29,4 +27,16 @@ class DeployHiddenService < DeployWww def implements_hostname_validation? true end + + # Adaptado de base32 + # + # @see {https://github.com/stesla/base32/blob/master/lib/base32.rb} + # @see {https://github.com/stesla/base32/blob/master/LICENSE} + def random_base32(length = 48) + table = 'abcdefghijklmnopqrstuvwxyz234567' + + OpenSSL::Random.random_bytes(length).each_byte.map do |b| + table[b % 32] + end.join + end end