├── docs ├── .nojekyll ├── CNAME ├── css │ ├── common.css │ └── full_list.css ├── images │ └── logo │ │ ├── openid_rgb-300dpi.png │ │ ├── ruby-logo-124px.jpeg │ │ ├── omniauth-logo-182px.png │ │ ├── README.txt │ │ └── galtzo-floss-logos-wordless.svg ├── frames.html ├── top-level-namespace.html ├── file.CITATION.html ├── OmniAuth.html ├── OmniAuth │ ├── Strategies.html │ ├── OpenID │ │ └── Version.html │ └── OpenID.html ├── file_list.html ├── file.LICENSE.html ├── class_list.html ├── file.SECURITY.html ├── method_list.html ├── _index.html └── file.CHANGELOG.html ├── .tool-versions ├── spec ├── config │ ├── rspec │ │ ├── version_gem.rb │ │ ├── rspec_block_is_expected.rb │ │ ├── rack_test.rb │ │ └── rspec_core.rb │ └── omniauth.rb ├── omniauth │ ├── openid │ │ └── version_spec.rb │ └── strategies │ │ └── open_id_spec.rb └── spec_helper.rb ├── .rspec ├── .rubocop.yml ├── gemfiles ├── modular │ ├── logger │ │ ├── r3 │ │ │ └── v1.7.gemfile │ │ ├── r2.4 │ │ │ └── v1.5.3.gemfile │ │ ├── vHEAD.gemfile │ │ └── r2 │ │ │ └── v1.5.gemfile │ ├── mutex_m │ │ ├── r2 │ │ │ └── v0.3.gemfile │ │ ├── r3 │ │ │ └── v0.3.gemfile │ │ ├── r2.4 │ │ │ └── v0.1.gemfile │ │ └── vHEAD.gemfile │ ├── stringio │ │ ├── vHEAD.gemfile │ │ ├── r2.4 │ │ │ └── v0.0.2.gemfile │ │ ├── r2 │ │ │ └── v3.0.gemfile │ │ └── r3 │ │ │ └── v3.0.gemfile │ ├── omniauth │ │ ├── r2 │ │ │ ├── v1.0.gemfile │ │ │ ├── v1.1.gemfile │ │ │ ├── v1.2.gemfile │ │ │ ├── v2.0.gemfile │ │ │ ├── v1.3.gemfile │ │ │ ├── v1.4.gemfile │ │ │ ├── v1.7.gemfile │ │ │ ├── v1.9.gemfile │ │ │ ├── v1.5.gemfile │ │ │ ├── v1.6.gemfile │ │ │ ├── v1.8.gemfile │ │ │ └── v2.1.gemfile │ │ ├── vHEAD.gemfile │ │ └── r3 │ │ │ └── v2.1.gemfile │ ├── rack-openid │ │ └── vHEAD.gemfile │ ├── x_std_libs │ │ ├── vHEAD.gemfile │ │ ├── r2 │ │ │ └── libs.gemfile │ │ ├── r3 │ │ │ └── libs.gemfile │ │ └── r2.4 │ │ │ └── libs.gemfile │ ├── audit.gemfile │ ├── coverage.gemfile │ ├── runtime_heads.gemfile │ ├── documentation.gemfile │ └── style.gemfile ├── dep_heads.gemfile ├── omniauth_v1.2_r2.gemfile ├── omniauth_v1.3_r2.gemfile ├── omniauth_v1.4_r2.gemfile ├── omniauth_v1.5_r2.gemfile ├── omniauth_v1.6_r2.gemfile ├── omniauth_v1.7_r2.gemfile ├── omniauth_v1.8_r2.gemfile ├── omniauth_v1.9_r2.gemfile ├── omniauth_v2.0_r2.gemfile ├── omniauth_v2.1_r3.gemfile ├── omniauth_v1.1_r2.4.gemfile ├── omniauth_v2.1_r3.0.gemfile ├── audit.gemfile ├── style.gemfile └── coverage.gemfile ├── checksums ├── omniauth-openid-2.0.2.gem.sha256 └── omniauth-openid-2.0.2.gem.sha512 ├── .simplecov ├── bin ├── setup ├── erb ├── ri ├── yri ├── racc ├── rake ├── rdoc ├── reek ├── thor ├── yard ├── ldiff ├── rackup ├── yardoc ├── rspec ├── rubocop ├── htmldiff ├── kramdown ├── nokogiri ├── appraisal ├── ruby-parse ├── standardrb ├── yard-junk ├── ruby-rewrite ├── bundle-audit ├── bundler-audit ├── code_climate_reek ├── gem_checksums ├── rubocop-gradual └── bundle ├── .idea ├── misc.xml ├── dictionaries │ └── project.xml ├── GitLink.xml ├── .gitignore ├── vcs.xml ├── modules.xml └── git_toolbox_prj.xml ├── lib ├── omniauth │ ├── openid │ │ └── version.rb │ └── strategies │ │ └── open_id.rb ├── omniauth-openid.rb └── omniauth-openid │ └── version.rb ├── .yardopts ├── .devcontainer ├── apt-install │ ├── devcontainer-feature.json │ └── install.sh └── devcontainer.json ├── Guardfile ├── .github ├── dependabot.yml ├── FUNDING.yml └── workflows │ ├── dependency-review.yml │ ├── style.yml │ ├── legacy.yml │ ├── codeql-analysis.yml │ ├── supported.yml │ ├── jruby.yml │ ├── current.yml │ ├── current-runtime-heads.yml │ ├── heads.yml │ ├── jruby-ancient.yml │ ├── coverage.yml │ └── ancient.yml ├── Appraisal.root.gemfile ├── examples ├── client.rb └── server.rb ├── .gitignore ├── CITATION.cff ├── Gemfile ├── .yard_gfm_support.rb ├── LICENSE.txt ├── .rubocop_gradual.lock ├── .qlty └── qlty.toml ├── certs └── pboling.pem ├── .envrc ├── SECURITY.md ├── CHANGELOG.md ├── Rakefile ├── omniauth-openid.gemspec ├── CONTRIBUTING.md ├── CODE_OF_CONDUCT.md ├── REEK └── Appraisals /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | ruby 3.4.4 2 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | omniauth-openid.galtzo.com -------------------------------------------------------------------------------- /docs/css/common.css: -------------------------------------------------------------------------------- 1 | /* Override this file with custom rules */ -------------------------------------------------------------------------------- /spec/config/rspec/version_gem.rb: -------------------------------------------------------------------------------- 1 | require "version_gem/rspec" 2 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --require spec_helper 2 | --format=documentation 3 | --colour 4 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | inherit_gem: 2 | rubocop-lts: config/rubygem_rspec.yml 3 | -------------------------------------------------------------------------------- /gemfiles/modular/logger/r3/v1.7.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5.0 2 | gem "logger", "~> 1.7" 3 | -------------------------------------------------------------------------------- /gemfiles/modular/mutex_m/r2/v0.3.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5 2 | gem "mutex_m", "~> 0.2" 3 | -------------------------------------------------------------------------------- /gemfiles/modular/mutex_m/r3/v0.3.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5 2 | gem "mutex_m", "~> 0.2" 3 | -------------------------------------------------------------------------------- /checksums/omniauth-openid-2.0.2.gem.sha256: -------------------------------------------------------------------------------- 1 | dabfe9f319ec2b23044d7aac4a7d9e55b6b82201dbd015a8bc83657db316dec1 -------------------------------------------------------------------------------- /.simplecov: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "kettle/soup/cover/config" 4 | 5 | SimpleCov.start 6 | -------------------------------------------------------------------------------- /gemfiles/modular/mutex_m/r2.4/v0.1.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 0 2 | # Last version supporting Ruby <= 2.4 3 | gem "mutex_m", "~> 0.1" 4 | -------------------------------------------------------------------------------- /spec/config/rspec/rspec_block_is_expected.rb: -------------------------------------------------------------------------------- 1 | require "rspec/block_is_expected" 2 | require "rspec/block_is_expected/matchers/not" 3 | -------------------------------------------------------------------------------- /docs/images/logo/openid_rgb-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omniauth/omniauth-openid/HEAD/docs/images/logo/openid_rgb-300dpi.png -------------------------------------------------------------------------------- /docs/images/logo/ruby-logo-124px.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omniauth/omniauth-openid/HEAD/docs/images/logo/ruby-logo-124px.jpeg -------------------------------------------------------------------------------- /gemfiles/modular/logger/r2.4/v1.5.3.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.3.0 2 | # Last version compatible with Ruby 2.4 3 | gem "logger", "~> 1.5.3" 4 | -------------------------------------------------------------------------------- /gemfiles/modular/logger/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5 (dependency of omniauth) 2 | gem "logger", github: "ruby/logger", branch: "master" 3 | -------------------------------------------------------------------------------- /docs/images/logo/omniauth-logo-182px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omniauth/omniauth-openid/HEAD/docs/images/logo/omniauth-logo-182px.png -------------------------------------------------------------------------------- /gemfiles/modular/logger/r2/v1.5.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.3.0 2 | # Last version compatible with Ruby 2.4 3 | gem "logger", ">= 1.5.3", "< 2" 4 | -------------------------------------------------------------------------------- /gemfiles/modular/mutex_m/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5 (dependency of omniauth) 2 | gem "mutex_m", github: "ruby/mutex_m", branch: "master" 3 | -------------------------------------------------------------------------------- /spec/config/rspec/rack_test.rb: -------------------------------------------------------------------------------- 1 | require "rack/test" 2 | 3 | RSpec.configure do |config| 4 | config.include Rack::Test::Methods 5 | end 6 | -------------------------------------------------------------------------------- /gemfiles/modular/stringio/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | # Ruby >= 2.5 (dependency of omniauth) 2 | gem "stringio", github: "ruby/stringio", branch: "master" 3 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.0.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released March 6, 2012 5 | gem "omniauth", "~> 1.0.3" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.1.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released April 8, 2013 5 | gem "omniauth", "~> 1.1.4" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.2.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released July 9, 2014 5 | gem "omniauth", "~> 1.2.2" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v2.0.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released April 7, 2021 5 | gem "omniauth", "~> 2.0.4" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/stringio/r2.4/v0.0.2.gemfile: -------------------------------------------------------------------------------- 1 | # !!WARNING!! 2 | # NOT SEMVER 3 | # Last version to support Ruby <= 2.5 4 | gem "stringio", ">= 0.0.2" 5 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.3.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released January 17, 2017 5 | gem "omniauth", "~> 1.3.2" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.4.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released December 18, 2017 5 | gem "omniauth", "~> 1.4.3" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.7.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.1.9 4 | # Released October 2, 2017 5 | gem "omniauth", "~> 1.7.1" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.9.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | # Released August 18, 2022 5 | gem "omniauth", "~> 1.9.2" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | gem "omniauth", github: "omniauth/omniauth", branch: "master" 5 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.5.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.1.9 4 | # Released February 11, 2017 5 | gem "omniauth", "~> 1.5.0" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.6.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.1.9 4 | # Released February 18, 2017 5 | gem "omniauth", "~> 1.6.1" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v1.8.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.1.9 4 | # Released December 28, 2017 5 | gem "omniauth", "~> 1.8.1" 6 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | set -vx 5 | 6 | bundle install 7 | 8 | # Do any other automated setup that you need to do here 9 | -------------------------------------------------------------------------------- /checksums/omniauth-openid-2.0.2.gem.sha512: -------------------------------------------------------------------------------- 1 | 156e2edfadc75b195c878096c6cff602d371b12aafdcd9147bdaa360839d30d0d099d1d992d04445b6d4ef8a6e5597475f828636fb9e6659b5712cf8f34a7f7c -------------------------------------------------------------------------------- /gemfiles/modular/rack-openid/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2 4 | gem "rack-openid", github: "grosser/rack-openid", branch: "master" 5 | -------------------------------------------------------------------------------- /gemfiles/modular/x_std_libs/vHEAD.gemfile: -------------------------------------------------------------------------------- 1 | eval_gemfile "../mutex_m/vHEAD.gemfile" 2 | eval_gemfile "../stringio/vHEAD.gemfile" 3 | eval_gemfile "../logger/vHEAD.gemfile" 4 | -------------------------------------------------------------------------------- /gemfiles/dep_heads.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/runtime_heads.gemfile") 8 | -------------------------------------------------------------------------------- /gemfiles/modular/x_std_libs/r2/libs.gemfile: -------------------------------------------------------------------------------- 1 | eval_gemfile "../../mutex_m/r2/v0.3.gemfile" 2 | eval_gemfile "../../stringio/r2/v3.0.gemfile" 3 | eval_gemfile "../../logger/r2/v1.5.gemfile" 4 | -------------------------------------------------------------------------------- /gemfiles/modular/x_std_libs/r3/libs.gemfile: -------------------------------------------------------------------------------- 1 | eval_gemfile "../../mutex_m/r3/v0.3.gemfile" 2 | eval_gemfile "../../stringio/r3/v3.0.gemfile" 3 | eval_gemfile "../../logger/r3/v1.7.gemfile" 4 | -------------------------------------------------------------------------------- /spec/config/omniauth.rb: -------------------------------------------------------------------------------- 1 | require "logger" 2 | require "omniauth" 3 | 4 | if OmniAuth.config.respond_to?(:logger=) 5 | logger = Logger.new($stdout) 6 | OmniAuth.config.logger = logger 7 | end 8 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r2/v2.1.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2; first version compatible with Ruby >= 3 4 | # Released February 27, 2025 5 | gem "omniauth", "~> 2.1.3" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/omniauth/r3/v2.1.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Ruby >= 2.2; first version compatible with Ruby >= 3 4 | # Released February 27, 2025 5 | gem "omniauth", "~> 2.1.3" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/x_std_libs/r2.4/libs.gemfile: -------------------------------------------------------------------------------- 1 | eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile" 2 | eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile" 3 | eval_gemfile "../../logger/r2.4/v1.5.3.gemfile" 4 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /gemfiles/modular/stringio/r2/v3.0.gemfile: -------------------------------------------------------------------------------- 1 | # !!WARNING!! 2 | # NOT SEMVER 3 | # Version 3.0.7 dropped support for Ruby <= 2.7 4 | # Version 3.0.0 dropped support for Ruby <= 2.4 5 | gem "stringio", ">= 3.0" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/stringio/r3/v3.0.gemfile: -------------------------------------------------------------------------------- 1 | # !!WARNING!! 2 | # NOT SEMVER 3 | # Version 3.0.7 dropped support for Ruby <= 2.7 4 | # Version 3.0.0 dropped support for Ruby <= 2.4 5 | gem "stringio", ">= 3.0" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/audit.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Many gems are dropping support for Ruby < 3, 4 | # so we only want to run our security audit in CI on Ruby 3+ 5 | gem "bundler-audit", "~> 0.9.2" 6 | -------------------------------------------------------------------------------- /gemfiles/modular/coverage.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # We run code coverage on the latest version of Ruby only. 4 | 5 | # Coverage 6 | gem "kettle-soup-cover", "~> 1.0", ">= 1.0.6", require: false 7 | -------------------------------------------------------------------------------- /lib/omniauth/openid/version.rb: -------------------------------------------------------------------------------- 1 | module OmniAuth 2 | module OpenID 3 | module Version 4 | VERSION = "2.0.2" 5 | end 6 | include Version # => Makes VERSION available at the usual spot 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /.idea/dictionaries/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | securerandom 5 | webmock 6 | 7 | 8 | -------------------------------------------------------------------------------- /.yardopts: -------------------------------------------------------------------------------- 1 | --plugin junk 2 | --plugin relative_markdown_links 3 | --readme README.md 4 | --charset utf-8 5 | --markup markdown 6 | --output docs 7 | --load .yard_gfm_support.rb 8 | 'lib/**/*.rb' 9 | - 10 | '*.md' 11 | '*.txt' -------------------------------------------------------------------------------- /.devcontainer/apt-install/devcontainer-feature.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Apt Install Packages", 3 | "id": "apt-install", 4 | "version": "1.0.0", 5 | "description": "More packages are needed", 6 | "install": { 7 | "script": "install.sh" 8 | } 9 | } -------------------------------------------------------------------------------- /.idea/GitLink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.2_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.2.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.3_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.3.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.4_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.4.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.5_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.5.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.6_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.6.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.7_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.7.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.8_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.8.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.9_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.9.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v2.0_r2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v2.0.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v2.1_r3.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r3/v2.1.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r3/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v1.1_r2.4.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r2/v1.1.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r2.4/libs.gemfile") 10 | -------------------------------------------------------------------------------- /gemfiles/omniauth_v2.1_r3.0.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r3/v2.1.gemfile") 8 | 9 | eval_gemfile("modular/x_std_libs/r3/libs.gemfile") 10 | -------------------------------------------------------------------------------- /Guardfile: -------------------------------------------------------------------------------- 1 | # A sample Guardfile 2 | # More info at https://github.com/guard/guard#readme 3 | 4 | guard "rspec", version: 2 do 5 | watch(%r{^spec/.+_spec\.rb$}) 6 | watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } 7 | watch("spec/spec_helper.rb") { "spec" } 8 | end 9 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | # CodeStream ignored files 10 | /codestream.xml 11 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /gemfiles/audit.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/omniauth/r3/v2.1.gemfile") 8 | 9 | eval_gemfile("modular/audit.gemfile") 10 | 11 | eval_gemfile("modular/x_std_libs/r3/libs.gemfile") 12 | -------------------------------------------------------------------------------- /gemfiles/style.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gemspec path: "../" 6 | 7 | eval_gemfile("modular/style.gemfile") 8 | 9 | eval_gemfile("modular/omniauth/r3/v2.1.gemfile") 10 | 11 | eval_gemfile("modular/x_std_libs/r3/libs.gemfile") 12 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /gemfiles/coverage.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "ostruct", "~> 0.6", ">= 0.6.1" 6 | 7 | gemspec path: "../" 8 | 9 | eval_gemfile("modular/omniauth/r3/v2.1.gemfile") 10 | 11 | eval_gemfile("modular/coverage.gemfile") 12 | 13 | eval_gemfile("modular/x_std_libs/r3/libs.gemfile") 14 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: bundler 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | open-pull-requests-limit: 10 8 | ignore: 9 | - dependency-name: "rubocop-lts" 10 | - package-ecosystem: "github-actions" 11 | directory: "/" 12 | schedule: 13 | interval: "daily" 14 | -------------------------------------------------------------------------------- /lib/omniauth-openid.rb: -------------------------------------------------------------------------------- 1 | # external gems 2 | require "version_gem" 3 | require "rexml" 4 | 5 | # this library's version 6 | require "omniauth/openid/version" 7 | 8 | # Configure version before loading the rest of the library 9 | OmniAuth::OpenID::Version.class_eval do 10 | extend VersionGem::Basic 11 | end 12 | 13 | # This library 14 | require "omniauth/strategies/open_id" 15 | -------------------------------------------------------------------------------- /spec/config/rspec/rspec_core.rb: -------------------------------------------------------------------------------- 1 | RSpec.configure do |config| 2 | # Enable flags like --only-failures and --next-failure 3 | config.example_status_persistence_file_path = ".rspec_status" 4 | 5 | # Disable RSpec exposing methods globally on `Module` and `main` 6 | config.disable_monkey_patching! 7 | 8 | config.expect_with :rspec do |c| 9 | c.syntax = :expect 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /gemfiles/modular/runtime_heads.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Test against HEAD of runtime dependencies so we can proactively file bugs 4 | 5 | eval_gemfile("omniauth/vHEAD.gemfile") 6 | 7 | eval_gemfile("rack-openid/vHEAD.gemfile") 8 | 9 | # Ruby >= 2.2 10 | gem "version_gem", github: "oauth-xx/version_gem", branch: "main" 11 | 12 | eval_gemfile("x_std_libs/vHEAD.gemfile") 13 | -------------------------------------------------------------------------------- /.devcontainer/apt-install/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | apt-get update -y 3 | apt-get install -y direnv default-jdk postgresql libpq-dev git zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev 4 | # Adds the direnv setup script to ~/.bashrc file (at the end) 5 | echo 'eval "$(direnv hook bash)"' >> ~/.bashrc -------------------------------------------------------------------------------- /gemfiles/modular/documentation.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Documentation 4 | gem "kramdown", "~> 2.5", ">= 2.5.1" # Ruby >= 2.5 5 | gem "kramdown-parser-gfm", "~> 1.1" # Ruby >= 2.3 6 | gem "yard", "~> 0.9", ">= 0.9.37", require: false 7 | gem "yard-junk", "~> 0.0", ">= 0.0.10", github: "pboling/yard-junk", branch: "next", require: false 8 | gem "yard-relative_markdown_links", "~> 0.5.0" 9 | 10 | # Std Lib extractions 11 | gem "rdoc", "~> 6.11" 12 | -------------------------------------------------------------------------------- /Appraisal.root.gemfile: -------------------------------------------------------------------------------- 1 | git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } 2 | 3 | source "https://rubygems.org" 4 | 5 | # Appraisal Root Gemfile is for running appraisal to generate the Appraisal Gemfiles 6 | # in gemfiles/*gemfile. 7 | # On CI, we use it for the Appraisal-based builds. 8 | # We do not load the standard Gemfile, as it is tailored for local development. 9 | 10 | gemspec 11 | 12 | gem "appraisal", github: "pboling/appraisal", branch: "galtzo" 13 | -------------------------------------------------------------------------------- /gemfiles/modular/style.gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # Use rubocop-lts to run rubocop on the latest version of Ruby 4 | # with syntax support for the oldest allowed version of Ruby 5 | 6 | gem "reek", "~> 6.5" 7 | gem "rubocop-lts", "~> 12.1", ">= 12.1.1" 8 | gem "rubocop-packaging", "~> 0.6", ">= 0.6.0" 9 | gem "rubocop-rspec", "~> 3.6" 10 | gem "standard", ">= 1.50" 11 | 12 | # Std Lib extractions 13 | gem "benchmark", "~> 0.4", ">= 0.4.1" # Removed from Std Lib in Ruby 3.5 14 | -------------------------------------------------------------------------------- /.idea/git_toolbox_prj.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /docs/frames.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Documentation by YARD 0.9.37 6 | 7 | 18 | 22 | 23 | -------------------------------------------------------------------------------- /lib/omniauth-openid/version.rb: -------------------------------------------------------------------------------- 1 | # DEPRECATED 2 | # TODO[v3]: Remove this file entirely with v3 release. 3 | # :nocov: 4 | unless defined?(OmniAuth::Identity::Version::VERSION) 5 | # external gems 6 | require "version_gem" 7 | 8 | # this library's version 9 | require "omniauth/openid/version" 10 | 11 | # Configure version before loading the rest of the library 12 | OmniAuth::OpenID::Version.class_eval do 13 | extend VersionGem::Basic 14 | end 15 | 16 | warn "[DEPRECATION][omniauth-openid v2] Change `require 'omniauth-openid/version'` to `require 'omniauth/openid/version'`. Support for `require 'omniauth-openid/version'` will be removed in v3." 17 | end 18 | # :nocov: 19 | -------------------------------------------------------------------------------- /spec/omniauth/openid/version_spec.rb: -------------------------------------------------------------------------------- 1 | # rubocop:disable RSpec/SpecFilePathFormat 2 | 3 | RSpec.describe OmniAuth::OpenID::Version do 4 | it_behaves_like "a Version module", described_class 5 | 6 | it "is greater than 1.0.0" do 7 | expect(Gem::Version.new(described_class) >= Gem::Version.new("1.0.0")).to be(true) 8 | end 9 | 10 | it "includes into parent namespace" do 11 | expect(OmniAuth::OpenID.included_modules).to include(OmniAuth::OpenID::Version) 12 | end 13 | 14 | it "has VERSION in parent namespace" do 15 | expect(OmniAuth::OpenID.const_get("VERSION")).to eq(OmniAuth::OpenID::Version::VERSION) 16 | end 17 | end 18 | 19 | # rubocop:enable RSpec/SpecFilePathFormat 20 | -------------------------------------------------------------------------------- /examples/client.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "bundler/inline" 4 | 5 | gemfile do 6 | source "https://rubygems.org" 7 | 8 | gemspec path: "../" 9 | 10 | gem "httparty" 11 | end 12 | 13 | response = HTTParty.get("http://127.0.0.1:4567/auth/open_id/callback", body: "{\"foo\":\"bar\"}", headers: {"Content-Type" => "plain/text"}) 14 | 15 | # NOTE: You'll see an invalid_credentials response. 16 | puts "GET response.body: #{response.body.inspect}" 17 | 18 | # response = HTTParty.post("http://127.0.0.1:4567/auth/open_id/callback", body: "{\"foo\":\"bar\"}", headers: { 'Content-Type' => 'plain/text' }) 19 | # 20 | # # NOTE: You'll see an invalid_credentials response. 21 | # puts "POST response.body: #{response.body.inspect}" 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build Artifacts 2 | /pkg/ 3 | /tmp/ 4 | *.gem 5 | 6 | # Bundler 7 | /.bundle/ 8 | /gemfiles/*.lock 9 | /gemfiles/.bundle/ 10 | /gemfiles/.bundle/config 11 | /gemfiles/vendor/ 12 | Appraisal.*.gemfile.lock 13 | 14 | # Specs 15 | .rspec_status 16 | /coverage/ 17 | /spec/reports/ 18 | 19 | # Documentation 20 | /.yardoc/ 21 | /_yardoc/ 22 | /rdoc/ 23 | /doc/ 24 | 25 | # Ruby Version Managers (RVM, rbenv, etc) 26 | # Ignored because we currently use .tool-versions 27 | .rvmrc 28 | .ruby-version 29 | .ruby-gemset 30 | 31 | # Benchmarking 32 | /measurement/ 33 | 34 | # Debugger detritus 35 | .byebug_history 36 | 37 | # direnv - brew install direnv 38 | .env.local 39 | 40 | # OS Detritus 41 | .DS_Store 42 | 43 | # Editors 44 | *~ 45 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | buy_me_a_coffee: pboling 4 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 5 | github: [pboling] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 6 | issuehunt: pboling # Replace with a single IssueHunt username 7 | ko_fi: pboling # Replace with a single Ko-fi username 8 | liberapay: pboling # Replace with a single Liberapay username 9 | open_collective: # Replace with a single Open Collective username 10 | patreon: galtzo # Replace with a single Patreon username 11 | polar: pboling 12 | thanks_dev: u/gh/pboling 13 | tidelift: rubygems/omniauth-openid # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | title: omniauth-openid 3 | message: >- 4 | If you use this work and you want to cite it, 5 | then you can use the metadata from this file. 6 | type: software 7 | authors: 8 | - given-names: Peter Hurn 9 | family-names: Boling 10 | email: floss@galtzo.com 11 | affiliation: galtzo.com 12 | orcid: 'https://orcid.org/0009-0008-8519-441X' 13 | - given-names: Aboling0 14 | email: aboling@railsbling.com 15 | affiliation: railsbling.com 16 | identifiers: 17 | - type: url 18 | value: 'https://github.com/ruby-openid/omniauth-openid/' 19 | description: omniauth-openid 20 | repository-code: 'https://github.com/ruby-openid/omniauth-openid/' 21 | abstract: >- 22 | omniauth-openid 23 | license: See license file 24 | -------------------------------------------------------------------------------- /bin/erb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'erb' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("erb", "erb") 28 | -------------------------------------------------------------------------------- /bin/ri: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'ri' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rdoc", "ri") 28 | -------------------------------------------------------------------------------- /bin/yri: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'yri' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("yard", "yri") 28 | -------------------------------------------------------------------------------- /bin/racc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'racc' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("racc", "racc") 28 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rake' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rake", "rake") 28 | -------------------------------------------------------------------------------- /bin/rdoc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rdoc' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rdoc", "rdoc") 28 | -------------------------------------------------------------------------------- /bin/reek: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'reek' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("reek", "reek") 28 | -------------------------------------------------------------------------------- /bin/thor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'thor' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("thor", "thor") 28 | -------------------------------------------------------------------------------- /bin/yard: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'yard' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("yard", "yard") 28 | -------------------------------------------------------------------------------- /bin/ldiff: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'ldiff' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("diff-lcs", "ldiff") 28 | -------------------------------------------------------------------------------- /bin/rackup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rackup' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rack", "rackup") 28 | -------------------------------------------------------------------------------- /bin/yardoc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'yardoc' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("yard", "yardoc") 28 | -------------------------------------------------------------------------------- /bin/rspec: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rspec' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rspec-core", "rspec") 28 | -------------------------------------------------------------------------------- /bin/rubocop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rubocop' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rubocop", "rubocop") 28 | -------------------------------------------------------------------------------- /bin/htmldiff: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'htmldiff' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("diff-lcs", "htmldiff") 28 | -------------------------------------------------------------------------------- /bin/kramdown: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'kramdown' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("kramdown", "kramdown") 28 | -------------------------------------------------------------------------------- /bin/nokogiri: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'nokogiri' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("nokogiri", "nokogiri") 28 | -------------------------------------------------------------------------------- /bin/appraisal: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'appraisal' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("appraisal", "appraisal") 28 | -------------------------------------------------------------------------------- /bin/ruby-parse: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'ruby-parse' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("parser", "ruby-parse") 28 | -------------------------------------------------------------------------------- /bin/standardrb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'standardrb' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("standard", "standardrb") 28 | -------------------------------------------------------------------------------- /bin/yard-junk: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'yard-junk' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("yard-junk", "yard-junk") 28 | -------------------------------------------------------------------------------- /bin/ruby-rewrite: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'ruby-rewrite' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("parser", "ruby-rewrite") 28 | -------------------------------------------------------------------------------- /bin/bundle-audit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'bundle-audit' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("bundler-audit", "bundle-audit") 28 | -------------------------------------------------------------------------------- /bin/bundler-audit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'bundler-audit' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("bundler-audit", "bundler-audit") 28 | -------------------------------------------------------------------------------- /bin/code_climate_reek: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'code_climate_reek' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("reek", "code_climate_reek") 28 | -------------------------------------------------------------------------------- /bin/gem_checksums: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'gem_checksums' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("stone_checksums", "gem_checksums") 28 | -------------------------------------------------------------------------------- /bin/rubocop-gradual: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rubocop-gradual' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) 12 | 13 | bundle_binstub = File.expand_path("bundle", __dir__) 14 | 15 | if File.file?(bundle_binstub) 16 | if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") 17 | load(bundle_binstub) 18 | else 19 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 20 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 21 | end 22 | end 23 | 24 | require "rubygems" 25 | require "bundler/setup" 26 | 27 | load Gem.bin_path("rubocop-gradual", "rubocop-gradual") 28 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | #### IMPORTANT ####################################################### 2 | # Gemfile is for local development ONLY; Gemfile is NOT loaded in CI # 3 | ####################################################### IMPORTANT #### 4 | 5 | source "https://rubygems.org" 6 | 7 | git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } 8 | 9 | gemspec 10 | 11 | ### Std Lib Extracted Gems 12 | eval_gemfile "gemfiles/modular/x_std_libs/r3/libs.gemfile" 13 | 14 | ### Security Audit 15 | eval_gemfile "gemfiles/modular/audit.gemfile" 16 | 17 | ### Documentation 18 | eval_gemfile "gemfiles/modular/documentation.gemfile" 19 | 20 | ### Linting 21 | eval_gemfile "gemfiles/modular/style.gemfile" 22 | 23 | # Code Coverage 24 | eval_gemfile "gemfiles/modular/coverage.gemfile" 25 | 26 | ### Testing 27 | gem "appraisal", github: "pboling/appraisal", branch: "galtzo" 28 | 29 | # group :example do 30 | # gem 'sinatra' 31 | # end 32 | -------------------------------------------------------------------------------- /.github/workflows/dependency-review.yml: -------------------------------------------------------------------------------- 1 | # Dependency Review Action 2 | # 3 | # This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. 4 | # 5 | # Source repository: https://github.com/actions/dependency-review-action 6 | # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement 7 | name: 'Dependency Review' 8 | on: [pull_request] 9 | 10 | permissions: 11 | contents: read 12 | 13 | jobs: 14 | dependency-review: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: 'Checkout Repository' 18 | uses: actions/checkout@v6 19 | - name: 'Dependency Review' 20 | uses: actions/dependency-review-action@v4 21 | -------------------------------------------------------------------------------- /.yard_gfm_support.rb: -------------------------------------------------------------------------------- 1 | # Gratefully and liberally taken from the MIT-licensed https://github.com/bensheldon/good_job/pull/113/files 2 | require "kramdown" 3 | require "kramdown-parser-gfm" 4 | 5 | # Custom markup provider class that always renders Kramdown using GFM (Github Flavored Markdown). 6 | # GFM is needed to render markdown tables and fenced code blocks in the README. 7 | class KramdownGfmDocument < Kramdown::Document 8 | def initialize(source, options = {}) 9 | options[:input] = "GFM" unless options.key?(:input) 10 | super(source, options) 11 | end 12 | end 13 | 14 | # Insert the new provider as the highest priority option for Markdown. 15 | # See: 16 | # - https://github.com/lsegal/yard/issues/1157 17 | # - https://github.com/lsegal/yard/issues/1017 18 | # - https://github.com/lsegal/yard/blob/main/lib/yard/templates/helpers/markup_helper.rb 19 | YARD::Templates::Helpers::MarkupHelper::MARKUP_PROVIDERS[:markdown].insert( 20 | 0, 21 | {const: "KramdownGfmDocument"}, 22 | ) 23 | -------------------------------------------------------------------------------- /examples/server.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "bundler/inline" 4 | 5 | gemfile do 6 | source "https://rubygems.org" 7 | 8 | gemspec path: "../" 9 | 10 | gem "sinatra" 11 | gem "rackup" 12 | gem "puma" 13 | gem "json", require: false 14 | gem "nap", require: "rest" 15 | end 16 | 17 | require "json" 18 | require "securerandom" 19 | require "sinatra" 20 | require "omniauth-openid" 21 | require "openid/store/filesystem" 22 | 23 | use Rack::Session::Cookie, secret: SecureRandom.hex(64) 24 | 25 | use OmniAuth::Builder do 26 | provider :open_id, store: OpenID::Store::Filesystem.new("/tmp") 27 | end 28 | 29 | get "/" do 30 | <<-HTML 31 | 34 | HTML 35 | end 36 | 37 | [:get, :post].each do |method| 38 | send method, "/auth/:provider/callback" do 39 | content_type "text/plain" 40 | request.env["omniauth.auth"].info.to_hash.inspect 41 | end 42 | end 43 | 44 | Sinatra::Application.run! 45 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/ruby 3 | { 4 | "name": "Ruby", 5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 6 | "image": "mcr.microsoft.com/devcontainers/ruby:1-3-bookworm", 7 | 8 | // Features to add to the dev container. More info: https://containers.dev/features. 9 | "features": { 10 | "./apt-install": {} 11 | }, 12 | 13 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 14 | // "forwardPorts": [], 15 | 16 | // Use 'postCreateCommand' to run commands after the container is created. 17 | "postCreateCommand": "bundle update --bundler", 18 | 19 | // Configure tool-specific properties. 20 | "customizations" : { 21 | "jetbrains" : { 22 | "backend" : "RubyMine" 23 | } 24 | }, 25 | 26 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 27 | // "remoteUser": "root" 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Peter H. Boling, and omniauth-openid contributors 4 | Copyright (c) 2010-2011 Michael Bleigh, and Intridea, Inc. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | "Software"), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 21 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /.rubocop_gradual.lock: -------------------------------------------------------------------------------- 1 | { 2 | "bin/bundle:247448467": [ 3 | [64, 5, 20, "ThreadSafety/ClassInstanceVariable: Avoid class instance variables.", 2485198147] 4 | ], 5 | "omniauth-openid.gemspec:1698529195": [ 6 | [4, 23, 12, "Gemspec/RubyVersionGlobalsUsage: Do not use `RUBY_VERSION` in gemspec file.", 31296028] 7 | ], 8 | "spec/omniauth/openid/version_spec.rb:4155563924": [ 9 | [11, 58, 25, "RSpec/DescribedClass: Use `described_class` instead of `OmniAuth::OpenID::Version`.", 3486261707] 10 | ], 11 | "spec/omniauth/strategies/open_id_spec.rb:1187086664": [ 12 | [1, 1, 60, "RSpec/SpecFilePathFormat: Spec path should end with `omni_auth/strategies/open_id*_spec.rb`.", 3122388919], 13 | [55, 13, 12, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 1731001529], 14 | [72, 13, 14, "RSpec/ContextWording: Context description should match /^when\\b/, /^with\\b/, or /^without\\b/.", 468958882], 15 | [73, 7, 45, "RSpec/NestedGroups: Maximum example group nesting exceeded [4/3].", 3384971759], 16 | [74, 9, 37, "RSpec/MultipleExpectations: Example has too many expectations [2/1].", 526327299], 17 | [75, 11, 7, "RSpec/PendingWithoutReason: Give the reason for pending.", 2397655994] 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /docs/images/logo/README.txt: -------------------------------------------------------------------------------- 1 | Galtzo.com Logos 2 | - galtzo-floss-logos-original.svg 3 | - galtzo-floss-logos-wordless.svg 4 | 5 | © 2025 by Aboling0 (https://github.com/Aboling0) 6 | 7 | Licensed under CC BY-SA 4.0 8 | 9 | https://creativecommons.org/licenses/by-sa/4.0/ 10 | 11 | --- 12 | 13 | The OmniAuth Logo - omniauth-logo-182px.jpeg (resized to square) 14 | 15 | Committed by https://github.com/tomeara to the old GH-Pages site for OmniAuth 16 | 17 | https://github.com/omniauth/omniauth/commit/89a03ef889cd9994cdfa8a61d5195d76884510ec 18 | 19 | Creator and License specifically are unknown, 20 | but the code of the project and website was and is licensed under MIT. 21 | 22 | --- 23 | 24 | The OpenID Logo - openid_rgb-300dpi.png 25 | 26 | Logo Guidelines: The OpenID logo is to be displayed in its entirety on either a solid light or dark background—avoid mid-tones or strongly colored backgrounds. The logo should not be displayed in parts, with color variations, or with other elements superimposed on top of the logo. The stylized I+D symbol should not be modified or distorted. 27 | 28 | https://openid.net/policies/ 29 | 30 | --- 31 | 32 | The Ruby Logo - ruby-logo-124px.jpeg (resized) 33 | 34 | https://www.ruby-lang.org/en/about/logo/ 35 | 36 | Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 37 | 38 | https://creativecommons.org/licenses/by-sa/2.5 39 | -------------------------------------------------------------------------------- /.qlty/qlty.toml: -------------------------------------------------------------------------------- 1 | # For a guide to configuration, visit https://qlty.sh/d/config 2 | # Or for a full reference, visit https://qlty.sh/d/qlty-toml 3 | config_version = "0" 4 | 5 | exclude_patterns = [ 6 | "*_min.*", 7 | "*-min.*", 8 | "*.min.*", 9 | "**/.yarn/**", 10 | "**/*.d.ts", 11 | "**/assets/**", 12 | "**/bin/**", 13 | "**/bower_components/**", 14 | "**/build/**", 15 | "**/cache/**", 16 | "**/config/**", 17 | "**/.devcontainer", 18 | "**/db/**", 19 | "**/deps/**", 20 | "**/dist/**", 21 | "**/doc/**", 22 | "**/extern/**", 23 | "**/external/**", 24 | "**/generated/**", 25 | "**/Godeps/**", 26 | "**/gradlew/**", 27 | "**/mvnw/**", 28 | "**/node_modules/**", 29 | "**/protos/**", 30 | "**/seed/**", 31 | "**/target/**", 32 | "**/templates/**", 33 | "**/testdata/**", 34 | "**/vendor/**", 35 | ".github/workflows/codeql-analysis.yml" 36 | ] 37 | 38 | test_patterns = [ 39 | "**/test/**", 40 | "**/spec/**", 41 | "**/*.test.*", 42 | "**/*.spec.*", 43 | "**/*_test.*", 44 | "**/*_spec.*", 45 | "**/test_*.*", 46 | "**/spec_*.*", 47 | ] 48 | 49 | [smells] 50 | mode = "comment" 51 | 52 | [smells.boolean_logic] 53 | threshold = 4 54 | enabled = true 55 | 56 | [smells.file_complexity] 57 | threshold = 55 58 | enabled = false 59 | 60 | [smells.return_statements] 61 | threshold = 4 62 | enabled = true 63 | 64 | [smells.nested_control_flow] 65 | threshold = 4 66 | enabled = true 67 | 68 | [smells.function_parameters] 69 | threshold = 4 70 | enabled = true 71 | 72 | [smells.function_complexity] 73 | threshold = 5 74 | enabled = true 75 | 76 | [smells.duplication] 77 | enabled = true 78 | threshold = 20 -------------------------------------------------------------------------------- /certs/pboling.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl 3 | ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW 4 | A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM 5 | DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy 6 | LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA 7 | uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61 8 | LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5 9 | mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN 10 | coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV 11 | FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj 12 | yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1 13 | to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD 14 | qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj 15 | fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ 16 | HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG 17 | A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD 18 | ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9 19 | wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR 20 | L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm 21 | GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k 22 | kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq 23 | QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA 24 | 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p 25 | DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt 26 | L9nRqA== 27 | -----END CERTIFICATE----- 28 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # Std Libs 2 | require "securerandom" 3 | 4 | # Bugfixes 5 | # JRuby needed an explicit "require 'logger'" for Rails < 7.1 6 | # See: https://github.com/rails/rails/issues/54260#issuecomment-2594650047 7 | # Placing above omniauth because it is a dependency of omniauth, 8 | # which is undeclared in older versions. 9 | require "logger" 10 | 11 | # External library dependencies 12 | require "rack/test" 13 | require "rack/session" 14 | require "rack/openid" 15 | require "webmock/rspec" 16 | require "version_gem/ruby" 17 | 18 | require "omniauth" 19 | require "omniauth/version" 20 | 21 | # RSpec Configs 22 | require "config/omniauth" 23 | require "config/rspec/rack_test" 24 | require "config/rspec/rspec_block_is_expected" 25 | require "config/rspec/rspec_core" 26 | require "config/rspec/version_gem" 27 | 28 | # RSpec Support 29 | spec_root_matcher = %r{#{__dir__}/(.+)\.rb\Z} 30 | Dir.glob(Pathname.new(__dir__).join("support/**/", "*.rb")).each { |f| require f.match(spec_root_matcher)[1] } 31 | 32 | RSpec.configure do |config| 33 | config.include WebMock::API 34 | config.include Rack::Test::Methods 35 | end 36 | 37 | if OmniAuth.config.respond_to?(:request_validation_phase) 38 | OmniAuth.config.request_validation_phase = ->(env) {} 39 | end 40 | 41 | # The last thing before loading this gem is to set up code coverage 42 | begin 43 | # This does not require "simplecov", but 44 | require "kettle-soup-cover" 45 | # this next line has a side effect of running `.simplecov` 46 | require "simplecov" if defined?(Kettle::Soup::Cover) && Kettle::Soup::Cover::DO_COV 47 | rescue LoadError => error 48 | # check the error message and conditionally re-raise 49 | raise error unless error.message.include?("kettle") 50 | end 51 | 52 | # This gem 53 | require "omniauth-openid" 54 | -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | # Run any command in this library's bin/ without the bin/ prefix! 2 | PATH_add bin 3 | 4 | # Only add things to this file that should be shared with the team. 5 | 6 | # **dotenv** (See end of file for .env.local integration) 7 | # .env would override anything in this file, if enabled. 8 | # .env is a DOCKER standard, and if we use it, it would be in deployed, or DOCKER, environments. 9 | # Override and customize anything below in your own .env.local 10 | # If you are using dotenv and not direnv, 11 | # copy the following `export` statements to your own .env file. 12 | 13 | ### General Ruby ### 14 | # Turn off Ruby Warnings about deprecated code 15 | # export RUBYOPT="-W0" 16 | 17 | ### External Testing Controls 18 | export K_SOUP_COV_DO=true # Means you want code coverage 19 | # Available formats are html, xml, rcov, lcov, json, tty 20 | export K_SOUP_COV_COMMAND_NAME="RSpec Coverage" 21 | export K_SOUP_COV_FORMATTERS="html,tty" 22 | export K_SOUP_COV_MIN_BRANCH=9 # Means you want to enforce X% branch coverage 23 | export K_SOUP_COV_MIN_LINE=58 # Means you want to enforce X% line coverage 24 | export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met 25 | export K_SOUP_COV_MULTI_FORMATTERS=true 26 | export MAX_ROWS=1 # Setting for simplecov-console gem for tty output, limits to the worst N rows of bad coverage 27 | 28 | # Internal Debugging Controls 29 | export DEBUG=false # do not allow byebug statements (override in .env.local) 30 | 31 | # .env would override anything in this file, if `dotenv` is uncommented below. 32 | # .env is a DOCKER standard, and if we use it, it would be in deployed, or DOCKER, environments, 33 | # and that is why we generally want to leave it commented out. 34 | # dotenv 35 | 36 | # .env.local will override anything in this file. 37 | dotenv_if_exists .env.local 38 | -------------------------------------------------------------------------------- /docs/images/logo/galtzo-floss-logos-wordless.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | | Version | Supported | 6 | |---------|-----------| 7 | | 2.x | ✅ | 8 | | 1.x | ❌ | 9 | 10 | ## Security contact information 11 | 12 | To report a security vulnerability, please use the 13 | [Tidelift security contact](https://tidelift.com/security). 14 | Tidelift will coordinate the fix and disclosure. 15 | 16 | ## Additional Support 17 | 18 | Interested in support for versions older than the latest release? 19 | Consider sponsoring the project / maintainer. 20 | 21 | [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon] 22 | 23 | [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay 24 | [⛳liberapay]: https://liberapay.com/pboling/donate 25 | [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github 26 | [🖇sponsor]: https://github.com/sponsors/pboling 27 | [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg 28 | [🖇polar]: https://polar.sh/pboling 29 | [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg 30 | [🖇kofi]: https://ko-fi.com/O5O86SNP4 31 | [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg 32 | [🖇patreon]: https://patreon.com/galtzo 33 | [🖇buyme]: https://www.buymeacoffee.com/pboling 34 | [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat 35 | 36 | ## Enterprise Support 37 | 38 | Available as part of the Tidelift Subscription. 39 | 40 | The maintainers of this library and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers for the exact packages you use. [Learn more.][tidelift-ref] 41 | 42 | [tidelift-ref]: https://tidelift.com/subscription/pkg/rubygems-omniauth-openid?utm_source=rubygems-omniauth-openid&utm_medium=referral&utm_campaign=enterprise&utm_term=repo -------------------------------------------------------------------------------- /.github/workflows/style.yml: -------------------------------------------------------------------------------- 1 | name: Style 2 | 3 | permissions: 4 | contents: read 5 | 6 | on: 7 | push: 8 | branches: 9 | - 'master' 10 | - "*-stable" 11 | tags: 12 | - '!*' # Do not execute on tags 13 | pull_request: 14 | branches: 15 | - '*' 16 | # Allow manually triggering the workflow. 17 | workflow_dispatch: 18 | 19 | # Cancels all previous workflow runs for the same branch that have not yet completed. 20 | concurrency: 21 | # The concurrency group contains the workflow name and the branch name. 22 | group: "${{ github.workflow }}-${{ github.ref }}" 23 | cancel-in-progress: true 24 | 25 | jobs: 26 | rubocop: 27 | name: Style on ${{ matrix.ruby }}@current 28 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 29 | runs-on: ubuntu-latest 30 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 31 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 32 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 33 | strategy: 34 | fail-fast: false 35 | matrix: 36 | include: 37 | # Style 38 | - ruby: "ruby" 39 | appraisal_name: "style" 40 | exec_cmd: "rake rubocop_gradual:check" 41 | gemfile: "Appraisal.root" 42 | rubygems: latest 43 | bundler: latest 44 | 45 | steps: 46 | - name: Checkout 47 | uses: actions/checkout@v6 48 | 49 | - name: Setup Ruby & RubyGems 50 | uses: ruby/setup-ruby@v1 51 | with: 52 | ruby-version: ${{ matrix.ruby }} 53 | rubygems: ${{ matrix.rubygems }} 54 | bundler: ${{ matrix.bundler }} 55 | bundler-cache: false 56 | 57 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 58 | # We need to do this first to get appraisal installed. 59 | # NOTE: This does not use the main Gemfile at all. 60 | - name: Install Root Appraisal 61 | run: bundle 62 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 63 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 64 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 65 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 66 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to this project since v2.0.2. 4 | 5 | The format is based on [Keep a Changelog v1](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | ### Added 10 | ### Changed 11 | ### Deprecated 12 | ### Removed 13 | ### Fixed 14 | ### Security 15 | 16 | ## [2.0.2] - 2025-06-08 17 | - TAG: [v2.0.2][2.0.2t] 18 | - COVERAGE: 92.06% -- 348/378 lines in 15 files 19 | - BRANCH COVERAGE: 79.49% -- 62/78 branches in 15 files 20 | - 44.44% documented 21 | ### Added 22 | - Github Actions for Continuous Integration by @pboling 23 | - Test workflows with latest dependencies and more platform and dep HEADs 24 | - Expanded test suite, covering many more points of the dependency matrix 25 | - More documentation by @pboling, @Aboling0 26 | - 20 year signing cert expires 2045-04-29 by @pboling 27 | - Added CITATION.cff by @pboling 28 | - devcontainer for easier maintenance by @pboling 29 | - Add SECURITY.md policy by @pboling 30 | - CONTRIBUTING.md - Instructions for contributing by @pboling 31 | - Modernized gem structure, and updated dependencies for development by @pboling 32 | - Set `SKIP_GEM_SIGNING` in env to allow `gem build` without cryptographic signing requirement by @pboling 33 | - Useful for linux distros whose package managers sign packages independently 34 | - Example client / server in `/examples` by @pboling 35 | ### Changed 36 | - Updated Code of Conduct to Contributor Covenant v2.1 by @pboling 37 | 38 | ## [2.0.1] - 2021-01-19 39 | - TAG: [v2.0.0][2.0.0t] 40 | 41 | ## [1.0.1] - 2011-11-04 42 | - TAG: [v1.0.1][1.0.1t] 43 | 44 | ## [1.0.0] - 2011-11-02 45 | - TAG: [v1.0.][1.0.0t] 46 | 47 | [Unreleased]: https://github.com/omniauth/omniauth-openid/compare/v2.0.2...HEAD 48 | [2.0.2]: https://github.com/omniauth/omniauth-openid/compare/v2.0.2...v2.0.1 49 | [2.0.2t]: https://github.com/omniauth/omniauth-openid/tags/v2.0.2 50 | [2.0.1]: https://github.com/omniauth/omniauth-openid/compare/v2.0.1...v1.0.1 51 | [2.0.1t]: https://github.com/omniauth/omniauth-openid/tags/v2.0.1 52 | [1.0.1]: https://github.com/omniauth/omniauth-openid/compare/v1.0.1...v1.0.0 53 | [1.0.1t]: https://github.com/omniauth/omniauth-openid/tags/v1.0.1 54 | [1.0.0]: https://github.com/omniauth/omniauth-openid/compare/6019f3abd7b707567e2217c91be64f7a6c4aa34b...v1.0.0 55 | [1.0.0t]: https://github.com/omniauth/omniauth-openid/tags/v1.0.0 56 | -------------------------------------------------------------------------------- /.github/workflows/legacy.yml: -------------------------------------------------------------------------------- 1 | name: MRI 3.0 (Legacy) 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-22.04 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | fail-fast: false 38 | matrix: 39 | include: 40 | # Ruby 3.0 41 | - ruby: "3.0" 42 | appraisal_name: "omniauth-v2.1-r3.0" 43 | exec_cmd: "rake spec" 44 | gemfile: "Appraisal.root" 45 | rubygems: '3.5.23' 46 | bundler: '2.5.23' 47 | 48 | steps: 49 | - name: Checkout 50 | uses: actions/checkout@v6 51 | 52 | - name: Setup Ruby & RubyGems 53 | uses: ruby/setup-ruby@v1 54 | with: 55 | ruby-version: ${{ matrix.ruby }} 56 | rubygems: ${{ matrix.rubygems }} 57 | bundler: ${{ matrix.bundler }} 58 | bundler-cache: false 59 | 60 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 61 | # We need to do this first to get appraisal installed. 62 | # NOTE: This does not use the main Gemfile at all. 63 | - name: Install Root Appraisal 64 | run: bundle 65 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 66 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 67 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 68 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 69 | -------------------------------------------------------------------------------- /docs/top-level-namespace.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Top Level Namespace 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 61 | 62 |

