kraut 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +11 -0
- data/.rspec +1 -0
- data/Gemfile +3 -0
- data/README.md +175 -0
- data/Rakefile +10 -0
- data/app/controllers/kraut/sessions_controller.rb +30 -0
- data/app/models/kraut/session.rb +67 -0
- data/app/views/kraut/sessions/new.html.haml +15 -0
- data/autotest/discover.rb +1 -0
- data/config/initializers/savon.rb +12 -0
- data/config/locales/kraut.yml +14 -0
- data/config/routes.rb +5 -0
- data/kraut.gemspec +43 -0
- data/lib/kraut.rb +3 -0
- data/lib/kraut/application.rb +31 -0
- data/lib/kraut/client.rb +63 -0
- data/lib/kraut/kraut.rb +21 -0
- data/lib/kraut/mapper.rb +20 -0
- data/lib/kraut/principal.rb +85 -0
- data/lib/kraut/rails/authentication.rb +80 -0
- data/lib/kraut/rails/engine.rb +29 -0
- data/lib/kraut/rails/spec/login_helper.rb +28 -0
- data/lib/kraut/rails/spec/protected_action.rb +68 -0
- data/lib/kraut/rails/spec/user_helper.rb +27 -0
- data/lib/kraut/rails/spec_helper.rb +15 -0
- data/lib/kraut/version.rb +6 -0
- data/spec/controllers/application_controller_spec.rb +219 -0
- data/spec/controllers/sessions_controller_spec.rb +106 -0
- data/spec/fixtures/authenticate_application/invalid_app.xml +11 -0
- data/spec/fixtures/authenticate_application/invalid_password.xml +11 -0
- data/spec/fixtures/authenticate_application/success.xml +10 -0
- data/spec/fixtures/authenticate_principal/application_access_denied.xml +11 -0
- data/spec/fixtures/authenticate_principal/invalid_password.xml +11 -0
- data/spec/fixtures/authenticate_principal/invalid_user.xml +11 -0
- data/spec/fixtures/authenticate_principal/success.xml +7 -0
- data/spec/fixtures/find_principal_by_token/invalid_token.xml +11 -0
- data/spec/fixtures/find_principal_by_token/success.xml +39 -0
- data/spec/fixtures/find_principal_with_attributes_by_name/invalid_user.xml +11 -0
- data/spec/fixtures/find_principal_with_attributes_by_name/success.xml +69 -0
- data/spec/fixtures/is_group_member/not_in_group.xml +8 -0
- data/spec/fixtures/is_group_member/success.xml +8 -0
- data/spec/kraut/application_spec.rb +99 -0
- data/spec/kraut/client_spec.rb +101 -0
- data/spec/kraut/mapper_spec.rb +48 -0
- data/spec/kraut/principal_spec.rb +142 -0
- data/spec/models/session_spec.rb +148 -0
- data/spec/rails/engine_spec.rb +24 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/views/sessions/new.html.haml_spec.rb +11 -0
- metadata +237 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "kraut/mapper"
|
3
|
+
|
4
|
+
describe Kraut::Mapper do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
Class.new do
|
8
|
+
include Kraut::Mapper
|
9
|
+
attr_accessor :name, :email
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#initialize" do
|
14
|
+
|
15
|
+
it "should call mass_assign! when with the given opts" do
|
16
|
+
subject.any_instance.expects(:mass_assign!).with(opts = {})
|
17
|
+
principal = subject.new(opts)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should call mass_assign! when with nil when given nothing" do
|
21
|
+
subject.any_instance.expects(:mass_assign!).with(nil)
|
22
|
+
principal = subject.new
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#mass_assign!" do
|
28
|
+
|
29
|
+
let(:principal) { subject.new }
|
30
|
+
|
31
|
+
it "should assign the given attributes" do
|
32
|
+
principal.mass_assign! :name => "Chuck Norris", :email => "chuck.norris@gmail.com"
|
33
|
+
|
34
|
+
principal.name.should == "Chuck Norris"
|
35
|
+
principal.email.should == "chuck.norris@gmail.com"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not fail when given nil" do
|
39
|
+
principal.mass_assign! nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should fail when given a non-existant attribute" do
|
43
|
+
lambda { principal.mass_assign! :failing => 'non-existant' }.should raise_error(NoMethodError)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "kraut/principal"
|
3
|
+
|
4
|
+
describe Kraut::Principal do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
savon.expects(:authenticate_application).returns(:success)
|
8
|
+
Kraut::Application.authenticate "app", "password"
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "attributes" do
|
12
|
+
let(:principal) { Kraut::Principal.authenticate "test", "password" }
|
13
|
+
|
14
|
+
before do
|
15
|
+
savon.expects(:authenticate_principal).returns(:success)
|
16
|
+
savon.stubs(:find_principal_with_attributes_by_name).returns(:success)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have a name" do
|
20
|
+
principal.name.should == "test"
|
21
|
+
principal.name.class.should == String
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should have a password" do
|
25
|
+
principal.password.should == "password"
|
26
|
+
principal.password.class.should == String
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a token" do
|
30
|
+
principal.token.should == "COvlhb092poBHXi4rh4PQg00"
|
31
|
+
principal.token.class.should == String
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have a display_name" do
|
35
|
+
principal.display_name.should == "Test User"
|
36
|
+
principal.display_name.class.should == String
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should have an email" do
|
40
|
+
principal.email.should == "test@blau.de"
|
41
|
+
principal.email.class.should == String
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return whether the principal's password is expired" do
|
45
|
+
principal.requires_password_change?.should == false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#member_of?" do
|
50
|
+
let(:principal) { Kraut::Principal.authenticate "test", "password" }
|
51
|
+
|
52
|
+
before do
|
53
|
+
savon.expects(:authenticate_principal).returns(:success)
|
54
|
+
savon.stubs(:find_principal_with_attributes_by_name).returns(:success)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return true if member of group" do
|
58
|
+
savon.expects(:is_group_member).returns(:success)
|
59
|
+
principal.should be_member_of("a_group")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return false if not member of group" do
|
63
|
+
savon.expects(:is_group_member).returns(:not_in_group)
|
64
|
+
principal.should_not be_member_of("another_group")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should not ask crowd if positive group membership is already saved" do
|
68
|
+
principal.groups["a_group"] = true
|
69
|
+
principal.member_of?("a_group").should == true
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should not ask crowd if negative group membership is already saved" do
|
73
|
+
principal.groups["another_group"] = false
|
74
|
+
principal.member_of?("another_group").should == false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".authenticate" do
|
79
|
+
context "when successful" do
|
80
|
+
before { savon.expects(:authenticate_principal).returns(:success) }
|
81
|
+
|
82
|
+
it "should return a principal" do
|
83
|
+
principal = Kraut::Principal.authenticate "test", "password"
|
84
|
+
principal.should be_a(Kraut::Principal)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "with an invalid password" do
|
89
|
+
before { savon.expects(:authenticate_principal).returns(:invalid_password) }
|
90
|
+
|
91
|
+
it "should raise an InvalidAuthentication" do
|
92
|
+
lambda { Kraut::Principal.authenticate "test", "invalid_password" }.
|
93
|
+
should raise_error(Kraut::InvalidAuthentication, /password was invalid/)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "with an invalid username" do
|
98
|
+
before { savon.expects(:authenticate_principal).returns(:invalid_user) }
|
99
|
+
|
100
|
+
it "should raise an InvalidAuthentication" do
|
101
|
+
lambda { Kraut::Principal.authenticate "invalid_user", "password" }.
|
102
|
+
should raise_error(Kraut::InvalidAuthentication, /Failed to find entity of type/)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context "when the user is not allowed to access the application" do
|
107
|
+
before { savon.expects(:authenticate_principal).returns(:application_access_denied) }
|
108
|
+
|
109
|
+
it "should raise an InvalidAuthentication" do
|
110
|
+
lambda { Kraut::Principal.authenticate "test", "password" }.
|
111
|
+
should raise_error(Kraut::ApplicationAccessDenied, /User does not have access to application/)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe ".find_by_token" do
|
117
|
+
context "when successful" do
|
118
|
+
before { savon.expects(:find_principal_by_token).returns(:success) }
|
119
|
+
|
120
|
+
it "should return a principal" do
|
121
|
+
principal = Kraut::Principal.find_by_token "abcdefghijklmnopqrstuvwxyz0123456789"
|
122
|
+
principal.should be_a(Kraut::Principal)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should set the name of the principal to the name from the response" do
|
126
|
+
principal = Kraut::Principal.find_by_token "abcdefghijklmnopqrstuvwxyz0123456789"
|
127
|
+
principal.name.should == 'test-supervisor'
|
128
|
+
principal.name.class.should == String
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "with an invalid token" do
|
133
|
+
before { savon.expects(:find_principal_by_token).returns(:invalid_token) }
|
134
|
+
|
135
|
+
it "should raise an InvalidToken" do
|
136
|
+
lambda { Kraut::Principal.find_by_token "9876543210zyxwvutsrqponmlkjihgfedcba" }.
|
137
|
+
should raise_error(Kraut::InvalidPrincipalToken, /Failed to find entity of type/)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Kraut::Session do
|
4
|
+
|
5
|
+
describe "validations" do
|
6
|
+
# TODO should_validate_presence_of :username, :password
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "attributes" do
|
10
|
+
let(:session) { Kraut::Session.new(:username => "user", :password => "secret", :principal => Kraut::Principal.new(:name => "name", :token => "token")) }
|
11
|
+
|
12
|
+
describe "#name" do
|
13
|
+
it "should return the principal's name" do
|
14
|
+
session.name.should == "name"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#token" do
|
19
|
+
it "should return the principal's token" do
|
20
|
+
session.token.should == "token"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#allowed_to?" do
|
25
|
+
context "when the principal is allowed for the given action" do
|
26
|
+
it "should return true" do
|
27
|
+
session.expects(:in_group?).returns(true)
|
28
|
+
session.should be_allowed_to(:verify)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when the principal is not allowed for the given action" do
|
33
|
+
it "should return true" do
|
34
|
+
session.expects(:in_group?).returns(false)
|
35
|
+
session.should_not be_allowed_to(:invoice)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#in_group?" do
|
41
|
+
it "should return whether the principal belongs to any of the given groups" do
|
42
|
+
Kraut::Principal.any_instance.expects(:member_of?).returns(true).then.returns(false)
|
43
|
+
session.in_group?(["staff", "supervisor"]).should be_true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return whether the principal belongs to single group" do
|
47
|
+
Kraut::Principal.any_instance.expects(:member_of?).returns(false)
|
48
|
+
session.in_group?("staff").should be_false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#valid?" do
|
54
|
+
it "should check the validations" do
|
55
|
+
Kraut::Session.new.should_not be_valid
|
56
|
+
end
|
57
|
+
|
58
|
+
context "for a valid Crowd user" do
|
59
|
+
before do
|
60
|
+
principal = Kraut::Principal.new
|
61
|
+
principal.expects(:requires_password_change?).returns(false)
|
62
|
+
Kraut::Principal.expects(:authenticate).with("user", "secret").returns(principal)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return true" do
|
66
|
+
new_session.should be_valid
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "for an invalid Crowd user" do
|
71
|
+
before do
|
72
|
+
Kraut::Principal.expects(:authenticate).with("user", "secret").raises(Kraut::InvalidAuthentication)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return false" do
|
76
|
+
new_session.should_not be_valid
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should record an error" do
|
80
|
+
session = new_session
|
81
|
+
session.valid?
|
82
|
+
session.errors[:base].first.should == I18n.t("errors.kraut.invalid_credentials")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "for a Crowd user with no access to the application" do
|
87
|
+
before do
|
88
|
+
Kraut::Principal.expects(:authenticate).with("user", "secret").raises(Kraut::ApplicationAccessDenied)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should return false" do
|
92
|
+
new_session.should_not be_valid
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should record an error" do
|
96
|
+
session = new_session
|
97
|
+
session.valid?
|
98
|
+
session.errors[:base].first.should == I18n.t("errors.kraut.application_access_denied")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "for a Crowd user with an expired password" do
|
103
|
+
before do
|
104
|
+
principal = Kraut::Principal.new
|
105
|
+
principal.expects(:requires_password_change?).returns(true)
|
106
|
+
Kraut::Principal.expects(:authenticate).with("user", "secret").returns(principal)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should return false" do
|
110
|
+
new_session.should_not be_valid
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should record an error" do
|
114
|
+
session = new_session
|
115
|
+
session.valid?
|
116
|
+
session.errors[:base].first.should == I18n.t("errors.kraut.password_expired")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it "doesn't log in the user if he already is logged in" do
|
121
|
+
session = new_session
|
122
|
+
session.principal = Kraut::Principal.new
|
123
|
+
session.valid?.should == true
|
124
|
+
end
|
125
|
+
|
126
|
+
def new_session
|
127
|
+
Kraut::Session.new :username => "user", :password => "secret"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context ".find_by_token" do
|
132
|
+
it "returns a new session with the principal assigned to it on success" do
|
133
|
+
principal = Kraut::Principal.new
|
134
|
+
|
135
|
+
Kraut::Principal.expects(:find_by_token).with('abcd').returns(principal)
|
136
|
+
session = Kraut::Session.find_by_token('abcd')
|
137
|
+
session.should be_a(Kraut::Session)
|
138
|
+
session.principal.should == principal
|
139
|
+
end
|
140
|
+
|
141
|
+
it "passes through Kraut::InvalidPrincipalToken error thrown by the crowd server" do
|
142
|
+
Kraut::Principal.stubs(:find_by_token).raises(Kraut::InvalidPrincipalToken)
|
143
|
+
lambda { Kraut::Session.find_by_token('abcd') }.should raise_error(Kraut::InvalidPrincipalToken)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Kraut::Rails::Engine do
|
4
|
+
|
5
|
+
describe "#resolve_authorization_aliases" do
|
6
|
+
|
7
|
+
it "returns a hash for authorizations use (replaces group aliases)" do
|
8
|
+
Kraut::Rails::Engine.resolve_authorization_aliases(
|
9
|
+
{
|
10
|
+
"action1" => ["group1", "group2"],
|
11
|
+
"action2" => ["group2"]
|
12
|
+
}, {
|
13
|
+
"group1" => "external_group1",
|
14
|
+
"group2" => "external_group2"
|
15
|
+
}
|
16
|
+
).should == {
|
17
|
+
"action1" => ["external_group1", "external_group2"],
|
18
|
+
"action2" => ["external_group2"]
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require "bundler"
|
2
|
+
Bundler.require :default, :development
|
3
|
+
|
4
|
+
require "kraut/rails/engine"
|
5
|
+
Kraut.endpoint = "http://example.com"
|
6
|
+
Kraut::Rails::Engine.config.layout = false
|
7
|
+
Kraut::Rails::Engine.config.entry_url = "/"
|
8
|
+
Kraut::Rails::Engine.config.authorizations = {}
|
9
|
+
|
10
|
+
# stupid stuff to let the engine act as if it's included in an app
|
11
|
+
require "action_controller"
|
12
|
+
module Kraut
|
13
|
+
module Rails
|
14
|
+
class Application < ::Rails::Application; end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
Kraut::Rails::Application.configure do
|
18
|
+
config.active_support.deprecation = :log
|
19
|
+
end
|
20
|
+
Kraut::Rails::Application.initialize!
|
21
|
+
ActionController::Base.send :include, Rails.application.routes.url_helpers
|
22
|
+
class ApplicationController < ActionController::Base; end
|
23
|
+
# end stupid stuff
|
24
|
+
|
25
|
+
require "rspec/rails"
|
26
|
+
|
27
|
+
RSpec.configure do |config|
|
28
|
+
config.mock_with :mocha
|
29
|
+
config.include Savon::Spec::Macros
|
30
|
+
end
|
31
|
+
|
32
|
+
Savon.log = false
|
33
|
+
Savon::Spec::Fixture.path = File.expand_path("../fixtures", __FILE__)
|
metadata
ADDED
@@ -0,0 +1,237 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kraut
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.6
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Harrington
|
9
|
+
- Thilko Richter
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-06-04 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: savon
|
17
|
+
requirement: &2181323920 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - =
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.9.7
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *2181323920
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: gyoku
|
28
|
+
requirement: &2181322660 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - =
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.4
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *2181322660
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: ci_reporter
|
39
|
+
requirement: &2181321420 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.6.5
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *2181321420
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &2181320160 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.5.0
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *2181320160
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: autotest
|
61
|
+
requirement: &2181318660 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 4.4.2
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *2181318660
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: mocha
|
72
|
+
requirement: &2181360280 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.9.9
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *2181360280
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: webmock
|
83
|
+
requirement: &2181363920 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.3.5
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *2181363920
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: savon_spec
|
94
|
+
requirement: &2181363140 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 0.1.6
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *2181363140
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
105
|
+
requirement: &2181362360 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - =
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.8.7
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *2181362360
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: rails
|
116
|
+
requirement: &2181361260 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - =
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 3.0.7
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *2181361260
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec-rails
|
127
|
+
requirement: &2181360580 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ~>
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 2.5.0
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *2181360580
|
136
|
+
- !ruby/object:Gem::Dependency
|
137
|
+
name: haml
|
138
|
+
requirement: &2181359840 !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ~>
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '3.0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: *2181359840
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: ZenTest
|
149
|
+
requirement: &2181359000 !ruby/object:Gem::Requirement
|
150
|
+
none: false
|
151
|
+
requirements:
|
152
|
+
- - =
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 4.5.0
|
155
|
+
type: :development
|
156
|
+
prerelease: false
|
157
|
+
version_requirements: *2181359000
|
158
|
+
description: Interface for the Atlassian Crowd SOAP API
|
159
|
+
email: blaulabs@blau.de
|
160
|
+
executables: []
|
161
|
+
extensions: []
|
162
|
+
extra_rdoc_files: []
|
163
|
+
files:
|
164
|
+
- .gitignore
|
165
|
+
- .rspec
|
166
|
+
- Gemfile
|
167
|
+
- README.md
|
168
|
+
- Rakefile
|
169
|
+
- app/controllers/kraut/sessions_controller.rb
|
170
|
+
- app/models/kraut/session.rb
|
171
|
+
- app/views/kraut/sessions/new.html.haml
|
172
|
+
- autotest/discover.rb
|
173
|
+
- config/initializers/savon.rb
|
174
|
+
- config/locales/kraut.yml
|
175
|
+
- config/routes.rb
|
176
|
+
- kraut.gemspec
|
177
|
+
- lib/kraut.rb
|
178
|
+
- lib/kraut/application.rb
|
179
|
+
- lib/kraut/client.rb
|
180
|
+
- lib/kraut/kraut.rb
|
181
|
+
- lib/kraut/mapper.rb
|
182
|
+
- lib/kraut/principal.rb
|
183
|
+
- lib/kraut/rails/authentication.rb
|
184
|
+
- lib/kraut/rails/engine.rb
|
185
|
+
- lib/kraut/rails/spec/login_helper.rb
|
186
|
+
- lib/kraut/rails/spec/protected_action.rb
|
187
|
+
- lib/kraut/rails/spec/user_helper.rb
|
188
|
+
- lib/kraut/rails/spec_helper.rb
|
189
|
+
- lib/kraut/version.rb
|
190
|
+
- spec/controllers/application_controller_spec.rb
|
191
|
+
- spec/controllers/sessions_controller_spec.rb
|
192
|
+
- spec/fixtures/authenticate_application/invalid_app.xml
|
193
|
+
- spec/fixtures/authenticate_application/invalid_password.xml
|
194
|
+
- spec/fixtures/authenticate_application/success.xml
|
195
|
+
- spec/fixtures/authenticate_principal/application_access_denied.xml
|
196
|
+
- spec/fixtures/authenticate_principal/invalid_password.xml
|
197
|
+
- spec/fixtures/authenticate_principal/invalid_user.xml
|
198
|
+
- spec/fixtures/authenticate_principal/success.xml
|
199
|
+
- spec/fixtures/find_principal_by_token/invalid_token.xml
|
200
|
+
- spec/fixtures/find_principal_by_token/success.xml
|
201
|
+
- spec/fixtures/find_principal_with_attributes_by_name/invalid_user.xml
|
202
|
+
- spec/fixtures/find_principal_with_attributes_by_name/success.xml
|
203
|
+
- spec/fixtures/is_group_member/not_in_group.xml
|
204
|
+
- spec/fixtures/is_group_member/success.xml
|
205
|
+
- spec/kraut/application_spec.rb
|
206
|
+
- spec/kraut/client_spec.rb
|
207
|
+
- spec/kraut/mapper_spec.rb
|
208
|
+
- spec/kraut/principal_spec.rb
|
209
|
+
- spec/models/session_spec.rb
|
210
|
+
- spec/rails/engine_spec.rb
|
211
|
+
- spec/spec_helper.rb
|
212
|
+
- spec/views/sessions/new.html.haml_spec.rb
|
213
|
+
homepage: http://github.com/blaulabs/kraut
|
214
|
+
licenses: []
|
215
|
+
post_install_message:
|
216
|
+
rdoc_options: []
|
217
|
+
require_paths:
|
218
|
+
- lib
|
219
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
+
none: false
|
221
|
+
requirements:
|
222
|
+
- - ! '>='
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0'
|
225
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
|
+
none: false
|
227
|
+
requirements:
|
228
|
+
- - ! '>='
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: '0'
|
231
|
+
requirements: []
|
232
|
+
rubyforge_project: kraut
|
233
|
+
rubygems_version: 1.8.11
|
234
|
+
signing_key:
|
235
|
+
specification_version: 3
|
236
|
+
summary: Crowd Interface
|
237
|
+
test_files: []
|