socials 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad16af9e8eed83d4464b5fae9e7a9c9a7297a9ad
4
- data.tar.gz: a5684782c57c151f76b8d7ccf800a185c3acb150
3
+ metadata.gz: 5acab175fca6a73cf2aa9d47c8abff30efe96cb1
4
+ data.tar.gz: 8044adfe7471056dc05643215f42fcb4cc18eccc
5
5
  SHA512:
6
- metadata.gz: 077ede3910da24f3e09f123dff2a1c4427fc2073a0e02deebaec96cc93a23e39b8c41ce660139e827720d3a0c9ab1059d99ab6cf0650c710025266be63545883
7
- data.tar.gz: 454eca3ad67fcf47110064e92289529fa639fec08c3bfcf1ab0b510435d2a74b1cb289c3b1991498969dfdcf959951b2f19466c41694910d1a180856e0fa987c
6
+ metadata.gz: 248ed6c8216447e0b2cbc13985477f3cacc50c554905a1f47f9bb8d84c366716642d35d4b3b85379e4d0debef2633c9ec2c76b621b4b98c8df3ab981fb5884dd
7
+ data.tar.gz: 1d6938334f729d0a74d25ee3aaaa1de0ca1d955a3ff3ad5022e2ebd641402d77ba51e797b14da31e6f05f7f326ee07a377614a5254c22c04981bbe70aff9f35f
data/Gemfile CHANGED
@@ -6,4 +6,4 @@ source 'https://rubygems.org'
6
6
  gemspec
7
7
 
8
8
  # Gems for the social LogIn based on:
