├── 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 |
5 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/docs/frames.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Documentation by YARD 0.9.37
6 |
7 |
18 |
19 | Oops!
20 | YARD requires JavaScript!
21 |
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 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
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 |
46 |
47 |
48 |
49 | OpenID < Object
OmniAuth::Strategies
50 |
51 |
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 | Version
68 | Supported
69 |
70 |
71 |
72 |
73 | 2.x
74 | ✅
75 |
76 |
77 | 1.x
78 | ❌
79 |
80 |
81 |
82 |
83 |
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 |
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 |
46 |
47 |
48 |
49 |
50 |
51 |
55 |
56 |
57 |
58 |
59 |
63 |
64 |
65 |
66 |
67 |
68 |
#dummy_app
69 |
OmniAuth::Strategies::OpenID
70 |
71 |
72 |
73 |
74 |
75 |
79 |
80 |
81 |
82 |
83 |
84 |
#identifier
85 |
OmniAuth::Strategies::OpenID
86 |
87 |
88 |
89 |
90 |
91 |
95 |
96 |
97 |
98 |
99 |
103 |
104 |
105 |
106 |
107 |
111 |
112 |
113 |
114 |
115 |
116 |
#start
117 |
OmniAuth::Strategies::OpenID
118 |
119 |
120 |
121 |
122 |
123 |
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 |
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 |
154 |
155 |
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 |
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 |
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 |
--------------------------------------------------------------------------------