Los servicios ocultos son direcciones en base32

This commit is contained in:
f 2021-08-07 17:38:01 -03:00
parent f8f9e722be
commit f50e202d3a

View file

@ -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