moguera-authentication 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2f754587f79e26c05a6765d17711915560e7ed0
4
- data.tar.gz: f556b05c274b540642325d4c4112d20d1145dc8a
3
+ metadata.gz: 7d6a12e8bf765eea7438dc1cb9553a02dff5ccc0
4
+ data.tar.gz: 4273174cdfebf58dc6b90ba5e420686cf6da2035
5
5
  SHA512:
6
- metadata.gz: 4564b05390b4ce0ba5c824818fb869d92fa28a175619dbd0051752787011741329227a5f912b1ff8089e791dd8672bf0038bacb83d05fea2f3486a231ce3730a
7
- data.tar.gz: 753542862ff2a1b864657314dfee005e8ed498678b5376c9f340770c648d83c7c9e2d534a545778cdcecb7d9df32fc1dd29a0d993d20570b72795e0aae0c5dd3
6
+ metadata.gz: 648d0938793be93bf7ae8de811b5108d4019e39c72444c20f692678b73a03c6cfcaa1ad55135b4268ed7a46ecb57ed392a048b42c570be8a9a4ce4a539e2ccf1
7
+ data.tar.gz: 55ccb61e61572a27bb4da245c0f9e76e3064faa1447d6c2e169d82010bdf2992ca6599e2f09946c8b5509b4fdf5da64f65e8950b1c794013d938387bfb0848c9
data/README.md CHANGED
@@ -72,8 +72,13 @@ map '/login' do
72
72
  # # example credential.json
73
73
  # #=> {"user01":"secret"}
74
74
  file = File.join(File.expand_path(File.dirname(__FILE__)),'credential.json')
75
- user = JSON.parse(File.open(file, &:read))
76
- user[request_access_key]
75
+ secret_key = JSON.parse(File.open(file, &:read))[request_access_key]
76
+
77
+ unless secret_key
78
+ raise Moguera::Authentication::UserNotFound, "access_key: " + request_access_key
79
+ end
80
+
81
+ secret_key
77
82
  end
78
83
 
79
84
  run Private
@@ -103,10 +108,13 @@ class Private < Sinatra::Base
103
108
  if e = env['moguera.error']
104
109
  $stderr.puts e.message
105
110
  case e
106
- when Moguera::Authentication::ParameterInvalid
111
+ when Moguera::Authentication::ParameterInvalid,
112
+ Moguera::Authentication::RequestTokenRequired
107
113
  halt 400, "400 Bad Request: #{e.message}\n"
108
114
  when Moguera::Authentication::AuthenticationError
109
115
  halt 401, "401 Unauthorized: #{e.message}\n"
116
+ when Moguera::Authentication::UserNotFound
117
+ halt 404, "404 Not Found: #{e.message}\n"
110
118
  else
111
119
  halt 500, "500 Internal Server Error\n"
112
120
  end
@@ -10,5 +10,11 @@ module Moguera
10
10
 
11
11
  class BlockRequired < StandardError
12
12
  end
13
+
14
+ class RequestTokenRequired < StandardError
15
+ end
16
+
17
+ class UserNotFound < StandardError
18
+ end
13
19
  end
14
20
  end
@@ -1,5 +1,5 @@
1
1
  module Moguera
2
2
  class Authentication
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -7,7 +7,7 @@ module Moguera
7
7
  attr_accessor :allow_time_interval
8
8
 
9
9
  def initialize(request_token = nil)
10
- raise AuthenticationError, 'Missing request token.' unless request_token
10
+ raise RequestTokenRequired, 'Missing request token.' unless request_token
11
11
 
12
12
  @request_token = request_token
13
13
  @allow_time_interval = allow_time_interval || 600
