diff --git a/app/models/deploy_hidden_service.rb b/app/models/deploy_hidden_service.rb index 642209a..8ca4b08 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