venus 0.3.3 → 0.4.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.
- data/README.md +6 -6
- data/lib/generators/venus/init/init_generator.rb +5 -1
- data/lib/generators/venus/omniauth/omniauth_generator.rb +63 -0
- data/lib/generators/venus/omniauth/templates/authorization.rb +5 -0
- data/lib/generators/venus/omniauth/templates/migrations.rb +7 -0
- data/lib/generators/venus/omniauth/templates/omniauth.rb +7 -0
- data/lib/generators/venus/omniauth/templates/omniauth_callbacks_controller.rb +15 -0
- data/lib/generators/venus/omniauth/templates/omniauthable.rb +59 -0
- data/lib/generators/venus/omniauth/templates/routes.erb +7 -0
- data/lib/generators/venus/omniauth/templates/setting.yml.erb +5 -0
- data/lib/generators/venus/omniauth/templates/user.erb +3 -0
- data/lib/generators/venus/paginate/paginate_generator.rb +2 -2
- data/lib/venus/version.rb +1 -1
- metadata +11 -8
- data/lib/generators/venus/fbauth/fbauth_generator.rb +0 -56
- data/lib/generators/venus/fbauth/templates/migration.rb +0 -7
- data/lib/generators/venus/fbauth/templates/omniauth.erb +0 -3
- data/lib/generators/venus/fbauth/templates/routes.rb +0 -4
- data/lib/generators/venus/fbauth/templates/sessions_controller.rb +0 -16
- data/lib/generators/venus/fbauth/templates/user.rb +0 -15
data/README.md
CHANGED
@@ -18,6 +18,12 @@ end
|
|
18
18
|
Usage
|
19
19
|
=====
|
20
20
|
|
21
|
+
* Setup Omniauth for multiple omniauth (Facebook, Twitter, Github) in model `User`.
|
22
|
+
|
23
|
+
```
|
24
|
+
rails generate venus:omniauth
|
25
|
+
```
|
26
|
+
|
21
27
|
* Setup gem 'capistrano' for deloyment.
|
22
28
|
|
23
29
|
```
|
@@ -55,12 +61,6 @@ Usage
|
|
55
61
|
rails generate venus:devise
|
56
62
|
```
|
57
63
|
|
58
|
-
* Setup Omniauth for Facebook login (model `User`).
|
59
|
-
|
60
|
-
```
|
61
|
-
rails generate venus:fbauth
|
62
|
-
```
|
63
|
-
|
64
64
|
* Setup Rspec testing framework
|
65
65
|
|
66
66
|
```
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Venus
|
2
|
+
module Generators
|
3
|
+
class OmniauthGenerator < Base
|
4
|
+
desc "Setup gem 'omniauth' with multi providers"
|
5
|
+
|
6
|
+
def name
|
7
|
+
"Omniauth"
|
8
|
+
end
|
9
|
+
|
10
|
+
def asks
|
11
|
+
say 'checking dependent gems "settinglogic"...'
|
12
|
+
generate 'venus:settingslogic' unless has_gem?('settingslogic')
|
13
|
+
say 'checking dependent gems "devise"...'
|
14
|
+
generate 'venus:devise' unless has_gem?('devise')
|
15
|
+
|
16
|
+
@settinglogic_class = ask?("Your settinglogic class name?", 'Setting')
|
17
|
+
@settinglogic_yml = ask?("Your settinglogic yaml file in config/ ?", 'setting.yml')
|
18
|
+
|
19
|
+
@providers = {}
|
20
|
+
[:facebook, :github, :twitter].each do |provider|
|
21
|
+
if ask?("Use '#{provider}'?", true)
|
22
|
+
token = ask?("#{provider.capitalize} App ID?", '267188576687915')
|
23
|
+
secret = ask?("#{provider.capitalize} App Secret?", '84f72292e1f6b299f4a668f12ed1a7f2')
|
24
|
+
@providers[provider] = {:token => token, :secret => secret}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def gemfile
|
30
|
+
add_gem('omniauth')
|
31
|
+
@providers.each do |provider, |
|
32
|
+
add_gem("omniauth-#{provider}")
|
33
|
+
end
|
34
|
+
bundle_install
|
35
|
+
end
|
36
|
+
|
37
|
+
def controller
|
38
|
+
template 'omniauth_callbacks_controller.rb', 'app/controllers/users/omniauth_callbacks_controller.rb', :force => true
|
39
|
+
end
|
40
|
+
|
41
|
+
def configs
|
42
|
+
insert_template('config/routes.rb', 'routes.erb', :after => "routes.draw do\n")
|
43
|
+
template 'omniauth.rb', 'config/initializers/omniauth.rb'
|
44
|
+
["config/#{@settinglogic_yml}", "config/#{@settinglogic_yml}.example"].each do |to_file|
|
45
|
+
insert_template(to_file, "setting.yml.erb", :after => "&defaults\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def model
|
50
|
+
generate "model authorization provider:string uid:string auth_type:string auth_id:integer auth_data:text"
|
51
|
+
insert_template 'app/models/authorization.rb', 'authorization.rb', :after => "ActiveRecord::Base\n"
|
52
|
+
template 'omniauthable.rb', 'app/lib/omniauthable.rb'
|
53
|
+
insert_template("app/models/user.rb", "user.erb", :before => "\nend\n")
|
54
|
+
sleep(1)
|
55
|
+
migration_template "migrations.rb", "db/migrate/add_index_for_authorizations_and_add_column_for_users"
|
56
|
+
end
|
57
|
+
|
58
|
+
def msg
|
59
|
+
bundle_exec('rake db:migrate') if ask?("Run 'bundle exec rake db:migrate'?", true)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
2
|
+
Setting.providers.each do |provider_name|
|
3
|
+
provider provider_name, Setting.send("#{provider_name}_token"), Setting.send("#{provider_name}_secret")
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
OmniAuth.config.path_prefix = '/users/auth'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Users::OmniauthCallbacksController < ApplicationController
|
2
|
+
|
3
|
+
def callback
|
4
|
+
provider = params[:provider]
|
5
|
+
if not current_user.blank?
|
6
|
+
current_user.bind_service(env["omniauth.auth"])
|
7
|
+
sign_in_and_redirect(current_user, :notice => "Successfully binded to #{provider}.")
|
8
|
+
else
|
9
|
+
@user = User.find_or_create_by_omniauth(env["omniauth.auth"])
|
10
|
+
flash[:notice] = "Sign in with #{provider.to_s.titleize} successfully."
|
11
|
+
sign_in_and_redirect @user, :event => :authentication, :notice => "Login successfully."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Omniauthable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
has_many :authorizations, :dependent => :destroy, :as => :auth
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
|
10
|
+
def find_or_create_by_omniauth(authhash)
|
11
|
+
authorization = Authorization.find_by_provider_and_uid(authhash['provider'], authhash['uid'])
|
12
|
+
return authorization.auth if authorization
|
13
|
+
user = send "initialize_from_omniauth_#{authhash['provider']}", authhash
|
14
|
+
if User.find_by_email(user.email)
|
15
|
+
user = _
|
16
|
+
else
|
17
|
+
user.save
|
18
|
+
user.bind_service(authhash)
|
19
|
+
end
|
20
|
+
user
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def initialize_from_omniauth_facebook(authhash)
|
26
|
+
User.new(:email => authhash['info']['email'], :name => authhash['info']['name'])
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize_from_omniauth_twitter(authhash)
|
30
|
+
User.new(:email => authhash['info']['email'], :name => authhash['info']['name'])
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize_from_omniauth_github(authhash)
|
34
|
+
User.new(:email => authhash['info']['email'], :name => authhash['info']['name'])
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
module InstanceMethods
|
40
|
+
|
41
|
+
def bind_service(authhash)
|
42
|
+
authorization = Authorization.find_by_provider_and_uid(authhash['provider'], authhash['uid'])
|
43
|
+
unless authorization
|
44
|
+
authorization = authorizations.create! :uid => authhash['uid'], :provider => authhash['provider'], :auth_data => authhash
|
45
|
+
end
|
46
|
+
authorization
|
47
|
+
end
|
48
|
+
|
49
|
+
def can_bind_to
|
50
|
+
Setting.providers - (authorizations.map {|auth| auth.provider})
|
51
|
+
end
|
52
|
+
|
53
|
+
def password_required?
|
54
|
+
false
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
|
2
|
+
match '/users/auth/:provider/callback', :to => "users/omniauth_callbacks#callback"
|
3
|
+
match '/users/auth/failure' => 'sessions#failure', :as => :auth_failure
|
4
|
+
|
5
|
+
Setting.providers.each do |provider|
|
6
|
+
match "/users/auth/#{provider}", :as => "user_auth_#{provider}"
|
7
|
+
end
|
data/lib/venus/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: venus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -80,17 +80,20 @@ files:
|
|
80
80
|
- lib/generators/venus/deploy/templates/gemfile.erb
|
81
81
|
- lib/generators/venus/deploy/templates/stage.erb
|
82
82
|
- lib/generators/venus/devise/devise_generator.rb
|
83
|
-
- lib/generators/venus/fbauth/fbauth_generator.rb
|
84
|
-
- lib/generators/venus/fbauth/templates/migration.rb
|
85
|
-
- lib/generators/venus/fbauth/templates/omniauth.erb
|
86
|
-
- lib/generators/venus/fbauth/templates/routes.rb
|
87
|
-
- lib/generators/venus/fbauth/templates/sessions_controller.rb
|
88
|
-
- lib/generators/venus/fbauth/templates/user.rb
|
89
83
|
- lib/generators/venus/helpers.rb
|
90
84
|
- lib/generators/venus/init/init_generator.rb
|
91
85
|
- lib/generators/venus/init/templates/gem_developments.erb
|
92
86
|
- lib/generators/venus/mysql/mysql_generator.rb
|
93
87
|
- lib/generators/venus/mysql/templates/database.yml.erb
|
88
|
+
- lib/generators/venus/omniauth/omniauth_generator.rb
|
89
|
+
- lib/generators/venus/omniauth/templates/authorization.rb
|
90
|
+
- lib/generators/venus/omniauth/templates/migrations.rb
|
91
|
+
- lib/generators/venus/omniauth/templates/omniauth.rb
|
92
|
+
- lib/generators/venus/omniauth/templates/omniauth_callbacks_controller.rb
|
93
|
+
- lib/generators/venus/omniauth/templates/omniauthable.rb
|
94
|
+
- lib/generators/venus/omniauth/templates/routes.erb
|
95
|
+
- lib/generators/venus/omniauth/templates/setting.yml.erb
|
96
|
+
- lib/generators/venus/omniauth/templates/user.erb
|
94
97
|
- lib/generators/venus/paginate/paginate_generator.rb
|
95
98
|
- lib/generators/venus/rspec/rspec_generator.rb
|
96
99
|
- lib/generators/venus/rspec/templates/config_application.rb
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module Venus
|
2
|
-
module Generators
|
3
|
-
class FbauthGenerator < Base
|
4
|
-
desc "Setup gem 'omniauth-fb'"
|
5
|
-
|
6
|
-
def asks
|
7
|
-
say 'checking dependent gems "settinglogic"...'
|
8
|
-
generate 'venus:settingslogic' unless has_gem?('settingslogic')
|
9
|
-
say 'checking dependent gems "devise"...'
|
10
|
-
generate 'venus:devise' unless has_gem?('devise')
|
11
|
-
@fb_app_id = ask?("Facebook App ID?", '267188576687915')
|
12
|
-
@fb_secret = ask?("Facebook App Secret?", '84f72292e1f6b299f4a668f12ed1a7f2')
|
13
|
-
@settinglogic_class = ask?("Your settinglogic class name?", 'Setting')
|
14
|
-
@settinglogic_yml = ask?("Your settinglogic yaml file in config/ ?", 'setting.yml')
|
15
|
-
end
|
16
|
-
|
17
|
-
def name
|
18
|
-
"Omniauth FB"
|
19
|
-
end
|
20
|
-
|
21
|
-
def gemfile
|
22
|
-
add_gem('omniauth')
|
23
|
-
add_gem('omniauth-facebook')
|
24
|
-
bundle_install
|
25
|
-
end
|
26
|
-
|
27
|
-
def controller
|
28
|
-
generate "controller sessions"
|
29
|
-
template 'sessions_controller.rb', 'app/controllers/sessions_controller.rb', :force => true
|
30
|
-
end
|
31
|
-
|
32
|
-
def routes
|
33
|
-
insert_template("config/routes.rb", "routes.rb", :after => "routes.draw do\n")
|
34
|
-
end
|
35
|
-
|
36
|
-
def model
|
37
|
-
migration_template "migration.rb", "db/migrate/add_columns_for_fblogin_to_users"
|
38
|
-
insert_template("app/models/user.rb", "user.rb", :before => "\nend\n")
|
39
|
-
replace_in_file("app/models/user.rb", " attr_accessible ", " attr_accessible :name, :facebook_id, ")
|
40
|
-
end
|
41
|
-
|
42
|
-
def config
|
43
|
-
template 'omniauth.erb', 'config/initializers/omniauth.rb'
|
44
|
-
["config/#{@settinglogic_yml}", "config/#{@settinglogic_yml}.example"].each do |to_file|
|
45
|
-
replace_in_file(to_file, "facebook_app_id: ", "facebook_app_id: '#{@fb_app_id}'")
|
46
|
-
replace_in_file(to_file, "facebook_secret: ", "facebook_secret: '#{@fb_secret}'")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def msg
|
51
|
-
bundle_exec('rake db:migrate') if ask?("Run 'bundle exec rake db:migrate'?", true)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class SessionsController < ApplicationController
|
2
|
-
|
3
|
-
def create
|
4
|
-
if current_user = User.create_by_omniauth(request.env['omniauth.auth'], current_user)
|
5
|
-
flash[:notice] = "Login success"
|
6
|
-
sign_in_and_redirect :user, current_user
|
7
|
-
else
|
8
|
-
redirect_to new_user_session_path, :alert => "Login fail"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def failure
|
13
|
-
redirect_to new_user_session_path, :alert => params[:message]
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
|
2
|
-
def self.create_by_omniauth(hash, current_user)
|
3
|
-
hash = ActiveSupport::HashWithIndifferentAccess.new hash
|
4
|
-
user = User.send("find_by_#{hash[:provider]}_id", hash[:uid])
|
5
|
-
unless user
|
6
|
-
user = current_user || User.find_by_email(hash[:info][:email]) || User.new( :email => hash[:info][:email], :name => hash[:info][:name] )
|
7
|
-
user.send("#{hash[:provider]}_id=", hash[:uid])
|
8
|
-
user.save!
|
9
|
-
end
|
10
|
-
user
|
11
|
-
end
|
12
|
-
|
13
|
-
def password_required?
|
14
|
-
facebook_id.present? ? false : true
|
15
|
-
end
|