ruby-mojeid 0.2.0 → 0.2.1

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.2.0
1
+ 0.2.1
data/examples/README CHANGED
@@ -1,32 +1,16 @@
1
- This directory contains several examples that demonstrate use of the
2
- OpenID library. Make sure you have properly installed the library
3
- before running the examples. These examples are a great place to
4
- start in integrating OpenID into your application.
1
+ This directory contains example that demonstrate use of the
2
+ ruby-mojeID library. Make sure you have properly installed the library
3
+ before running the example. These example are a great place to
4
+ start in integrating ruby-mojeID into your application.
5
5
 
6
6
  ==Rails example
7
7
 
8
- The rails_openid contains a fully functional OpenID server and relying
9
- party, and acts as a starting point for implementing your own
10
- production rails server. You'll need the latest version of Ruby on
11
- Rails installed, and then:
8
+ You'll need the Ruby on Rails 2.3.9 installed, and then:
12
9
 
13
10
  cd rails_openid
14
11
  ./script/server
15
12
 
16
- Open a web browser to http://localhost:3000/ and follow the instructions.
13
+ Open a web browser to http://localhost:3000/ and try to get data or store data.
17
14
 
18
- The relevant code to work from when writing your Rails OpenID Relying
19
- Party is:
20
- rails_openid/app/controllers/consumer_controller.rb
21
- If you are working on an OpenID provider, check out
22
- rails_openid/app/controllers/server_controller.rb
23
15
 
24
- Since the library and examples are Apache-licensed, don't be shy about
25
- copy-and-paste.
26
-
27
- ==Rails ActiveRecord OpenIDStore plugin
28
-
29
- For various reasons you may want or need to deploy your ruby openid
30
- consumer/server using an SQL based store. The active_record_openid_store
31
- is a plugin that makes using an SQL based store simple. Follow the
32
- README inside the plugin's dir for usage.
16
+ For more examples how to use ruby-OpenID, please look at https://github.com/openid/ruby-openid
@@ -4,4 +4,4 @@ source 'http://gems.github.com'
4
4
 
5
5
  gem 'rails', '2.3.9'
6
6
  gem "mysql", '2.7'
7
- gem 'ruby-mojeid', :path => "/home/robin/rails_workspace/ruby-mojeid"
7
+ gem 'ruby-mojeid'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /home/robin/rails_workspace/ruby-mojeid
3
3
  specs:
4
- ruby-mojeid (0.1.0)
4
+ ruby-mojeid (0.2.0)
5
5
  ruby-openid (= 2.1.8)
6
6
  ruby-openid (= 2.1.8)
7
7
 
@@ -1,153 +1,6 @@
1
- == Welcome to Rails
1
+ This app contains 2 examples how to manipulate with ruby-mojeID library.
2
2
 