Top Level Namespace 63 | 64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
80 | 81 |

Defined Under Namespace

82 |

83 | 84 | 85 | Modules: OmniAuth 86 | 87 | 88 | 89 | 90 |

91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 |
101 | 102 | 107 | 108 |
109 | 110 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master, "*-stable" ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master, "*-stable" ] 20 | schedule: 21 | - cron: '35 1 * * 5' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'ruby' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v6 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v4 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v4 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v4 71 | -------------------------------------------------------------------------------- /docs/file.CITATION.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | File: CITATION 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 59 | 60 |

cff-version: 1.2.0
61 | title: OmniAuth::OpenID
62 | message: >-
63 | If you use this work and you want to cite it,
64 | then you can use the metadata from this file.
65 | type: software
66 | authors:

67 |
    68 |
  • given-names: Peter Hurn
    69 | family-names: Boling
    70 | email: peter@railsbling.com
    71 | affiliation: railsbling.com
    72 | orcid: ‘https://orcid.org/0009-0008-8519-441X’
    73 | identifiers:
  • 74 |
  • type: url
    75 | value: ‘https://github.com/omniauth/omniauth-openid/’
    76 | description: OmniAuth::OpenID
    77 | repository-code: ‘https://github.com/omniauth/omniauth-openid/’
    78 | abstract: >-
    79 | OmniAuth::OpenID
    80 | license: See license file
  • 81 |
