Iniciado POST "/u/create_second_factor_totp.json" para 209.249.35.130 el 2020-02-19 14:21:20 +0000
Procesado por UsersController#create_second_factor_totp como JSON
Completado 500 Internal Server Error en 5ms (ActiveRecord: 0.0ms | Asignaciones: 1781)
Addressable::URI::InvalidURIError (Formato de esquema inválido: Our Great Forum)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/addressable-2.7.0/lib/addressable/uri.rb:901:in `scheme='
Renderizando plantilla de texto
Plantilla de texto renderizada (Duración: 0.0ms | Asignaciones: 1)
“Our Great Forum” es casi el título del foro en la configuración del sistema. El valor real es algo como “Our Great Forum: Our fine tagline”, por lo que lo que aparece en el registro es solo la parte antes del dos puntos. No veo “Our Great Forum” en ningún otro lugar de la configuración del sistema, así que no entiendo por qué aparecería allí sin la parte : tagline en el registro.
Suspiro. Esto es 2.4.0.beta10 (6301477b4c). Voy a actualizar y pedirles que lo intenten de nuevo. Editaré esto si puedo lograr que el usuario lo intente de nuevo en la versión más reciente.
Eso es todo lo que veo en los registros. No veo un backtrace. Sin embargo, obtengo el error al hacer clic en “nuevo autenticador” en la sección “autenticadores basados en tokens”.
¿Podrías copiar la solicitud como curl y publicarla (ocultando cualquier información de identificación personal y tokens/nonces) para que podamos determinar si el problema es del cliente o del servidor?
diff --git a/spec/components/concern/second_factor_manager_spec.rb b/spec/components/concern/second_factor_manager_spec.rb
index 36e4f066ce..a657a0fdc8 100644
--- a/spec/components/concern/second_factor_manager_spec.rb
+++ b/spec/components/concern/second_factor_manager_spec.rb
@@ -47,6 +47,18 @@ RSpec.describe SecondFactorManager do
"otpauth://totp/#{SiteSetting.title}:#{user.email}?secret=#{user_second_factor_totp.data}&issuer=#{SiteSetting.title}"
)
end
+ it 'should handle a colon in the site title' do
+ SiteSetting.title = 'Spaceballs: The Discourse'
+ expect(user.user_second_factors.totps.first.totp_provisioning_uri).to eq(
+ "otpauth://totp/#{URI::escape SiteSetting.title}:#{user.email}?secret=#{user_second_factor_totp.data}&issuer=#{CGI::escape SiteSetting.title}"
+ )
+ end
+ it 'should handle a space before a colon in the site title' do
+ SiteSetting.title = 'Our Spaceballs: The Discourse'
+ expect(user.user_second_factors.totps.first.totp_provisioning_uri).to eq(
+ "otpauth://totp/#{URI::escape SiteSetting.title}:#{user.email}?secret=#{user_second_factor_totp.data}&issuer=#{CGI::escape SiteSetting.title}"
+ )
+ end
end
describe '#authenticate_totp' do
→ RAILS_ENV=test rspec ./spec/components/concern/second_factor_manager_spec.rb
Randomized with seed 47333
...................F......................
Failures:
1) SecondFactorManager#totp_provisioning_uri should handle a space before a colon in the site title
Failure/Error: totp_object.provisioning_uri(user.email)
Addressable::URI::InvalidURIError:
Invalid scheme format: Our Spaceballs
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:901:in `scheme='
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:826:in `block in initialize'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:2392:in `defer_validation'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:823:in `initialize'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:138:in `new'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:138:in `parse'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/addressable-2.7.0/lib/addressable/uri.rb:607:in `encode'
# /home/michael/.rvm/gems/ruby-2.6.3/gems/rotp-5.1.0/lib/rotp/totp.rb:61:in `provisioning_uri'
# ./app/models/user_second_factor.rb:32:in `totp_provisioning_uri'
# ./spec/components/concern/second_factor_manager_spec.rb:58:in `block (3 levels) in <top (required)>'
Finished in 0.75471 seconds (files took 2.18 seconds to load)
42 examples, 1 failure
Failed examples:
rspec ./spec/components/concern/second_factor_manager_spec.rb:56 # SecondFactorManager#totp_provisioning_uri should handle a space before a colon in the site title
Randomized with seed 47333
Cambiar el emisor modifica los valores del token, pero ahora estaba completamente roto para los dos puntos, por lo que esto no debería afectar a nadie nuevo.
Ten en cuenta que anteriormente funcionaba para títulos con dos puntos, como Spaceballs: The Discourse (funcionó perfectamente para mí y pude agregarlo a mi teléfono), pero fallaba cuando había dos palabras antes de los dos puntos.
No he recibido confirmación de que funcionó para el usuario que se quejaba, pero a mí sí me funcionó.
Sin embargo, lo que no entiendo es lo siguiente:
Esto siempre ha estado roto para títulos que contienen :.
Si el título del sitio cambia, el autenticador se rompe, ya que está vinculado al título del sitio.
SiteSettings.title no ha cambiado en mucho tiempo.
UserSecondFactor.where(method: 1) devuelve varias entradas de agosto pasado.
No entiendo cómo todas esas afirmaciones pueden ser ciertas. ¿Acaso el cambio del título del sitio rompió todos los UserSecondFactor de autenticador existentes? EDICIÓN: No, no es así. Acabo de cambiar el título y el autenticador 2FA que creé ayer sigue funcionando.
Bueno, estoy bastante seguro de que el título tenía varias palabras y dos puntos desde hace mucho (sin cambios en los registros desde al menos mayo de 2019) y que funcionaba tan recientemente como el pasado agosto (porque hay tokens de autenticador generados entonces), pero da igual. Parece que ahora funciona y que cambiar el título no rompe los tokens existentes, así que esto parece ser una victoria.