@@ -0,0 +1,97 @@
1
+ module MogueraAuthentication
2
+ module Authable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper_method :current_user, :user_signed_in?
7
+ end
8
+
9
+ def current_user=(user)
10
+ @current_user = user
11
+ end
12
+
13
+ def current_user
14
+ @current_user
15
+ end
16
+
17
+ def user_signed_in?
18
+ !!current_user
19
+ end
20
+
21
+ def require_sign_in!
22
+ validate_user!
23
+ sign_in!(user_class.find_by(find_key => env['moguera.auth'].try(:access_key)))
24
+ end
25
+
26
+ def sign_in!(user)
27
+ self.current_user = user
28
+ end
29
+
30
+ def sign_out!
31
+ self.current_user = nil
32
+ end
33
+
34
+ module ClassMethods
35
+ def require_sign_in!(options={})
36
+ before_filter :require_sign_in!, options
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def user_class
43
+ Rails.application.config.moguera_authentication.user_class
44
+ end
45
+
46
+ def find_key
47
+ Rails.application.config.moguera_authentication.find_key
48
+ end
49
+
50
+ def validate_user!
51
+ if e = env['moguera.error']
52
+ logger.error "ERROR: #{e.inspect}"
53
+ case e
54
+ when Moguera::Authentication::ParameterInvalid,
55
+ Moguera::Authentication::RequestTokenRequired
56
+ status = 400
57
+ response = {
58
+ code: e.class.to_s,
59
+ message: "#{status} Bad Request: #{e.message}",
60
+ status: status
61
+ }
62
+ when Moguera::Authentication::AuthenticationError
63
+ status = 401
64
+ response = {
65
+ code: e.class.to_s,
66
+ message: "#{status} Unauthorized: #{e.message}",
67
+ status: status
68
+ }
69
+ require 'pp'
70
+ PP.pp ({
71
+ request_token: e.request_token,
72
+ server_request_token: e.server_request.token,
73
+ request_path: e.server_request.request_path,
74
+ request_method: e.server_request.request_method,
75
+ http_date: e.server_request.http_date,
76
+ content_type: e.server_request.content_type
77
+ }), STDERR
78
+ when Moguera::Authentication::UserNotFound
79
+ status = 404
80
+ response = {
81
+ code: e.class.to_s,
82
+ message: "#{status} Not Found: #{e.message}",
83
+ status: status
84
+ }
85
+ else
86
+ status = 500
87
+ response = {
88
+ code: e.class.to_s,
89
+ message: "#{status} Internal Server Error: #{e.message}",
90
+ status: status
91
+ }
92
+ end
93
+ render(json: response, status: status)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,22 @@
1
+ module MogueraAuthentication
2
+ class Install < Rails::Generators::Base
3
+ desc 'Initialize MogueraAuthentication'
4
+ def create_initializer_file
5
+ initializer 'moguera_authentication.rb' do
6
+ <<-FILE.strip_heredoc
7
+ Rails.application.config.middleware.use Rack::MogueraAuthentication do |key|
8
+ secret_key = Rails.application.config.moguera_authentication.user_class
9
+ .find_by(Rails.application.config.moguera_authentication.find_key => key)
10
+ .try(Rails.application.config.moguera_authentication.secret_access_key)
11
+
12
+ unless secret_key
13
+ raise Moguera::Authentication::UserNotFound, "access_key: " + key
14
+ end
15
+
16
+ secret_key
17
+ end
18
+ FILE
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module MogueraAuthentication
2
+ class Railtie < ::Rails::Railtie
3
+ config.moguera_authentication = ActiveSupport::OrderedOptions.new
4
+ config.eager_load_namespaces << MogueraAuthentication::Railtie
5
+
6
+ initializer 'moguera_authentication.controller_ext' do
7
+ require 'rails/moguera_authentication/authable'
8
+ ActiveSupport.on_load(:action_controller) do
9
+ ActionController::Base.send :include, MogueraAuthentication::Authable
10
+ end
11
+ end
12
+
13
+ initializer 'moguera_authentication.set_config' do
14
+ config.moguera_authentication.user_class ||= User rescue nil
15
+ config.moguera_authentication.find_key ||= :access_key
16
+ config.moguera_authentication.secret_access_key ||= :secret_access_key
17
+ end
18
+
19
+ generators do
20
+ require 'rails/moguera_authentication/install'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ require 'rails/railtie'
2
+ require 'rack/moguera_authentication'
3
+ require 'rails/moguera_authentication/railtie'
4
+
5
+ module MogueraAuthentication
6
+ end
data/sample/config.ru CHANGED
@@ -12,8 +12,11 @@ end
12
12
  map '/login' do
13
13
  use Rack::MogueraAuthentication do |key|
14
14
  file = File.join(File.expand_path(File.dirname(__FILE__)), 'credential.json')
15
- user = JSON.parse(File.open(file, &:read))
16
- user[key]
15
+ secret_key = JSON.parse(File.open(file, &:read))[key]
16
+
17
+ raise Moguera::Authentication::UserNotFound unless secret_key
18
+
19
+ secret_key
17
20
  end
18
21
 
19
22
  run Private
data/sample/server.rb CHANGED
@@ -18,10 +18,13 @@ class Private < Sinatra::Base
18
18
  if e = env['moguera.error']
19
19
  $stderr.puts e.message
20
20
  case e
21
- when Moguera::Authentication::ParameterInvalid
21
+ when Moguera::Authentication::ParameterInvalid,
22
+ Moguera::Authentication::RequestTokenRequired
22
23
  halt 400, "400 Bad Request: #{e.message}\n"
23
24
  when Moguera::Authentication::AuthenticationError
24
25
  halt 401, "401 Unauthorized: #{e.message}\n"
26
+ when Moguera::Authentication::UserNotFound
27
+ halt 404, "404 Not Found: #{e.message}\n"
25
28
  else
26
29
  halt 500, "500 Internal Server Error\n"
27
30
  end
@@ -31,10 +31,10 @@ describe Moguera::Authentication do
31
31
  end
32
32
 
33
33
  describe 'Invalid token' do
34
- it 'should be raise AuthenticationError with missing request token message' do
34
+ it 'should be raise RequestTokenRequired with missing request token message' do
35
35
  expect {
36
36
  Moguera::Authentication.new
37
- }.to raise_error(Moguera::Authentication::AuthenticationError, 'Missing request token.')
37
+ }.to raise_error(Moguera::Authentication::RequestTokenRequired, 'Missing request token.')
38
38
  end
39
39
 
40
40
  it 'should be raise AuthenticationError with invalid token message' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moguera-authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hiro-su
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-24 00:00:00.000000000 Z
11
+ date: 2015-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,6 +86,10 @@ files:
86
86
  - lib/moguera/authentication/request.rb
87
87
  - lib/moguera/authentication/version.rb
88
88
  - lib/rack/moguera_authentication.rb
89
+ - lib/rails/moguera_authentication.rb
90
+ - lib/rails/moguera_authentication/authable.rb
91
+ - lib/rails/moguera_authentication/install.rb
92
+ - lib/rails/moguera_authentication/railtie.rb
89
93
  - moguera-authentication.gemspec
90
94
  - sample/client.rb
91
95
  - sample/config.ru