danski-ooh-auth 0.1.20 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
File without changes
data/Rakefile CHANGED
@@ -16,8 +16,8 @@ GEM_NAME = "ooh-auth"
16
16
  AUTHOR = "Dan Glegg"
17
17
  EMAIL = "dan@angryamoeba.co.uk"
18
18
  HOMEPAGE = "http://github.com/danski/ooh-auth"
19
- SUMMARY = "Merb Slice that provides RESTful authentication functionality for your application."
20
- GEM_VERSION = "0.9.10"
19
+ SUMMARY = "Merb Slice that adds a full OAuth provider strategy to your application."
20
+ GEM_VERSION = "0.3"
21
21
 
22
22
  spec = Gem::Specification.new do |s|
23
23
  s.rubyforge_project = 'merb'
data/TODO ADDED
File without changes
@@ -18,23 +18,34 @@ class OohAuth::Tokens < OohAuth::Application
18
18
  # Define other formats
19
19
  provides :js, :xml, :yaml
20
20
 
21
- # The index and new actions require a signed request.
22
- before :ensure_signed, :only=>[:index]
21
+ # Ensure the user is signed in
22
+ before :ensure_authenticated, :exclude=>[:index]
23
23
  # All other actions require that the user be authenticated directly, rather than through the api.
24
24
  before :forbid_authentication_with_oauth, :exclude=>[:index]
25
25
 
26
26
  # Main action used for starting the authorisation process (desktop clients) and finishing it (web clients)
27
27
  def index
28
- raise NotAcceptable unless @authenticating_client = request.authenticating_client
29
- if @token = request.authentication_token
30
- # If client and request key, give the activated token if it was activated.
31
- raise NotAcceptable unless @token.authenticating_client == @authenticating_client
28
+ if session.authenticated?
29
+ only_provides :html
30
+ # Authenticated requests should show the list
31
+ @tokens = OohAuth::Token.find_for_user(session.user)
32
+ render :index
33
+ elsif request.signed?
34
+ # Unauthenticated but signed requests should provision tokens
35
+ raise NotAcceptable unless @authenticating_client = request.authenticating_client
36
+ if @token = request.authentication_token
37
+ # If client and request key, give the activated token if it was activated.
38
+ raise NotAcceptable unless @token.authenticating_client == @authenticating_client
39
+ else
40
+ # Generate a request key
41
+ @token = OohAuth::Token.create_request_key(@authenticating_client)
42
+ end
43
+ # # Okay, no error raised. Gogo render.
44
+ display @token, :show, :layout=>false
32
45
  else
33
- # Generate a request key
34
- @token = OohAuth::Token.create_request_key(@authenticating_client)
46
+ # All other requests we DO NOT WANT
47
+ raise NotAcceptable
35
48
  end
36
- # # Okay, no error raised. Gogo render.
37
- display @token, :show, :layout=>false
38
49
  end
39
50
 
40
51
  def new
@@ -81,14 +92,14 @@ class OohAuth::Tokens < OohAuth::Application
81
92
  # end
82
93
  #end
83
94
  #
84
- #def destroy(id)
85
- # @token = OohAuth::Token.get(id)
86
- # raise NotFound unless @token
87
- # if @token.destroy
88
- # redirect slice_url(:tokens)
89
- # else
90
- # raise InternalServerError
91
- # end
92
- #end
95
+ def destroy(id)
96
+ @token = OohAuth::Token.get(id)
97
+ raise NotFound unless @token and @token.user_id == session.user.id
98
+ if @token.destroy
99
+ redirect slice_url(:tokens)
100
+ else
101
+ raise InternalServerError
102
+ end
103
+ end
93
104
 
94
105
  end # OohAuth::Tokens
@@ -10,7 +10,7 @@ class OohAuth::AuthenticatingClient
10
10
  # Key it
11
11
  property :id, Serial
12
12
  # The registration will belong to a user, who will be able to edit the client properties.
13
- property :user_id, Integer, :writer => :protected
13
+ property :user_id, Integer, :writer => :private
14
14
  # Timestamp it
