diff --git a/.github/workflows/plugin-linting.yml b/.github/workflows/plugin-linting.yml index c807794..6d2bb97 100644 --- a/.github/workflows/plugin-linting.yml +++ b/.github/workflows/plugin-linting.yml @@ -55,3 +55,12 @@ jobs: - name: Rubocop if: ${{ !cancelled() }} run: bundle exec rubocop . + + - name: Syntax Tree + if: ${{ !cancelled() }} + run: | + if test -f .streerc; then + bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') + else + echo "Stree config not detected for this repository. Skipping." + fi diff --git a/.github/workflows/plugin-tests.yml b/.github/workflows/plugin-tests.yml index 9d390bc..f30a5be 100644 --- a/.github/workflows/plugin-tests.yml +++ b/.github/workflows/plugin-tests.yml @@ -80,7 +80,7 @@ jobs: - name: Get yarn cache directory id: yarn-cache-dir - run: echo "::set-output name=dir::$(yarn cache dir)" + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Yarn cache uses: actions/cache@v3 @@ -130,7 +130,7 @@ jobs: shell: bash run: | if [ 0 -lt $(find plugins/${{ github.event.repository.name }}/spec -type f -name "*.rb" 2> /dev/null | wc -l) ]; then - echo "::set-output name=files_exist::true" + echo "files_exist=true" >> $GITHUB_OUTPUT fi - name: Plugin RSpec @@ -142,7 +142,7 @@ jobs: shell: bash run: | if [ 0 -lt $(find plugins/${{ github.event.repository.name }}/test/javascripts -type f \( -name "*.js" -or -name "*.es6" \) 2> /dev/null | wc -l) ]; then - echo "::set-output name=files_exist::true" + echo "files_exist=true" >> $GITHUB_OUTPUT fi - name: Plugin QUnit diff --git a/.rubocop.yml b/.rubocop.yml index d46296c..fb14dfa 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1,2 @@ inherit_gem: - rubocop-discourse: default.yml + rubocop-discourse: stree-compat.yml diff --git a/.streerc b/.streerc new file mode 100644 index 0000000..0bc4379 --- /dev/null +++ b/.streerc @@ -0,0 +1,2 @@ +--print-width=100 +--plugins=plugin/trailing_comma diff --git a/Gemfile b/Gemfile index a5648b4..31d8bf7 100644 --- a/Gemfile +++ b/Gemfile @@ -4,4 +4,5 @@ source "https://rubygems.org" group :development do gem "rubocop-discourse" + gem "syntax_tree" end diff --git a/Gemfile.lock b/Gemfile.lock index 87ff84d..348ff70 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,6 +6,7 @@ GEM parallel (1.22.1) parser (3.1.2.1) ast (~> 2.4.1) + prettier_print (1.2.0) rainbow (3.1.1) regexp_parser (2.6.0) rexml (3.2.5) @@ -27,6 +28,8 @@ GEM rubocop-rspec (2.13.2) rubocop (~> 1.33) ruby-progressbar (1.11.0) + syntax_tree (5.1.0) + prettier_print (>= 1.2.0) unicode-display_width (2.3.0) PLATFORMS @@ -34,6 +37,7 @@ PLATFORMS DEPENDENCIES rubocop-discourse + syntax_tree BUNDLED WITH 2.1.4 diff --git a/lib/auth/steam_authenticator.rb b/lib/auth/steam_authenticator.rb index 3711209..f05a0d6 100644 --- a/lib/auth/steam_authenticator.rb +++ b/lib/auth/steam_authenticator.rb @@ -2,7 +2,7 @@ class Auth::SteamAuthenticator < ::Auth::ManagedAuthenticator def name - 'steam' + "steam" end def enabled? @@ -14,9 +14,11 @@ class Auth::SteamAuthenticator < ::Auth::ManagedAuthenticator end def register_middleware(omniauth) - omniauth.provider :steam, setup: lambda { |env| - strategy = env["omniauth.strategy"] - strategy.options[:api_key] = SiteSetting.steam_web_api_key - } + omniauth.provider :steam, + setup: + lambda { |env| + strategy = env["omniauth.strategy"] + strategy.options[:api_key] = SiteSetting.steam_web_api_key + } end end diff --git a/lib/validators/enable_steam_logins_validator.rb b/lib/validators/enable_steam_logins_validator.rb index 771a4bc..55f857d 100644 --- a/lib/validators/enable_steam_logins_validator.rb +++ b/lib/validators/enable_steam_logins_validator.rb @@ -6,14 +6,14 @@ class EnableSteamLoginsValidator end def valid_value?(val) - return true if val == 'f' + return true if val == "f" return false if SiteSetting.steam_web_api_key.blank? true end def error_message if SiteSetting.steam_web_api_key.blank? - I18n.t('site_settings.errors.steam_web_api_key_is_empty') + I18n.t("site_settings.errors.steam_web_api_key_is_empty") end end end diff --git a/plugin.rb b/plugin.rb index 9933c58..765c012 100644 --- a/plugin.rb +++ b/plugin.rb @@ -6,21 +6,21 @@ # author: J. de Faye, tgxworld # omniauth-openid is not included in core since v2.4.0.beta10 -unless defined? OmniAuth::Strategies::OpenID - gem 'ruby-openid', '2.9.2', require: false - gem 'rack-openid', '1.3.1', require: false - gem 'omniauth-openid', '1.0.1' +unless defined?(OmniAuth::Strategies::OpenID) + gem "ruby-openid", "2.9.2", require: false + gem "rack-openid", "1.3.1", require: false + gem "omniauth-openid", "1.0.1" end -gem 'omniauth-steam', '1.0.6' +gem "omniauth-steam", "1.0.6" register_svg_icon "fab-steam" if respond_to?(:register_svg_icon) -register_asset 'stylesheets/steam-login.scss' +register_asset "stylesheets/steam-login.scss" -[ - "../lib/auth/steam_authenticator.rb", - "../lib/validators/enable_steam_logins_validator.rb" +%w[ + ../lib/auth/steam_authenticator.rb + ../lib/validators/enable_steam_logins_validator.rb ].each { |path| load File.expand_path(path, __FILE__) } -auth_provider authenticator: Auth::SteamAuthenticator.new, icon: 'fab-steam' +auth_provider authenticator: Auth::SteamAuthenticator.new, icon: "fab-steam" diff --git a/spec/components/validators/enable_steam_logins_validator_spec.rb b/spec/components/validators/enable_steam_logins_validator_spec.rb index 8a2a192..bcc5f12 100644 --- a/spec/components/validators/enable_steam_logins_validator_spec.rb +++ b/spec/components/validators/enable_steam_logins_validator_spec.rb @@ -1,36 +1,34 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" RSpec.describe EnableSteamLoginsValidator do subject { described_class.new } - describe '#valid_value?' do - describe 'when steam_web_api_key has not been set' do + describe "#valid_value?" do + describe "when steam_web_api_key has not been set" do it "should return true when value is false" do - expect(subject.valid_value?('f')).to eq(true) + expect(subject.valid_value?("f")).to eq(true) end it "should return false when value is true" do - expect(subject.valid_value?('t')).to eq(false) + expect(subject.valid_value?("t")).to eq(false) - expect(subject.error_message).to eq(I18n.t( - 'site_settings.errors.steam_web_api_key_is_empty' - )) + expect(subject.error_message).to eq( + I18n.t("site_settings.errors.steam_web_api_key_is_empty"), + ) end end - describe 'when steam_web_api_key has been set' do - before do - SiteSetting.steam_web_api_key = "somekey" - end + describe "when steam_web_api_key has been set" do + before { SiteSetting.steam_web_api_key = "somekey" } it "should return true when value is false" do - expect(subject.valid_value?('f')).to eq(true) + expect(subject.valid_value?("f")).to eq(true) end - it 'should return true when value is true' do - expect(subject.valid_value?('t')).to eq(true) + it "should return true when value is true" do + expect(subject.valid_value?("t")).to eq(true) end end end diff --git a/spec/integration/steam_auth_spec.rb b/spec/integration/steam_auth_spec.rb index 2ca385f..97140f8 100644 --- a/spec/integration/steam_auth_spec.rb +++ b/spec/integration/steam_auth_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -describe 'Steam OpenID 2.0' do +describe "Steam OpenID 2.0" do let(:web_api_key) { "abcdef11223344" } let(:steam_user_id) { "894923402340234" } @@ -11,16 +11,12 @@ describe 'Steam OpenID 2.0' do SiteSetting.enable_steam_logins = true cert = OpenSSL::X509::Certificate.new - cert.add_extension(OpenSSL::X509::Extension.new( - "subjectAltName", - "DNS:steamcommunity.com" - )) + cert.add_extension(OpenSSL::X509::Extension.new("subjectAltName", "DNS:steamcommunity.com")) StubSocket::StubIO.any_instance.stubs(:peer_cert).returns(cert) - stub_request(:get, "http://steamcommunity.com/openid") - .to_return( - status: 200, - body: <<~XML, + stub_request(:get, "http://steamcommunity.com/openid").to_return( + status: 200, + body: <<~XML, @@ -31,25 +27,23 @@ describe 'Steam OpenID 2.0' do XML - headers: { - "Content-Type" => "text/xml" - } - ) - stub_request(:post, "https://steamcommunity.com/openid/login") - .to_return( - status: 200, - body: <<~BODY, + headers: { + "Content-Type" => "text/xml", + }, + ) + stub_request(:post, "https://steamcommunity.com/openid/login").to_return( + status: 200, + body: <<~BODY, ns:http://specs.openid.net/auth/2.0 is_valid:true BODY - headers: { - "Content-Type" => "text/plain" - } - ) - stub_request(:get, "https://steamcommunity.com/openid/id/#{steam_user_id}") - .to_return( - status: 200, - body: <<~BODY + headers: { + "Content-Type" => "text/plain", + }, + ) + stub_request(:get, "https://steamcommunity.com/openid/id/#{steam_user_id}").to_return( + status: 200, + body: <<~BODY, @@ -60,16 +54,14 @@ describe 'Steam OpenID 2.0' do BODY - ) - stub_request(:get, "https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=#{web_api_key}&steamids=#{steam_user_id}") - .with( - headers: { - "Host" => "api.steampowered.com" - } - ) - .to_return( - status: 200, - body: JSON.dump( + ) + stub_request( + :get, + "https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=#{web_api_key}&steamids=#{steam_user_id}", + ).with(headers: { "Host" => "api.steampowered.com" }).to_return( + status: 200, + body: + JSON.dump( response: { players: [ { @@ -78,20 +70,23 @@ describe 'Steam OpenID 2.0' do profilestate: 1, personaname: "SteamyPlayer", profileurl: "https://steamcommunity.com/id/SteamyPlayer/", - avatar: "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d.jpg", - avatarmedium: "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d_medium.jpg", - avatarfull: "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d_full.jpg", + avatar: + "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d.jpg", + avatarmedium: + "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d_medium.jpg", + avatarfull: + "https://avatars.akamai.steamstatic.com/734096e84a118c839422fa213faa6885c093374d_full.jpg", avatarhash: "734096e84a118c839422fa213faa6885c093374d", - lastlogoff: 1659365725, + lastlogoff: 1_659_365_725, personastate: 0, primaryclanid: "103588791859221341", - timecreated: 1524883291, - personastateflags: 0 - } - ] - } - ) - ) + timecreated: 1_524_883_291, + personastateflags: 0, + }, + ], + }, + ), + ) end it "retrieves user details from the Steam API after the authentication flow is complete" do @@ -99,19 +94,21 @@ describe 'Steam OpenID 2.0' do expect(response.status).to eq(303) expect(response.location).to start_with("https://steamcommunity.com/openid/login") - post "/auth/steam/callback", params: { - _method: "post", - "openid.ns": "http://specs.openid.net/auth/2.0", - "openid.mode": "id_res", - "openid.op_endpoint": "https://steamcommunity.com/openid/login", - "openid.claimed_id": "https://steamcommunity.com/openid/id/#{steam_user_id}", - "openid.identity": "https://steamcommunity.com/openid/id/#{steam_user_id}", - "openid.return_to": "http://test.localhost/auth/steam/callback?_method=post", - "openid.response_nonce": "#{1.minute.ago.iso8601}aZq7eHv92/2Mg4OsPKiKcTgI0j4=", - "openid.assoc_handle": "1234567890", - "openid.signed": "signed,op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle", - "openid.sig": "ZseI1sqVHGU/f5Ye7Tcn7T3QMIg=", - } + post "/auth/steam/callback", + params: { + _method: "post", + "openid.ns": "http://specs.openid.net/auth/2.0", + "openid.mode": "id_res", + "openid.op_endpoint": "https://steamcommunity.com/openid/login", + "openid.claimed_id": "https://steamcommunity.com/openid/id/#{steam_user_id}", + "openid.identity": "https://steamcommunity.com/openid/id/#{steam_user_id}", + "openid.return_to": "http://test.localhost/auth/steam/callback?_method=post", + "openid.response_nonce": "#{1.minute.ago.iso8601}aZq7eHv92/2Mg4OsPKiKcTgI0j4=", + "openid.assoc_handle": "1234567890", + "openid.signed": + "signed,op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle", + "openid.sig": "ZseI1sqVHGU/f5Ye7Tcn7T3QMIg=", + } expect(response.status).to eq(302) expect(response.location).to eq("http://test.localhost/") expect(session[:current_user_id]).to be_blank diff --git a/spec/lib/auth/steam_authenticator_spec.rb b/spec/lib/auth/steam_authenticator_spec.rb index 8350637..897f62c 100644 --- a/spec/lib/auth/steam_authenticator_spec.rb +++ b/spec/lib/auth/steam_authenticator_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true describe Auth::SteamAuthenticator do - describe '#can_revoke?' do - it 'should be false be default' do + describe "#can_revoke?" do + it "should be false be default" do authenticator = Auth::SteamAuthenticator.new expect(authenticator.can_revoke?).to eq(false) end - it 'should be true when steam_logins_allow_revoke site settings is enabled' do + it "should be true when steam_logins_allow_revoke site settings is enabled" do SiteSetting.steam_logins_allow_revoke = true authenticator = Auth::SteamAuthenticator.new