Inizio POST "/u/create_second_factor_totp.json" per 209.249.35.130 alle 2020-02-19 14:21:20 +0000
Elaborazione di UsersController#create_second_factor_totp come JSON
Completato con errore 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms | Allocazioni: 1781)
Addressable::URI::InvalidURIError (Formato schema non valido: Our Great Forum)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/addressable-2.7.0/lib/addressable/uri.rb:901:in `scheme='
Rendering del template di testo
Template di testo renderizzato (Durata: 0.0ms | Allocazioni: 1)
“Our Great Forum” è quasi il titolo del forum nelle impostazioni di sistema. Il valore effettivo è qualcosa del tipo “Our Great Forum: Our fine tagline”, quindi ciò che appare nel log è solo la parte prima dei due punti. Non vedo “Our Great Forum” da nessun’altra parte nelle impostazioni di sistema, quindi sono confuso sul perché appaia lì senza la parte : tagline nel log.
Sigh. Questa è la versione 2.4.0.beta10 (6301477b4c). Procederò con l’aggiornamento e farò riprovare loro. Aggiungerò un aggiornamento se riesco a far provare all’utente di nuovo con l’ultima versione.
Questo è tutto ciò che vedo nei log. Non vedo uno stack trace. Tuttavia, ricevo l’errore semplicemente cliccando su “nuovo autenticatore” nella sezione “autenticatori basati su token”.
E la situazione è la stessa anche dopo l’ultimo aggiornamento.
Puoi copiare la richiesta come curl e pubblicarla (rimuovendo eventuali PII e token/nonces) in modo che possiamo capire se il problema è lato client o server?
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
Cambiare l’emittente modifica i valori del token, ma ora era completamente rotto per i due punti, quindi questo non dovrebbe rompere nulla per i nuovi utenti.
Nota che in precedenza funzionava per titoli con i due punti, come Spaceballs: The Discourse (funzionava perfettamente per me e sono riuscito ad aggiungerlo al mio telefono), ma falliva quando c’erano due parole prima dei due punti.
(scusa se non è stato molto chiaro nella mia segnalazione)
Non ho ancora ricevuto conferma che abbia funzionato per l’utente che si era lamentato, ma per me ha funzionato.
Tuttavia, ciò che non capisco è il seguente quadro:
questo è sempre stato rotto per i titoli che contengono :
se il titolo del sito cambia, l’autenticatore si rompe, poiché è legato al titolo del sito
SiteSettings.title non è cambiato da molto tempo
UserSecondFactor.where(method: 1) restituisce un sacco di voci di agosto scorso
Non capisco come tutte queste cose possano essere vere. È possibile che la modifica del titolo del sito abbia rotto tutti gli UserSecondFactor esistenti per l’autenticatore? EDIT: No, non è così. Ho appena modificato il titolo e l’autenticatore 2fa che ho creato ieri funziona ancora.
Beh, sono piuttosto certo che il titolo contenesse più parole e due punti da sempre (nessuna modifica nei log almeno dal maggio 2019) e che funzionasse fino a lo scorso agosto (perché ci sono token di autenticazione generati in quel periodo), ma poco importa. Sembra che ora funzioni e che modificare il titolo non comprometta i token esistenti, quindi sembra una vittoria.