15
15
  property :created_at, DateTime
16
16
 
@@ -64,6 +64,11 @@ class OohAuth::AuthenticatingClient
64
64
  self.user_id = user.id
65
65
  end
66
66
 
67
+ # LOCK user id after save
68
+ def user_id=(arg)
69
+ (new_record?)? attribute_set(:user_id, arg) : arg
70
+ end
71
+
67
72
  def editable_by?(user)
68
73
  user.id == self.user_id
69
74
  end
@@ -59,6 +59,11 @@ class OohAuth::Token
59
59
  o
60
60
  end
61
61
 
62
+ # Get all tokens for a single user
63
+ def self.find_for_user(user)
64
+ all :user_id=>user.id
65
+ end
66
+
62
67
  # Fetch a request_key given the request_key code
63
68
  def self.get_request_key_for_client(client, request_key)
64
69
  first :token_key=>request_key, :authenticating_client_id=>client.id, :expires.gt=>DateTime.now, :activated=>false
@@ -0,0 +1 @@
1
+ %h2 Developer Documentation partial
@@ -0,0 +1,18 @@
1
+ %h1 Edit your Application
2
+
3
+ =form_for @authenticating_client, :action=>slice_url(:authenticating_client, @authenticating_client), :method=>"put", :class=>"authenticating_client" do
4
+
5
+ =error_messages_for @authenticating_client
6
+
7
+ %fieldset
8
+ %legend Application information
9
+ %dl
10
+ %dt
11
+ %label{:for => "ooh_auth_authenticating_clients_name"} Application name
12
+ %dd= text_field :name, :name=>"authenticating_client[name]", :value=>h(@authenticating_client.name)
13
+ %dt
14
+ %label{:for => "ooh_auth_authenticating_clients_name"} Web URL
15
+ %dd= text_field :web_url, :name=>"authenticating_client[web_url]", :value=>h(@authenticating_client.web_url)
16
+ %fieldset.buttons
17
+ %input{:type => "hidden", :name => "_method", :value => "put"}
18
+ = submit "Submit changes"
@@ -1,6 +1,6 @@
1
1
  <h1>Developer API</h1>
2
2
 
3
- <% if session.user %>
3
+ <% if session.authenticated? %>
4
4
 
5
5
  <h2>Your Applications</h2>
6
6
 
