Skip to content

Commit 2d48944

Browse files
authored
Merge pull request #14 from chrisgavin/allow-ignoring-expirations
Add a configuration option for ignoring expirations.
2 parents d77a37e + 8d63a8d commit 2d48944

4 files changed

Lines changed: 29 additions & 0 deletions

File tree

lib/entitlements/data/groups/calculated/base.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ def apply_modifiers(member_set)
213213
# Returns true if expired, false if not expired.
214214
Contract C::Or[nil, String], String => C::Or[nil, C::Bool]
215215
def expired?(expiration, context)
216+
return false if Entitlements.config.fetch("ignore_expirations", false)
216217
return false if expiration.nil? || expiration.strip.empty?
217218
if expiration =~ /\A(\d{4})-(\d{2})-(\d{2})\z/
218219
year, month, day = Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i

lib/entitlements/data/groups/calculated/modifiers/expiration.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Expiration < Base
2222
# Return true if we made any changes, false otherwise.
2323
Contract C::SetOf[Entitlements::Models::Person] => C::Bool
2424
def modify(result)
25+
return false if Entitlements.config.fetch("ignore_expirations", false)
2526
# If group is already empty, we have nothing to consider modifying, regardless
2627
# of expiration date. Just return false right away.
2728
if result.empty?

spec/unit/entitlements/data/groups/calculated/modifiers/expiration_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@
3131
obj = Entitlements::Data::Groups::Calculated.read("cn=expired-text,ou=Felines,ou=Groups,dc=example,dc=net")
3232
expect(obj.members).to eq(Set.new)
3333
end
34+
35+
it "returns members if expiration is disabled in the configuration" do
36+
Entitlements.config["ignore_expirations"] = true
37+
allow(Entitlements::Util::Util).to receive(:path_for_group).with(ou_key).and_return(fixture("ldap-config/#{ou_key}"))
38+
Entitlements::Data::Groups::Calculated.read_all(ou_key, cfg_obj)
39+
obj = Entitlements::Data::Groups::Calculated.read("cn=expired-text,ou=Felines,ou=Groups,dc=example,dc=net")
40+
expected_result = %w[russianblue mainecoon]
41+
answer_set = Set.new(expected_result.map { |name| people_obj.read[name] })
42+
expect(obj.members).to eq(answer_set)
43+
end
3444
end
3545

3646
context "expired text file with no valid non-expired conditions" do

spec/unit/entitlements/data/groups/calculated/text_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,23 @@
438438
end
439439
end
440440

441+
context "already expired but expirations are disabled" do
442+
let(:filename) { fixture("ldap-config/text/expiration-already-expired.txt") }
443+
444+
it "constructs the correct rule set" do
445+
Entitlements.config["ignore_expirations"] = true
446+
answer = {
447+
"or" => [
448+
{ "username" => "blackmanx" },
449+
{ "username" => "russianblue" },
450+
{ "username" => "mainecoon" }
451+
]
452+
}
453+
result = subject.send(:rules)
454+
expect(result).to eq(answer)
455+
end
456+
end
457+
441458
context "mix of not expired and already expired" do
442459
let(:filename) { fixture("ldap-config/text/expiration-mixed-expired.txt") }
443460

0 commit comments

Comments
 (0)