kraut 0.5.6
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/.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: []
|