82 |
83 | 84 | 89 | 90 |
91 | 92 | -------------------------------------------------------------------------------- /docs/OmniAuth.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Module: OmniAuth 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 61 | 62 |

Module: OmniAuth 63 | 64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
80 |
Defined in:
81 |
lib/omniauth/openid/version.rb,
82 | lib/omniauth/strategies/open_id.rb
83 |
84 |
85 | 86 |
87 | 88 |

Defined Under Namespace

89 |

90 | 91 | 92 | Modules: OpenID, Strategies 93 | 94 | 95 | 96 | 97 |

98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 |
108 | 109 | 114 | 115 |
116 | 117 | -------------------------------------------------------------------------------- /docs/OmniAuth/Strategies.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Module: OmniAuth::Strategies 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 61 | 62 |

Module: OmniAuth::Strategies 63 | 64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
80 |
Defined in:
81 |
lib/omniauth/strategies/open_id.rb
82 |
83 | 84 |
85 | 86 |

Defined Under Namespace

87 |

88 | 89 | 90 | 91 | 92 | Classes: OpenID 93 | 94 | 95 |

96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 |
106 | 107 | 112 | 113 |
114 | 115 | -------------------------------------------------------------------------------- /docs/file_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | File List 19 | 20 | 21 | 22 |
23 |
24 |

