currentuser-services 0.1.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b080ee8d8fd1da8e9c5e48619af3777f9f70445a
4
- data.tar.gz: f1c3851cf3aed33c94901f9ae6804055264199e0
3
+ metadata.gz: 27d69251789724bbec4043769a4ccb50dd11829e
4
+ data.tar.gz: 6367213142ff7f9d6aa4ad3e5cb5e852bfc857d8
5
5
  SHA512:
6
- metadata.gz: 9b0a18db88b70c5a297bee84a9605fe1df160a8bfe47c892b8fac81e9bc4d9602408adc2f652ea2f0c885f934308bf17f87e63b03647de4f109f904a55ad48a3
7
- data.tar.gz: 7b3cc50c475469277e63725f94f98f27355ba49581d6478c3fce957f7f38917a6560d2f46a7a3f968daaa5dc78b5a7cf934e3291763aeba805ded223f0a94648
6
+ metadata.gz: 831b8cd72a0f0fd91c5003a746a0a5fc56846dc6e6dd3ac2a41a8c7430e07b1d4abc7dac6cf176f28c37df410d55c1b97b424fd1ddd9ba16bce66bb84e0970d1
7
+ data.tar.gz: 58c9a09c718cbea0f0400be11486569064d9b7761f4a697586064665792fac1bd0444e2b4500148ae1d16c0ba8091e8f4a494fd26bdc9f57a6c644773d8001d6
data/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0
4
+
5
+ **Feature**
6
+
7
+ * Set `:sign_up` context in session (undocumented because unreliable yet)
8
+
9
+ **Refactoring**
10
+
11
+ * Change the way currentuser data is stored in session
12
+
13
+ ## 0.1.0
14
+
15
+ **Improvement**
16
+
17
+ * **[Breaking change]** Use HTTP DELETE rather than HTTP GET for sign out
data/README.md CHANGED
@@ -32,7 +32,7 @@ end
32
32
 
33
33
  ## Usage
34
34
 
35
- * Use `currentuser_sign_up_url`, `currentuser_sign_in_url` and `currentuser_sign_out_url`in your navigation to allow
35
+ * Use `currentuser_sign_up_url` (GET), `currentuser_sign_in_url` (GET) and `currentuser_sign_out_url` (DELETE) in your navigation to allow
36
36
  visitor to sign up, in and out
37
37
  * Use `:require_currentuser` as `before_action` to protect your restricted actions
38
38
  * In any action or view, you can use `currentuser_id` to retrieve the id of the connected user (if any)
