1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.saml2.metadata.provider;
18
19 import org.joda.time.DateTime;
20 import org.joda.time.Interval;
21 import org.opensaml.saml2.metadata.EntitiesDescriptor;
22 import org.opensaml.saml2.metadata.EntityDescriptor;
23 import org.opensaml.xml.XMLObject;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27
28
29
30
31
32
33
34
35 public class RequiredValidUntilFilter implements MetadataFilter {
36
37
38 private final Logger log = LoggerFactory.getLogger(RequiredValidUntilFilter.class);
39
40
41 private long maxValidityInterval;
42
43
44 public RequiredValidUntilFilter() {
45 maxValidityInterval = 0;
46 }
47
48
49
50
51
52
53 public RequiredValidUntilFilter(long maxValidityInterval) {
54 this.maxValidityInterval = maxValidityInterval * 1000;
55 }
56
57
58
59
60
61
62
63 public long getMaxValidityInterval() {
64 return maxValidityInterval;
65 }
66
67
68 public void doFilter(XMLObject metadata) throws FilterException {
69 DateTime validUntil;
70
71 if (metadata instanceof EntitiesDescriptor) {
72 validUntil = ((EntitiesDescriptor) metadata).getValidUntil();
73 } else if (metadata instanceof EntityDescriptor) {
74 validUntil = ((EntityDescriptor) metadata).getValidUntil();
75 } else {
76 log.error("Metadata root element was not an EntitiesDescriptor or EntityDescriptor it was a {}", metadata
77 .getElementQName());
78 throw new FilterException("Metadata root element was not an EntitiesDescriptor or EntityDescriptor");
79 }
80
81 if (validUntil == null) {
82 throw new FilterException("Metadata did not include a validUntil attribute");
83 }
84
85 if (maxValidityInterval > 0) {
86 long validityInterval = new Interval(new DateTime(), validUntil).toDurationMillis();
87 if (validityInterval > maxValidityInterval) {
88 throw new FilterException("Metadata's validity interval, " + validityInterval
89 + "ms, is larger than is allowed, " + maxValidityInterval + "ms.");
90 }
91 }
92 }
93 }