cassiopeia 0.0.9 → 0.1.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/README.rdoc +22 -1
- data/Rakefile +1 -1
- data/lib/cassiopeia/action_controller_client_mixin.rb +5 -12
- data/lib/cassiopeia/action_controller_server_mixin.rb +29 -16
- data/lib/cassiopeia/active_record_server_mixin.rb +3 -6
- data/lib/cassiopeia/base.rb +2 -0
- data/lib/cassiopeia/base_rack.rb +61 -0
- data/lib/cassiopeia/client.rb +3 -0
- data/lib/cassiopeia/config.rb +2 -3
- data/lib/cassiopeia/rack_restore_request.rb +53 -83
- data/lib/cassiopeia.rb +4 -2
- metadata +3 -2
data/README.rdoc
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
- Yet another custom CAS client/server implementation. This plugin allows you to perform single-server authorization between two different rails applications.
|
8
8
|
|
9
9
|
= Changelog:
|
10
|
+
- 0.1.0: Multiple requests storing fixed. Workarounds for concurrent requests processing applied.
|
10
11
|
- 0.0.9: The bug with multiple concurrent requests processing fixed.
|
11
12
|
- 0.0.8: Full request saving support via rack middleware.
|
12
13
|
- 0.0.7: Some code for redirection added. Added webpath prefix support.
|
@@ -35,7 +36,8 @@
|
|
35
36
|
server_url: "https://localhost" # Url of cassiopeia server in your environment
|
36
37
|
service_url: "https://localhost/myservice/" # Url of your application (for cas to redirect back)
|
37
38
|
service_id: "myservice" # Identification of your service (for informational and security purpose)
|
38
|
-
|
39
|
+
requests_save_enabled: true # Set this value to true if you want your application to save and restore the previous request when redirecting to cassiopeia (default: true)
|
40
|
+
|
39
41
|
|
40
42
|
==== Usage:
|
41
43
|
<b>Add this line to application_controller.rb:</b>
|
@@ -52,6 +54,25 @@ This will raise the Cassiopeia::Exception::AccessDenied if user try to access th
|
|
52
54
|
redirect_to root_path
|
53
55
|
end
|
54
56
|
|
57
|
+
If you set requests_save_enabled to true then you should create the new migration to create
|
58
|
+
the cassiopeia_requests table for storing requests. This is very important if you want to use
|
59
|
+
redirections on the requests that are differ from GET. So, create this migration:
|
60
|
+
class AddCassiopeia < ActiveRecord::Migration
|
61
|
+
def self.up
|
62
|
+
create_table :cassiopeia_requests do |t|
|
63
|
+
t.string :uid
|
64
|
+
t.binary :data
|
65
|
+
t.datetime :expires_at
|
66
|
+
t.timestamps
|
67
|
+
end
|
68
|
+
end
|
69
|
+
def self.down
|
70
|
+
drop_table :cassiopeia_requests
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
55
76
|
=== Server configuration
|
56
77
|
Create a file named config/cassiopeia.yml:
|
57
78
|
ticket_max_lifetime: 5 # Ticket max lifetime (in minutes, default: 120)
|
data/Rakefile
CHANGED
@@ -5,13 +5,13 @@ module Cassiopeia
|
|
5
5
|
::CAS_USER_KEY = Cassiopeia::CONFIG[:current_user_key]
|
6
6
|
::CAS_TICKET_ID_KEY = Cassiopeia::CONFIG[:ticket_id_key]
|
7
7
|
::CAS_TICKET_KEY = Cassiopeia::CONFIG[:ticket_key]
|
8
|
-
::
|
9
|
-
::CAS_RETURN_TO_KEY = Cassiopeia::CONFIG[:return_to_key]
|
8
|
+
::CAS_UNIQUE_REQ_KEY = Cassiopeia::CONFIG[:rack_unique_req_key]
|
10
9
|
def cas_current_ticket
|
11
10
|
session[CAS_TICKET_KEY] || params[CAS_TICKET_KEY]
|
12
11
|
end
|
13
12
|
def cas_current_ticket_id
|
14
|
-
params[CAS_TICKET_ID_KEY] ||
|
13
|
+
return session[CAS_TICKET_ID_KEY] if (params[CAS_TICKET_ID_KEY].nil? || params[CAS_TICKET_ID_KEY].empty?)
|
14
|
+
return params[CAS_TICKET_ID_KEY]
|
15
15
|
end
|
16
16
|
def cas_store_current_user(ticket, user)
|
17
17
|
session[CAS_TICKET_KEY] = ticket
|
@@ -26,15 +26,8 @@ module Cassiopeia
|
|
26
26
|
logger.debug "\nCurrent ticket valid: #{DateTime.parse(cas_current_ticket[:expires_at])} >= #{DateTime.now}\n" + "="*50 if cas_current_ticket && cas_current_ticket[:expires_at]
|
27
27
|
cas_current_ticket && DateTime.parse(cas_current_ticket[:expires_at]) >= DateTime.now if cas_current_ticket && cas_current_ticket[:expires_at]
|
28
28
|
end
|
29
|
-
def cas_store_location
|
30
|
-
session[CAS_RETURN_TO_KEY] = "#{CAS_WEBPATH_PREFIX}#{request.request_uri}"
|
31
|
-
end
|
32
|
-
def cas_redirect_back_or_default(default)
|
33
|
-
redirect_to(session[CAS_RETURN_TO_KEY] || default)
|
34
|
-
session[CAS_RETURN_TO_KEY] = nil
|
35
|
-
end
|
36
29
|
def cas_request_ticket_id
|
37
|
-
|
30
|
+
logger.debug "\nStoring current request:...#{params[CAS_UNIQUE_REQ_KEY]} \n" + "="*50
|
38
31
|
redirect_to Cassiopeia::Client::instance.cas_check_url(session, params)
|
39
32
|
end
|
40
33
|
def cas_request_current_user
|
@@ -44,7 +37,7 @@ module Cassiopeia
|
|
44
37
|
@current_user = Cassiopeia::User.new(@ticket[:user])
|
45
38
|
logger.debug "\nCurrent user identified (#{@current_user.login}), storing to session\n" + "="*50
|
46
39
|
cas_store_current_user(@ticket, @current_user)
|
47
|
-
logger.debug "\nTicket_id is in request, should process the old request
|
40
|
+
logger.debug "\nTicket_id is in request, should process the old request...#{params[CAS_UNIQUE_REQ_KEY]} \n" + "="*50
|
48
41
|
end
|
49
42
|
def cas_required_roles
|
50
43
|
self.class.cas_required_roles if self.class.respond_to? :cas_required_roles
|
@@ -3,8 +3,10 @@ module Cassiopeia
|
|
3
3
|
|
4
4
|
module ActionControllerServerMixin
|
5
5
|
module ActionControllerMethods
|
6
|
+
private
|
6
7
|
def cas_ticket_id
|
7
|
-
params[@ticket_id_key] ||
|
8
|
+
return session[@ticket_id_key] if (params[@ticket_id_key].nil? || params[@ticket_id_key].empty?)
|
9
|
+
return params[@ticket_id_key]
|
8
10
|
end
|
9
11
|
def cas_service_url
|
10
12
|
params[@service_url_key] || session[@service_url_key]
|
@@ -51,11 +53,11 @@ module Cassiopeia
|
|
51
53
|
end
|
52
54
|
|
53
55
|
def cas_current_ticket_exists?
|
54
|
-
Cassiopeia::CONFIG[:ticketClass].exists?(cas_ticket_id)
|
56
|
+
Cassiopeia::CONFIG[:ticketClass].exists?(cas_ticket_id)
|
55
57
|
end
|
56
58
|
|
57
59
|
def cas_current_ticket_valid?
|
58
|
-
logger.debug
|
60
|
+
logger.debug("\nTicketValid = #{cas_current_ticket.valid_for?(cas_service_id)}\n" + "="*50) if cas_current_ticket_exists?
|
59
61
|
cas_current_ticket.valid_for?(cas_service_id) if cas_current_ticket_exists?
|
60
62
|
end
|
61
63
|
|
@@ -93,23 +95,34 @@ module Cassiopeia
|
|
93
95
|
redirect_to url
|
94
96
|
end
|
95
97
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
98
|
+
def cas_service_url_build
|
99
|
+
Cassiopeia::Server::instance.service_url(session, params)
|
100
|
+
end
|
101
|
+
|
102
|
+
def cas_proceed_auth
|
103
|
+
Thread.exclusive do
|
104
|
+
if cas_current_ticket_valid? && current_user
|
105
|
+
logger.debug "\nCurrentTicketValid, current_user exists redirecting to service...\n" + "="*50
|
106
|
+
return cas_redirect_to cas_service_url_build
|
107
|
+
elsif current_user
|
108
|
+
logger.debug "\nCurrentTicketInvalid, but current_user exists, should create new ticket...\n" + "="*50
|
109
|
+
cas_current_ticket.destroy if cas_current_ticket_exists?
|
110
|
+
cas_create_or_find_ticket
|
111
|
+
return cas_redirect_to cas_service_url_build
|
112
|
+
elsif cas_current_ticket_exists?
|
113
|
+
logger.debug "\nCurrentTicketInvalid, but current_user exists, destroying ticket, redirecting to login...\n" + "="*50
|
114
|
+
cas_current_ticket.destroy
|
115
|
+
end
|
109
116
|
end
|
110
117
|
cas_redirect_to login_url
|
111
118
|
end
|
112
119
|
|
120
|
+
def cas_remove_expired_tickets
|
121
|
+
Cassiopeia::CONFIG[:ticketClass].delete_all(:conditions => ["expired_at <= '?'", Time.now.utc])
|
122
|
+
end
|
123
|
+
|
124
|
+
public
|
125
|
+
|
113
126
|
def create
|
114
127
|
cas_process_request
|
115
128
|
end
|
@@ -2,23 +2,20 @@ require 'uuidtools'
|
|
2
2
|
|
3
3
|
module Cassiopeia
|
4
4
|
module ActiveRecordServerMixin
|
5
|
-
def self.cassiopeia_ticketClass=(c)
|
6
|
-
@@cassiopeia_ticketClass = c
|
7
|
-
end
|
8
5
|
# cas ticket
|
9
6
|
def acts_as_cas_ticket
|
10
7
|
class_eval do
|
11
8
|
def valid_for?(service)
|
12
9
|
return false unless identity && user
|
13
|
-
(ticket = self.for_service
|
10
|
+
(ticket = self.for_service(service)) && ticket.expires_at.utc >= Time.now.utc
|
14
11
|
end
|
15
12
|
def for_service(service)
|
16
|
-
|
13
|
+
Cassiopeia::CONFIG[:ticketClass].find(:first, :conditions => {:service => service, :user_id => user.id, :identity=>identity })
|
17
14
|
end
|
18
15
|
end
|
19
16
|
instance_eval do
|
20
17
|
def generate_expiration
|
21
|
-
|
18
|
+
Time.now.utc + Cassiopeia::CONFIG[:ticket_max_lifetime].to_i.minute
|
22
19
|
end
|
23
20
|
def generate_uuid
|
24
21
|
UUIDTools::UUID.timestamp_create.to_s
|
data/lib/cassiopeia/base.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require(File.join(RAILS_ROOT,"config/environment")) unless defined?(Rails)
|
2
|
+
module Cassiopeia
|
3
|
+
class BaseRack < Base
|
4
|
+
CAS_RACK_SESSION_STORE = Cassiopeia::CONFIG[:rack_session_store]
|
5
|
+
CAS_RACK_SESSION_KEY = Cassiopeia::CONFIG[:rack_session_key]
|
6
|
+
CAS_TICKET_ID_KEY = Cassiopeia::CONFIG[:ticket_id_key]
|
7
|
+
CAS_TICKET_KEY = Cassiopeia::CONFIG[:ticket_key]
|
8
|
+
CAS_REQUEST_URI_KEY = Cassiopeia::CONFIG[:rack_request_uri_key]
|
9
|
+
CAS_QUERY_STRING_KEY = Cassiopeia::CONFIG[:rack_query_string_key]
|
10
|
+
CAS_SAVE_KEYS = Cassiopeia::CONFIG[:rack_save_keys]
|
11
|
+
CAS_UNIQUE_REQ_KEY = Cassiopeia::CONFIG[:rack_unique_req_key]
|
12
|
+
CAS_REQ_EXPIRES_AT_KEY = Cassiopeia::CONFIG[:rack_session_store_expires_at_key]
|
13
|
+
CAS_REQ_TIMEOUT = Cassiopeia::CONFIG[:rack_session_store_timeout]
|
14
|
+
|
15
|
+
def session(env)
|
16
|
+
env[CAS_RACK_SESSION_KEY]
|
17
|
+
end
|
18
|
+
|
19
|
+
def cas_current_ticket(env)
|
20
|
+
session(env)[CAS_TICKET_KEY]
|
21
|
+
end
|
22
|
+
|
23
|
+
def cas_current_ticket_valid?(env)
|
24
|
+
@ticket = cas_current_ticket(env)
|
25
|
+
@ticket && DateTime.parse(@ticket[:expires_at]) >= DateTime.now if @ticket && @ticket[:expires_at]
|
26
|
+
end
|
27
|
+
|
28
|
+
def enabled
|
29
|
+
Cassiopeia::CONFIG[:requests_save_enabled]
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize( app )
|
33
|
+
@app = app
|
34
|
+
end
|
35
|
+
|
36
|
+
def response( env )
|
37
|
+
@status, @headers, @body = @app.call env
|
38
|
+
[@status, @headers, @body]
|
39
|
+
end
|
40
|
+
|
41
|
+
def restore_headers_required?(env)
|
42
|
+
env[CAS_QUERY_STRING_KEY] && env[CAS_QUERY_STRING_KEY].match(CAS_TICKET_ID_KEY.to_s) && env[CAS_RACK_SESSION_KEY] && env[CAS_RACK_SESSION_KEY][CAS_RACK_SESSION_STORE]
|
43
|
+
end
|
44
|
+
|
45
|
+
def store_headers_required?(env)
|
46
|
+
!cas_current_ticket_valid?(env)
|
47
|
+
end
|
48
|
+
|
49
|
+
def generate_expiration
|
50
|
+
DateTime.now() + CAS_REQ_TIMEOUT / 24.0 / 60.0
|
51
|
+
end
|
52
|
+
|
53
|
+
def generate_req_key
|
54
|
+
UUIDTools::UUID.timestamp_create.to_s
|
55
|
+
end
|
56
|
+
|
57
|
+
def raise_missconfiguration(msg)
|
58
|
+
raise Cassiopeia::Exception::MissConfiguration.new "Cannot modify or delete cassiopeia request instance! Please, create table casssiopeia_requests[:uid, :expires_at, :data] or disable requests saving in configuration! (#{msg})"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/cassiopeia/client.rb
CHANGED
data/lib/cassiopeia/config.rb
CHANGED
@@ -11,8 +11,6 @@ module Cassiopeia
|
|
11
11
|
:service_url_key => "cas_service_url",
|
12
12
|
:server_url => nil,
|
13
13
|
:service_url => nil,
|
14
|
-
:webpath_prefix => "",
|
15
|
-
:return_to_key => "cas_return_to",
|
16
14
|
:service_id => nil,
|
17
15
|
:current_user_key => "current_user",
|
18
16
|
:format => "js",
|
@@ -23,7 +21,8 @@ module Cassiopeia
|
|
23
21
|
:rack_session_key => "rack.session",
|
24
22
|
:rack_unique_req_key => "cas_req_key",
|
25
23
|
:rack_session_store_timeout => 1,
|
26
|
-
:rack_session_store_expires_at_key => "cas_req_expires"
|
24
|
+
:rack_session_store_expires_at_key => "cas_req_expires",
|
25
|
+
:requests_save_enabled => true
|
27
26
|
}
|
28
27
|
CONFIG_PATH = "#{RAILS_ROOT}/config/cassiopeia.yml"
|
29
28
|
@@conf = {}
|
@@ -1,110 +1,80 @@
|
|
1
1
|
module Cassiopeia
|
2
|
-
class RackRestoreRequest
|
3
|
-
CAS_RACK_SESSION_STORE = Cassiopeia::CONFIG[:rack_session_store]
|
4
|
-
CAS_RACK_SESSION_KEY = Cassiopeia::CONFIG[:rack_session_key]
|
5
|
-
CAS_TICKET_ID_KEY = Cassiopeia::CONFIG[:ticket_id_key]
|
6
|
-
CAS_REQUEST_URI_KEY = Cassiopeia::CONFIG[:rack_request_uri_key]
|
7
|
-
CAS_QUERY_STRING_KEY = Cassiopeia::CONFIG[:rack_query_string_key]
|
8
|
-
CAS_SAVE_KEYS = Cassiopeia::CONFIG[:rack_save_keys]
|
9
|
-
CAS_UNIQUE_REQ_KEY = Cassiopeia::CONFIG[:rack_unique_req_key]
|
10
|
-
CAS_REQ_EXPIRES_AT_KEY = Cassiopeia::CONFIG[:rack_session_store_expires_at_key]
|
11
|
-
CAS_REQ_TIMEOUT = Cassiopeia::CONFIG[:rack_session_store_timeout]
|
12
|
-
|
13
|
-
def initialize( app )
|
14
|
-
@app = app
|
15
|
-
end
|
16
|
-
|
2
|
+
class RackRestoreRequest < BaseRack
|
17
3
|
def call( env )
|
18
|
-
if
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def query_to_hash(query)
|
28
|
-
CGI.parse(query)
|
29
|
-
end
|
30
|
-
|
31
|
-
def hash_to_query(hash)
|
32
|
-
pairs = []
|
33
|
-
hash.each do |k, vals|
|
34
|
-
vals = [vals] unless vals.kind_of? Array
|
35
|
-
vals.each {|v| pairs << "#{CGI.escape(k.to_s)}=#{(v)?CGI.escape(v.to_s):''}"}
|
4
|
+
if enabled
|
5
|
+
if restore_headers_required?(env)
|
6
|
+
env = restore_old_request(env)
|
7
|
+
elsif store_headers_required?(env)
|
8
|
+
remove_expired_requests
|
9
|
+
store_current_request(env)
|
10
|
+
end
|
36
11
|
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
def restore_headers_required?(env)
|
41
|
-
env[CAS_QUERY_STRING_KEY] && env[CAS_QUERY_STRING_KEY].match(CAS_TICKET_ID_KEY.to_s) && env[CAS_RACK_SESSION_KEY] && env[CAS_RACK_SESSION_KEY][CAS_RACK_SESSION_STORE]
|
12
|
+
response(env)
|
42
13
|
end
|
43
14
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
15
|
+
def store_current_request(env)
|
16
|
+
begin
|
17
|
+
request = CassiopeiaRequest.new({:uid => store_req_key(env), :expires_at => generate_expiration})
|
18
|
+
store = {}
|
19
|
+
env.each do |key,value|
|
20
|
+
if env[key] && (key.is_a? String) && (key.match("HTTP_") || CAS_SAVE_KEYS.match(key))
|
21
|
+
store[key] = value
|
50
22
|
end
|
51
23
|
end
|
24
|
+
request.data = Marshal.dump(store)
|
25
|
+
request.save!
|
26
|
+
rescue Exception => e
|
27
|
+
raise_missconfiguration(e)
|
52
28
|
end
|
53
29
|
end
|
54
30
|
|
55
|
-
def generate_expiration
|
56
|
-
DateTime.now() + CAS_REQ_TIMEOUT / 24.0 / 60.0
|
57
|
-
end
|
58
31
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
32
|
+
def restore_old_request(env)
|
33
|
+
begin
|
34
|
+
key = restore_req_key(env)
|
35
|
+
request = CassiopeiaRequest.find_by_uid(key)
|
36
|
+
stored_keys = Marshal.load(request.data)
|
37
|
+
stored_keys.each do |key,value|
|
38
|
+
if(key.match(CAS_QUERY_STRING_KEY))
|
39
|
+
add_ticket_id_to_req(env,key,value)
|
40
|
+
else
|
41
|
+
env[key] = value
|
69
42
|
end
|
70
43
|
end
|
44
|
+
request.delete
|
45
|
+
rescue Exception => e
|
46
|
+
raise_missconfiguration(e)
|
71
47
|
end
|
48
|
+
env
|
72
49
|
end
|
73
50
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
def restore_req_key(env)
|
83
|
-
newparams = query_to_hash(env[CAS_QUERY_STRING_KEY])
|
84
|
-
newparams[CAS_UNIQUE_REQ_KEY]
|
51
|
+
def remove_expired_requests
|
52
|
+
begin
|
53
|
+
CassiopeiaRequest.delete_all(["expires_at <= ?", Time.now.utc])
|
54
|
+
rescue Exception => e
|
55
|
+
raise_missconfiguration(e)
|
56
|
+
end
|
85
57
|
end
|
86
58
|
|
87
59
|
def store_req_key(env)
|
88
60
|
params = query_to_hash(env[CAS_QUERY_STRING_KEY])
|
89
|
-
params[CAS_UNIQUE_REQ_KEY] =
|
61
|
+
params[CAS_UNIQUE_REQ_KEY] = generate_req_key
|
90
62
|
env[CAS_QUERY_STRING_KEY] = hash_to_query(params)
|
91
63
|
params[CAS_UNIQUE_REQ_KEY]
|
92
64
|
end
|
93
65
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
107
|
-
env
|
66
|
+
|
67
|
+
def restore_req_key(env)
|
68
|
+
newparams = query_to_hash(env[CAS_QUERY_STRING_KEY])
|
69
|
+
newparams[CAS_UNIQUE_REQ_KEY]
|
70
|
+
end
|
71
|
+
|
72
|
+
def add_ticket_id_to_req(env, key, value)
|
73
|
+
newparams = query_to_hash(value)
|
74
|
+
params = query_to_hash(env[key])
|
75
|
+
newparams[CAS_TICKET_ID_KEY] = params[CAS_TICKET_ID_KEY]
|
76
|
+
newparams.delete CAS_UNIQUE_REQ_KEY
|
77
|
+
env[key] = hash_to_query(newparams)
|
108
78
|
end
|
109
79
|
end
|
110
80
|
end
|
data/lib/cassiopeia.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
module Cassiopeia
|
4
|
-
VERSION = '0.0
|
4
|
+
VERSION = '0.1.0'
|
5
5
|
autoload :User, 'cassiopeia/user'
|
6
6
|
autoload :Base, 'cassiopeia/base'
|
7
7
|
autoload :Exception, 'cassiopeia/base'
|
@@ -12,6 +12,8 @@ module Cassiopeia
|
|
12
12
|
autoload :ActionControllerServerMixin, 'cassiopeia/action_controller_server_mixin'
|
13
13
|
autoload :ActionControllerClientMixin, 'cassiopeia/action_controller_client_mixin'
|
14
14
|
autoload :RackRestoreRequest, 'cassiopeia/rack_restore_request'
|
15
|
+
autoload :BaseRack, 'cassiopeia/base_rack'
|
16
|
+
autoload :CassiopeiaRequest, 'cassiopeia/client'
|
15
17
|
|
16
18
|
class << self
|
17
19
|
def enable
|
@@ -19,7 +21,7 @@ module Cassiopeia
|
|
19
21
|
ActiveRecord::Base.send :extend, ActiveRecordServerMixin
|
20
22
|
ActionController::Base.send :extend, ActionControllerClientMixin
|
21
23
|
Rails.configuration.middleware.use RackRestoreRequest if CONFIG[:service_id]
|
22
|
-
puts "Cassiopeia 0.0
|
24
|
+
puts "Cassiopeia 0.1.0 enabled"
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cassiopeia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- smecsia
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-04-
|
12
|
+
date: 2010-04-13 00:00:00 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- Rakefile
|
56
56
|
- lib/cassiopeia.rb
|
57
57
|
- lib/cassiopeia/active_record_server_mixin.rb
|
58
|
+
- lib/cassiopeia/base_rack.rb
|
58
59
|
- lib/cassiopeia/action_controller_server_mixin.rb
|
59
60
|
- lib/cassiopeia/config.rb
|
60
61
|
- lib/cassiopeia/server.rb
|