File List

25 |
26 | 27 | 28 | Classes 29 | 30 | 31 | 32 | Methods 33 | 34 | 35 | 36 | Files 37 | 38 | 39 |
40 | 41 | 45 |
46 | 47 | 87 |
88 | 89 | 90 | -------------------------------------------------------------------------------- /.github/workflows/supported.yml: -------------------------------------------------------------------------------- 1 | name: MRI (Supported) 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-latest 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | matrix: 38 | include: 39 | # Ruby 3.1 40 | - ruby: "3.1" 41 | appraisal_name: "omniauth-v2.1-r3" 42 | exec_cmd: "rake spec" 43 | gemfile: "Appraisal.root" 44 | rubygems: latest 45 | bundler: latest 46 | 47 | # Ruby 3.2 48 | - ruby: "3.2" 49 | appraisal_name: "omniauth-v2.1-r3" 50 | exec_cmd: "rake spec" 51 | gemfile: "Appraisal.root" 52 | rubygems: latest 53 | bundler: latest 54 | 55 | # Ruby 3.3 56 | - ruby: "3.3" 57 | appraisal_name: "omniauth-v2.1-r3" 58 | exec_cmd: "rake spec" 59 | gemfile: "Appraisal.root" 60 | rubygems: latest 61 | bundler: latest 62 | 63 | steps: 64 | - name: Checkout 65 | uses: actions/checkout@v6 66 | 67 | - name: Setup Ruby & RubyGems 68 | uses: ruby/setup-ruby@v1 69 | with: 70 | ruby-version: ${{ matrix.ruby }} 71 | rubygems: ${{ matrix.rubygems }} 72 | bundler: ${{ matrix.bundler }} 73 | bundler-cache: false 74 | 75 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 76 | # We need to do this first to get appraisal installed. 77 | # NOTE: This does not use the main Gemfile at all. 78 | - name: Install Root Appraisal 79 | run: bundle 80 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 81 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 82 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 83 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 84 | -------------------------------------------------------------------------------- /.github/workflows/jruby.yml: -------------------------------------------------------------------------------- 1 | name: JRuby 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-22.04 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | matrix: 38 | include: 39 | # jruby-9.4 (targets Ruby 3.1 compatibility) 40 | - ruby: "jruby-9.4" 41 | appraisal_name: "omniauth-v2.1-r3" 42 | exec_cmd: "rake spec" 43 | gemfile: "Appraisal.root" 44 | rubygems: default 45 | bundler: default 46 | 47 | steps: 48 | ### COUCHDB 49 | - name: Start CouchDB 50 | uses: iamssen/couchdb-github-action@master 51 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 52 | with: 53 | couchdb-version: "3.4.1" 54 | 55 | ### SMOKE-TEST 56 | - name: Smoke CouchDB 57 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 58 | run: | 59 | curl -f http://127.0.0.1:5984/ 60 | curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{"name": "admin", "password": "password"}' http://127.0.0.1:5984/_session 61 | 62 | - name: Checkout 63 | uses: actions/checkout@v6 64 | 65 | - name: Setup Ruby & RubyGems 66 | uses: ruby/setup-ruby@v1 67 | with: 68 | ruby-version: ${{ matrix.ruby }} 69 | rubygems: ${{ matrix.rubygems }} 70 | bundler: ${{ matrix.bundler }} 71 | bundler-cache: false 72 | 73 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 74 | # We need to do this first to get appraisal installed. 75 | # NOTE: This does not use the main Gemfile at all. 76 | - name: Install Root Appraisal 77 | run: bundle 78 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 79 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 80 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 81 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 82 | -------------------------------------------------------------------------------- /.github/workflows/current.yml: -------------------------------------------------------------------------------- 1 | # Targets the evergreen latest release of ruby, truffleruby, and jruby 2 | name: Current 3 | 4 | permissions: 5 | contents: read 6 | 7 | env: 8 | K_SOUP_COV_DO: false 9 | 10 | on: 11 | push: 12 | branches: 13 | - 'master' 14 | - "*-stable" 15 | tags: 16 | - '!*' # Do not execute on tags 17 | pull_request: 18 | branches: 19 | - '*' 20 | # Allow manually triggering the workflow. 21 | workflow_dispatch: 22 | 23 | # Cancels all previous workflow runs for the same branch that have not yet completed. 24 | concurrency: 25 | # The concurrency group contains the workflow name and the branch name. 26 | group: "${{ github.workflow }}-${{ github.ref }}" 27 | cancel-in-progress: true 28 | 29 | jobs: 30 | test: 31 | name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 32 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 33 | runs-on: ubuntu-latest 34 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 35 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 36 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 37 | strategy: 38 | matrix: 39 | include: 40 | # Ruby 3.4 41 | - ruby: "3.4" 42 | appraisal_name: "omniauth-v2.1-r3" 43 | exec_cmd: "rake spec" 44 | gemfile: "Appraisal.root" 45 | rubygems: latest 46 | bundler: latest 47 | 48 | # truffleruby-24.1 49 | - ruby: "truffleruby" 50 | appraisal_name: "omniauth-v2.1-r3" 51 | exec_cmd: "rake spec" 52 | gemfile: "Appraisal.root" 53 | rubygems: default 54 | bundler: default 55 | 56 | # jruby-10.0 (targets Ruby 3.4 compatibility) 57 | - ruby: "jruby" 58 | appraisal_name: "omniauth-v2.1-r3" 59 | exec_cmd: "rake spec" 60 | gemfile: "Appraisal.root" 61 | rubygems: default 62 | bundler: default 63 | 64 | steps: 65 | - name: Checkout 66 | uses: actions/checkout@v6 67 | 68 | - name: Setup Ruby & RubyGems 69 | uses: ruby/setup-ruby@v1 70 | with: 71 | ruby-version: ${{ matrix.ruby }} 72 | rubygems: ${{ matrix.rubygems }} 73 | bundler: ${{ matrix.bundler }} 74 | bundler-cache: false 75 | 76 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 77 | # We need to do this first to get appraisal installed. 78 | # NOTE: This does not use the main Gemfile at all. 79 | - name: Install Root Appraisal 80 | run: bundle 81 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 82 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 83 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 84 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 85 | -------------------------------------------------------------------------------- /docs/file.LICENSE.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | File: LICENSE 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 59 | 60 |
MIT License

Copyright (c) 2025 Peter H. Boling, and omniauth-openid contributors
Copyright (c) 2010-2011 Michael Bleigh, and Intridea, Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
61 | 62 | 67 | 68 |
69 | 70 | -------------------------------------------------------------------------------- /bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'bundle' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "rubygems" 12 | 13 | m = Module.new do 14 | module_function 15 | 16 | def invoked_as_script? 17 | File.expand_path($0) == File.expand_path(__FILE__) 18 | end 19 | 20 | def env_var_version 21 | ENV["BUNDLER_VERSION"] 22 | end 23 | 24 | def cli_arg_version 25 | return unless invoked_as_script? # don't want to hijack other binstubs 26 | return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update` 27 | bundler_version = nil 28 | update_index = nil 29 | ARGV.each_with_index do |a, i| 30 | if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN) 31 | bundler_version = a 32 | end 33 | next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/o 34 | bundler_version = $1 35 | update_index = i 36 | end 37 | bundler_version 38 | end 39 | 40 | def gemfile 41 | gemfile = ENV["BUNDLE_GEMFILE"] 42 | return gemfile if gemfile && !gemfile.empty? 43 | 44 | File.expand_path("../Gemfile", __dir__) 45 | end 46 | 47 | def lockfile 48 | lockfile = 49 | case File.basename(gemfile) 50 | when "gems.rb" then gemfile.sub(/\.rb$/, ".locked") 51 | else "#{gemfile}.lock" 52 | end 53 | File.expand_path(lockfile) 54 | end 55 | 56 | def lockfile_version 57 | return unless File.file?(lockfile) 58 | lockfile_contents = File.read(lockfile) 59 | return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/o 60 | Regexp.last_match(1) 61 | end 62 | 63 | def bundler_requirement 64 | @bundler_requirement ||= 65 | env_var_version || 66 | cli_arg_version || 67 | bundler_requirement_for(lockfile_version) 68 | end 69 | 70 | def bundler_requirement_for(version) 71 | return "#{Gem::Requirement.default}.a" unless version 72 | 73 | bundler_gem_version = Gem::Version.new(version) 74 | 75 | bundler_gem_version.approximate_recommendation 76 | end 77 | 78 | def load_bundler! 79 | ENV["BUNDLE_GEMFILE"] ||= gemfile 80 | 81 | activate_bundler 82 | end 83 | 84 | def activate_bundler 85 | gem_error = activation_error_handling do 86 | gem("bundler", bundler_requirement) 87 | end 88 | return if gem_error.nil? 89 | require_error = activation_error_handling do 90 | require "bundler/version" 91 | end 92 | return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) 93 | warn("Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`") 94 | exit(42) 95 | end 96 | 97 | def activation_error_handling 98 | yield 99 | nil 100 | rescue StandardError, LoadError => e 101 | e 102 | end 103 | end 104 | 105 | m.load_bundler! 106 | 107 | if m.invoked_as_script? 108 | load Gem.bin_path("bundler", "bundle") 109 | end 110 | -------------------------------------------------------------------------------- /.github/workflows/current-runtime-heads.yml: -------------------------------------------------------------------------------- 1 | # Targets the evergreen latest release of ruby, truffleruby, and jruby 2 | # and tests against the HEAD of runtime dependencies 3 | name: Runtime Deps @ HEAD 4 | 5 | permissions: 6 | contents: read 7 | 8 | env: 9 | K_SOUP_COV_DO: false 10 | 11 | on: 12 | push: 13 | branches: 14 | - 'master' 15 | - '*-stable' 16 | tags: 17 | - '!*' # Do not execute on tags 18 | pull_request: 19 | branches: 20 | - '*' 21 | # Allow manually triggering the workflow. 22 | workflow_dispatch: 23 | 24 | # Cancels all previous workflow runs for the same branch that have not yet completed. 25 | concurrency: 26 | # The concurrency group contains the workflow name and the branch name. 27 | group: "${{ github.workflow }}-${{ github.ref }}" 28 | cancel-in-progress: true 29 | 30 | jobs: 31 | test: 32 | name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 33 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 34 | runs-on: ubuntu-latest 35 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 36 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 37 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 38 | strategy: 39 | matrix: 40 | include: 41 | # Ruby 3.4 42 | - ruby: "ruby" 43 | appraisal_name: "dep-heads" 44 | exec_cmd: "rake spec" 45 | gemfile: "Appraisal.root" 46 | rubygems: latest 47 | bundler: latest 48 | 49 | # truffleruby-24.1 50 | # (according to documentation: targets Ruby 3.3 compatibility) 51 | # (according to runtime: targets Ruby 3.2 compatibility) 52 | - ruby: "truffleruby" 53 | appraisal_name: "dep-heads" 54 | exec_cmd: "rake spec" 55 | gemfile: "Appraisal.root" 56 | rubygems: default 57 | bundler: default 58 | 59 | # jruby-10.0 (targets Ruby 3.4 compatibility) 60 | - ruby: "jruby" 61 | appraisal_name: "dep-heads" 62 | exec_cmd: "rake spec" 63 | gemfile: "Appraisal.root" 64 | experimental: true 65 | rubygems: default 66 | bundler: default 67 | 68 | steps: 69 | - name: Checkout 70 | uses: actions/checkout@v6 71 | 72 | - name: Setup Ruby & RubyGems 73 | uses: ruby/setup-ruby@v1 74 | with: 75 | ruby-version: ${{ matrix.ruby }} 76 | rubygems: ${{ matrix.rubygems }} 77 | bundler: ${{ matrix.bundler }} 78 | bundler-cache: false 79 | 80 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 81 | # We need to do this first to get appraisal installed. 82 | # NOTE: This does not use the primary Gemfile at all. 83 | - name: Install Root Appraisal 84 | run: bundle 85 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 86 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 87 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 88 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 89 | -------------------------------------------------------------------------------- /docs/OmniAuth/OpenID/Version.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Module: OmniAuth::OpenID::Version 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 61 | 62 |