@@ -0,0 +1,16 @@
1
+ %h1 Developer API
2
+
3
+ -if session.user
4
+ %h2 Your Applications
5
+
6
+ %ul.authenticating_clients
7
+ %li.new= link_to "Register a new Application", slice_url(:new_authenticating_client), :class=>"new"
8
+ -@authenticating_clients.each do |ac|
9
+ %li
10
+ =link_to h(ac.name), slice_url(:authenticating_client, ac), :class=>"show"
11
+ =link_to "Edit", slice_url(:edit_authenticating_client, ac), :class=>"edit"
12
+ =link_to "Unregister", slice_url(:delete_authenticating_client, ac), :class=>"delete"
13
+ -else
14
+ %p In order to use the Developer API, you'll need to register for an API key. Please log in to begin the process.
15
+
16
+ = partial "help"
@@ -0,0 +1,45 @@
1
+ %h1 Register for a new API Key
2
+
3
+ %p
4
+ %strong Important!
5
+ Upon successfully adding your application, you will be shown two pieces of information.
6
+ You'll be given your
7
+ %strong API Key
8
+ , which will allow you to interact with the API, and you'll be given a
9
+ %strong shared secret
10
+ which will allow you to verify your requests to the API.
11
+ %strong Note both of these down.
12
+
13
+
14
+ = form_for @authenticating_client, :action=>resource(:ooh_auth, :authenticating_clients), :class=>"authenticating_client" do
15
+ = error_messages_for @authenticating_client
16
+ %fieldset
17
+ %legend Some information about your application
18
+ %dl
19
+ %dt
20
+ %label{:for=>"ooh_auth_authenticating_clients_name"} Application name
21
+ %dd= text_field :name, :name => "authenticating_client[name]", :value=>h(@authenticating_client.name)
22
+
23
+ %dt
24
+ %label{:for=>"ooh_auth_authenticating_clients_name"} Web URL
25
+ %dd= text_field :web_url, :name=>"authenticating_client[web_url]", :value=>h(@authenticating_client.web_url)
26
+
27
+ %fieldset
28
+ %legend Application type
29
+
30
+ %dl.checkboxes
31
+ %dt
32
+ %label{:for => "ooh_auth_authenticating_clients_kind_web"} This is a web-based application
33
+ %dd= radio_button :kind, :value=>"web", :name=>"authenticating_client[kind]", :id=>"ooh_auth_authenticating_clients_kind_web", :checked=>@authenticating_client.is_webapp?
34
+
35
+ %dt
36
+ %label{:for=>"ooh_auth_authenticating_clients_kind_desktop"} This is a desktop or mobile application
37
+ %dd= radio_button :kind, :value=>"desktop", :name=>"authenticating_client[kind]", :id=>"ooh_auth_authenticating_clients_kind_desktop", :checked=>!@authenticating_client.is_webapp?
38
+
39
+ %fieldset.buttons
40
+ %p
41
+ When you submit this form, we will generate both two pieces of information for you - an <strong>API Key</strong> and a
42
+ %strong Shared Secret
43
+ They will be shown on the next page. Be sure to record them.
44
+
45
+ = submit "Get my API Key"
@@ -0,0 +1,38 @@
1
+ -ac = @authenticating_client
2
+
3
+ %h1=h ac.name
4
+
5
+ #facts
6
+ %h2 About your application:
7
+
8
+ %ul
9
+ %li
10
+ This application was registered on
11
+ = ac.created_at.strftime("%d/%b/%Y")
12
+
13
+
14
+ #api_secrets
15
+ %h2
16
+ Your API key details for
17
+ %em= ac.name
18
+ %p
19
+ Your
20
+ %strong Consumer Key
21
+ will for the most part be public, although it is useless without the
22
+ %strong Consumer Secret
23
+ that goes with it.
24
+ You should under no circumstances make your Consumer Secret known by another party, as it can be used to sign the authorization requests that your application will send.
25
+
26
+ %dl
27
+ %dt Your OAuth Consumer Key
28
+ %dd
29
+ %a{:href=>"#api_key", :onclick => "this.style.display = 'none'; document.getElementById('api_key').style.display = 'block'; return false;"} Show my API Key
30
+ %span#api_key.secret.shared{:style => "display: none;"}= ac.api_key
31
+
32
+ %dt Your OAuth Consumer Secret
33
+ %dd
34
+ %a.shared_secret_toggle{:href => "#shared_secret", :onclick="this.style.display = 'none'; document.getElementById('shared_secret').style.display = 'block'; return false;"}
35
+ Nobody but myself can see. I have closed my doors, shuttered my windows and, just for today, shunned my loved ones. It is safe to show my Consumer Secret.
36
+ %span#shared_secret.secret.shared{:style => "display: none;"}= ac.secret
37
+
38
+ =partial "help"
@@ -0,0 +1,17 @@
1
+ !!!
2
+ %html{ :xmlns => 'http://www.w3.org/1999/xhtml', :'xml:lang' => "en-us", :lang => 'en-us' }
3
+ %head
4
+ %meta{ :'http-equiv' => "content-type", :content => "text/html; charset=utf-8" }
5
+ %title OohAuth Slice
6
+
7
+ / you can override this layout at slices/ooh-auth/app/views/layout/ooh-auth.html.erb
8
+ %body.ooh-auth
9
+ #root
10
+ %h1 OohAuth Slice
11
+
12
+ -unless message.blank?
13
+ %div{:id=>"_message"}
14
+ =message
15
+
16
+ #main
17
+ =catch_content :for_layout
@@ -0,0 +1,33 @@
1
+ -ac = @authenticating_client
2
+
3
+
4
+ -if @activated
5
+ %h1.win
6
+ You successfully authorized
7
+ =ac.name
8
+
9
+ %div{:id=>"win facts"}
10
+ %h2 To access your account:
11
+
12
+ %ul
13
+ %li
14
+ Until
15
+ =@token.expires.strftime("%d/%b/%Y")
16
+ %li
17
+ With permission to
18
+ = OohAuth[:client_permission_levels][@token.permissions.to_sym][:able_to]
19
+ .
20
+ %p
21
+ %strong You may now close this window or navigate away from this page.
22
+
23
+ -else
24
+
25
+ %h1.fail
26
+ You denied
27
+ =ac.name
28
+ access to your content
29
+
30
+ %div{:id=>"fail facts"}
31
+ %h2 This application will not be able to access your account.
32
+ %p
33
+ %strong You may now close this window or navigate away from this page.
@@ -0,0 +1,6 @@
1
+ %h1 Authentications controller, edit action
2
+
3
+ %p Edit this file in
4
+ %tt app/views/authentications/edit.html.erb
5
+ %p For more information and examples of CRUD views read
6
+ %a{:href=>"http://wiki.merbivore.com/howto/crud_view_example_with_merb_using_erb"} this wiki page
@@ -0,0 +1,9 @@
1
+ <h1>Your Tokens</h1>
2
+
3
+ <ul class="tokens">
4
+ <% @tokens.each do |t| %>
5
+ <li>
6
+ <%= h(t.authenticating_client.name) %> <%= link_to "Revoke access", slice_url(:delete_token, t) %>
7
+ </li>
8
+ <% end %>
9
+ </ul>
@@ -0,0 +1,47 @@
1
+ %h1= "#{@authenticating_client.name} wants access to your account!"
2
+
3
+ %p.abstract
4
+ The application
5
+ = link_to h(@authenticating_client.name), @authenticating_client.web_url
6
+ wants access to your content.
7
+
8
+ %h2 Grant this application access to your account
9
+ =form_for @authenticating_client, :action=>slice_url(:tokens), :class=>"authentication" do
10
+ %fieldset
11
+ %p.confirmation
12
+ =h @authenticating_client.name
13
+ will be granted access to your data.
14
+ The application will
15
+ %strong not
16
+ have the ability to grant access to other applications.
17
+ You will be able to revoke this access at a later date if you so choose.
18
+
19
+
20
+ %input{:type=>"hidden", :name => "oauth_token", :value =>"#{@token.token_key}"}
21
+ -if request.callback
22
+ %input{:type => "hidden", :name => "oauth_callback", :value=>"#{@request.callback}"}
23
+
24
+ %fieldset
25
+ %legend Options
26
+ %dl
27
+ %dt
28
+ %label{:for=>"token_expires"} Allow access until
29
+ %dd
30
+ %select.token_expires{:name=>"token[expires]"}
31
+ %option{:value => "2999-12-31"} Further notice
32
+ / or when Philip J. Fry wakes up
33
+ %option{:value => (Date.today + 1.year).strftime("%Y-%m-%d")} 1 year from now
34
+ %option{:value => (Date.today + 1.month).strftime("%Y-%m-%d")} 1 month from now
35
+ %option{:value => (Date.today + 1.week).strftime("%Y-%m-%d")} 1 week from now
36
+ %option{:value => (Date.today + 1.day).strftime("%Y-%m-%d")} 1 day from now
37
+
38
+ %dt
39
+ %label{:for=>"token_permissions"} Allow this application to
40
+ %dd
41
+ %select.token_permissions{:name=>"token[permissions]"}
42
+ -OohAuth[:client_permission_levels].each do |name, opts|
43
+ %option{:value => "#{name}"}= opts[:able_to]
44
+
45
+ %fieldset.buttons
46
+ =submit "Grant access", :name=>"commit", :value=>"allow"
47
+ =submit "Deny access", :name=>"commit", :value=>"deny"
@@ -0,0 +1 @@
1
+ ="oauth_token=#{@token.token_key}&oauth_token_secret=#{@token.secret}"
@@ -46,8 +46,8 @@ if defined?(Merb::Plugins)
46
46
  module OohAuth