@@ -84,13 +84,13 @@ end
84
84
  ```haml
85
85
  -# views/shared/_menu.html.haml
86
86
  %ul
87
+ %li
88
+ = link_to 'Home', :root
87
89
  - if currentuser_id
88
- %li
89
- = link_to 'Home', :root
90
90
  %li
91
91
  = link_to 'Restricted', :restricted
92
92
  %li
93
- = link_to 'Sign out', currentuser_sign_out_url
93
+ = button_to 'Sign out', currentuser_sign_out_url, method: :delete
94
94
  - else
95
95
  %li
96
96
  = link_to 'Sign up', currentuser_sign_up_url
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
17
  gem.name = 'currentuser-services'
18
- gem.homepage = 'http://github.com/currentuser/currentuser-services-gem'
18
+ gem.homepage = 'http://www.currentuser.io'
19
19
  gem.license = 'MIT'
20
20
  gem.summary = %Q{Offsite sign up and sign in forms for Currentuser.io}
21
21
  gem.description = %Q{Offsite sign up and sign in forms for Currentuser.io}
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -6,13 +6,15 @@ module Currentuser
6
6
  Services.check_authentication_params!(params)
7
7
 
8
8
  # Log in
9
- session[:currentuser_id] = params[:currentuser_id]
9
+ session[:currentuser] = {id: params[:currentuser_id]}
10
+ # Note that params[:sign_up] should equal 'true' (String) or should be absent.
11
+ session[:currentuser][:sign_up] = true if params[:sign_up]
10
12
 
11
13
  redirect_to '/'
12
14
  end
13
15
 
14
16
  def sign_out
15
- session.delete(:currentuser_id)
17
+ session.delete(:currentuser)
16
18
 
17
19
  redirect_to '/'
18
20
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: currentuser-services 0.1.0 ruby lib
5
+ # stub: currentuser-services 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "currentuser-services"
9
- s.version = "0.1.0"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["eric-currentuser"]
14
- s.date = "2014-12-16"
14
+ s.date = "2014-12-27"
15
15
  s.description = "Offsite sign up and sign in forms for Currentuser.io"
16
16
  s.email = "TBD"
17
17
  s.extra_rdoc_files = [
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
+ "CHANGELOG.md",
23
24
  "Gemfile",
24
25
  "LICENSE.txt",
25
26
  "README.md",
@@ -34,11 +35,12 @@ Gem::Specification.new do |s|
34
35
  "lib/currentuser/services/engine.rb",
35
36
  "test/currentuser/services/authenticates_test.rb",
36
37
  "test/currentuser/services/integration_test.rb",
38
+ "test/currentuser/services/sessions_controller_test.rb",
37
39
  "test/currentuser/services_test.rb",
38
40
  "test/helper.rb",
39
41
  "test/test_application/application.rb"
40
42
  ]
41
- s.homepage = "http://github.com/currentuser/currentuser-services-gem"
43
+ s.homepage = "http://www.currentuser.io"
42
44
  s.licenses = ["MIT"]
43
45
  s.rubygems_version = "2.2.2"
44
46
  s.summary = "Offsite sign up and sign in forms for Currentuser.io"
@@ -6,8 +6,12 @@ module Currentuser
6
6
  redirect_to currentuser_sign_in_url
7
7
  end
8
8
 
9
+ def currentuser_session
10
+ return session[:currentuser]
11
+ end
12
+
9
13
  def currentuser_id
10
- return @currentuser_id ||= session[:currentuser_id]
14
+ return @currentuser_id ||= currentuser_session && currentuser_session[:id]
11
15
  end
12
16
 
13
17
  def currentuser_sign_in_url
@@ -30,28 +30,41 @@ module Currentuser
30
30
  # require_currentuser
31
31
 
32
32
  test 'execute action if currentuser_id is available' do
33
- session[:currentuser_id] = 'user_id_1'
33
+ session[:currentuser] = {id: 'user_id_1'}
34
34
 
35
35
  get_with_route :test_action_requiring_user
36
36
  assert_response :ok
37
37
  end
38
38
 
39
39
  test 'redirects to sign_in URL if currentuser_id is not available' do
40
- assert_nil session[:currentuser_id]
40
+ assert_nil session[:currentuser]
41
41
 
42
42
  get_with_route :test_action_requiring_user
43
43
  assert_response :redirect
44
44
  assert_redirected_to Services.currentuser_url(:sign_in)
45
45
  end
46
46
 
47
+ # currentuser_session
48
+
49
+ test 'currentuser_session returns currentuser session' do
50
+ session[:currentuser] = {foo: 'blah'}
51
+
52
+ assert_equal({foo: 'blah'}, @controller.currentuser_session)
53
+ end
54
+
47
55
  # currentuser_id
48
56
 
49
57
  test 'currentuser_id returns currentuser ID' do
50
- session[:currentuser_id] = 'user_id_1'
58
+ session[:currentuser] = {id: 'user_id_1'}
51
59
 
52
60
  assert_equal 'user_id_1', @controller.currentuser_id
53
61
  end
54
62
 
63
+ test 'currentuser_id returns nil if no current user session' do
64
+ refute session.key?(:currentuser)
65
+ assert_nil @controller.currentuser_id
66
+ end
67
+
55
68
  # sign_in_url
56
69
 
57
70
  test 'sign_in_url returns the expected url' do
@@ -10,16 +10,9 @@ require 'test_application/application'
10
10
  require 'minitest/rails/capybara'
11
11
  require 'capybara/mechanize'
12
12
 
13
- require 'currentuser/data'
14
- require 'currentuser/data/test/helpers'
15
-
16
13
  #Rails.logger = Logger.new(STDOUT)
17
14
  Rails.logger = Logger.new('/dev/null')
18
15
 
19
- Currentuser::Data::BaseResource.site = ENV['CURRENTUSER_DATA_URL']
20
- Currentuser::Data::Test::UseReadApi.currentuser_project_id_for_tests =
21
- Currentuser::Services.configuration.project_id
22
-
23
16
  module Currentuser
24
17
  module Services
25
18
  Capybara.current_driver = :mechanize
@@ -0,0 +1,90 @@
1
+ require 'helper'
2
+
3
+ module Currentuser
4
+ module Services
5
+
6
+ class SessionsControllerTest < ActionController::TestCase
7
+ tests SessionsController
8
+
9
+ def process_with_route(verb, action, params, session={})
10
+ with_routing do |map|
11
+ map.draw do
12
+ currentuser
13
+ end
14
+ send verb, action, params.merge(use_route: 'currentuser/services'), session
15
+ end
16
+ end
17
+
18
+ def get_with_route(action, params={})
19
+ process_with_route :get, action, params
20
+ end
21
+
22
+ def delete_with_route(action, params, session)
23
+ process_with_route :delete, action, params, session
24
+ end
25
+
26
+ # sign_in
27
+
28
+ test 'sign_in logs user in and redirects to root' do
29
+
30
+ # Take a recent timestamp
31
+ timestamp = (Time.now - 60).to_i.to_s
32
+ user_id = 'user_id_1'
33
+
34
+ # By pass signature checking
35
+ Services.stub :signature_authentic?, true do
36
+ get_with_route :sign_in, currentuser_id: user_id, timestamp: timestamp, signature: 'any_signature'
37
+ end
38
+
39
+ assert_redirected_to '/'
40
+ assert_equal({id: user_id}, session[:currentuser])
41
+ refute session[:currentuser].has_key?(:sign_up)
42
+ end
43
+
44
+ test 'sign_in sets sign_up if sign_up is true' do
45
+
46
+ # Take a recent timestamp
47
+ timestamp = (Time.now - 60).to_i.to_s
48
+
49
+ # By pass signature checking
50
+ Services.stub :signature_authentic?, true do
51
+ get_with_route :sign_in, currentuser_id: 'user_id_1', timestamp: timestamp, signature: 'any_signature',
52
+ sign_up: 'true'
53
+ end
54
+
55
+ assert_redirected_to '/'
56
+ assert_equal true, session[:currentuser][:sign_up]
57
+ end
58
+
59
+ # This test proves that we use Services#check_authentication_params!
60
+ test 'sign_in raises SignatureNotAuthentic if signature is wrong' do
61
+ # Take a recent timestamp
62
+ timestamp = (Time.now - 60).to_i.to_s
63
+
64
+ assert_raises SignatureNotAuthentic do
65
+ get_with_route :sign_in, currentuser_id: 'user_id_1', timestamp: timestamp, signature: 'any_signature'
66
+ end
67
+ end
68
+
69
+ # sign_out
70
+
71
+ test 'sign_out deletes session and redirects to root' do
72
+ session_hash = {currentuser: {foo: :blah}, other_key: :other_value}
73
+
74
+ delete_with_route :sign_out, {}, session_hash
75
+ assert_redirected_to '/'
76
+
77
+ assert_nil session[:currentuser]
78
+ assert_equal :other_value, session[:other_key]
79
+ end
80
+
81
+ # available
82
+
83
+ test 'GET available return 300' do
84
+ get_with_route 'available'
85
+ assert_response :ok
86
+ end
87
+
88
+ end
89
+ end
90
+ end
data/test/helper.rb CHANGED
@@ -11,16 +11,21 @@ require 'action_controller'
11
11
  require 'dotenv'
12
12
  Dotenv.load
13
13
 
14
+ # Load and configure this gem (currentuser-services)
14
15
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
16
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'app'))
16
17
  $LOAD_PATH.unshift(File.dirname(__FILE__))
17
18
  require 'currentuser/services'
18
-
19
19
  Currentuser::Services.configure do |config|
20
20
  config.project_id = ENV['CURRENTUSER_PROJECT_ID_FOR_TESTS']
21
- end
22
-
23
- Currentuser::Services.configure do |config|
24
21
  config.currentuser_services_host = ENV['CURRENTUSER_SERVICES_HOST']
25
22
  config.currentuser_services_public_key = ENV['CURRENTUSER_SERVICES_PUBLIC_KEY']
26
23
  end
24
+
25
+ # Load and configure 'currentuser-data' for tests.
26
+ # Note this is required only in 'integration_test.rb'.
27
+ require 'currentuser/data'
28
+ require 'currentuser/data/test/helpers'
29
+ Currentuser::Data::BaseResource.site = ENV['CURRENTUSER_DATA_URL']
30
+ Currentuser::Data::Test::UseReadApi.currentuser_project_id_for_tests =
31
+ Currentuser::Services.configuration.project_id
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: currentuser-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - eric-currentuser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-16 00:00:00.000000000 Z
11
+ date: 2014-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_config
@@ -173,6 +173,7 @@ extra_rdoc_files:
173
173
  - README.md
174
174
  files:
175
175
  - .document
176
+ - CHANGELOG.md
176
177
  - Gemfile
177
178
  - LICENSE.txt
178
179
  - README.md
@@ -187,10 +188,11 @@ files:
187
188
  - lib/currentuser/services/engine.rb
188
189
  - test/currentuser/services/authenticates_test.rb
189
190
  - test/currentuser/services/integration_test.rb
191
+ - test/currentuser/services/sessions_controller_test.rb
190
192
  - test/currentuser/services_test.rb
191
193
  - test/helper.rb
192
194
  - test/test_application/application.rb
193
- homepage: http://github.com/currentuser/currentuser-services-gem
195
+ homepage: http://www.currentuser.io
194
196
  licenses:
195
197
  - MIT
196
198
  metadata: {}