Started POST "/u/create_second_factor_totp.json" for 209.249.35.130 at 2020-02-19 14:21:20 +0000
Processing by UsersController#create_second_factor_totp as JSON
Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms | Allocations: 1781)
Addressable::URI::InvalidURIError (Invalid scheme 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='
Rendering text template
Rendered text template (Duration: 0.0ms | Allocations: 1)
“Our Great Forum” هي تقريبًا عنوان المنتدى في إعدادات النظام. القيمة الفعلية شيء مثل
“Our Great Forum: Our fine tagline”، لذا ما يظهر في السجل هو الجزء قبل النقطتين الرأسيتين. لا أرى “Our Great Forum” في أي مكان آخر في إعدادات النظام، لذا أنا مرتبك بشأن سبب وجودها في السجل بدون جزء : tagline.
تنهد. هذا الإصدار 2.4.0.beta10 (6301477b4c). سأقوم بالترقية وأطلب منهم المحاولة مرة أخرى. سأقوم بتعديل هذا إذا تمكنت من جعل المستخدم يجرب مرة أخرى على أحدث إصدار.
هل يمكنك نسخ الطلب بصيغة curl ونشره (مع إخفاء أي بيانات تعريف شخصية أو رموز/أرقام عشوائية) حتى نتمكن من تحديد ما إذا كانت المشكلة من جانب العميل أم الخادم؟
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
تغيير المصدر يغير قيم الرمز، لكن الآن كان معطّلًا تمامًا بالنسبة للنقطتين، لذا لا ينبغي أن يؤثر ذلك على أي مستخدم جديد.
لاحظ أنه كان يعمل سابقًا للعناوين التي تحتوي على نقطتين مثل Spaceballs: The Discourse (كان يعمل بشكل صحيح بالنسبة لي وتمكنت من إضافته إلى هاتفي)، لكنه كان يفشل عندما كانت هناك كلمتان قبل النقطتين.
لم أحصل على تأكيد بأن الأمر نجح مع المستخدم الذي اشتكى، لكنه نجح معي.
لكن ما لا أفهمه هو أنني أدرك أن:
هذا كان معطلاً دائمًا للعناوين التي تحتوي على :
إذا تغير عنوان الموقع، فإن المصادق يتعطل لأنه مرتبط بعنوان الموقع
لم يتغير SiteSettings.title منذ فترة طويلة
UserSecondFactor.where(method: 1) يعيد عددًا من الإدخالات من أغسطس الماضي
لا أفهم كيف يمكن أن تكون كل هذه الأمور صحيحة. هل صحيح أن تغيير عنوان الموقع كسر جميع عناصر UserSecondFactor للمصادق الموجودة مسبقًا؟ تعديل: لا، ليس كذلك. لقد غيرت العنوان للتو ولا يزال المصادق ثنائي العامل (2FA) الذي أنشأته بالأمس يعمل.
حسنًا، أنا متأكد جدًا من أن العنوان كان يحتوي على كلمات متعددة وعلامة نقطية منذ فترة طويلة (بدون تغييرات في السجلات منذ مايو 2019 على الأقل) وأنه كان يعمل في أغسطس الماضي (لأن هناك رموز مصادقة تم إنشاؤها آنذاك)، ولكن على أي حال. يبدو أنه يعمل الآن وأن تغيير العنوان لا يكسر الرموز الحالية، لذا يبدو هذا انتصارًا.