omroep_auth 0.0.0 → 0.0.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 +1 -1
- data/lib/omroep_auth.rb +4 -0
- data/omroep_auth.gemspec +61 -0
- data/rails_generators/omroep_auth_generator.rb +32 -0
- data/rails_generators/templates/config/initializers/omroep_auth.rb +2 -0
- data/rails_generators/templates/controllers/omroep_auth_controller.rb +21 -0
- data/rails_generators/templates/lib/omroep_auth_system.rb +15 -0
- data/rails_generators/templates/migrate/create_omroep_users.rb +16 -0
- data/rails_generators/templates/models/omroep_user.rb +45 -0
- data/rails_generators/templates/spec/controllers/omroep_auth_controller_spec.rb +80 -0
- data/rails_generators/templates/spec/controllers/omroep_auth_system_spec.rb +53 -0
- data/rails_generators/templates/spec/models/omroep_user_spec.rb +67 -0
- data/rails_generators/templates/views/omroep_auth/new.html.erb +26 -0
- metadata +12 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/lib/omroep_auth.rb
CHANGED
data/omroep_auth.gemspec
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{omroep_auth}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Bart Zonneveld"]
|
12
|
+
s.date = %q{2010-01-26}
|
13
|
+
s.description = %q{longer description of your gem}
|
14
|
+
s.email = %q{loop@superinfinite.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/omroep_auth.rb",
|
27
|
+
"omroep_auth.gemspec",
|
28
|
+
"rails_generators/omroep_auth_generator.rb",
|
29
|
+
"rails_generators/templates/config/initializers/omroep_auth.rb",
|
30
|
+
"rails_generators/templates/controllers/omroep_auth_controller.rb",
|
31
|
+
"rails_generators/templates/lib/omroep_auth_system.rb",
|
32
|
+
"rails_generators/templates/migrate/create_omroep_users.rb",
|
33
|
+
"rails_generators/templates/models/omroep_user.rb",
|
34
|
+
"rails_generators/templates/spec/controllers/omroep_auth_controller_spec.rb",
|
35
|
+
"rails_generators/templates/spec/controllers/omroep_auth_system_spec.rb",
|
36
|
+
"rails_generators/templates/spec/models/omroep_user_spec.rb",
|
37
|
+
"rails_generators/templates/views/omroep_auth/new.html.erb",
|
38
|
+
"test/helper.rb",
|
39
|
+
"test/test_omroep_auth.rb"
|
40
|
+
]
|
41
|
+
s.homepage = %q{http://github.com/bartzon/omroep_auth}
|
42
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
43
|
+
s.require_paths = ["lib"]
|
44
|
+
s.rubygems_version = %q{1.3.5}
|
45
|
+
s.summary = %q{one-line summary of your gem}
|
46
|
+
s.test_files = [
|
47
|
+
"test/helper.rb",
|
48
|
+
"test/test_omroep_auth.rb"
|
49
|
+
]
|
50
|
+
|
51
|
+
if s.respond_to? :specification_version then
|
52
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
56
|
+
else
|
57
|
+
end
|
58
|
+
else
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class OmroepAuthGenerator < Rails::Generator::Base
|
2
|
+
def manifest
|
3
|
+
record do |m|
|
4
|
+
m.directory "app/controllers"
|
5
|
+
m.file "controllers/omroep_auth_controller.rb", "app/controllers/omroep_auth_controller.rb"
|
6
|
+
|
7
|
+
m.directory "app/models"
|
8
|
+
m.file "models/omroep_user.rb", "app/models/omroep_user.rb"
|
9
|
+
|
10
|
+
m.directory "app/views/omroep_auth"
|
11
|
+
m.file "views/omroep_auth/new.html.erb", "app/views/omroep_auth/new.html.erb"
|
12
|
+
|
13
|
+
m.directory "spec/controllers"
|
14
|
+
m.file "spec/controllers/omroep_auth_controller_spec.rb", "spec/controllers/omroep_auth_controller_spec.rb"
|
15
|
+
m.file "spec/controllers/omroep_auth_system_spec.rb", "spec/controllers/omroep_auth_system_spec.rb"
|
16
|
+
m.directory "spec/models"
|
17
|
+
m.file "spec/models/omroep_user_spec.rb", "spec/models/omroep_user_spec.rb"
|
18
|
+
|
19
|
+
m.file "config/initializers/omroep_auth.rb", "config/initializers/omroep_auth.rb"
|
20
|
+
|
21
|
+
m.file "lib/omroep_auth_system.rb", "lib/omroep_auth_system.rb"
|
22
|
+
|
23
|
+
m.migration_template "migrate/create_users.rb", "db/migrate"
|
24
|
+
|
25
|
+
m.readme "INSTALL"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def file_name
|
30
|
+
'create_users'
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class OmroepAuthController < ApplicationController
|
2
|
+
def new
|
3
|
+
end
|
4
|
+
|
5
|
+
def create
|
6
|
+
if user = OmroepUser.authenticate(params[:login], params[:password])
|
7
|
+
self.current_user = user
|
8
|
+
flash[:notice] = "Je bent ingelogd"
|
9
|
+
redirect_to root_path
|
10
|
+
else
|
11
|
+
@failed_login = true
|
12
|
+
render :action => "new"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
self.current_user = nil
|
18
|
+
flash[:notice] = "Je bent uitgelogd"
|
19
|
+
redirect_to root_path
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module OmroepAuthSystem
|
2
|
+
def self.included(base)
|
3
|
+
base.helper_method :current_user
|
4
|
+
end
|
5
|
+
|
6
|
+
protected
|
7
|
+
def current_user
|
8
|
+
OmroepUser.find_by_id(session[:user_id])
|
9
|
+
end
|
10
|
+
|
11
|
+
def current_user=(new_user)
|
12
|
+
session[:user_id] = new_user ? new_user.id : nil
|
13
|
+
@current_user = new_user || false
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateOmroepUsers < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :omroep_users do |t|
|
4
|
+
t.string :login
|
5
|
+
t.string :first_name
|
6
|
+
t.string :last_name
|
7
|
+
t.string :email
|
8
|
+
t.datetime :last_login_at
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :omroep_users
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class OmroepUser < ActiveRecord::Base
|
6
|
+
REMOTE_URL = 'http://localhost:3001/remote_login'
|
7
|
+
|
8
|
+
validates_uniqueness_of :login
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def authenticate(login, password)
|
12
|
+
response, body = send_request({ :login => login, :password => password })
|
13
|
+
response.code.to_s == '200' ? parse_response(body) : false
|
14
|
+
end
|
15
|
+
|
16
|
+
def from_xml(xml)
|
17
|
+
attrs = parse_xml_attributes(xml)
|
18
|
+
user = OmroepUser.find_or_create_by_login(attrs[:login])
|
19
|
+
user.update_attributes attrs
|
20
|
+
user
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def send_request(params)
|
25
|
+
uri = URI.parse(OmroepUser::REMOTE_URL)
|
26
|
+
Net::HTTP.post_form(uri, params)
|
27
|
+
end
|
28
|
+
|
29
|
+
def parse_response(body)
|
30
|
+
doc = Nokogiri::XML(body)
|
31
|
+
from_xml(doc)
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_xml_attributes(xml)
|
35
|
+
attrs = { :last_login_at => Time.now }
|
36
|
+
|
37
|
+
%w( login first_name last_name email ).each do |key|
|
38
|
+
val = xml.search("//#{key}").inner_text
|
39
|
+
attrs.merge! key.to_sym => val
|
40
|
+
end
|
41
|
+
|
42
|
+
attrs
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe OmroepAuthController do
|
4
|
+
describe "GET 'new'" do
|
5
|
+
it "should render the new template" do
|
6
|
+
get 'new'
|
7
|
+
response.should render_template('new')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "POST 'create'" do
|
12
|
+
before(:each) do
|
13
|
+
@user = mock_model(OmroepUser)
|
14
|
+
OmroepUser.stub!(:authenticate).and_return @user
|
15
|
+
end
|
16
|
+
|
17
|
+
def do_post
|
18
|
+
post "create", :login => "john", :password => "doe"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should authenticate the user" do
|
22
|
+
OmroepUser.should_receive(:authenticate).with("john", "doe")
|
23
|
+
do_post
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "with successfull authentication" do
|
27
|
+
it "should set the current user" do
|
28
|
+
controller.should_receive(:current_user=).with(@user)
|
29
|
+
do_post
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should set the flash" do
|
33
|
+
do_post
|
34
|
+
flash[:notice].should == "Je bent ingelogd"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should redirect to the root_path" do
|
38
|
+
do_post
|
39
|
+
response.should redirect_to(root_path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with failed authentication" do
|
44
|
+
before(:each) do
|
45
|
+
OmroepUser.stub!(:authenticate).and_return false
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should set a stupid var that needs to be fixed" do
|
49
|
+
do_post
|
50
|
+
assigns[:failed_login].should be_true
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should render the new template" do
|
54
|
+
do_post
|
55
|
+
response.should render_template('new')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "DELETE 'destroy'" do
|
61
|
+
def do_delete
|
62
|
+
delete "destroy"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should set the current user to nil" do
|
66
|
+
controller.should_receive(:current_user=).with(nil)
|
67
|
+
do_delete
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should set the flash" do
|
71
|
+
do_delete
|
72
|
+
flash[:notice].should == "Je bent uitgelogd"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should redirect to the root_path" do
|
76
|
+
do_delete
|
77
|
+
response.should redirect_to(root_path)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
require RAILS_ROOT+'/lib/omroep_auth_system'
|
4
|
+
|
5
|
+
describe "OmroepAuthSystem" do
|
6
|
+
class DummyController < ActionController::Base
|
7
|
+
include OmroepAuthHelper
|
8
|
+
|
9
|
+
def test_current_user
|
10
|
+
current_user
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_set_current_user
|
14
|
+
self.current_user = OmroepUser.find_by_id
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_clear_current_user
|
18
|
+
self.current_user = nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
controller_name :dummy
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
session[:user_id] = 1
|
26
|
+
@user = mock_model(OmroepUser, :id => 10)
|
27
|
+
OmroepUser.stub!(:find_by_id).and_return @user
|
28
|
+
|
29
|
+
ActionController::Routing::Routes.draw do |map|
|
30
|
+
map.connect "/t_c_u", :controller => 'dummy', :action => 'test_current_user'
|
31
|
+
map.connect "/t_s_u", :controller => 'dummy', :action => 'test_set_current_user'
|
32
|
+
map.connect "/t_x_u", :controller => 'dummy', :action => 'test_clear_current_user'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should find the correct omroep user" do
|
37
|
+
OmroepUser.should_receive(:find_by_id).with(1)
|
38
|
+
get 'test_current_user'
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
describe "when setting the current user" do
|
43
|
+
it "should store the current user id in the session" do
|
44
|
+
get 'test_set_current_user'
|
45
|
+
session[:user_id].should == 10
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should clear the current user if no user is given" do
|
49
|
+
get 'test_clear_current_user'
|
50
|
+
session[:user_id].should be_nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
require 'nokogiri'
|
6
|
+
|
7
|
+
describe OmroepUser do
|
8
|
+
before(:each) do
|
9
|
+
@response = mock("Response", :code => 200)
|
10
|
+
@xml = '<user><login>l</login></user>'
|
11
|
+
Net::HTTP.stub!(:post_form).and_return [@response, @xml]
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have the correct REMOTE_URL" do
|
15
|
+
OmroepUser::REMOTE_URL.should == 'http://localhost:3001/remote_login'
|
16
|
+
end
|
17
|
+
|
18
|
+
def do_auth(l='login', p='password')
|
19
|
+
OmroepUser.authenticate(l, p)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "when authenticating" do
|
23
|
+
it "should send the correct request" do
|
24
|
+
uri = URI.parse(OmroepUser::REMOTE_URL)
|
25
|
+
Net::HTTP.should_receive(:post_form).with(uri, {:login => 'login', :password => 'password'})
|
26
|
+
do_auth
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should generate a new user from the response" do
|
30
|
+
Nokogiri.should_receive(:XML).with(@xml).and_return 'parsed xml'
|
31
|
+
OmroepUser.should_receive(:from_xml).with('parsed xml')
|
32
|
+
do_auth
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "when generating a new user from xml" do
|
37
|
+
before(:each) do
|
38
|
+
data = "<user><login>l</login><first_name>fn</first_name><last_name>ln</last_name><email>e</email></user>"
|
39
|
+
@xml = Nokogiri::XML(data)
|
40
|
+
|
41
|
+
@t = Time.utc(2009,1,1)
|
42
|
+
Time.stub!(:now).and_return @t
|
43
|
+
|
44
|
+
@user = mock_model(OmroepUser, :update_attributes => true)
|
45
|
+
OmroepUser.stub!(:find_or_create_by_login).and_return @user
|
46
|
+
end
|
47
|
+
|
48
|
+
def do_generate
|
49
|
+
OmroepUser.from_xml(@xml)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should find or create a user by login" do
|
53
|
+
OmroepUser.should_receive(:find_or_create_by_login).with('l')
|
54
|
+
do_generate
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should set the correct attributes on the user" do
|
58
|
+
attrs = {:email => 'e', :login => 'l', :first_name => 'fn', :last_name => 'ln', :last_login_at => @t}
|
59
|
+
@user.should_receive(:update_attributes).with(attrs)
|
60
|
+
do_generate
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should return the user" do
|
64
|
+
do_generate.should == @user
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<% form_tag omroep_remote_login_path do %>
|
2
|
+
|
3
|
+
<% if @failed_login %>
|
4
|
+
<p>
|
5
|
+
Ongeldige login of wachtwoord. Probeer het opnieuw.
|
6
|
+
</p>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<p class="explanation">
|
10
|
+
Log in met je Omroep.nl gegevens.
|
11
|
+
</p>
|
12
|
+
|
13
|
+
<p>
|
14
|
+
<%= label_tag 'login', 'Login' %>
|
15
|
+
<%= text_field_tag 'login', '', :class => 'text' %>
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<p>
|
19
|
+
<%= label_tag 'password', 'Wachtwoord' %>
|
20
|
+
<%= password_field_tag 'password', '', :class => 'text password' %>
|
21
|
+
</p>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
<%= submit_tag 'Login', :class => 'submit' %>
|
25
|
+
</p>
|
26
|
+
<% end %>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omroep_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bart Zonneveld
|
@@ -30,6 +30,17 @@ files:
|
|
30
30
|
- Rakefile
|
31
31
|
- VERSION
|
32
32
|
- lib/omroep_auth.rb
|
33
|
+
- omroep_auth.gemspec
|
34
|
+
- rails_generators/omroep_auth_generator.rb
|
35
|
+
- rails_generators/templates/config/initializers/omroep_auth.rb
|
36
|
+
- rails_generators/templates/controllers/omroep_auth_controller.rb
|
37
|
+
- rails_generators/templates/lib/omroep_auth_system.rb
|
38
|
+
- rails_generators/templates/migrate/create_omroep_users.rb
|
39
|
+
- rails_generators/templates/models/omroep_user.rb
|
40
|
+
- rails_generators/templates/spec/controllers/omroep_auth_controller_spec.rb
|
41
|
+
- rails_generators/templates/spec/controllers/omroep_auth_system_spec.rb
|
42
|
+
- rails_generators/templates/spec/models/omroep_user_spec.rb
|
43
|
+
- rails_generators/templates/views/omroep_auth/new.html.erb
|
33
44
|
- test/helper.rb
|
34
45
|
- test/test_omroep_auth.rb
|
35
46
|
has_rdoc: true
|