47
47
 
48
48
  # Slice metadata
49
- self.description = "OohAuth is Merb slice that extends merb-auth-more with RESTful authentication"
50
- self.version = "0.1.2"
49
+ self.description = "OohAuth is Merb slice that extends merb-auth-more with a full OAuth provider"
50
+ self.version = "0.1.3"
51
51
  self.author = "Dan Glegg"
52
52
  self.identifier = "ooh-auth"
53
53
 
@@ -19,7 +19,13 @@ describe OohAuth::AuthenticatingClients do
19
19
  @controller.should be_successful
20
20
  lambda {@controller = dispatch_to(OohAuth::AuthenticatingClients, :new)}.should raise_error(Merb::Controller::Unauthenticated)
21
21
  end
22
- it "should show a list of clients when authenticated"
22
+ it "should successfully render a list when authenticated" do
23
+ @user = user_class.gen
24
+ @controller = OohAuth::AuthenticatingClients.new(Merb::Test::RequestHelper::FakeRequest.new)
25
+ @controller.request.session.user = @user
26
+ @controller.index
27
+ @controller.should be_successful
28
+ end
23
29
  end
24
30
 
25
31
  describe "new/create action" do
@@ -92,12 +98,12 @@ describe OohAuth::AuthenticatingClients do
92
98
  @controller.edit(@authenticating_client.id)
