Iniciado POST "/u/create_second_factor_totp.json" para 209.249.35.130 em 2020-02-19 14:21:20 +0000
Processando UsersController#create_second_factor_totp como JSON
Concluído 500 Internal Server Error em 5ms (ActiveRecord: 0,0ms | Alocações: 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 template de texto
Template de texto renderizado (Duração: 0,0ms | Alocações: 1)
“Our Great Forum” é quase o título do fórum nas configurações do sistema. O valor real é algo como
“Our Great Forum: Our fine tagline”, então o que aparece no log é apenas a parte antes dos dois pontos. Não vejo “Our Great Forum” em nenhum outro lugar nas configurações do sistema, então estou confuso sobre por que estaria lá sem a parte : tagline no log.
Suspiro. Esta é a versão 2.4.0.beta10 (6301477b4c). Vou atualizar e pedir para eles tentarem novamente. Editarei esta mensagem se conseguir que o usuário tente novamente na versão mais recente.
Isso é tudo o que vejo nos logs. Não vejo um backtrace. No entanto, recebo o erro apenas ao clicar em “novo autenticador” na seção “autenticadores baseados em token”.
Você pode copiar a solicitação como curl e postá-la (ocultando qualquer PII e tokens/nonces) para que possamos verificar se o problema está no cliente ou no 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
Alterar o emissor muda os valores do token, mas agora estava completamente quebrado para dois pontos, então isso não deve quebrar nada para novos usuários.
Observe que funcionava anteriormente para títulos com dois pontos, como Spaceballs: The Discourse (funcionou bem para mim e eu consegui adicioná-lo ao meu telefone), mas falhava quando havia duas palavras antes dos dois pontos.
(desculpe se não ficou muito claro no meu relatório)
Ainda não recebi confirmação de que funcionou para o usuário que estava reclamando, mas funcionou para mim.
O que eu não entendo, porém, é que entendo que:
isso sempre esteve quebrado para títulos com : neles
se o título do site mudar, o autenticador fica quebrado, pois está vinculado ao título do site
SiteSettings.title não mudou há muito tempo
UserSecondFactor.where(method: 1) retorna várias entradas de agosto passado
Não entendo como todas essas afirmações podem ser verdadeiras. Seria o caso de que a alteração do título do site quebrou todos os UserSecondFactor de autenticador existentes? EDIÇÃO: Não, não quebrou. Acabei de alterar o título e o 2fa do autenticador que criei ontem ainda funciona.
Bem, tenho quase certeza de que o título sempre teve várias palavras e dois pontos (sem alterações nos logs desde pelo menos maio de 2019) e que funcionou tão recentemente quanto agosto do ano passado (porque há tokens de autenticação gerados nessa época), mas enfim. Parece que está funcionando agora e que alterar o título não quebra os tokens existentes, então isso parece ser uma vitória.