eteos-client 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/eteos-client.rb +157 -48
- metadata +5 -5
data/lib/eteos-client.rb
CHANGED
@@ -1,48 +1,157 @@
|
|
1
|
-
# eteos-client.rb
|
2
|
-
# eteos client for rails
|
3
|
-
# v0.
|
4
|
-
#
|
5
|
-
# David Adams
|
6
|
-
# March
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'uri'
|
10
|
-
require 'net/http'
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
1
|
+
# eteos-client.rb
|
2
|
+
# eteos client for rails
|
3
|
+
# v0.3.0
|
4
|
+
#
|
5
|
+
# David Adams
|
6
|
+
# March 22, 2005
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'uri'
|
10
|
+
require 'net/http'
|
11
|
+
|
12
|
+
# extend ActionController::Base to provide
|
13
|
+
# an authentication framework
|
14
|
+
class ActionController::Base
|
15
|
+
|
16
|
+
private
|
17
|
+
# this class variable holds the error handler for the controller
|
18
|
+
@@eteos_error_handler = nil
|
19
|
+
|
20
|
+
# this class variable holds the name of the user Model
|
21
|
+
@@eteos_user_model = :User
|
22
|
+
|
23
|
+
# this class variable holds the name of the field in the
|
24
|
+
# user Model where the eteos username is stored
|
25
|
+
@@eteos_username_field = "eteos_username"
|
26
|
+
|
27
|
+
# this class variable holds the name of the field in the
|
28
|
+
# user Model where the last visit timestampe is stored
|
29
|
+
@@eteos_last_visit_field = "last_visit"
|
30
|
+
|
31
|
+
protected
|
32
|
+
def self.eteos_error_handler(m)
|
33
|
+
@@eteos_error_handler = m
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.eteos_user_model(m)
|
37
|
+
@@eteos_user_model = m
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.eteos_username_field(f)
|
41
|
+
@@eteos_username_field = f
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.eteos_last_visit_field(f)
|
45
|
+
@@eteos_last_visit_field = f
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
EteosLoginURL = "http://www.eteos.com/login?url="
|
50
|
+
EteosServer = "www.eteos.com"
|
51
|
+
EteosTicketURI = "/ticket/"
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
# eteos_authenticate takes session hash and updates it
|
56
|
+
def eteos_authenticate
|
57
|
+
# build request URL
|
58
|
+
request_url = @request.ssl? ? "https://" : "http://" + @request.host_with_port
|
59
|
+
|
60
|
+
# if eteos_username is defined, do nothing
|
61
|
+
unless @session["eteos_username"]
|
62
|
+
unless @params["eteosTicket"]
|
63
|
+
redirect_to EteosLoginURL + URI.escape(request_url + @request.request_uri, '?&+=/[]\% :$')
|
64
|
+
else
|
65
|
+
# we have a ticket, we must check it
|
66
|
+
Net::HTTP.start(EteosServer, 80) do |http|
|
67
|
+
response = http.get("#{EteosTicketURI + @params['eteosTicket']}")
|
68
|
+
status,msg = response.body.split(":")
|
69
|
+
if status == "OK"
|
70
|
+
eteos_update_user_info(msg)
|
71
|
+
return true
|
72
|
+
else
|
73
|
+
eteos_error("Invalid ticket.")
|
74
|
+
return false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
else
|
79
|
+
eteos_update_user_info(@session['eteos_username'])
|
80
|
+
return true
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
# handle an error
|
87
|
+
def eteos_error(err)
|
88
|
+
if @@eteos_error_handler.nil?
|
89
|
+
eteos_default_error_handler(err)
|
90
|
+
else
|
91
|
+
result = case @@eteos_error_handler
|
92
|
+
when Symbol
|
93
|
+
self.send(@@eteos_error_handler, err)
|
94
|
+
when Array
|
95
|
+
@session['eteos_error'] = err
|
96
|
+
redirect_to(:controller => @@eteos_error_handler[0],
|
97
|
+
:action => @@eteos_error_handler[1])
|
98
|
+
else
|
99
|
+
# use the default handler but return a different error
|
100
|
+
eteos_default_error_handler("An error occured, but " +
|
101
|
+
"eteos_error_handler was not defined properly!")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# default error handler
|
107
|
+
def eteos_default_error_handler(err)
|
108
|
+
render_text "ETEOS ERROR: <b>#{err}</b>"
|
109
|
+
end
|
110
|
+
|
111
|
+
# check to see if user model and field exist
|
112
|
+
def eteos_valid_model?
|
113
|
+
# check to see if model exists
|
114
|
+
model = @@eteos_user_model.to_s
|
115
|
+
begin
|
116
|
+
eval "#{model}.new"
|
117
|
+
rescue NameError
|
118
|
+
return false
|
119
|
+
end
|
120
|
+
|
121
|
+
# check to see if field exists
|
122
|
+
field = @@eteos_username_field.to_s
|
123
|
+
begin
|
124
|
+
field_exists = eval "#{model}.new.attributes.include?('#{field}')"
|
125
|
+
return field_exists ? true : false
|
126
|
+
|
127
|
+
rescue NameError
|
128
|
+
return false
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def eteos_update_user_info(username)
|
133
|
+
@session["eteos_username"] = username
|
134
|
+
|
135
|
+
if eteos_valid_model?
|
136
|
+
model = @@eteos_user_model.to_s
|
137
|
+
username_field = @@eteos_username_field.to_s
|
138
|
+
last_visit_field = @@eteos_last_visit_field.to_s
|
139
|
+
has_changed = false
|
140
|
+
|
141
|
+
eval <<-END_OF_EVAL
|
142
|
+
user_object = #{model}.find_by_#{username_field}("#{username}")
|
143
|
+
if user_object.nil?
|
144
|
+
user_object = #{model}.new(:#{username_field} => "#{username}")
|
145
|
+
has_changed = true
|
146
|
+
end
|
147
|
+
if user_object.attributes.include? "#{last_visit_field}"
|
148
|
+
user_object.#{last_visit_field} = Time.now
|
149
|
+
has_changed = true
|
150
|
+
end
|
151
|
+
|
152
|
+
user_object.save if has_changed
|
153
|
+
END_OF_EVAL
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
metadata
CHANGED
@@ -3,16 +3,16 @@ rubygems_version: 0.8.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: eteos-client
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-03-
|
8
|
-
summary: Eteos Client for
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2005-03-23
|
8
|
+
summary: Eteos Client for Rails allows cross-website authentication via the Eteos authentication service (www.eteos.com) in two lines of code for Rails applications. Even integrates with ActiveRecord user models simply and easily.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: daveadams@gmail.com
|
12
|
-
homepage: http://eteos-client
|
12
|
+
homepage: http://rubyforge.org/projects/eteos-client
|
13
13
|
rubyforge_project: eteos-client
|
14
14
|
description:
|
15
|
-
autorequire:
|
15
|
+
autorequire: eteos-client
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
18
|
has_rdoc: false
|