Started POST "/u/create_second_factor_totp.json" für 209.249.35.130 am 2020-02-19 14:21:20 +0000
Verarbeitung durch UsersController#create_second_factor_totp als JSON
Abgeschlossen mit 500 Internal Server Error in 5ms (ActiveRecord: 0,0 ms | Allokationen: 1781)
Addressable::URI::InvalidURIError (Ungültiges Schema-Format: Our Great Forum)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/addressable-2.7.0/lib/addressable/uri.rb:901:in `scheme='
Rendern des Text-Templates
Gerendertes Text-Template (Dauer: 0,0 ms | Allokationen: 1)
“Our Great Forum” ist fast der Forentitel in den Systemeinstellungen. Der tatsächliche Wert lautet etwa
“Our Great Forum: Our fine tagline”, sodass im Log nur der Teil vor dem Doppelpunkt erscheint. Ich sehe “Our Great Forum” nirgendwo anders in den Systemeinstellungen, daher bin ich verwirrt, warum es im Log ohne den Teil : tagline erscheint.
Seufz. Dies ist Version 2.4.0.beta10 (6301477b4c). Ich werde aktualisieren und bitten, es erneut zu versuchen. Ich werde dies bearbeiten, falls ich den Benutzer dazu bewegen kann, es mit der neuesten Version erneut zu versuchen.
Das ist alles, was ich in den Logs sehe. Einen Backtrace sehe ich nicht. Den Fehler bekomme ich jedoch, wenn ich im Abschnitt „Token-basierte Authentifizierer
Kannst du die Anfrage als curl kopieren und hier posten (wobei du alle PII und Tokens/Nonces schwärzt), damit wir feststellen können, ob das Problem beim Client oder Server liegt?
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
Die Änderung des Issuers ändert die Token-Werte, aber da es bisher bei Doppelpunkten völlig defekt war, sollte dies niemanden neuen beeinträchtigen.
Beachten Sie, dass es zuvor bei Titeln mit einem Doppelpunkt wie Spaceballs: The Discourse funktionierte (es funktionierte bei mir einwandfrei, und ich konnte es meinem Telefon hinzufügen), aber fehlschlug, wenn zwei Wörter vor dem Doppelpunkt standen.
(Entschuldigung, falls es in meinem Bericht nicht ganz klar war)
Ich habe keine Bestätigung erhalten, dass es für den betroffenen Nutzer funktioniert hat, aber bei mir hat es geklappt.
Was ich jedoch nicht verstehe, ist Folgendes:
Dies war für Titel mit einem : immer fehlerhaft.
Wenn sich der Seitentitel ändert, wird der Authenticator unterbrochen, da er an den Seitentitel gebunden ist.
SiteSettings.title ist seit langem unverändert.
UserSecondFactor.where(method: 1) gibt eine Reihe von Einträgen vom letzten August zurück.
Ich verstehe nicht, wie all das gleichzeitig zutreffen kann. Hat die Änderung des Seitentitels alle bestehenden Authenticator-UserSecondFactors beschädigt? EDIT: Nein, das ist nicht der Fall. Ich habe den Titel gerade geändert, und der von mir gestern erstellte Authenticator 2FA funktioniert weiterhin.
Nun, ich bin mir ziemlich sicher, dass der Titel schon immer aus mehreren Wörtern und einem Doppelpunkt bestand (in den Logs gab es seit mindestens Mai 2019 keine Änderungen), und dass er noch im letzten August funktioniert hat (da damals Authentifizierungstokens generiert wurden), aber egal. Es scheint jetzt zu funktionieren, und das Ändern des Titels bricht keine bestehenden Tokens, also ist das ein Gewinn.