93
99
  @controller.should be_successful
94
100
  end
95
- it "cannot be used to reassign apps to other users" #do
101
+ it "cannot be used to reassign apps to other users" do
96
102
  # Waiting on ticket: http://wm.lighthouseapp.com/projects/4819/tickets/669-problem-with-protected-attribute-mass-assignment#ticket-669-1
97
103
  # related to problems preventing mass-assignment.
98
- # @controller.update(@authenticating_client.id, {:user_id=>@user.id+50})
99
- # @controller.assigns(:authenticating_client).user_id.should == @user.id
100
- #end
104
+ @controller.update(@authenticating_client.id, {:user_id=>@user.id+50})
105
+ @controller.assigns(:authenticating_client).user_id.should == @user.id
106
+ end
101
107
  it "should show a form with errors when given bad input" do
102
108
  @controller.update(@authenticating_client.id, {:name=>""})
103
109
  @controller.should be_successful
@@ -111,8 +117,24 @@ describe OohAuth::AuthenticatingClients do
111
117
  end
112
118
  end
113
119
 
114
- describe "delete action" do
115
- it "should not be destroyable by any user other than the owning user"
120
+ describe "delete action" do
121
+ before :each do
122
+ @user = user_class.gen
123
+ @bad_user = user_class.gen
124
+ @authenticating_client = OohAuth::AuthenticatingClient.gen(:user=>@user)
125
+ @other_authenticating_client = OohAuth::AuthenticatingClient.gen
126
+ @controller = OohAuth::AuthenticatingClients.new(Merb::Test::RequestHelper::FakeRequest.new)
127
+ @controller.request.session.user = @bad_user
128
+ end
129
+
130
+ it "should not be destroyable by any user other than the owning user" do
131
+ c = OohAuth::AuthenticatingClient.count
132
+ lambda {@controller.destroy(@authenticating_client.id)}.should raise_error(Merb::Controller::NotFound)
133
+ @controller.request.session.user = @user
134
+ c.should == OohAuth::AuthenticatingClient.count
135
+ lambda {@controller.destroy(@authenticating_client.id)}.should_not raise_error(Merb::Controller::NotFound)
136
+ (c-1).should == OohAuth::AuthenticatingClient.count
137
+ end
116
138
  end
117
139
 
118
140
  end
@@ -62,6 +62,15 @@ describe OohAuth::Tokens do
62
62
  )
63
63
  lambda {@controller.index}.should raise_error(Merb::Controller::NotAcceptable)