Module: OmniAuth::OpenID::Version 63 | 64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 |
Included in:
79 |
OmniAuth::OpenID
80 |
81 | 82 | 83 | 84 |
85 |
Defined in:
86 |
lib/omniauth/openid/version.rb
87 |
88 | 89 |
90 | 91 | 92 | 93 |

94 | Constant Summary 95 | collapse 96 |

97 | 98 |
99 | 100 |
VERSION = 101 | 102 |
103 |
"2.0.2"
104 | 105 |
106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
117 | 118 | 123 | 124 |
125 | 126 | -------------------------------------------------------------------------------- /docs/OmniAuth/OpenID.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Module: OmniAuth::OpenID 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 61 | 62 |

Module: OmniAuth::OpenID 63 | 64 | 65 | 66 |

67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 |
75 |
Includes:
76 |
Version
77 |
78 | 79 | 80 | 81 | 82 | 83 | 84 |
85 |
Defined in:
86 |
lib/omniauth/openid/version.rb
87 |
88 | 89 |
90 | 91 |

Defined Under Namespace

92 |

93 | 94 | 95 | Modules: Version 96 | 97 | 98 | 99 | 100 |

101 | 102 | 103 | 104 |

Constant Summary

105 | 106 |

Constants included 107 | from Version

108 |

Version::VERSION

109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 |
123 | 124 | 129 | 130 |
131 | 132 | -------------------------------------------------------------------------------- /spec/omniauth/strategies/open_id_spec.rb: -------------------------------------------------------------------------------- 1 | RSpec.describe OmniAuth::Strategies::OpenID, type: :strategy do 2 | def app 3 | strat = OmniAuth::Strategies::OpenID 4 | Rack::Builder.new { 5 | use Rack::Session::Cookie, secret: SecureRandom.hex(64) 6 | use strat 7 | run lambda { |env| [404, {"Content-Type" => "text/plain"}, [nil || env.key?("omniauth.auth").to_s]] } 8 | }.to_app 9 | end 10 | 11 | def expired_query_string 12 | "openid=consumer&janrain_nonce=2011-07-21T20%3A14%3A56ZJ8LP3T&openid.assoc_handle=%7BHMAC-SHA1%7D%7B4e284c39%7D%7B9nvQeg%3D%3D%7D&openid.claimed_id=http%3A%2F%2Flocalhost%3A1123%2Fjohn.doe%3Fopenid.success%3Dtrue&openid.identity=http%3A%2F%2Flocalhost%3A1123%2Fjohn.doe%3Fopenid.success%3Dtrue&openid.mode=id_res&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.op_endpoint=http%3A%2F%2Flocalhost%3A1123%2Fserver%2F%3Fopenid.success%3Dtrue&openid.response_nonce=2011-07-21T20%3A14%3A56Zf9gC8S&openid.return_to=http%3A%2F%2Flocalhost%3A8888%2FDevelopment%2FWordpress%2Fwp_openid%2F%3Fopenid%3Dconsumer%26janrain_nonce%3D2011-07-21T20%253A14%253A56ZJ8LP3T&openid.sig=GufV13SUJt8VgmSZ92jGZCFBEvQ%3D&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce%2Creturn_to%2Csigned" 13 | end 14 | 15 | describe "/auth/open_id without an identifier URL" do 16 | before do 17 | post "/auth/open_id" 18 | end 19 | 20 | it "responds with OK" do 21 | expect(last_response).to be_ok 22 | end 23 | 24 | it "responds with HTML" do 25 | expect(last_response.content_type).to eq "text/html" 26 | end 27 | 28 | it "renders an identifier URL input" do 29 | expect(last_response.body).to match %r{]*openid_url} 30 | end 31 | end 32 | 33 | # describe '/auth/open_id with an identifier URL' do 34 | # context 'successful' do 35 | # before do 36 | # @identifier_url = 'http://me.example.org' 37 | # # TODO: change this mock to actually return some sort of OpenID response 38 | # stub_request(:get, @identifier_url) 39 | # get '/auth/open_id?openid_url=' + @identifier_url 40 | # end 41 | # 42 | # it 'should redirect to the OpenID identity URL' do 43 | # last_response.should be_redirect 44 | # last_response.headers['Location'].should =~ %r{^#{@identifier_url}.*} 45 | # end 46 | # 47 | # it 'should tell the OpenID server to return to the callback URL' do 48 | # return_to = CGI.escape(last_request.url + '/callback') 49 | # last_response.headers['Location'].should =~ %r{[\?&]openid.return_to=#{return_to}} 50 | # end 51 | # end 52 | # end 53 | 54 | describe "followed by /auth/open_id/callback" do 55 | context "successful" do 56 | # before do 57 | # @identifier_url = 'http://me.example.org' 58 | # # TODO: change this mock to actually return some sort of OpenID response 59 | # stub_request(:get, @identifier_url) 60 | # get '/auth/open_id/callback' 61 | # end 62 | 63 | it "should set provider to open_id" 64 | it "should create auth_hash based on sreg" 65 | it "should create auth_hash based on ax" 66 | 67 | # it 'should call through to the master app' do 68 | # last_response.body.should == 'true' 69 | # end 70 | end 71 | 72 | context "unsuccessful" do 73 | describe "returning with expired credentials" do 74 | it "redirects to invalid credentials" do 75 | pending 76 | expect(last_response).to be_redirect 77 | expect(last_response).to match %r{invalid_credentials} 78 | end 79 | end 80 | end 81 | end 82 | end 83 | -------------------------------------------------------------------------------- /docs/class_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Class List 19 | 20 | 21 | 22 |
23 |
24 |

Class List

25 |
26 | 27 | 28 | Classes 29 | 30 | 31 | 32 | Methods 33 | 34 | 35 | 36 | Files 37 | 38 | 39 |
40 | 41 | 45 |
46 | 47 | 52 |
53 | 54 | 55 | -------------------------------------------------------------------------------- /.github/workflows/heads.yml: -------------------------------------------------------------------------------- 1 | name: Heads 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-latest 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | fail-fast: true 38 | matrix: 39 | include: 40 | # NOTE: Heads use default rubygems / bundler; their defaults are custom, unreleased, and from the future! 41 | # ruby-head 42 | - ruby: "ruby-head" 43 | appraisal_name: "omniauth-v2.1-r3" 44 | exec_cmd: "rake spec" 45 | gemfile: "Appraisal.root" 46 | rubygems: default 47 | bundler: default 48 | 49 | # # truffleruby-head 50 | # - ruby: "truffleruby-head" 51 | # appraisal_name: "omniauth-v2.1-r3" 52 | # exec_cmd: "rake spec" 53 | # gemfile: "Appraisal.root" 54 | # rubygems: default 55 | # bundler: default 56 | 57 | # jruby-head 58 | - ruby: "jruby-head" 59 | appraisal_name: "omniauth-v2.1-r3" 60 | exec_cmd: "rake spec" 61 | gemfile: "Appraisal.root" 62 | rubygems: default 63 | bundler: default 64 | 65 | steps: 66 | ### COUCHDB 67 | - name: Start CouchDB 68 | uses: iamssen/couchdb-github-action@master 69 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 70 | with: 71 | couchdb-version: "3.4.1" 72 | 73 | ### SMOKE-TEST 74 | - name: Smoke CouchDB 75 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 76 | run: | 77 | curl -f http://127.0.0.1:5984/ 78 | curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{"name": "admin", "password": "password"}' http://127.0.0.1:5984/_session 79 | 80 | - name: Checkout 81 | uses: actions/checkout@v6 82 | 83 | - name: Setup Ruby & RubyGems 84 | uses: ruby/setup-ruby@v1 85 | with: 86 | ruby-version: ${{ matrix.ruby }} 87 | rubygems: ${{ matrix.rubygems }} 88 | bundler: ${{ matrix.bundler }} 89 | bundler-cache: false 90 | 91 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 92 | # We need to do this first to get appraisal installed. 93 | # NOTE: This does not use the main Gemfile at all. 94 | - name: Install Root Appraisal 95 | run: bundle 96 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 97 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 98 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 99 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 100 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "bundler/gem_tasks" 4 | 5 | defaults = [] 6 | 7 | # See: https://docs.gitlab.com/ci/variables/predefined_variables/ 8 | is_gitlab = ENV.fetch("GITLAB_CI", "false").casecmp("true") == 0 9 | 10 | ### DEVELOPMENT TASKS 11 | # Setup Kettle Soup Cover 12 | begin 13 | require "kettle-soup-cover" 14 | 15 | Kettle::Soup::Cover.install_tasks 16 | # NOTE: Coverage on CI is configured independent of this task. 17 | # This task is for local development, as it opens results in browser 18 | defaults << "coverage" unless Kettle::Soup::Cover::IS_CI 19 | rescue LoadError 20 | desc("(stub) coverage is unavailable") 21 | task("coverage") do 22 | warn("NOTE: kettle-soup-cover isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 23 | end 24 | end 25 | 26 | # Setup Bundle Audit 27 | begin 28 | require "bundler/audit/task" 29 | 30 | Bundler::Audit::Task.new 31 | defaults.push("bundle:audit:update", "bundle:audit") 32 | rescue LoadError 33 | desc("(stub) bundle:audit is unavailable") 34 | task("bundle:audit") do 35 | warn("NOTE: bundler-audit isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 36 | end 37 | desc("(stub) bundle:audit:update is unavailable") 38 | task("bundle:audit:update") do 39 | warn("NOTE: bundler-audit isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 40 | end 41 | end 42 | 43 | # Setup RSpec 44 | begin 45 | require "rspec/core/rake_task" 46 | 47 | RSpec::Core::RakeTask.new(:spec) 48 | defaults << "spec" 49 | rescue LoadError 50 | desc("spec task stub") 51 | task(:spec) do 52 | warn("NOTE: rspec isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 53 | end 54 | end 55 | 56 | desc "spec is a pre-requisite of test task" 57 | task test: :spec 58 | 59 | # Setup RuboCop-LTS 60 | begin 61 | require "rubocop/lts" 62 | 63 | Rubocop::Lts.install_tasks 64 | # Make autocorrect the default rubocop task 65 | defaults << "rubocop_gradual:autocorrect" 66 | rescue LoadError 67 | desc("(stub) rubocop_gradual is unavailable") 68 | task(:rubocop_gradual) do 69 | warn("NOTE: rubocop-lts isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 70 | end 71 | end 72 | 73 | # Setup Yard 74 | begin 75 | require "yard" 76 | 77 | YARD::Rake::YardocTask.new(:yard) do |t| 78 | t.files = [ 79 | # Source Splats (alphabetical) 80 | "lib/**/*.rb", 81 | "-", # source and extra docs are separated by "-" 82 | # Extra Files (alphabetical) 83 | "*.cff", 84 | "*.md", 85 | "*.txt", 86 | ] 87 | end 88 | defaults << "yard" 89 | rescue LoadError 90 | desc("(stub) yard is unavailable") 91 | task(:yard) do 92 | warn("NOTE: yard isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 93 | end 94 | end 95 | 96 | # Setup Reek 97 | begin 98 | require "reek/rake/task" 99 | 100 | Reek::Rake::Task.new do |t| 101 | t.fail_on_error = true 102 | t.verbose = false 103 | t.source_files = "{lib,spec,spec_ignored,spec_orms}/**/*.rb" 104 | end 105 | defaults << "reek" unless is_gitlab 106 | rescue LoadError 107 | desc("(stub) reek is unavailable") 108 | task(:reek) do 109 | warn("NOTE: reek isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 110 | end 111 | end 112 | 113 | ### RELEASE TASKS 114 | # Setup stone_checksums 115 | begin 116 | require "stone_checksums" 117 | 118 | GemChecksums.install_tasks 119 | rescue LoadError 120 | desc("(stub) build:generate_checksums is unavailable") 121 | task("build:generate_checksums") do 122 | warn("NOTE: stone_checksums isn't installed, or is disabled for #{RUBY_VERSION} in the current environment") 123 | end 124 | end 125 | 126 | task default: defaults 127 | -------------------------------------------------------------------------------- /.github/workflows/jruby-ancient.yml: -------------------------------------------------------------------------------- 1 | name: JRuby 9.2, 9.3 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-22.04 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | matrix: 38 | include: 39 | # jruby-9.2 (targets Ruby 2.5 compatibility) 40 | - ruby: "jruby-9.2" 41 | appraisal_name: "omniauth-v1.9-r2" 42 | exec_cmd: "rake spec" 43 | gemfile: "Appraisal.root" 44 | rubygems: default 45 | bundler: default 46 | - ruby: "jruby-9.2" 47 | appraisal_name: "omniauth-v2.0-r2" 48 | exec_cmd: "rake spec" 49 | gemfile: "Appraisal.root" 50 | rubygems: default 51 | bundler: default 52 | 53 | # jruby-9.3 (targets Ruby 2.6 compatibility) 54 | - ruby: "jruby-9.3" 55 | appraisal_name: "omniauth-v1.9-r2" 56 | exec_cmd: "rake spec" 57 | gemfile: "Appraisal.root" 58 | rubygems: default 59 | bundler: default 60 | - ruby: "jruby-9.3" 61 | appraisal_name: "omniauth-v2.0-r2" 62 | exec_cmd: "rake spec" 63 | gemfile: "Appraisal.root" 64 | rubygems: default 65 | bundler: default 66 | 67 | steps: 68 | ### COUCHDB 69 | - name: Start CouchDB 70 | uses: iamssen/couchdb-github-action@master 71 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 72 | with: 73 | couchdb-version: "3.4.1" 74 | 75 | ### SMOKE-TEST 76 | - name: Smoke CouchDB 77 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 78 | run: | 79 | curl -f http://127.0.0.1:5984/ 80 | curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{"name": "admin", "password": "password"}' http://127.0.0.1:5984/_session 81 | 82 | - name: Checkout 83 | uses: actions/checkout@v6 84 | 85 | - name: Setup Ruby & RubyGems 86 | uses: ruby/setup-ruby@v1 87 | with: 88 | ruby-version: ${{ matrix.ruby }} 89 | rubygems: ${{ matrix.rubygems }} 90 | bundler: ${{ matrix.bundler }} 91 | bundler-cache: false 92 | 93 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 94 | # We need to do this first to get appraisal installed. 95 | # NOTE: This does not use the main Gemfile at all. 96 | - name: Install Root Appraisal 97 | run: bundle 98 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 99 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 100 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 101 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 102 | -------------------------------------------------------------------------------- /omniauth-openid.gemspec: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | gem_version = 4 | if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.1") 5 | # Loading the version from an anonymous module allows version.rb to get code coverage from SimpleCov! 6 | # See: https://github.com/simplecov-ruby/simplecov/issues/557#issuecomment-2630782358 7 | Module.new.tap { |mod| Kernel.load("lib/omniauth/openid/version.rb", mod) }::OmniAuth::OpenID::Version::VERSION 8 | else 9 | require_relative "lib/omniauth/openid/version" 10 | OmniAuth::OpenID::Version::VERSION 11 | end 12 | 13 | Gem::Specification.new do |spec| 14 | spec.name = "omniauth-openid" 15 | spec.version = gem_version 16 | spec.authors = ["Peter Boling", "Michael Bleigh", "Erik Michaels-Ober", "Tom Milewski"] 17 | spec.email = ["floss@galtzo.com"] 18 | 19 | # Linux distros often package gems and securely certify them independent 20 | # of the official RubyGem certification process. Allowed via ENV["SKIP_GEM_SIGNING"] 21 | # Ref: https://gitlab.com/oauth-xx/version_gem/-/issues/3 22 | # Hence, only enable signing if `SKIP_GEM_SIGNING` is not set in ENV. 23 | # See CONTRIBUTING.md 24 | unless ENV.include?("SKIP_GEM_SIGNING") 25 | user_cert = "certs/#{ENV.fetch("GEM_CERT_USER", ENV["USER"])}.pem" 26 | cert_file_path = File.join(__dir__, user_cert) 27 | cert_chain = cert_file_path.split(",") 28 | cert_chain.select! { |fp| File.exist?(fp) } 29 | if cert_file_path && cert_chain.any? 30 | spec.cert_chain = cert_chain 31 | if $PROGRAM_NAME.end_with?("gem") && ARGV[0] == "build" 32 | spec.signing_key = File.join(Gem.user_home, ".ssh", "gem-private_key.pem") 33 | end 34 | end 35 | end 36 | 37 | spec.summary = "OpenID strategy for OmniAuth." 38 | spec.description = "OpenID (not OIDC) strategy for OmniAuth." 39 | spec.homepage = "https://github.com/omniauth/#{spec.name}" 40 | spec.license = "MIT" 41 | spec.required_ruby_version = ">= 2.4.0" 42 | 43 | spec.metadata["homepage_uri"] = "https://railsbling.com/tags/#{spec.name}/" 44 | spec.metadata["source_code_uri"] = "#{spec.homepage}/tree/v#{spec.version}" 45 | spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md" 46 | spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues" 47 | spec.metadata["documentation_uri"] = "https://www.rubydoc.info/gems/#{spec.name}/#{spec.version}" 48 | spec.metadata["wiki_uri"] = "#{spec.homepage}/wiki" 49 | spec.metadata["funding_uri"] = "https://liberapay.com/pboling" 50 | spec.metadata["news_uri"] = "https://www.railsbling.com/tags/#{spec.name}" 51 | spec.metadata["rubygems_mfa_required"] = "true" 52 | 53 | # Specify which files should be added to the gem when it is released. 54 | spec.files = Dir[ 55 | # Splats (alphabetical) 56 | "lib/**/*.rb", 57 | ] 58 | # Automatically included with gem package, no need to list again in files. 59 | spec.extra_rdoc_files = Dir[ 60 | # Files (alphabetical) 61 | "CHANGELOG.md", 62 | "CODE_OF_CONDUCT.md", 63 | "CONTRIBUTING.md", 64 | "LICENSE.txt", 65 | "README.md", 66 | "SECURITY.md", 67 | ] 68 | spec.rdoc_options += [ 69 | "--title", 70 | "#{spec.name} - #{spec.summary}", 71 | "--main", 72 | "CHANGELOG.md", 73 | "CODE_OF_CONDUCT.md", 74 | "CONTRIBUTING.md", 75 | "LICENSE.txt", 76 | "README.md", 77 | "SECURITY.md", 78 | "--line-numbers", 79 | "--inline-source", 80 | "--quiet", 81 | ] 82 | spec.bindir = "exe" 83 | spec.require_paths = ["lib"] 84 | 85 | spec.add_dependency("omniauth", ">= 1.1") 86 | spec.add_dependency("rack-openid", "~> 1.4") 87 | spec.add_dependency("ruby-openid", "~> 2.1", ">= 2.1.8") 88 | spec.add_dependency("version_gem", "~> 1.1", ">= 1.1.8") 89 | 90 | ### Testing 91 | spec.add_development_dependency("rack-session", ">= 1") 92 | spec.add_development_dependency("rack-test", "~> 2.2") 93 | spec.add_development_dependency("rake", "~> 13") 94 | spec.add_development_dependency("rspec", "~> 3") 95 | spec.add_development_dependency("rspec-block_is_expected", "~> 1.0", ">= 1.0.6") 96 | spec.add_development_dependency("webmock", "~> 3.18", ">= 3.18.1") 97 | 98 | ### Releasing 99 | spec.add_development_dependency("stone_checksums", "~> 1.0") # ruby >= 2.2 100 | end 101 | -------------------------------------------------------------------------------- /docs/file.SECURITY.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | File: SECURITY 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 59 | 60 |