9
- # https://github.com/mohitjain/social-login-in-rails
9
+ # https://github.com/mohitjain/social-login-in-rails
data/README.md CHANGED
@@ -1,28 +1,30 @@
1
1
  # Socials
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/socials`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ## Installation
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ First install the Rails :gem:
6
6
 
7
- ## Installation
7
+ $ gem install 'rails'
8
+
9
+ Create your new Rails app:
10
+
11
+ $ rails new app_name
8
12
 
9
- Add this line to your application's Gemfile:
13
+ Install the Socials :gem:
10
14
 
11
- ```ruby
12
- gem 'socials'
13
- ```
15
+ $ gem install 'socials'
14
16
 
15
- And then execute:
17
+ Run the social generator:
16
18
 
17
- $ bundle
19
+ $ rails g socials:install
18
20
 
19
- Or install it yourself as:
21
+ It updates your Gemfile :page_facing_up: so run the bundle
20
22
 
21
- $ gem install socials
23
+ $ bundle install
22
24
 
23
- ## Usage
25
+ Now just let's link the Devise with the OAuth :boom:
24
26
 
25
- TODO: Write usage instructions here
27
+ $ rake socials:devise
26
28
 
27
29
  ## Development
28
30
 
@@ -8,13 +8,16 @@ module Socials
8
8
  def copy_initializer
9
9
  update_routes
10
10
  update_devise_rb
11
+ update_devise_user
11
12
  update_application_rb
13
+ add_oauth_partial_links
14
+ update_application_controller
12
15
  end
13
16
 
14
17
  # Add the Devise+OAuth Routes
15
18
  def update_routes
16
- inject_into_file 'config/routes.rb', after: "application.routes.draw do\n" do <<-'RUBY'
17
- devise_for :users, controllers: { omniauth_callbacks: "omniauth_callbacks" }
19
+ inject_into_file 'config/routes.rb', after: "devise_for :users" do <<-'RUBY'
20
+ , controllers: { omniauth_callbacks: "omniauth_callbacks" }
18
21
  RUBY
19
22
  end
20
23
 
@@ -53,12 +56,80 @@ module Socials
53
56
  config.omniauth :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], scope: "user, public_repo"
54
57
  config.omniauth :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], {}
55
58
 
56
- RUBY
59
+ RUBY
57
60
  end
58
61
 
59
62
  puts 'Check your config/initializers/devise.rb which was updated to have the Social Keys used (OmniAuth linked to devise)'.colorize(:light_green)
60
63
  puts 'UPDATE your config/initializers/devise.rb if you need more data from the user, CHANGING the: SCOPE'.colorize(:light_yellow)
61
64
  end
65
+
66
+ # Add the HTML with the partial Social Logins
67
+ def add_oauth_partial_links
68
+ template "views/users/shared/_link.html.slim", "app/views/users/shared/_link.html.slim"
69
+ puts 'Check your app/views/users/shared/_link.html.slim to custom the OAuth links'.colorize(:light_green)
70
+ end
71
+
72
+ # Update the DeviseUser to execute OAuth correctly
73
+ def update_devise_user
74
+ inject_into_file 'app/models/user.rb', after: ":validatable" do <<-'RUBY'
75
+ , :omniauthable
76
+ validates_presence_of :email
77
+ has_many :authorizations
78
+
79
+ def self.new_with_session(params,session)
80
+ if session["devise.user_attributes"]
81
+ new(session["devise.user_attributes"],without_protection: true) do |user|
82
+ user.attributes = params
83
+ user.valid?
84
+ end
85
+ else
86
+ super
87
+ end
88
+ end
89
+
90
+ def self.from_omniauth(auth, current_user)
91
+ authorization = Authorization.where(:provider => auth.provider, :uid => auth.uid.to_s, :token => auth.credentials.token, :secret => auth.credentials.secret).first_or_initialize
92
+ if authorization.user.blank?
93
+ user = current_user.nil? ? User.where('email = ?', auth["info"]["email"]).first : current_user
94
+ if user.blank?
95
+ user = User.new
96
+ user.password = Devise.friendly_token[0,10]
97
+ user.name = auth.info.name
98
+ user.email = auth.info.email
99
+ auth.provider == "twitter" ? user.save(:validate => false) : user.save
100
+ end
101
+ authorization.username = auth.info.nickname
102
+ authorization.user_id = user.id
103
+ authorization.save
104
+ end
105
+ authorization.user
106
+ end
107
+ RUBY
108
+ end
109
+ end
110
+
111
+ # Add Devise auth & validations to the Main top Controller
112
+ def update_application_controller
113
+ inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery with: :exception\n" do <<-'RUBY'
114
+ before_action :authenticate_or_token
115
+
116
+ protected
117
+ def configure_permitted_parameters
118
+ devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:locale, :name, :username, :email, :password, :password_confirmation, :role, :remember_me) }
119
+ devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
120
+ devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password, :role) }
121
+ I18n.locale = @current_user.locale || I18n.default_locale unless @current_user.nil?
122
+ end
123
+
124
+ # Validate user session if is not API call
125
+ def authenticate_or_token
126
+ authenticate_user! if params[:controller].index('api').nil? && request.fullpath != root_path
127
+ @current_user = current_user if @current_user.nil?
128
+ end
129
+
130
+ RUBY
131
+ end
132
+ end
62
133
  end
63
134
  end
64
135
  end
@@ -20,6 +20,9 @@ module Socials
20
20
  template 'tasks/socials.rake', 'lib/tasks/socials.rake'
21
21
  puts 'Just created the socials rake tasks, check it on the GitHub README'.colorize(:light_blue)
22
22
 
23
+ template 'tasks/recreate.rake', 'lib/tasks/recreate.rake'
24
+ puts 'Now you can easy rebase (clean up) your DB using rake db:recreate'.colorize(:light_green)
25
+
23
26
  # Add the OAuth Controller
24
27
  template "controllers/omniauth_callbacks_controller.rb", "app/controllers/omniauth_callbacks_controller.rb"
25
28
  puts 'Check out you your app/controllers/omniauth_callbacks_controller.rb which persist the social user through devise'.colorize(:light_green)
@@ -33,6 +36,9 @@ module Socials
33
36
  # Add dependency GEMs & run the bundle install
34
37
  def update_gemfile
35
38
  inject_into_file 'Gemfile', after: "source 'https://rubygems.org'\n" do <<-'RUBY'
39
+ # Easier & faster then ERB
40
+ gem 'slim-rails', '~> 2.1.5'
41
+
36
42
  # For easy user session management
37
43
  gem 'devise', '~> 3.4.1'
38
44
 
@@ -0,0 +1,18 @@
1
+ require 'colorize'
2
+
3
+ namespace :db do
4
+ desc 'Populate the Database'
5
+ task :recreate => :environment do
6
+ puts 'DBs creation'.colorize(:yellow)
7
+ Rake::Task['db:drop'].invoke
8
+ Rake::Task['db:create'].invoke
9
+
10
+ puts 'Development Env'.colorize(:blue)
11
+ Rake::Task['db:migrate'].invoke
12
+ Rake::Task['db:seed'].invoke
13
+
14
+ puts 'Test Env'.colorize(:green)
15
+ system('rake db:migrate RAILS_ENV=test')
16
+ system('rake db:seed RAILS_ENV=test')
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ - if controller_name != 'sessions'
2
+ =link_to "Sign in", new_session_path(resource_name)
3
+ br
4
+
5
+ -if devise_mapping.registerable? && controller_name != 'registrations'
6
+ =link_to "Sign up", new_registration_path(resource_name)
7
+ br
8
+
9
+ -if devise_mapping.recoverable? && controller_name != 'passwords'
10
+ =link_to "Forgot your password?", new_password_path(resource_name)
11
+ br
12
+
13
+ -if devise_mapping.confirmable? && controller_name != 'confirmations'
14
+ =link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name)
15
+ br
16
+
17
+ -if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
18
+ =link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name)
19
+ br
20
+
21
+ -if devise_mapping.omniauthable?
22
+ -resource_class.omniauth_providers.each do |provider|
23
+ =link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider)
24
+ br
@@ -8,8 +8,11 @@ module Socials
8
8
  puts 'Running `rails g devise User`'.light_green
9
9
  system 'rails g devise User'
10
10
 
11
+ puts 'Running `rails g devise:views`'.light_green
12
+ system 'rails g devise:views'
13
+
11
14
  puts 'Running `rake db:migrate` for the devise User created'.light_blue
12
- system 'rake db:migrate'
15
+ system 'rake db:recreate'
13
16
  end
14
17
 
15
18
  # Update the devise to load the OmNiAuth gem
@@ -1,6 +1,6 @@
1
1
  module Socials
2
2
  MAJOR = 1
3
3
  MINOR = 0
4
- PATCH = 0
4
+ PATCH = 1
5
5
  VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socials
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilton Garcia dos Santos Silveira
@@ -232,7 +232,9 @@ files:
232
232
  - lib/generators/socials/install_generator.rb
233
233
  - lib/generators/templates/config/social_keys.yml
234
234
  - lib/generators/templates/controllers/omniauth_callbacks_controller.rb
235
+ - lib/generators/templates/tasks/recreate.rake
235
236
  - lib/generators/templates/tasks/socials.rake
237
+ - lib/generators/templates/views/users/shared/_links.html.slim
236
238
  - lib/socials.rb
237
239
  - lib/socials/devise.rb
238
240
  - lib/socials/version.rb