64
64
  end
65
+
66
+ it "should show a list of tokens for a user when the user is authenticated" do
67
+ @user = user_class.gen
68
+ @controller = OohAuth::Tokens.new(Merb::Test::RequestHelper::FakeRequest.new)
69
+ @controller.request.session.user = @user
70
+ @controller.index
71
+ @controller.should be_successful
72
+ @controller.assigns(:tokens).should be_kind_of(Array)
73
+ end
65
74
  end
66
75
 
67
76
 
@@ -164,10 +173,29 @@ describe OohAuth::Tokens do
164
173
  # it "should only allow the expiry and permission level to be altered"
165
174
  #end
166
175
  #
167
- #describe "delete/destroy action" do
168
- # it "should only be accessible by the token's owning user"
169
- # it "should return a 404 not found for other users"
170
- # it "should remove all authentications for this user/application if multiple records are present"
171
- #end
176
+ describe "delete/destroy action" do
177
+ before :each do
178
+ @user = user_class.gen
179
+ @bad_user = user_class.gen
180
+ @desktop_app = OohAuth::AuthenticatingClient.gen(:kind=>"desktop")
181
+ @access_key = OohAuth::Token.create_request_key(@desktop_app, 1.hour.since)
182
+ @access_key.activate!(@user)
183
+ @date = Date.today + 5.years
184
+ @controller = OohAuth::Tokens.new(Merb::Test::RequestHelper::FakeRequest.new)
185
+ end
186
+
187
+ it "should require authentication" do
188
+ lambda {dispatch_to(OohAuth::Tokens, :destroy)}.should raise_error(Merb::Controller::Unauthenticated)
189
+ end
190
+ it "should only be accessible by the token's owning user" do
191
+ c = OohAuth::Token.count
192
+ @controller.request.session.user = @bad_user
193
+ lambda {@controller.destroy(@access_key.id)}.should raise_error(Merb::Controller::NotFound)
194
+ @controller.request.session.user = @user
195
+ c.should == OohAuth::Token.count
196
+ lambda {@controller.destroy(@access_key.id)}.should_not raise_error(Merb::Controller::NotFound)
197
+ (c-1).should == OohAuth::Token.count
198
+ end
199
+ end
172
200
 
173
201
  end
@@ -34,8 +34,6 @@ describe OohAuth::AuthenticatingClient do
34
34
  @authenticating_client.secret.should == ss
35
35
  end
36
36
 
37
- it "should not allow internal URLs to be given as callback URLs"
38
-
39
37
  it "should return an empty array when find_for_user is called with nil" do
40
38
  arr = OohAuth::AuthenticatingClient.find_for_user(nil)
41
39
  arr.length.should == 0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danski-ooh-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: "0.3"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Glegg
@@ -9,18 +9,9 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-22 00:00:00 -07:00
12
+ date: 2009-01-15 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: ruby-hmac
17
- version_requirement:
18
- version_requirements: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.3.2
23
- version:
24
15
  - !ruby/object:Gem::Dependency
25
16
  name: merb-slices
26
17
  version_requirement:
@@ -30,19 +21,21 @@ dependencies:
30
21
  - !ruby/object:Gem::Version
31
22
  version: 0.9.10
32
23
  version:
33
- description: Merb slice that adds OAuth provider capabilities to any merb-auth application.
34
- email: dan@angryameoba.co.uk
24
+ description: Merb Slice that adds a full OAuth provider strategy to your application.
25
+ email: dan@angryamoeba.co.uk
35
26
  executables: []
36
27
 
37
28
  extensions: []
38
29
 
39
30
  extra_rdoc_files:
40
- - readme.markdown
31
+ - README
41
32
  - LICENSE
33
+ - TODO
42
34
  files:
43
35
  - LICENSE
44
- - readme.markdown
36
+ - README
45
37
  - Rakefile
38
+ - TODO
46
39
  - lib/ooh-auth
47
40
  - lib/ooh-auth/authentication_mixin.rb
48
41
  - lib/ooh-auth/controller_mixin.rb