Security Policy

61 | 62 |

Supported Versions

63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |
VersionSupported
2.x
1.x
82 | 83 |

Security contact information

84 | 85 |

To report a security vulnerability, please use the
86 | Tidelift security contact.
87 | Tidelift will coordinate the fix and disclosure.

88 | 89 |

Additional Support

90 | 91 |

Interested in support for versions older than the latest release?
92 | Consider sponsoring the project / maintainer.

93 | 94 |

Liberapay Goal Progress Sponsor Me on Github Buy me a coffee Donate on Polar Donate to my FLOSS or refugee efforts at ko-fi.com Donate to my FLOSS or refugee efforts using Patreon

95 | 96 |

Enterprise Support

97 | 98 |

Available as part of the Tidelift Subscription.

99 | 100 |

The maintainers of this library and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers for the exact packages you use. Learn more.

101 | 102 |
103 | 104 | 109 | 110 |
111 | 112 | -------------------------------------------------------------------------------- /docs/method_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Method List 19 | 20 | 21 | 22 |
23 |
24 |

Method List

25 |
26 | 27 | 28 | Classes 29 | 30 | 31 | 32 | Methods 33 | 34 | 35 | 36 | Files 37 | 38 | 39 |
40 | 41 | 45 |
46 | 47 | 124 |
125 | 126 | 127 | -------------------------------------------------------------------------------- /docs/_index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Documentation by YARD 0.9.37 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 |
34 | 54 | 55 |

Documentation by YARD 0.9.37

56 |
57 |

Alphabetic Index

58 | 59 |

File Listing

60 | 85 | 86 |
87 |

Namespace Listing A-Z

88 | 89 | 90 | 91 | 92 | 93 | 94 | 154 | 155 |
95 | 96 | 97 |
    98 |
  • O
  • 99 |
      100 | 101 |
    • 102 | OmniAuth 103 | 104 |
    • 105 | 106 |
    • 107 | OpenID 108 | 109 | (OmniAuth::Strategies) 110 | 111 |
    • 112 | 113 |
    • 114 | OpenID 115 | 116 | (OmniAuth) 117 | 118 |
    • 119 | 120 |
    121 |
122 | 123 | 124 |
    125 |
  • S
  • 126 |
      127 | 128 |
    • 129 | Strategies 130 | 131 | (OmniAuth) 132 | 133 |
    • 134 | 135 |
    136 |
137 | 138 | 139 |
    140 |
  • V
  • 141 |
      142 | 143 |
    • 144 | Version 145 | 146 | (OmniAuth::OpenID) 147 | 148 |
    • 149 | 150 |
    151 |
152 | 153 |
156 | 157 |
158 | 159 |
160 | 161 | 166 | 167 |
168 | 169 | -------------------------------------------------------------------------------- /docs/file.CHANGELOG.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | File: CHANGELOG 8 | 9 | — Documentation by YARD 0.9.37 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
36 | 59 | 60 |

Changelog

61 | 62 |

This file documents all notable changes to this project since v2.0.2.

63 | 64 |

The format is based on Keep a Changelog v1,
65 | and this project adheres to Semantic Versioning v2.

66 | 67 |

Unreleased

68 |

Added

69 |

Changed

70 |

Deprecated

71 |

Removed

72 |

Fixed

73 |

Security

74 | 75 |

76 | 2.0.2 - 2025-06-08

77 |
    78 |
  • TAG: v2.0.2 79 |
  • 80 |
  • COVERAGE: 92.06% – 348/378 lines in 15 files
  • 81 |
  • BRANCH COVERAGE: 79.49% – 62/78 branches in 15 files
  • 82 |
  • 44.44% documented 83 |

    Added

    84 |
  • 85 |
  • Github Actions for Continuous Integration by @pboling 86 |
      87 |
    • Test workflows with latest dependencies and more platform and dep HEADs
    • 88 |
    • Expanded test suite, covering many more points of the dependency matrix
    • 89 |
    90 |
  • 91 |
  • More documentation by @pboling, @Aboling0
  • 92 |
  • 20 year signing cert expires 2045-04-29 by @pboling
  • 93 |
  • Added CITATION.cff by @pboling
  • 94 |
  • devcontainer for easier maintenance by @pboling
  • 95 |
  • Add SECURITY.md policy by @pboling
  • 96 |
  • CONTRIBUTING.md - Instructions for contributing by @pboling
  • 97 |
  • Modernized gem structure, and updated dependencies for development by @pboling
  • 98 |
  • Set SKIP_GEM_SIGNING in env to allow gem build without cryptographic signing requirement by @pboling 99 |
      100 |
    • Useful for linux distros whose package managers sign packages independently
    • 101 |
    102 |
  • 103 |
  • Example client / server in /examples by @pboling 104 |

    Changed

    105 |
  • 106 |
  • Updated Code of Conduct to Contributor Covenant v2.1 by @pboling
  • 107 |
108 | 109 |

110 | 2.0.1 - 2021-01-19

111 |
    112 |
  • TAG: [v2.0.0][2.0.0t]
  • 113 |
114 | 115 |

116 | 1.0.1 - 2011-11-04

117 |
    118 |
  • TAG: v1.0.1 119 |
  • 120 |
121 | 122 |

123 | 1.0.0 - 2011-11-02

124 |
    125 |
  • TAG: v1.0. 126 |
  • 127 |