3
- Rails is a web-application and persistence framework that includes everything
4
- needed to create database-backed web-applications according to the
5
- Model-View-Control pattern of separation. This pattern splits the view (also
6
- called the presentation) into "dumb" templates that are primarily responsible
7
- for inserting pre-built data in between HTML tags. The model contains the
8
- "smart" domain objects (such as Account, Product, Person, Post) that holds all
9
- the business logic and knows how to persist themselves to a database. The
10
- controller handles the incoming requests (such as Save New Account, Update
11
- Product, Show Post) by manipulating the model and directing data to the view.
12
-
13
- In Rails, the model is handled by what's called an object-relational mapping
14
- layer entitled Active Record. This layer allows you to present the data from
15
- database rows as objects and embellish these data objects with business logic
16
- methods. You can read more about Active Record in
17
- link:files/vendor/rails/activerecord/README.html.
18
-
19
- The controller and view are handled by the Action Pack, which handles both
20
- layers by its two parts: Action View and Action Controller. These two layers
21
- are bundled in a single package due to their heavy interdependence. This is
22
- unlike the relationship between the Active Record and Action Pack that is much
23
- more separate. Each of these packages can be used independently outside of
24
- Rails. You can read more about Action Pack in
25
- link:files/vendor/rails/actionpack/README.html.
26
-
27
-
28
- == Getting started
29
-
30
- 1. Run the WEBrick servlet: <tt>ruby script/server</tt> (run with --help for options)
31
- ...or if you have lighttpd installed: <tt>ruby script/lighttpd</tt> (it's faster)
32
- 2. Go to http://localhost:3000/ and get "Congratulations, you've put Ruby on Rails!"
33
- 3. Follow the guidelines on the "Congratulations, you've put Ruby on Rails!" screen
34
-
35
-
36
- == Example for Apache conf
37
-
38
- <VirtualHost *:80>
39
- ServerName rails
40
- DocumentRoot /path/application/public/
41
- ErrorLog /path/application/log/server.log
42
-
43
- <Directory /path/application/public/>
44
- Options ExecCGI FollowSymLinks
45
- AllowOverride all
46
- Allow from all
47
- Order allow,deny
48
- </Directory>
49
- </VirtualHost>
50
-
51
- NOTE: Be sure that CGIs can be executed in that directory as well. So ExecCGI
52
- should be on and ".cgi" should respond. All requests from 127.0.0.1 go
53
- through CGI, so no Apache restart is necessary for changes. All other requests
54
- go through FCGI (or mod_ruby), which requires a restart to show changes.
55
-
56
-
57
- == Debugging Rails
58
-
59
- Have "tail -f" commands running on both the server.log, production.log, and
60
- test.log files. Rails will automatically display debugging and runtime
61
- information to these files. Debugging info will also be shown in the browser
62
- on requests from 127.0.0.1.
63
-
64
-
65
- == Breakpoints
66
-
67
- Breakpoint support is available through the script/breakpointer client. This
68
- means that you can break out of execution at any point in the code, investigate
69
- and change the model, AND then resume execution! Example:
70
-
71
- class WeblogController < ActionController::Base
72
- def index
73
- @posts = Post.find_all
74
- breakpoint "Breaking out from the list"
75
- end
76
- end
77
-
78
- So the controller will accept the action, run the first line, then present you
79
- with a IRB prompt in the breakpointer window. Here you can do things like:
80
-
81
- Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint'
82
-
83
- >> @posts.inspect
84
- => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
85
- #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
86
- >> @posts.first.title = "hello from a breakpoint"
87
- => "hello from a breakpoint"
88
-
89
- ...and even better is that you can examine how your runtime objects actually work:
90
-
91
- >> f = @posts.first
92
- => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
93
- >> f.
94
- Display all 152 possibilities? (y or n)
95
-
96
- Finally, when you're ready to resume execution, you press CTRL-D
97
-
98
-
99
- == Console
100
-
101
- You can interact with the domain model by starting the console through script/console.
102
- Here you'll have all parts of the application configured, just like it is when the
103
- application is running. You can inspect domain models, change values, and save to the
104
- database. Starting the script without arguments will launch it in the development environment.
105
- Passing an argument will specify a different environment, like <tt>console production</tt>.
106
-
107
-
108
- == Description of contents
109
-
110
- app
111
- Holds all the code that's specific to this particular application.
112
-
113
- app/controllers
114
- Holds controllers that should be named like weblog_controller.rb for
115
- automated URL mapping. All controllers should descend from
116
- ActionController::Base.
117
-
118
- app/models
119
- Holds models that should be named like post.rb.
120
- Most models will descend from ActiveRecord::Base.
121
-
122
- app/views
123
- Holds the template files for the view that should be named like
124
- weblog/index.rhtml for the WeblogController#index action. All views use eRuby
125
- syntax. This directory can also be used to keep stylesheets, images, and so on
126
- that can be symlinked to public.
127
-
128
- app/helpers
129
- Holds view helpers that should be named like weblog_helper.rb.
130
-
131
- config
132
- Configuration files for the Rails environment, the routing map, the database, and other dependencies.
133
-
134
- components
135
- Self-contained mini-applications that can bundle together controllers, models, and views.
136
-
137
- lib
138
- Application specific libraries. Basically, any kind of custom code that doesn't
139
- belong under controllers, models, or helpers. This directory is in the load path.
140
-
141
- public
142
- The directory available for the web server. Contains subdirectories for images, stylesheets,
143
- and javascripts. Also contains the dispatchers and the default HTML files.
144
-
145
- script
146
- Helper scripts for automation and generation.
147
-
148
- test
149
- Unit and functional tests along with fixtures.
150
-
151
- vendor
152
- External libraries that the application depends on. Also includes the plugins subdirectory.
153
- This directory is in the load path.
3
+ 1) How to retrieve data form user mojeID account
4
+ - controller actions named: "start_get_data" and "complete_get_data"
5
+ 2) How to post data to user mojeID account
6
+ - controller actions named: "start_update_data" and "complete_update_data"
@@ -2,23 +2,29 @@ class ConsumerController < ApplicationController
2
2
  layout nil
3
3
 
4
4
  def index
5
- # render an openid form
6
5
  end