@@ -84,17 +77,28 @@ files:
84
77
  - app/views
85
78
  - app/views/authenticating_clients
86
79
  - app/views/authenticating_clients/_help.html.erb
80
+ - app/views/authenticating_clients/_help.html.haml
87
81
  - app/views/authenticating_clients/edit.html.erb
82
+ - app/views/authenticating_clients/edit.html.haml
88
83
  - app/views/authenticating_clients/index.html.erb
84
+ - app/views/authenticating_clients/index.html.haml
89
85
  - app/views/authenticating_clients/new.html.erb
86
+ - app/views/authenticating_clients/new.html.haml
90
87
  - app/views/authenticating_clients/show.html.erb
88
+ - app/views/authenticating_clients/show.html.haml
91
89
  - app/views/layout
92
90
  - app/views/layout/ooh_auth.html.erb
91
+ - app/views/layout/ooh_auth.html.haml
93
92
  - app/views/tokens
94
93
  - app/views/tokens/create.html.erb
94
+ - app/views/tokens/create.html.haml
95
95
  - app/views/tokens/edit.html.erb
96
+ - app/views/tokens/edit.html.haml
97
+ - app/views/tokens/index.html.erb
96
98
  - app/views/tokens/new.html.erb
99
+ - app/views/tokens/new.html.haml
97
100
  - app/views/tokens/show.html.erb
101
+ - app/views/tokens/show.html.haml
98
102
  - public/javascripts
99
103
  - public/javascripts/master.js
100
104
  - public/stylesheets
@@ -128,6 +132,6 @@ rubyforge_project: merb
128
132
  rubygems_version: 1.2.0
129
133
  signing_key:
130
134
  specification_version: 2
131
- summary: Merb Slice that provides RESTful authentication functionality for your application.
135
+ summary: Merb Slice that adds a full OAuth provider strategy to your application.
132
136
  test_files: []
133
137
 
@@ -1,43 +0,0 @@
1
- There's Auth, there's OAuth, and there's OohAuth.
2
- =================================================
3
-
4
- OohAuth extends merb-auth-more with a functionally-complete approach to OAuth, turning your merb-auth applications into full OAuth providers.
5
-
6
- OAuth at a glance:
7
- ==================
8
-
9
- * Your users won't have to give their names and passwords to client applications
10
- * Your users can revoke or limit access from a particular client at any time
11
- * Your users do not have to give client applications everything they need to steal their account
12
- * Your developer community can authenticate using a solid authentication schema endorsed by [industry giants](http://google.com)
13
- * Resilient to both man-in-the-middle and signature replay attacks.
14
-
15
- OohAuth gives you:
16
- ========================
17
-
18
- * Integration with merb-auth and your application's own User model
19
- * RESTful creation of API keys for client apps
20
- * RESTful creation of request and access tokens to allow client apps to authenticate on behalf of users
21
- * merb-auth strategies for both web-based and non web-based API authentication.
22
-
23
- It depends on:
24
- ==============
25
-
26
- * merb-slices
27
- * merb-action-args
28
- * merb-auth-core
29
- * merb-auth-more
30
- * nokogiri (tests only)
31
- * ruby-hmac
32
- * Erb **(we need your help to get started on HAML support)**
33
- * datamapper **(we need your help to become ORM-agnostic)**
34
-
35
- You should read:
36
- ================
37
-
38
- * [Why we wrote it](http://singlecell.angryamoeba.co.uk/post/62022487/the-api-antipattern-twitter-and-the-fail-whales-new)
39
- * [OohAuth on github](http://github.com/danski/ooh-auth)
40
- * [OAuth 1.0 specification](http://oauth.net/core/1.0) a hefty spec document containing instructions for authenticating with OAuth apps and more.
41
- * [securing.markdown](http://github.com/danski/ooh-auth/tree/master/securing.markdown), your guide to properly securing an application using OohAuth.
42
- * [OohAuth's bugtracker on Tails](http://www.bugtails.com/projects/171)
43
-