128 | 129 |
130 | 131 | 136 | 137 |
138 | 139 | -------------------------------------------------------------------------------- /.github/workflows/coverage.yml: -------------------------------------------------------------------------------- 1 | name: Test Coverage 2 | 3 | permissions: 4 | contents: read 5 | pull-requests: write 6 | id-token: write 7 | 8 | env: 9 | K_SOUP_COV_MIN_BRANCH: 9 10 | K_SOUP_COV_MIN_LINE: 58 11 | K_SOUP_COV_MIN_HARD: true 12 | K_SOUP_COV_FORMATTERS: "html,xml,rcov,lcov,json,tty" 13 | K_SOUP_COV_DO: true 14 | K_SOUP_COV_MULTI_FORMATTERS: true 15 | K_SOUP_COV_COMMAND_NAME: "RSpec Coverage" 16 | 17 | on: 18 | push: 19 | branches: 20 | - 'master' 21 | - "*-stable" 22 | tags: 23 | - '!*' # Do not execute on tags 24 | pull_request: 25 | branches: 26 | - '*' 27 | # Allow manually triggering the workflow. 28 | workflow_dispatch: 29 | 30 | # Cancels all previous workflow runs for the same branch that have not yet completed. 31 | concurrency: 32 | # The concurrency group contains the workflow name and the branch name. 33 | group: "${{ github.workflow }}-${{ github.ref }}" 34 | cancel-in-progress: true 35 | 36 | jobs: 37 | coverage: 38 | name: Code Coverage on ${{ matrix.ruby }}@current 39 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 40 | runs-on: ubuntu-latest 41 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 42 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 43 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 44 | strategy: 45 | fail-fast: false 46 | matrix: 47 | include: 48 | # Coverage 49 | - ruby: "ruby" 50 | appraisal_name: "coverage" 51 | exec_cmd: "rake spec" 52 | gemfile: "Appraisal.root" 53 | rubygems: latest 54 | bundler: latest 55 | 56 | steps: 57 | ### COUCHDB 58 | - name: Start CouchDB 59 | uses: iamssen/couchdb-github-action@master 60 | with: 61 | couchdb-version: "3.4.1" 62 | 63 | ### MONGODB 64 | - name: Start MongoDB 65 | uses: supercharge/mongodb-github-action@1.12.1 66 | with: 67 | mongodb-version: "8.0" 68 | 69 | ### SMOKE-TEST 70 | - name: Smoke CouchDB 71 | run: | 72 | curl -f http://127.0.0.1:5984/ 73 | curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{"name": "admin", "password": "password"}' http://127.0.0.1:5984/_session 74 | 75 | - name: Checkout 76 | uses: actions/checkout@v6 77 | 78 | - name: Setup Ruby & RubyGems 79 | uses: ruby/setup-ruby@v1 80 | with: 81 | ruby-version: "${{ matrix.ruby }}" 82 | rubygems: "${{ matrix.rubygems }}" 83 | bundler: "${{ matrix.bundler }}" 84 | bundler-cache: false 85 | 86 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 87 | # We need to do this first to get appraisal installed. 88 | # NOTE: This does not use the primary Gemfile at all. 89 | - name: Install Root Appraisal 90 | run: bundle 91 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 92 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 93 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 94 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 95 | 96 | # Do SaaS coverage uploads first 97 | - name: Upload coverage to Coveralls 98 | uses: coverallsapp/github-action@master 99 | with: 100 | github-token: ${{ secrets.GITHUB_TOKEN }} 101 | continue-on-error: ${{ matrix.experimental != 'false' }} 102 | 103 | # - name: Upload coverage to QLTY 104 | # uses: qltysh/qlty-action/coverage@main 105 | # with: 106 | # token: ${{secrets.QLTY_COVERAGE_TOKEN}} 107 | # files: coverage/.resultset.json 108 | # continue-on-error: ${{ matrix.experimental != 'false' }} 109 | 110 | # Build will fail here if coverage upload fails 111 | # which will hopefully be noticed for the lack of code coverage comments 112 | - name: Upload coverage to CodeCov 113 | uses: codecov/codecov-action@v5 114 | with: 115 | use_oidc: true 116 | fail_ci_if_error: true # optional (default = false) 117 | verbose: true # optional (default = false) 118 | 119 | # Then PR comments 120 | - name: Code Coverage Summary Report 121 | uses: irongut/CodeCoverageSummary@v1.3.0 122 | if: ${{ github.event_name == 'pull_request' }} 123 | with: 124 | filename: ./coverage/coverage.xml 125 | badge: true 126 | fail_below_min: true 127 | format: markdown 128 | hide_branch_rate: false 129 | hide_complexity: true 130 | indicators: true 131 | output: both 132 | thresholds: '58 9' 133 | continue-on-error: ${{ matrix.experimental != 'false' }} 134 | 135 | - name: Add Coverage PR Comment 136 | uses: marocchino/sticky-pull-request-comment@v2 137 | if: ${{ github.event_name == 'pull_request' }} 138 | with: 139 | recreate: true 140 | path: code-coverage-results.md 141 | continue-on-error: ${{ matrix.experimental != 'false' }} 142 | -------------------------------------------------------------------------------- /.github/workflows/ancient.yml: -------------------------------------------------------------------------------- 1 | name: MRI 2.4, 2.5 (Ancient) 2 | 3 | permissions: 4 | contents: read 5 | 6 | env: 7 | K_SOUP_COV_DO: false 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'master' 13 | - "*-stable" 14 | tags: 15 | - '!*' # Do not execute on tags 16 | pull_request: 17 | branches: 18 | - '*' 19 | # Allow manually triggering the workflow. 20 | workflow_dispatch: 21 | 22 | # Cancels all previous workflow runs for the same branch that have not yet completed. 23 | concurrency: 24 | # The concurrency group contains the workflow name and the branch name. 25 | group: "${{ github.workflow }}-${{ github.ref }}" 26 | cancel-in-progress: true 27 | 28 | jobs: 29 | test: 30 | name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal_name }}${{ matrix.name_extra || '' }} 31 | if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" 32 | runs-on: ubuntu-22.04 33 | continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} 34 | env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps 35 | BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile 36 | strategy: 37 | fail-fast: false 38 | matrix: 39 | include: 40 | # Ruby 2.4 41 | - ruby: "2.4" 42 | appraisal_name: "omniauth-v1.1-r2.4" 43 | exec_cmd: "rake spec" 44 | gemfile: "Appraisal.root" 45 | rubygems: "3.3.27" 46 | bundler: "2.3.27" 47 | 48 | # Ruby 2.5 49 | - ruby: "2.5" 50 | appraisal_name: "omniauth-v1.2-r2" 51 | exec_cmd: "rake spec" 52 | gemfile: "Appraisal.root" 53 | rubygems: "3.3.27" 54 | bundler: "2.3.27" 55 | - ruby: "2.5" 56 | appraisal_name: "omniauth-v1.3-r2" 57 | exec_cmd: "rake spec" 58 | gemfile: "Appraisal.root" 59 | rubygems: "3.3.27" 60 | bundler: "2.3.27" 61 | - ruby: "2.5" 62 | appraisal_name: "omniauth-v1.4-r2" 63 | exec_cmd: "rake spec" 64 | gemfile: "Appraisal.root" 65 | rubygems: "3.3.27" 66 | bundler: "2.3.27" 67 | - ruby: "2.5" 68 | appraisal_name: "omniauth-v1.5-r2" 69 | exec_cmd: "rake spec" 70 | gemfile: "Appraisal.root" 71 | rubygems: "3.3.27" 72 | bundler: "2.3.27" 73 | - ruby: "2.5" 74 | appraisal_name: "omniauth-v1.6-r2" 75 | exec_cmd: "rake spec" 76 | gemfile: "Appraisal.root" 77 | rubygems: "3.3.27" 78 | bundler: "2.3.27" 79 | - ruby: "2.5" 80 | appraisal_name: "omniauth-v1.7-r2" 81 | exec_cmd: "rake spec" 82 | gemfile: "Appraisal.root" 83 | rubygems: "3.3.27" 84 | bundler: "2.3.27" 85 | - ruby: "2.5" 86 | appraisal_name: "omniauth-v1.8-r2" 87 | exec_cmd: "rake spec" 88 | gemfile: "Appraisal.root" 89 | rubygems: "3.3.27" 90 | bundler: "2.3.27" 91 | - ruby: "2.5" 92 | appraisal_name: "omniauth-v1.9-r2" 93 | exec_cmd: "rake spec" 94 | gemfile: "Appraisal.root" 95 | rubygems: "3.3.27" 96 | bundler: "2.3.27" 97 | - ruby: "2.5" 98 | appraisal_name: "omniauth-v2.0-r2" 99 | exec_cmd: "rake spec" 100 | gemfile: "Appraisal.root" 101 | rubygems: "3.3.27" 102 | bundler: "2.3.27" 103 | 104 | steps: 105 | ### COUCHDB 106 | - name: Start CouchDB 107 | uses: iamssen/couchdb-github-action@master 108 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 109 | with: 110 | couchdb-version: "3.4.1" 111 | 112 | ### MONGODB 113 | - name: Start MongoDB 114 | uses: supercharge/mongodb-github-action@1.12.1 115 | if: "endsWith(matrix.exec_cmd, 'mongoid')" 116 | with: 117 | mongodb-version: "8.0" 118 | 119 | ### SMOKE-TEST 120 | - name: Smoke CouchDB 121 | if: "endsWith(matrix.exec_cmd, 'couch_potato')" 122 | run: | 123 | curl -f http://127.0.0.1:5984/ 124 | curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{"name": "admin", "password": "password"}' http://127.0.0.1:5984/_session 125 | 126 | - name: Checkout 127 | uses: actions/checkout@v6 128 | 129 | - name: Setup Ruby & RubyGems 130 | uses: ruby/setup-ruby@v1 131 | with: 132 | ruby-version: ${{ matrix.ruby }} 133 | rubygems: ${{ matrix.rubygems }} 134 | bundler: ${{ matrix.bundler }} 135 | bundler-cache: false 136 | 137 | # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) 138 | # We need to do this first to get appraisal installed. 139 | # NOTE: This does not use the main Gemfile at all. 140 | - name: Install Root Appraisal 141 | run: bundle 142 | - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 143 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle 144 | - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }} 145 | run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }} 146 | -------------------------------------------------------------------------------- /docs/css/full_list.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; 4 | font-size: 13px; 5 | height: 101%; 6 | overflow-x: hidden; 7 | background: #fafafa; 8 | } 9 | 10 | h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; } 11 | .clear { clear: both; } 12 | .fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; } 13 | #search { position: absolute; right: 5px; top: 9px; padding-left: 24px; } 14 | #content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; } 15 | #full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; } 16 | #full_list ul { padding: 0; } 17 | #full_list li { padding: 0; margin: 0; list-style: none; } 18 | #full_list li .item { padding: 5px 5px 5px 12px; } 19 | #noresults { padding: 7px 12px; background: #fff; } 20 | #content.insearch #noresults { margin-left: 7px; } 21 | li.collapsed ul { display: none; } 22 | li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; } 23 | li.collapsed a.toggle { cursor: default; background-position: top left; } 24 | li { color: #666; cursor: pointer; } 25 | li.deprecated { text-decoration: line-through; font-style: italic; } 26 | li.odd { background: #f0f0f0; } 27 | li.even { background: #fafafa; } 28 | .item:hover { background: #ddd; } 29 | li small:before { content: "("; } 30 | li small:after { content: ")"; } 31 | li small.search_info { display: none; } 32 | a, a:visited { text-decoration: none; color: #05a; } 33 | li.clicked > .item { background: #05a; color: #ccc; } 34 | li.clicked > .item a, li.clicked > .item a:visited { color: #eee; } 35 | li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; } 36 | li.collapsed.clicked a.toggle { background-position: top right; } 37 | #search input { border: 1px solid #bbb; border-radius: 3px; } 38 | #full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; } 39 | #full_list_nav a, #nav a:visited { color: #358; } 40 | #full_list_nav a:hover { background: transparent; color: #5af; } 41 | #full_list_nav span:after { content: ' | '; } 42 | #full_list_nav span:last-child:after { content: ''; } 43 | 44 | #content h1 { margin-top: 0; } 45 | li { white-space: nowrap; cursor: normal; } 46 | li small { display: block; font-size: 0.8em; } 47 | li small:before { content: ""; } 48 | li small:after { content: ""; } 49 | li small.search_info { display: none; } 50 | #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #666; padding-left: 0; padding-right: 24px; } 51 | #content.insearch #search { background-position: center right; } 52 | #search input { width: 110px; } 53 | 54 | #full_list.insearch ul { display: block; } 55 | #full_list.insearch .item { display: none; } 56 | #full_list.insearch .found { display: block; padding-left: 11px !important; } 57 | #full_list.insearch li a.toggle { display: none; } 58 | #full_list.insearch li small.search_info { display: block; } 59 | -------------------------------------------------------------------------------- /lib/omniauth/strategies/open_id.rb: -------------------------------------------------------------------------------- 1 | require "omniauth" 2 | require "rack/openid" 3 | require "openid/store/memory" 4 | 5 | module OmniAuth 6 | module Strategies 7 | # OmniAuth strategy for connecting via OpenID. This allows for connection 8 | # to a wide variety of sites, some of which are listed [on the OpenID website](http://openid.net/get-an-openid/). 9 | class OpenID 10 | include OmniAuth::Strategy 11 | 12 | AX = { 13 | email: "http://axschema.org/contact/email", 14 | name: "http://axschema.org/namePerson", 15 | nickname: "http://axschema.org/namePerson/friendly", 16 | first_name: "http://axschema.org/namePerson/first", 17 | last_name: "http://axschema.org/namePerson/last", 18 | city: "http://axschema.org/contact/city/home", 19 | state: "http://axschema.org/contact/state/home", 20 | website: "http://axschema.org/contact/web/default", 21 | image: "http://axschema.org/media/image/aspect11", 22 | } 23 | 24 | option :name, :open_id 25 | option :required, [AX[:email], AX[:name], AX[:first_name], AX[:last_name], "email", "fullname"] 26 | option :optional, [AX[:nickname], AX[:city], AX[:state], AX[:website], AX[:image], "postcode", "nickname"] 27 | option :immediate, false 28 | option :trust_root, proc { |root_uri| nil } 29 | option :store, ::OpenID::Store::Memory.new 30 | option :identifier, nil 31 | option :identifier_param, "openid_url" 32 | option :trust_root, nil 33 | 34 | def dummy_app 35 | lambda { |env| 36 | req = Rack::Request.new(env) 37 | root_uri = "#{req.scheme}://#{req.host_with_port}/" 38 | trust_root = if options.trust_root 39 | if options.trust_root.respond_to?(:call) 40 | options.trust_root.call(root_uri) 41 | else 42 | options.trust_root 43 | end 44 | else 45 | %r{^(https?://[^/]+)}.match(callback_url) { |m| m[1] } 46 | end 47 | 48 | [ 49 | 401, 50 | { 51 | "WWW-Authenticate" => Rack::OpenID.build_header( 52 | identifier: identifier, 53 | return_to: callback_url, 54 | trust_root: trust_root, 55 | required: options.required, 56 | optional: options.optional, 57 | method: "post", 58 | immediate: options.immediate, 59 | ), 60 | }, 61 | [], 62 | ] 63 | } 64 | end 65 | 66 | def identifier 67 | i = options.identifier || request.params[options.identifier_param.to_s] 68 | i = nil if i == "" 69 | i 70 | end 71 | 72 | def request_phase 73 | identifier ? start : get_identifier 74 | end 75 | 76 | def start 77 | openid = Rack::OpenID.new(dummy_app, options[:store]) 78 | response = openid.call(env) 79 | case env["rack.openid.response"] 80 | when Rack::OpenID::MissingResponse, Rack::OpenID::TimeoutResponse 81 | fail!(:connection_failed) 82 | else 83 | response 84 | end 85 | end 86 | 87 | def get_identifier 88 | f = OmniAuth::Form.new(title: "OpenID Authentication") 89 | f.label_field("OpenID Identifier", options.identifier_param) 90 | f.input_field("url", options.identifier_param) 91 | f.to_response 92 | end 93 | 94 | uid { openid_response.display_identifier } 95 | 96 | info do 97 | sreg_user_info.merge(ax_user_info) 98 | end 99 | 100 | extra do 101 | {"response" => openid_response} 102 | end 103 | 104 | def callback_phase 105 | return fail!(:invalid_credentials) unless openid_response && openid_response.status == :success 106 | super 107 | end 108 | 109 | def openid_response 110 | unless @openid_response 111 | openid = Rack::OpenID.new(lambda { |env| [200, {}, []] }, options[:store]) 112 | openid.call(env) 113 | @openid_response = env.delete("rack.openid.response") 114 | end 115 | @openid_response 116 | end 117 | 118 | def sreg_user_info 119 | sreg = ::OpenID::SReg::Response.from_success_response(openid_response) 120 | return {} unless sreg 121 | { 122 | "email" => sreg["email"], 123 | "name" => sreg["fullname"], 124 | "location" => sreg["postcode"], 125 | "nickname" => sreg["nickname"], 126 | }.reject { |k, v| v.nil? || v == "" } 127 | end 128 | 129 | def ax_user_info 130 | ax = ::OpenID::AX::FetchResponse.from_success_response(openid_response) 131 | return {} unless ax 132 | { 133 | "email" => ax.get_single(AX[:email]), 134 | "first_name" => ax.get_single(AX[:first_name]), 135 | "last_name" => ax.get_single(AX[:last_name]), 136 | "name" => (ax.get_single(AX[:name]) || [ax.get_single(AX[:first_name]), ax.get_single(AX[:last_name])].join(" ")).strip, 137 | "location" => ("#{ax.get_single(AX[:city])}, #{ax.get_single(AX[:state])}" if Array(ax.get_single(AX[:city])).any? && Array(ax.get_single(AX[:state])).any?), 138 | "nickname" => ax.get_single(AX[:nickname]), 139 | "urls" => ({"Website" => Array(ax.get_single(AX[:website])).first} if Array(ax.get_single(AX[:website])).any?), 140 | }.each_with_object({}) { |(k, v), h| 141 | h[k] = Array(v).first 142 | }.reject { |k, v| v.nil? || v == "" } 143 | end 144 | end 145 | end 146 | end 147 | 148 | OmniAuth.config.add_camelization("openid", "OpenID") 149 | OmniAuth.config.add_camelization("open_id", "OpenID") 150 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Bug reports and pull requests are welcome on GitHub at [https://github.com/omniauth/omniauth-openid][🚎src-main]. 4 | This project should be a safe, welcoming space for collaboration, so contributors agree to adhere to 5 | the [code of conduct][🤝conduct]. 6 | 7 | To submit a patch, please fork the project, create a patch with tests, and send a pull request. 8 | 9 | Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog]. 10 | 11 | ## Help out! 12 | 13 | Take a look at the `reek` list which is the file called `REEK` and find something to improve. 14 | 15 | Follow these instructions: 16 | 17 | 1. Fork the repository 18 | 2. Create a feature branch (`git checkout -b my-new-feature`) 19 | 3. Make some fixes. 20 | 4. Commit changes (`git commit -am 'Added some feature'`) 21 | 5. Push to the branch (`git push origin my-new-feature`) 22 | 6. Make sure to add tests for it. This is important, so it doesn't break in a future release. 23 | 7. Create new Pull Request. 24 | 25 | ## Appraisals 26 | 27 | From time to time the appraisal gemfiles in `gemfiles/` will need to be updated. 28 | 29 | NOTE: The `eval_gemfile` feature comes from a [fork][🚎appraisal-fork] of Appraisal. 30 | 31 | Please upvote the PR for `eval_gemfile` [support][🚎appraisal-eval-gemfile-pr] 32 | 33 | Create or update them with the commands: 34 | 35 | ```shell 36 | BUNDLE_GEMFILE=Appraisal.root.gemfile bundle 37 | BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal update 38 | bundle exec rake rubocop_gradual:autocorrect 39 | ``` 40 | 41 | When adding an appraisal to CI, check the [runner tool cache][🏃‍♂️runner-tool-cache] to see which runner to use. 42 | 43 | ## The Reek List 44 | 45 | Take a look at the `reek` list which is the file called `REEK` and find something to improve. 46 | 47 | To refresh the `reek` list: 48 | 49 | ```bash 50 | bundle exec reek > REEK 51 | ``` 52 | 53 | ## Run Tests 54 | 55 | To run all tests: 56 | 57 | ```bash 58 | bundle exec rake test 59 | ``` 60 | 61 | ## Lint It 62 | 63 | Run all the default tasks, which includes running the gradually autocorrecting linter, `rubocop-gradual`. 64 | 65 | ```bash 66 | bundle exec rake 67 | ``` 68 | 69 | Or just run the linter. 70 | 71 | ```bash 72 | bundle exec rake rubocop_gradual:autocorrect 73 | ``` 74 | 75 | ## Contributors 76 | 77 | [![Contributors][🖐contributors-img]][🖐contributors] 78 | 79 | Made with [contributors-img][🖐contrib-rocks]. 80 | 81 | ## For Maintainers 82 | 83 | ### One-time, Per-maintainer, Setup 84 | 85 | **IMPORTANT**: To sign a build, 86 | a public key for signing gems will need to be picked up by the line in the 87 | `gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there). 88 | All releases to RubyGems.org are signed releases. 89 | See: [RubyGems Security Guide][🔒️rubygems-security-guide] 90 | 91 | NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in the environment. 92 | 93 | ### To release a new version: 94 | 95 | 1. Run `bin/setup && bin/rake` as a "test, coverage, & linting" sanity check 96 | 2. Update the version number in `version.rb`, and ensure `CHANGELOG.md` reflects changes 97 | 3. Run `bin/setup && bin/rake` again as a secondary check, and to update `Gemfile.lock` 98 | 4. Run `git commit -am "🔖 Prepare release v"` to commit the changes 99 | 5. Run `git push` to trigger the final CI pipeline before release, and merge PRs 100 | - NOTE: Remember to [check the build][🧪build]. 101 | 6. Run `export GIT_TRUNK_BRANCH_NAME="$(git remote show origin | grep 'HEAD branch' | cut -d ' ' -f5)" && echo $GIT_TRUNK_BRANCH_NAME` 102 | 7. Run `git checkout $GIT_TRUNK_BRANCH_NAME` 103 | 8. Run `git pull origin $GIT_TRUNK_BRANCH_NAME` to ensure latest trunk code 104 | 9. Set `SOURCE_DATE_EPOCH` so `rake build` and `rake release` use same timestamp, and generate same checksums 105 | - Run `export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH` 106 | - If the echo above has no output, then it didn't work. 107 | - Note: `zsh/datetime` module is needed, if running `zsh`. 108 | - In older versions of `bash` you can use `date +%s` instead, i.e. `export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH` 109 | 10. Run `bundle exec rake build` 110 | 11. Run `bin/gem_checksums` (more context [1][🔒️rubygems-checksums-pr], [2][🔒️rubygems-guides-pr]) 111 | to create SHA-256 and SHA-512 checksums. This functionality is provided by the `stone_checksums` 112 | [gem][💎stone_checksums]. 113 | - The script automatically commits but does not push the checksums 114 | 12. Run `bundle exec rake release` which will create a git tag for the version, 115 | push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems] 116 | 117 | 13. [🚎src-main]: https://github.com/omniauth/omniauth-openid 118 | [🧪build]: https://github.com/omniauth/omniauth-openid/actions 119 | [🤝conduct]: https://github.com/omniauth/omniauth-openid/blob/master/CODE_OF_CONDUCT.md 120 | [🖐contrib-rocks]: https://contrib.rocks 121 | [🖐contributors]: https://github.com/omniauth/omniauth-openid/graphs/contributors 122 | [🖐contributors-img]: https://contrib.rocks/image?repo=omniauth/omniauth-openid 123 | [💎rubygems]: https://rubygems.org 124 | [🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems 125 | [🔒️rubygems-checksums-pr]: https://github.com/rubygems/rubygems/pull/6022 126 | [🔒️rubygems-guides-pr]: https://github.com/rubygems/guides/pull/325 127 | [💎stone_checksums]: https://github.com/pboling/stone_checksums 128 | [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/ 129 | [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat 130 | [🚎appraisal-eval-gemfile-pr]: https://github.com/thoughtbot/appraisal/pull/248 131 | [🚎appraisal-fork]: https://github.com/pboling/appraisal/tree/galtzo 132 | [🏃‍♂️runner-tool-cache]: https://github.com/ruby/ruby-builder/releases/tag/toolcache 133 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributor Covenant Code of Conduct 3 | 4 | ## Our Pledge 5 | 6 | We as members, contributors, and leaders pledge to make participation in our 7 | community a harassment-free experience for everyone, regardless of age, body 8 | size, visible or invisible disability, ethnicity, sex characteristics, gender 9 | identity and expression, level of experience, education, socio-economic status, 10 | nationality, personal appearance, race, caste, color, religion, or sexual 11 | identity and orientation. 12 | 13 | We pledge to act and interact in ways that contribute to an open, welcoming, 14 | diverse, inclusive, and healthy community. 15 | 16 | ## Our Standards 17 | 18 | Examples of behavior that contributes to a positive environment for our 19 | community include: 20 | 21 | * Demonstrating empathy and kindness toward other people 22 | * Being respectful of differing opinions, viewpoints, and experiences 23 | * Giving and gracefully accepting constructive feedback 24 | * Accepting responsibility and apologizing to those affected by our mistakes, 25 | and learning from the experience 26 | * Focusing on what is best not just for us as individuals, but for the overall 27 | community 28 | 29 | Examples of unacceptable behavior include: 30 | 31 | * The use of sexualized language or imagery, and sexual attention or advances of 32 | any kind 33 | * Trolling, insulting or derogatory comments, and personal or political attacks 34 | * Public or private harassment 35 | * Publishing others' private information, such as a physical or email address, 36 | without their explicit permission 37 | * Other conduct which could reasonably be considered inappropriate in a 38 | professional setting 39 | 40 | ## Enforcement Responsibilities 41 | 42 | Community leaders are responsible for clarifying and enforcing our standards of 43 | acceptable behavior and will take appropriate and fair corrective action in 44 | response to any behavior that they deem inappropriate, threatening, offensive, 45 | or harmful. 46 | 47 | Community leaders have the right and responsibility to remove, edit, or reject 48 | comments, commits, code, wiki edits, issues, and other contributions that are 49 | not aligned to this Code of Conduct, and will communicate reasons for moderation 50 | decisions when appropriate. 51 | 52 | ## Scope 53 | 54 | This Code of Conduct applies within all community spaces, and also applies when 55 | an individual is officially representing the community in public spaces. 56 | Examples of representing our community include using an official email address, 57 | posting via an official social media account, or acting as an appointed 58 | representative at an online or offline event. 59 | 60 | ## Enforcement 61 | 62 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 63 | reported to the community leaders responsible for enforcement at 64 | [![Contact BDFL][🚂bdfl-contact-img]][🚂bdfl-contact]. 65 | All complaints will be reviewed and investigated promptly and fairly. 66 | 67 | All community leaders are obligated to respect the privacy and security of the 68 | reporter of any incident. 69 | 70 | ## Enforcement Guidelines 71 | 72 | Community leaders will follow these Community Impact Guidelines in determining 73 | the consequences for any action they deem in violation of this Code of Conduct: 74 | 75 | ### 1. Correction 76 | 77 | **Community Impact**: Use of inappropriate language or other behavior deemed 78 | unprofessional or unwelcome in the community. 79 | 80 | **Consequence**: A private, written warning from community leaders, providing 81 | clarity around the nature of the violation and an explanation of why the 82 | behavior was inappropriate. A public apology may be requested. 83 | 84 | ### 2. Warning 85 | 86 | **Community Impact**: A violation through a single incident or series of 87 | actions. 88 | 89 | **Consequence**: A warning with consequences for continued behavior. No 90 | interaction with the people involved, including unsolicited interaction with 91 | those enforcing the Code of Conduct, for a specified period of time. This 92 | includes avoiding interactions in community spaces as well as external channels 93 | like social media. Violating these terms may lead to a temporary or permanent 94 | ban. 95 | 96 | ### 3. Temporary Ban 97 | 98 | **Community Impact**: A serious violation of community standards, including 99 | sustained inappropriate behavior. 100 | 101 | **Consequence**: A temporary ban from any sort of interaction or public 102 | communication with the community for a specified period of time. No public or 103 | private interaction with the people involved, including unsolicited interaction 104 | with those enforcing the Code of Conduct, is allowed during this period. 105 | Violating these terms may lead to a permanent ban. 106 | 107 | ### 4. Permanent Ban 108 | 109 | **Community Impact**: Demonstrating a pattern of violation of community 110 | standards, including sustained inappropriate behavior, harassment of an 111 | individual, or aggression toward or disparagement of classes of individuals. 112 | 113 | **Consequence**: A permanent ban from any sort of public interaction within the 114 | community. 115 | 116 | ## Attribution 117 | 118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 119 | version 2.1, available at 120 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 121 | 122 | Community Impact Guidelines were inspired by 123 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 127 | [https://www.contributor-covenant.org/translations][translations]. 128 | 129 | [homepage]: https://www.contributor-covenant.org 130 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 131 | [Mozilla CoC]: https://github.com/mozilla/diversity 132 | [FAQ]: https://www.contributor-covenant.org/faq 133 | [translations]: https://www.contributor-covenant.org/translations 134 | [🚂bdfl-contact]: http://www.railsbling.com/contact 135 | [🚂bdfl-contact-img]: https://img.shields.io/badge/Contact-BDFL-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red 136 | -------------------------------------------------------------------------------- /REEK: -------------------------------------------------------------------------------- 1 | lib/omniauth/openid/version.rb -- 1 warning: 2 | [2]:IrresponsibleModule: OmniAuth::OpenID has no descriptive comment [https://github.com/troessner/reek/blob/v6.5.0/docs/Irresponsible-Module.md] 3 | lib/omniauth/strategies/open_id.rb -- 30 warnings: 4 | [137, 137]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'AX[:city]' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 5 | [134, 136]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'AX[:first_name]' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 6 | [135, 136]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'AX[:last_name]' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 7 | [137, 137]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'AX[:state]' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 8 | [139, 139]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'AX[:website]' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 9 | [139, 139]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'Array(ax.get_single(AX[:website]))' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 10 | [137, 137]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'ax.get_single(AX[:city])' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 11 | [134, 136]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'ax.get_single(AX[:first_name])' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 12 | [135, 136]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'ax.get_single(AX[:last_name])' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 13 | [137, 137]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'ax.get_single(AX[:state])' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 14 | [139, 139]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#ax_user_info calls 'ax.get_single(AX[:website])' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 15 | [38, 39, 40, 42]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#dummy_app calls 'options.trust_root' 4 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 16 | [89, 90]:DuplicateMethodCall: OmniAuth::Strategies::OpenID#get_identifier calls 'options.identifier_param' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md] 17 | [133, 134, 135, 136, 136, 136, 137, 137, 137, 137, 138, 139, 139]:FeatureEnvy: OmniAuth::Strategies::OpenID#ax_user_info refers to 'ax' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Feature-Envy.md] 18 | [89, 90, 91]:FeatureEnvy: OmniAuth::Strategies::OpenID#get_identifier refers to 'f' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Feature-Envy.md] 19 | [122, 123, 124, 125]:FeatureEnvy: OmniAuth::Strategies::OpenID#sreg_user_info refers to 'sreg' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Feature-Envy.md] 20 | [9]:InstanceVariableAssumption: OmniAuth::Strategies::OpenID assumes too much for instance variable '@openid_response' [https://github.com/troessner/reek/blob/v6.5.0/docs/Instance-Variable-Assumption.md] 21 | [39]:ManualDispatch: OmniAuth::Strategies::OpenID#dummy_app manually dispatches method call [https://github.com/troessner/reek/blob/v6.5.0/docs/Manual-Dispatch.md] 22 | [45]:NestedIterators: OmniAuth::Strategies::OpenID#dummy_app contains iterators nested 2 deep [https://github.com/troessner/reek/blob/v6.5.0/docs/Nested-Iterators.md] 23 | [142]:NilCheck: OmniAuth::Strategies::OpenID#ax_user_info performs a nil-check [https://github.com/troessner/reek/blob/v6.5.0/docs/Nil-Check.md] 24 | [126]:NilCheck: OmniAuth::Strategies::OpenID#sreg_user_info performs a nil-check [https://github.com/troessner/reek/blob/v6.5.0/docs/Nil-Check.md] 25 | [34]:TooManyStatements: OmniAuth::Strategies::OpenID#dummy_app has approx 8 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md] 26 | [140]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#ax_user_info has the variable name 'h' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 27 | [140, 142]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#ax_user_info has the variable name 'k' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 28 | [140, 142]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#ax_user_info has the variable name 'v' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 29 | [45]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#dummy_app has the variable name 'm' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 30 | [88]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#get_identifier has the variable name 'f' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 31 | [67, 68]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#identifier has the variable name 'i' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 32 | [126]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#sreg_user_info has the variable name 'k' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 33 | [126]:UncommunicativeVariableName: OmniAuth::Strategies::OpenID#sreg_user_info has the variable name 'v' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md] 34 | spec/omniauth/strategies/open_id_spec.rb -- 1 warning: 35 | [2]:TooManyStatements: app has approx 6 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md] 36 | .yard_gfm_support.rb -- 1 warning: 37 | [9, 9]:FeatureEnvy: KramdownGfmDocument#initialize refers to 'options' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Feature-Envy.md] 38 | 33 total warnings 39 | -------------------------------------------------------------------------------- /Appraisals: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # HOW TO UPDATE APPRAISALS: 4 | # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle 5 | # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal update 6 | # bundle exec rake rubocop_gradual:autocorrect 7 | 8 | # Used for HEAD (nightly) releases of ruby, truffleruby, and jruby. 9 | # Split into discrete appraisals if one of them needs a dependency locked discretely. 10 | appraise "dep-heads" do 11 | eval_gemfile "modular/runtime_heads.gemfile" 12 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 13 | end 14 | 15 | # Test Matrix: 16 | # - Ruby 2.4 17 | appraise "omniauth-v1.1-r2.4" do 18 | eval_gemfile "modular/omniauth/r2/v1.1.gemfile" 19 | eval_gemfile "modular/x_std_libs/r2.4/libs.gemfile" 20 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 21 | end 22 | 23 | # Test Matrix: 24 | # - Ruby 2.5 25 | # - Ruby 2.6 26 | # - Ruby 2.7 27 | appraise "omniauth-v1.2-r2" do 28 | eval_gemfile "modular/omniauth/r2/v1.2.gemfile" 29 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 30 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 31 | end 32 | 33 | # Compat: Ruby >= 2.5 34 | # Test Matrix: 35 | # - Ruby 2.5 36 | # - Ruby 2.6 37 | # - Ruby 2.7 38 | appraise "omniauth-v1.3-r2" do 39 | eval_gemfile "modular/omniauth/r2/v1.3.gemfile" 40 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 41 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 42 | end 43 | 44 | # Compat: Ruby >= 2.5 45 | # Test Matrix: 46 | # - Ruby 2.5 47 | # - Ruby 2.6 48 | # - Ruby 2.7 49 | appraise "omniauth-v1.4-r2" do 50 | eval_gemfile "modular/omniauth/r2/v1.4.gemfile" 51 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 52 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 53 | end 54 | 55 | # Compat: Ruby >= 2.5 56 | # Test Matrix: 57 | # - Ruby 2.5 58 | # - Ruby 2.6 59 | # - Ruby 2.7 60 | appraise "omniauth-v1.5-r2" do 61 | eval_gemfile "modular/omniauth/r2/v1.5.gemfile" 62 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 63 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 64 | end 65 | 66 | # Compat: Ruby >= 2.5 67 | # Test Matrix: 68 | # - Ruby 2.5 69 | # - Ruby 2.6 70 | # - Ruby 2.7 71 | appraise "omniauth-v1.6-r2" do 72 | eval_gemfile "modular/omniauth/r2/v1.6.gemfile" 73 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 74 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 75 | end 76 | 77 | # Compat: Ruby >= 2.5 78 | # Test Matrix: 79 | # - Ruby 2.5 80 | # - Ruby 2.6 81 | # - Ruby 2.7 82 | appraise "omniauth-v1.7-r2" do 83 | eval_gemfile "modular/omniauth/r2/v1.7.gemfile" 84 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 85 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 86 | end 87 | 88 | # Compat: Ruby >= 2.5 89 | # Test Matrix: 90 | # - Ruby 2.5 91 | # - Ruby 2.6 92 | # - Ruby 2.7 93 | appraise "omniauth-v1.8-r2" do 94 | eval_gemfile "modular/omniauth/r2/v1.8.gemfile" 95 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 96 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 97 | end 98 | 99 | # Compat: Ruby >= 2.5 100 | # Test Matrix: 101 | # - Ruby 2.5 102 | # - JRuby 9.2 103 | # - Ruby 2.6 104 | # - JRuby 9.3 105 | # - Ruby 2.7 106 | appraise "omniauth-v1.9-r2" do 107 | eval_gemfile "modular/omniauth/r2/v1.9.gemfile" 108 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 109 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 110 | end 111 | 112 | # Compat: Ruby >= 2.5 113 | # Test Matrix: 114 | # - Ruby 2.5 115 | # - JRuby 9.2 116 | # - Ruby 2.6 117 | # - JRuby 9.3 118 | # - Ruby 2.7 119 | appraise "omniauth-v2.0-r2" do 120 | eval_gemfile "modular/omniauth/r2/v2.0.gemfile" 121 | eval_gemfile "modular/x_std_libs/r2/libs.gemfile" 122 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 123 | end 124 | 125 | # Compat: Ruby >= 2.5 126 | # Test Matrix: 127 | # - Ruby 3.0 128 | appraise "omniauth-v2.1-r3.0" do 129 | eval_gemfile "modular/omniauth/r3/v2.1.gemfile" 130 | eval_gemfile "modular/x_std_libs/r3/libs.gemfile" 131 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 132 | end 133 | 134 | # Compat: Ruby >= 3.1 135 | # Test Matrix: 136 | # - Ruby 3.1 137 | # - JRuby 9.4 138 | # - Ruby 3.2 139 | # - Ruby 3.3 140 | # - JRuby 10.0 141 | # - jruby-head 142 | appraise "omniauth-v2.1-r3" do 143 | eval_gemfile "modular/omniauth/r3/v2.1.gemfile" 144 | eval_gemfile "modular/x_std_libs/r3/libs.gemfile" 145 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 146 | end 147 | 148 | # Only run security audit on the latest version of Ruby 149 | appraise "audit" do 150 | eval_gemfile "modular/omniauth/r3/v2.1.gemfile" 151 | eval_gemfile "modular/audit.gemfile" 152 | eval_gemfile "modular/x_std_libs/r3/libs.gemfile" 153 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 154 | end 155 | 156 | # Only run coverage on the latest version of Ruby 157 | appraise "coverage" do 158 | eval_gemfile "modular/omniauth/r3/v2.1.gemfile" 159 | eval_gemfile "modular/coverage.gemfile" 160 | gem "ostruct", "~> 0.6", ">= 0.6.1" # Ruby >= 2.5 161 | eval_gemfile "modular/x_std_libs/r3/libs.gemfile" 162 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 163 | end 164 | 165 | # Only run linter on the latest version of Ruby (but, in support of the oldest supported Ruby version) 166 | appraise "style" do 167 | eval_gemfile "modular/style.gemfile" 168 | eval_gemfile "modular/omniauth/r3/v2.1.gemfile" 169 | eval_gemfile "modular/x_std_libs/r3/libs.gemfile" 170 | remove_gem "appraisal" # only present because it must be in the gemfile because we target a git branch 171 | end 172 | --------------------------------------------------------------------------------