7
6
 
8
7
 
9
- # EXAMPLE HOW TO RETRIEVE DATA FROM MOJEID
8
+ # Example how to retrieve data from mojeID
10
9
  def start_get_data
11
10
  begin
12
11
  identifier = params[:openid_identifier].to_s + params[:openid_domain].to_s
12
+
13
+ # First, try to create request to mojeID server with user identifier
13
14
  @moje_id = MojeID.fetch_request(consumer, identifier)
14
15
  rescue OpenID::OpenIDError => e
15
16
  flash[:error] = "Discovery failed for #{identifier}: #{e}"
16
17
  return redirect_to :action => 'index'
17
18
  end
18
-
19
+
20
+ # Next you can add to your request all attributes, you would like to get.
19
21
  @moje_id.add_attributes(MojeIDAttributes::AVAILABLE_ATTRIBUTES[0..3])
22
+
23
+ # Setup your realm and return_to path.
20
24
  @moje_id.return_to = url_for(:action => 'complete_get_data', :only_path => false)
21
25
  @moje_id.realm = url_for(:action => 'index', :id => nil, :only_path => false)
26
+
27
+ # Redirect to generated url
22
28
  redirect_to @moje_id.redirect_url
23
29
  end
24
30
 
@@ -30,7 +36,7 @@ class ConsumerController < ApplicationController
30
36
  end
31
37
 
32
38
 
33
- # EXAMPLE HOW TO UPDATE DATA TO MOJEID
39
+ # Example how to update data to mojeID
34
40
  def start_update_data
35
41
  begin
36
42
  identifier = params[:openid_identifier]
@@ -53,6 +59,10 @@ class ConsumerController < ApplicationController
53
59
  render :action => 'index'
54
60
  end
55
61
 
62
+
63
+
64
+
65
+
56
66
  private
57
67
 
58
68
  require 'openid/store/memcache'
@@ -1,6 +1,6 @@
1
1
  <html>
2
2
  <head>
3
- <title>Rails OpenID Example Relying Party</title>
3
+ <title>Rails mojeID Example</title>
4
4
  </head>
5
5
  <style type="text/css">
