diff --git a/Gemfile b/Gemfile index b5ee020..1ffb68c 100644 --- a/Gemfile +++ b/Gemfile @@ -89,6 +89,12 @@ gem 'pundit', '~> 2.0' # for performing complex user interactions. gem 'interactor', '~> 3.1' +# A generalized Rack framework for multiple-provider authentication. +gem 'omniauth', '~> 1.8' + +# Official OmniAuth strategy for GitHub. +gem 'omniauth-github', '~> 1.3' + group :development, :test do # factory_bot provides a framework and DSL for defining and using factories. gem 'factory_bot_rails', '~> 4.10' diff --git a/Gemfile.lock b/Gemfile.lock index 4191f68..eb25e7e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -150,6 +150,7 @@ GEM gherkin (5.1.0) globalid (0.4.1) activesupport (>= 4.2.0) + hashie (3.5.7) http-cookie (1.0.3) domain_name (~> 0.5) i18n (1.1.1) @@ -161,6 +162,7 @@ GEM railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (2.1.0) + jwt (2.1.0) launchy (2.4.3) addressable (~> 2.3) letter_opener (1.6.0) @@ -190,6 +192,7 @@ GEM msgpack (1.2.4) multi_json (1.13.1) multi_test (0.1.2) + multi_xml (0.6.0) multipart-post (2.0.0) net-scp (1.2.1) net-ssh (>= 2.6.5) @@ -198,6 +201,21 @@ GEM nio4r (2.3.1) nokogiri (1.8.5) mini_portile2 (~> 2.3.0) + oauth2 (1.4.1) + faraday (>= 0.8, < 0.16.0) + jwt (>= 1.0, < 3.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (>= 1.2, < 3) + omniauth (1.8.1) + hashie (>= 3.4.6, < 3.6.0) + rack (>= 1.6.2, < 3) + omniauth-github (1.3.0) + omniauth (~> 1.5) + omniauth-oauth2 (>= 1.4.0, < 2.0) + omniauth-oauth2 (1.5.0) + oauth2 (~> 1.1) + omniauth (~> 1.2) orm_adapter (0.5.0) parallel (1.12.1) parser (2.5.3.0) @@ -389,6 +407,8 @@ DEPENDENCIES letter_opener (~> 1.6) listen (>= 3.0.5, < 3.2) mini_racer + omniauth (~> 1.8) + omniauth-github (~> 1.3) pg (>= 0.18, < 2.0) pry-rails (~> 0.3) puma (~> 3.11) diff --git a/app/models/user.rb b/app/models/user.rb index c45a16a..fd8d470 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,13 +5,14 @@ class User < ApplicationRecord :confirmable, :database_authenticatable, :lockable, - # :omniauthable, + :omniauthable, :recoverable, :registerable, :rememberable, :timeoutable, :trackable, :validatable, + omniauth_providers: %i[github], ) belongs_to :account diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc index 8428fc0..c76590a 100644 --- a/config/credentials.yml.enc +++ b/config/credentials.yml.enc @@ -1 +1 @@ -Zz5yhPFWJUYxSjnvGVnK96y7BPjoB5O3uOmuky3X5NChnp+L6Akf1f10EjcGDW2btupSUDLM2PS1YuLdxMHOF/8HvRFAoRfVUNNOgdA1IxeOiTMU/v209dBGp/o6ZTF5XbIE8CfzudBxNMhLc8FbvBbJRcuXLXy5zSJvx2TEu+EsJr4b5BHHjPd++o/lbOTdAkxiv7A+0C+jpbkl/PslkZ84XYSK1QREQVTWzY/fpNeprHsZG7nwmDMK28hYi7zCBb9LlO2OVkXIhHmaDTGV/ASfVPS6y9/8h3EURcM3X/0iezE8MSg7YjO73qNzSbpOfNrOrrhmNc3iX4fQ7EZgBXuIVBLOBCBgQS94GfHG4Ml9vZtkMpkVofu1+L2dMlTXV7f8HLYDgqFA+yQEIoaLd7LnjmBAV1rxvkPJUNPNDlT/SL1JAk/vJhIdLXu/+FVVEkFw65E05QT+BxriWJyMwhin8KLihY29zG/Q53iBDR+zz5SgIea7CraSM39SVG2dejAU9ZfTJ5ddglJ90VQJFEd0e40gF6a5Wkvj4ikuX6ScO4pmP33gCy1xwLw0/aYvWtfyxBO0Xrtfpa7a/39Y+RUJUyHyM9CELV7eF64xebpxjdHfI4h+GcRqAqoYQlp4iM4gcRLO17B13pCDXuFEm/pOjSa1v1cs43RzGsWDF9Aw8eLYQE1PyONd04WCT+Utg/P6q4Qk3RWA5qpXWY/05/eZvo9d19+D3tKZzy0ItSIS4G99A46LkEaXV6LIJwdWh27SP1k5tx0jx+z0G/dYBWeF26BFSXjEmiPEX2ekoiIBQcDQPKp2U2oXQ1jACE/mrQwoYT5BnmrZA1w8USrCAvciDI20k29QQ1CI00xn5vAPN17w3YVzZEi4h39ZTQB4sVeY/oj1fbz5KNIEvRPIUq+zJmzqVq1HFy/uqmCYajDnM8HSw8FMVvNuCLkerEsxyvPTRya+BFFDk8Nxxz2a6rU4vQ==--v1aV0kZzjF/Kzvj2--xwpZ+D0K6fM0SquHxUblbw== \ No newline at end of file +KlH7f4yCAXGaEEh4Afk8p9j0Yb9QggirR2n3HKuLwXZRjQH/VQNwn81s6c5qH/HNhJB/6yjgW241ZrmJsHJ4N8lo06e60ImIdyBmb3ZWJ4XHEAL7/AkvN3nsZOGutIq4UFcFUX/YlVXsbkZ+jGyUtDM5haTwriHNG3rtiN8iO76wPcuBnIIn7aLq52P8t4URFlklVAXbqbqGD98Vfi8KhfeJefZoPcvxr3EuFaZ4HhHcQSA2v7ljZVNI9YwyU0C67oeT5cszLKa6I7m2LyPkjBfTysHLVXKKdCcuXkXXOqZap68TeEF0tWpLSQuN11ArvQ12cTSKWQyECBCtfJTm0OTbNhMYuwQFJRbVCprlLOdH4PIR9FlM7C1AOfqN1t1JgI69dRVtpaQ6YpJzz3P67y/ZdvIG+0rSuV52ftJ7FvSTHWgE++gUtTngHbyVqSfcYptgWLLxcFieHHDgVbVfgMZaQT7vrCmBATZhrEUI4YboQtiUpwVP6+0FfqzUsOcKKV26A6vaMfFE9i/JXmRmYCUTh23kD4CVGqLvCOWNWWYlHNzF2xFZxfpNPw/VYPQ8ivQmmdTiDhcTTzGhZxcYh3XWWG6S3lQAp4w05hER1Ego+MS/mQoLSQjol6BDaw81Xk9c/TWv8xPdY9iEoTWIwfFXtGG3D9kDALLX0FL5FDBqgzkyYh/DXdgHxQ25dIEQpQyrweEdW16NUIufg+VIl/0VbS/gy1e9IyV6D3LX0fd4mabZUeg9GjpK6P4M+4I4CsuC3ePIm24Q1uQ8hoJX4xdGKnr+2lwJvhA2plsfrHMvL3Sb76H9gsCI8S2Byhw+366MZef6g5AVRLt/KmIWoO2EUex1G4MHMkdm0gamwMjKuyFwN2CNgFTSi0bkW8Wyeq7ucWRuUslqH3GbAPgac0Hm+Hz7i4IZAlMi4bVbuLipJYCvs0C0xnxRpn3dhFV2p4M8cqCXl/08LGu7D5qMbyg2WJQsZrY1OPBkCgnzliARi4OsTXZ8qR5QnifRzeOBAmFSb98ADGYy9A/MHxVfDe5rsiR47lOFLaIB7/ZA/JXMPj503FNL9pSB0iEMSzaNbPBn3otR0+WmGzLQHlh6UEcryDaTYBo=--Xc6ZkG4UOWIfxC8F--T8lW8mV3EQqct2DZugcELw== \ No newline at end of file diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index f77fbb6..b581427 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -260,7 +260,10 @@ Devise.setup do |config| # ==> OmniAuth # Add a new OmniAuth provider. Check the wiki for more information on setting # up on your models and hooks. - # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + config.omniauth :github, + Rails.application.credentials.github[:client_id], + Rails.application.credentials.github[:client_secret], + scope: 'user,public_repo' # ==> Warden configuration # If you want to use other strategies, that are not supported by Devise, or