exvo-auth 0.8.2 → 0.9.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.2
1
+ 0.9.0
data/exvo-auth.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{exvo-auth}
8
- s.version = "0.8.2"
8
+ s.version = "0.9.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jacek Becela"]
12
- s.date = %q{2010-08-30}
12
+ s.date = %q{2010-09-02}
13
13
  s.description = %q{Sign in with Exvo account}
14
14
  s.email = %q{jacek.becela@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/exvo_auth/controllers/base.rb",
35
35
  "lib/exvo_auth/controllers/merb.rb",
36
36
  "lib/exvo_auth/controllers/rails.rb",
37
+ "lib/exvo_auth/dejavu.rb",
37
38
  "lib/exvo_auth/oauth2.rb",
38
39
  "lib/exvo_auth/strategies/base.rb",
39
40
  "lib/exvo_auth/strategies/interactive.rb",
data/lib/exvo-auth.rb CHANGED
@@ -3,9 +3,11 @@ require 'omniauth/oauth'
3
3
  require 'multi_json'
4
4
  require 'httparty'
5
5
  require 'uri'
6
+ require 'base64'
6
7
 
7
8
  module ExvoAuth
8
9
  autoload :Config, 'exvo_auth/config'
10
+ autoload :Dejavu, 'exvo_auth/dejavu'
9
11
 
10
12
  module Strategies
11
13
  autoload :Base, 'exvo_auth/strategies/base'
@@ -1,12 +1,8 @@
1
1
  module ExvoAuth::Controllers::Base
2
- def self.included(base)
3
- raise "Please define a #root_url method in #{base.name} (or in routes)" unless base.method_defined? :root_url
4
- end
5
-
6
2
  # A before filter to protect your sensitive actions.
7
3
  def authenticate_user!
8
4
  if !signed_in?
9
- store_location!
5
+ store_request!
10
6
 
11
7
  callback_key = ExvoAuth::Config.callback_key
12
8
  callback_value = params[callback_key]
@@ -22,21 +18,19 @@ module ExvoAuth::Controllers::Base
22
18
  # Usually this method is called from your sessions#create.
23
19
  def sign_in_and_redirect!(user_id)
24
20
  session[:user_id] = user_id
25
-
21
+
26
22
  url = if params[:state] == "popup"
27
23
  ExvoAuth::Config.host + "/close_popup.html"
28
24
  else
29
- stored_location || root_url
25
+ request_replay_url || "/"
30
26
  end
31
-
27
+
32
28
  redirect_to url
33
29
  end
34
-
35
- # Redirect to sign_out_url, signs out and redirects back to root_path (by default).
36
- # This method assumes you have a "root_url" method defined in your controller.
37
- #
30
+
31
+ # Redirect to sign_out_url, signs out and redirects back to "/" (by default).
38
32
  # Usuallly this method is called from your sessions#destroy.
39
- def sign_out_and_redirect!(return_to = root_url)
33
+ def sign_out_and_redirect!(return_to = "/")
40
34
  session.delete(:user_id)
41
35
  @current_user = nil
42
36
  redirect_to sign_out_url(return_to)
@@ -80,14 +74,6 @@ module ExvoAuth::Controllers::Base
80
74
 
81
75
  protected
82
76
 
83
- def store_location!
84
- session[:return_to] = current_url
85
- end
86
-
87
- def stored_location
88
- session.delete(:return_to)
89
- end
90
-
91
77
  def sign_out_url(return_to)
92
78
  ExvoAuth::Config.host + "/users/sign_out?" + Rack::Utils.build_query({ :return_to => return_to })
93
79
  end
@@ -97,4 +83,31 @@ module ExvoAuth::Controllers::Base
97
83
  query = Rack::Utils.build_query(params)
98
84
  query.empty? ? path : "#{path}?#{query}"
99
85
  end
86
+
87
+ def current_request
88
+ {
89
+ :script_name => request.script_name,
90
+ :path_info => request.path_info,
91
+ :method => request_method,
92
+ :params => request.params, # GET + POST params together. no uploads and other crazy shit please ;)
93
+ :content_type => request.content_type
94
+ }
95
+ end
96
+
97
+ def store_request!
98
+ session[:stored_request] = Base64.encode64(MultiJson.encode(current_request))
99
+ end
100
+
101
+ def request_replay_url
102
+ if stored_request = session.delete(:stored_request)
103
+ decoded = MultiJson.decode(Base64.decode64(stored_request))
104
+ if decoded["method"] == "GET"
105
+ qs = decoded["query_string"]
106
+ decoded["script_name"] + decoded["path_info"] + (qs ? "?" + qs : "")
107
+ else
108
+ "/auth/dejavu?" + Rack::Utils.build_query(:stored_request => stored_request)
109
+ end
110
+ end
111
+ end
112
+
100
113
  end
@@ -12,6 +12,10 @@ module ExvoAuth::Controllers::Merb
12
12
 
13
13
  protected
14
14
 
15
+ def request_method
16
+ request.method.to_s.upcase
17
+ end
18
+
15
19
  def basic_authentication_method_name
16
20
  :basic_authentication
17
21
  end
@@ -23,9 +27,5 @@ module ExvoAuth::Controllers::Merb
23
27
  def find_user_by_id(id)
24
28
  User[id]
25
29
  end
26
-
27
- def current_url
28
- request.full_uri if request.method == :get
29
- end
30
30
  end
31
31
  end
@@ -5,9 +5,13 @@ module ExvoAuth::Controllers::Rails
5
5
  base.helper_method :current_user, :signed_in?, :sign_up_path, :sign_in_path
6
6
  end
7
7
 
8
- module InstanceMethods
8
+ module InstanceMethods
9
9
  protected
10
-
10
+
11
+ def request_method
12
+ request.request_method
13
+ end
14
+
11
15
  def basic_authentication_method_name
12
16
  :authenticate_or_request_with_http_basic
13
17
  end
@@ -15,9 +19,5 @@ module ExvoAuth::Controllers::Rails
15
19
  def find_user_by_id(id)
16
20
  User.find(id)
17
21
  end
18
-
19
- def current_url
20
- request.url if request.get?
21
- end
22
22
  end
23
23
  end
@@ -0,0 +1,22 @@
1
+ class ExvoAuth::Dejavu
2
+ def initialize(app)
3
+ @app = app
4
+ end
5
+
6
+ def call(env)
7
+ dejavu(env) if Rack::Request.new(env).path == "/auth/dejavu"
8
+ @app.call(env)
9
+ end
10
+
11
+ private
12
+
13
+ def dejavu(env)
14
+ data = MultiJson.decode(Base64.decode64(Rack::Request.new(env).params["stored_request"]))
15
+
16
+ env["QUERY_STRING"] = Rack::Utils.build_nested_query(data["params"]) # Will not work with file uploads.
17
+ env["SCRIPT_NAME"] = data["script_name"]
18
+ env["PATH_INFO"] = data["path_info"]
19
+ env["REQUEST_METHOD"] = data["method"]
20
+ env["CONTENT_TYPE"] = data["content_type"]
21
+ end
22
+ end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 8
9
- - 2
10
- version: 0.8.2
8
+ - 9
9
+ - 0
10
+ version: 0.9.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jacek Becela
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-30 00:00:00 +02:00
18
+ date: 2010-09-02 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -109,6 +109,7 @@ files:
109
109
  - lib/exvo_auth/controllers/base.rb
110
110
  - lib/exvo_auth/controllers/merb.rb
111
111
  - lib/exvo_auth/controllers/rails.rb
112
+ - lib/exvo_auth/dejavu.rb
112
113
  - lib/exvo_auth/oauth2.rb
113
114
  - lib/exvo_auth/strategies/base.rb
114
115
  - lib/exvo_auth/strategies/interactive.rb