6
6
  * {
@@ -41,7 +41,7 @@
41
41
  table tr th {background: #dddddd; text-align: left;}
42
42
  </style>
43
43
  <body>
44
- <h1>Rails OpenID Example Relying Party</h1>
44
+ <h1>Rails mojeID Example</h1>
45
45
  <% if flash[:alert] %>
46
46
  <div class='alert'>
47
47
  <%= h(flash[:alert]) %>
@@ -1,4 +1,4 @@
1
- #for more informations about attributes look at http://www.mojeid.cz/page/800/jak-zavest-mojeid-/
1
+ # for more informations about attributes look at http://www.mojeid.cz/page/800/jak-zavest-mojeid-/
2
2
 
3
3
  module MojeIDAttributes
4
4
  AVAILABLE_ATTRIBUTES = %w(
data/lib/ruby-mojeid.rb CHANGED
@@ -5,6 +5,22 @@ require 'available_attributes'
5
5
  class MojeID
6
6
  attr_accessor :moje_id_request, :moje_id_response, :fetch_request, :fetch_response, :realm, :return_to
7
7
 
8
+ # Prepare request for openid server
9
+ #
10
+ # openid_identifier is user identifier like fullname.mojeid.cz
11
+ # consumer is object of OpenID::Consumer class.
12
+ #
13
+ # here is example how to create consumer
14
+ # * store = OpenID::Store::Memcache.new(MemCache.new('localhost:11211'))
15
+ # * @consumer = OpenID::Consumer.new(session, store)
16
+ #
17
+ # You can choose if you will be read data or store data by request_type param
18
+ # * request_type == :get mean that you will be read data about user
19
+ # * request_type == :put mean that you will be store data about user
20
+ #
21
+ # here is example how to create MojeID fetch request
22
+ # * @moje_id = MojeID.fetch_request(@consumer, 'fullname.mojeid.cz')
23
+
8
24
  def self.fetch_request(consumer, openid_identifier, request_type = :get)
9
25
  moje_id = MojeID.new
10
26
  moje_id.moje_id_request = consumer.begin(openid_identifier)
@@ -12,6 +28,17 @@ class MojeID
12
28
  moje_id
13
29
  end
14
30
 
31
+ # Get response from openid server
32
+ #
33
+ # * consumer is object of OpenID::Consumer class, like in the fetch_request method
34
+ # * params are a params from request which openid server send to you
35
+ # * request is a request object from controller. It is necessary to remove dirty params
36
+ # * current_url is url of action which recieve the openid server response
37
+ # * with request_type you say, if this response become from get request or put request
38
+ #
39
+ # here is example how to create MojeID fetch response
40
+ # * @moje_id = MojeID.fetch_response(@consumer, params, request, url_for(:action => 'complete_update_data', :only_path => false), :put)
41
+
15
42
  def self.fetch_response(consumer, params, request, current_url, request_type = :get)
16
43
  moje_id = MojeID.new
17
44
  parameters = params.reject{|k,v| request.path_parameters[k]}
@@ -20,51 +47,75 @@ class MojeID
20
47
  moje_id
21
48
  end
22
49
 
50
+
51
+ # Return the status of openid server response
52
+ # the statuses are :
53
+ # * OpenID::Consumer::FAILURE
54
+ # * OpenID::Consumer::SUCCESS
55
+ # * OpenID::Consumer::SETUP_NEEDED
56
+ # * OpenID::Consumer::CANCEL
57
+
23
58
  def response_status
24
59
  fetch_response.status
25
60
  end
26
61
 
62
+ # Return the openid identifier like fullname.mojeid.cz
27
63
  def identifier
28
64
  fetch_response.display_identifier
29
65
  end
30
66
 
67
+ # Return the response message
31
68
  def message
32
- fetch_response.display_identifier
69
+ fetch_response.message
33
70
  end
34
71
 
72
+ # Return data parsed to Hash, if it is a "fetch_response" with request_type == :get, else return blank Hash
35
73
  def data
36
74
  (!moje_id_response.nil? && moje_id_response.respond_to?('data') ) ? moje_id_response.data : {}
37
75
  end
38
76
 
77
+ # Add attributes you would like to read about user, to request.
78
+ # You can pass attribute as array and change options like ns_alias or require.
79
+ # * example: @moje_id.add_attributes(['http://axschema.org/namePerson', nil, false])
80
+ # * or simple : @moje_id.add_attributes('http://axschema.org/namePerson')
39
81
  def add_attributes(attributes = [])
40
- attributes.each{ |attribute| add_attribute(attribute)}
82
+ attributes.each{ |attribute| attribute.is_a?(Array) ? add_attribute(attribute[0], attribute[1], attribute[2]) : add_attribute(attribute)}
41
83
  end
42
-
84
+
85
+ # Add attributes and they values which you would like to update user profile, to request.
86
+ # Accept hash like {'http://axschema.org/namePerson' => 'my new great name'}
43
87
  def update_attributes(data = {})
44
- data.each{ |attribute,value| set_attribute(attribute, value)}
88
+ data.each{ |attribute, value| set_attribute(attribute, value)}
45
89
  end
46
90
 
91
+ # Add additional data to request
92
+ # Accept hash like {'is_this_my_request' => 'yes'}
47
93
  def add_additional_data(data = {})
48
94
  data.each{|k,v| moje_id_request.return_to_args[k.to_s] = v}
49
95
  bundle_to_request
50
96
  end
51
-
97
+
98
+ # Should this OpenID authentication request be sent as a HTTP redirect or as a POST (form submission)?
52
99
  def send_redirect?(immediate = false)
53
100
  moje_id_request.send_redirect?(realm, return_to, immediate)
54
101
  end
55
102
 
103
+ # Return the url you have to redirect after you compose your request
56
104
  def redirect_url(immediate = false)
57
105
  moje_id_request.redirect_url(realm, return_to, immediate)
58
106
  end
59
107
 
108
+ # Get a complete HTML document that autosubmits the request to the IDP with javascript.
60
109
  def html_markup(realm, return_to, immediate = false, form_tag_attrs = {})
61
110
  moje_id_request.html_markup(realm, return_to, immediate, form_tag_attrs)
62
111
  end
63
112
 
113
+ # Return a value of attribute, when you recieve a data from openid server
64
114
  def get_attribute_value(attribute)
65
115
  data[attribute]
66
116
  end
67
117
 
118
+
68
119
  def set_fetch_request_by_type(request_type)
69
120
  self.fetch_request = case request_type
70
121
  when :get then OpenID::AX::FetchRequest.new
@@ -84,14 +135,16 @@ class MojeID
84
135
  def bundle_to_request
85
136
  moje_id_request.add_extension(fetch_request)
86
137
  end
87
-
88
- def add_attribute(attribute)
138
+
139
+ # Pack attribute to request when you would like to get attribute
140
+ def add_attribute(attribute, ns_alais = nil, required = false)
89
141
  if MojeID.is_attribute_available?(attribute)
90
- fetch_request.add(OpenID::AX::AttrInfo.new(attribute))
142
+ fetch_request.add(OpenID::AX::AttrInfo.new(attribute, ns_alais, required))
91
143
  bundle_to_request
92
144
  end
93
145
  end
94
146
 
147
+ # Pack attribute and his value to request when you would like to store attribute
95
148
  def set_attribute(attribute, value)
96
149
  if MojeID.is_attribute_available?(attribute)
97
150
  fetch_request.set_values(attribute, value)
@@ -99,6 +152,7 @@ class MojeID
99
152
  end
100
153
  end
101
154
 
155
+ # Check if the attribute is available. You can find full list of attributes in lib/available_attributes.rb
102
156
  def self.is_attribute_available?(attribute)
103
157
  MojeIDAttributes::AVAILABLE_ATTRIBUTES.include?(attribute) ? true : raise("#{attribute} is not available")
104
158
  end
data/ruby-mojeid.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-mojeid}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Robin Bortlik"]
12
- s.date = %q{2011-01-28}
12
+ s.date = %q{2011-01-31}
13
13
  s.description = %q{This gem extend ruby-openid gem}
14
14
  s.email = %q{robinbortlik@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -32,7 +32,6 @@ Gem::Specification.new do |s|
32
32
  "examples/rails_openid/app/controllers/application_controller.rb",
33
33
  "examples/rails_openid/app/controllers/consumer_controller.rb",
34
34
  "examples/rails_openid/app/views/consumer/index.rhtml",
35
- "examples/rails_openid/app/views/layouts/server.rhtml",
36
35
  "examples/rails_openid/config/boot.rb",
37
36
  "examples/rails_openid/config/database.sample.yml",
38
37
  "examples/rails_openid/config/environment.rb",
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mojeid
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Robin Bortlik
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-28 00:00:00 +01:00
18
+ date: 2011-01-31 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -135,7 +135,6 @@ files:
135
135
  - examples/rails_openid/app/controllers/application_controller.rb
136
136
  - examples/rails_openid/app/controllers/consumer_controller.rb
137
137
  - examples/rails_openid/app/views/consumer/index.rhtml
138
- - examples/rails_openid/app/views/layouts/server.rhtml
139
138
  - examples/rails_openid/config/boot.rb
140
139
  - examples/rails_openid/config/database.sample.yml
141
140
  - examples/rails_openid/config/environment.rb
@@ -1,68 +0,0 @@
1
- <html>
2
- <head><title>OpenID Server Example</title></head>
3
- <style type="text/css">
4
- * {
5
- font-family: verdana,sans-serif;
6
- }
7
- body {
8
- width: 50em;
9
- margin: 1em;
10
- }
11
- div {
12
- padding: .5em;
13
- }
14
- table {
15
- margin: none;
16
- padding: none;
17
- }
18
- .notice {
19
- border: 1px solid #60964f;
20
- background: #b3dca7;
21
- }
22
- .error {
23
- border: 1px solid #ff0000;
24
- background: #ffaaaa;
25
- }
26
- #login-form {
27
- border: 1px solid #777777;
28
- background: #dddddd;
29
- margin-top: 1em;
30
- padding-bottom: 0em;
31
- }
32
- table {
33
- padding: 1em;
34
- }
35
- li {margin-bottom: .5em;}
36
- span.openid:before {
37
- content: url(<%= @base_url %>images/openid_login_bg.gif) ;
38
- }
39
- span.openid {
40
- font-size: smaller;
41
- }
42
- </style>
43
- <body>
44
-
45
-
46
-
47
- <% if session[:username] %>
48
- <div style="float:right;">
49
- Welcome, <%= session[:username] %> | <%= link_to('Log out', :controller => 'login', :action => 'logout') %><br />
50
- <span class="openid"><%= @base_url %>user/<%= session[:username] %></span>
51
- </div>
52
- <% end %>
53
-
54
- <h3>Ruby OpenID Server Example</h3>
55
-
56
- <hr/>
57
-
58
- <% if flash[:notice] or flash[:error] %>
59
- <div class="<%= flash[:notice].nil? ? 'error' : 'notice' %>">
60
- <%= flash[:error] or flash[:notice] %>
61
- </div>
62
- <% end %>
63
-
64
- <%= @content_for_layout %>
65
-
66
-
67
- </body>
68
- </html>