authorizme 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.0.3
2
+
3
+ ### Features & Enhancements
4
+
5
+ * [#1][]: Add role methods to controller ([@artursbraucs][])
6
+ * Add providers callback popup view with jquery support.
7
+
1
8
  ## 0.0.2
2
9
 
3
10
  ### Features & Enhancements
data/README.md CHANGED
@@ -30,15 +30,42 @@ Then migrate your database `rake db:migrate`
30
30
 
31
31
  ### Getting started
32
32
 
33
+ #### Authorization
34
+
33
35
  To authorize user with basic authorization, post email and password to `/authorizme/sessions`. (if you have another namespace, use `/{your_namespace}/sessions`)
34
36
 
35
37
  To authorize user with providers, use `/authorizme/login/{provider_name}`. Before that you MUST set your api keys and secrets to those providers in `config/initializers`
36
38
 
37
39
  To register user with basic authorization you can just save data to your user model and then call `login(user)` from your controller.
38
40
 
41
+ #### Using roles
42
+
43
+ Also you can set roles. Just add some roles in Role model and then set it to user. In controller you can use `before_filter` method `require_user` or `require_{role}` where `role` is your required role name.
44
+
39
45
  ### Advanced usage
40
46
 
41
- You can implement your own provider. Create controller under model `Authorizme::Login` and extend `AuthorizmeController`. Then you must implement `auth` and `callback` methods, where `auth` is method which redirect user to provider and `callback` get data from provider callback data. Then you must add your provider namespace in authorizme config file in array `providers`.
47
+ #### Custom provider callback view
48
+
49
+ By default providers use callback view which require JQuery and require `eventBus` in `window` dom element:
50
+
51
+ ```javascript
52
+ <script type="text/javascript">
53
+ $(document).ready(function() {
54
+ window.close();
55
+ window.opener.eventBus.trigger("loginDone");
56
+ window.opener.focus();
57
+ });
58
+ </script>
59
+ ```
60
+ You can override this by creating new view: `views/authorizme/authorizme/popup.html.erb`.
61
+
62
+ #### Custom providers
63
+
64
+ You can implement your own provider:
65
+
66
+ 1. Create controller under model `Authorizme::Login` and extend `AuthorizmeController`.
67
+ 2. You must implement `auth` and `callback` methods, where `auth` is method which redirect user to provider and `callback` get data from provider callback data.
68
+ 3. Then you must add your provider namespace in authorizme config file in array `providers`.
42
69
 
43
70
  ## Development
44
71
 
@@ -16,6 +16,10 @@ module Authorizme
16
16
  end
17
17
  end
18
18
 
19
+ def render_popup_view
20
+ render "popup", :layout => "authorizme/layouts/popup"
21
+ end
22
+
19
23
  def respond_with_status status_name, attributes = nil
20
24
  status = {status: status_name}
21
25
  status = status.merge(attributes) if attributes
@@ -24,13 +28,13 @@ module Authorizme
24
28
 
25
29
  def redirect_uri provider
26
30
  if Rails.env.development?
27
- redirect_url = "http://localhost:3000/authorizme/login/#{provider}/callback.json"
31
+ "http://#{request.host}:#{request.port}/#{Authorizme::namespace}/login/#{provider}/callback"
28
32
  else
29
33
  "http://#{request.host}/#{Authorizme::namespace}/login/#{provider}/callback"
30
34
  end
31
35
  end
32
36
 
33
- def request_synchronize user
37
+ def another_user_logged_in user
34
38
  end
35
39
  end
36
40
  end
@@ -14,9 +14,9 @@ module Authorizme
14
14
  attributes = {first_name: user_json["name"], last_name: user_json["surname"], image_url: user_json["img"]}
15
15
  user = User.authenticate_with_draugiem(json["uid"], attributes, json["apikey"])
16
16
  login user
17
- respond_with_status "logged_in", user: user
17
+ render_popup_view
18
18
  else
19
- respond_with_status "error_in_loggin"
19
+ render_popup_view
20
20
  end
21
21
  end
22
22
 
@@ -15,7 +15,7 @@ module Authorizme
15
15
  attributes = {first_name: user_json.first_name, last_name: user_json.last_name, image_url: image_url}
16
16
  user = User.authenticate_with_facebook(user_json.id, attributes, access_token)
17
17
  login user
18
- respond_with_status "logged_in", user: user
18
+ render_popup_view
19
19
  end
20
20
 
21
21
  private
@@ -12,14 +12,14 @@ module Authorizme
12
12
 
13
13
  def callback
14
14
  if params[:denied]
15
- respond_with_status "error_in_logging"
15
+ render_popup_view
16
16
  else
17
17
  access_token = authorize_with_twitter params[:oauth_token], params[:oauth_verifier]
18
18
  twitter_user = Twitter.user
19
19
  attributes = {first_name: twitter_user.name, image_url: twitter_user.profile_image_url}
20
20
  user = User.authenticate_with_twitter(twitter_user.id, attributes, access_token.token, access_token.secret)
21
21
  login user
22
- respond_with_status "logged_in", user: user
22
+ render_popup_view
23
23
  end
24
24
  end
25
25
 
@@ -6,8 +6,7 @@ module Authorizme
6
6
  if user && user.authenticate(params[:password])
7
7
  login user
8
8
  if Authorizme::remote
9
- status = {status: "logged_in", user: user}
10
- respond_with status
9
+ respond_with_status "logged_in", {user: user}
11
10
  else
12
11
  redirect_to Authorizme::after_login_path
13
12
  end
@@ -0,0 +1,7 @@
1
+ <script type="text/javascript">
2
+ $(document).ready(function() {
3
+ window.close();
4
+ window.opener.eventBus.trigger("loginDone");
5
+ window.opener.focus();
6
+ });
7
+ </script>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Authorization completed</title>
5
+ <%= javascript_include_tag "jquery" %>
6
+ <%= csrf_meta_tags %>
7
+ </head>
8
+ <body>
9
+ <%= yield %>
10
+ </body>
11
+ </html>
@@ -18,23 +18,44 @@ module Authorizme
18
18
 
19
19
  def login user
20
20
  if current_user
21
- request_synchronize user
21
+ another_user_logged_in user
22
22
  else
23
23
  session[:user_id] = user.id
24
24
  end
25
25
  end
26
26
 
27
- def require_user
27
+ def run_require_user
28
28
  unless current_user
29
- if Authorizme::remote
30
- status = {status: "not_logged_in"}
31
- respond_with status
29
+ not_logged_in_status
30
+ end
31
+ end
32
+
33
+ def method_missing(meth, *args, &block)
34
+ if meth.to_s =~ /^require_(.+)$/
35
+ if $1 == "user"
36
+ run_require_user
32
37
  else
33
- redirect_to "/#{Authorizme::namespace}/"
38
+ run_require_role($1, *args, &block)
34
39
  end
40
+ else
41
+ super
42
+ end
43
+ end
44
+
45
+ def run_require_role(role, *args, &block)
46
+ unless current_user && current_user.role.name == role
47
+ not_logged_in_status
35
48
  end
36
49
  end
37
50
 
51
+ def not_logged_in_status
52
+ if Authorizme::remote
53
+ status = {status: "not_logged_in"}
54
+ respond_with status
55
+ else
56
+ redirect_to "/#{Authorizme::namespace}/"
57
+ end
58
+ end
38
59
  end
39
60
  end
40
61
 
@@ -1,3 +1,3 @@
1
1
  module Authorizme
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authorizme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-02 00:00:00.000000000 Z
13
+ date: 2012-04-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &70318637094620 !ruby/object:Gem::Requirement
17
+ requirement: &70223193870600 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70318637094620
25
+ version_requirements: *70223193870600
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec
28
- requirement: &70318637094200 !ruby/object:Gem::Requirement
28
+ requirement: &70223193870000 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70318637094200
36
+ version_requirements: *70223193870000
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec-rails
39
- requirement: &70318637093780 !ruby/object:Gem::Requirement
39
+ requirement: &70223193869460 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70318637093780
47
+ version_requirements: *70223193869460
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: webrat
50
- requirement: &70318637093360 !ruby/object:Gem::Requirement
50
+ requirement: &70223193868900 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70318637093360
58
+ version_requirements: *70223193868900
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: capybara
61
- requirement: &70318637092940 !ruby/object:Gem::Requirement
61
+ requirement: &70223193868400 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70318637092940
69
+ version_requirements: *70223193868400
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: factory_girl_rails
72
- requirement: &70318635117920 !ruby/object:Gem::Requirement
72
+ requirement: &70223193867880 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70318635117920
80
+ version_requirements: *70223193867880
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: activesupport
83
- requirement: &70318635112960 !ruby/object:Gem::Requirement
83
+ requirement: &70223193867340 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *70318635112960
91
+ version_requirements: *70223193867340
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rails
94
- requirement: &70318635111500 !ruby/object:Gem::Requirement
94
+ requirement: &70223193866840 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *70318635111500
102
+ version_requirements: *70223193866840
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: bcrypt-ruby
105
- requirement: &70318647421440 !ruby/object:Gem::Requirement
105
+ requirement: &70223193866360 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70318647421440
113
+ version_requirements: *70223193866360
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: json
116
- requirement: &70318647421020 !ruby/object:Gem::Requirement
116
+ requirement: &70223193865800 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :runtime
123
123
  prerelease: false
124
- version_requirements: *70318647421020
124
+ version_requirements: *70223193865800
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: twitter_oauth
127
- requirement: &70318647420600 !ruby/object:Gem::Requirement
127
+ requirement: &70223193865140 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :runtime
134
134
  prerelease: false
135
- version_requirements: *70318647420600
135
+ version_requirements: *70223193865140
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: twitter
138
- requirement: &70318647420180 !ruby/object:Gem::Requirement
138
+ requirement: &70223193864480 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '0'
144
144
  type: :runtime
145
145
  prerelease: false
146
- version_requirements: *70318647420180
146
+ version_requirements: *70223193864480
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: oauth2
149
- requirement: &70318647419760 !ruby/object:Gem::Requirement
149
+ requirement: &70223193863440 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :runtime
156
156
  prerelease: false
157
- version_requirements: *70318647419760
157
+ version_requirements: *70223193863440
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: fbgraph
160
- requirement: &70318647419340 !ruby/object:Gem::Requirement
160
+ requirement: &70223193862900 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,7 +165,7 @@ dependencies:
165
165
  version: '0'
166
166
  type: :runtime
167
167
  prerelease: false
168
- version_requirements: *70318647419340
168
+ version_requirements: *70223193862900
169
169
  description: Authorization that includes basic authorization and 3 social authorization
170
170
  with Latvia social network draugiem.lv, facebook.com and twitter.com.
171
171
  email:
@@ -192,6 +192,8 @@ files:
192
192
  - app/models/authorizme/user_provider.rb
193
193
  - app/models/authorizme/user_role.rb
194
194
  - app/views/authorizme/authorizme/index.html.erb
195
+ - app/views/authorizme/authorizme/popup.html.erb
196
+ - app/views/authorizme/layouts/popup.html.erb
195
197
  - app/views/authorizme/users/new.html.erb
196
198
  - authorizme.gemspec
197
199
  - config/routes.rb