1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.saml2.common;
18
19 import java.util.List;
20
21 import org.joda.time.DateTime;
22 import org.opensaml.xml.XMLObject;
23
24 public class SAML2Helper {
25
26
27
28
29
30
31
32
33
34 public static boolean isValid(XMLObject xmlObject) {
35 if (xmlObject instanceof TimeBoundSAMLObject) {
36 TimeBoundSAMLObject timeBoundObject = (TimeBoundSAMLObject) xmlObject;
37 if (!timeBoundObject.isValid()) {
38 return false;
39 }
40 }
41
42 List<XMLObject> children = xmlObject.getOrderedChildren();
43 if (children != null && !children.isEmpty()) {
44 for (XMLObject child : children) {
45 if (!isValid(child)) {
46 return false;
47 }
48 }
49 }
50
51 return true;
52 }
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public static DateTime getEarliestExpiration(XMLObject xmlObject) {
67 DateTime now = new DateTime();
68 return getEarliestExpiration(xmlObject, null, now);
69 }
70
71
72
73
74
75
76
77
78
79
80 public static DateTime getEarliestExpiration(XMLObject xmlObject, DateTime earliestExpiration, DateTime now) {
81
82
83 DateTime elementExpirationTime;
84
85
86 if (xmlObject instanceof CacheableSAMLObject) {
87 CacheableSAMLObject cacheInfo = (CacheableSAMLObject) xmlObject;
88
89 if (cacheInfo.getCacheDuration() != null && cacheInfo.getCacheDuration().longValue() > 0) {
90 elementExpirationTime = now.plus(cacheInfo.getCacheDuration().longValue());
91 if (earliestExpiration == null) {
92 earliestExpiration = elementExpirationTime;
93 } else {
94 if (elementExpirationTime != null && elementExpirationTime.isBefore(earliestExpiration)) {
95 earliestExpiration = elementExpirationTime;
96 }
97 }
98 }
99 }
100
101
102 if (xmlObject instanceof TimeBoundSAMLObject) {
103 TimeBoundSAMLObject timeBoundObject = (TimeBoundSAMLObject) xmlObject;
104 elementExpirationTime = timeBoundObject.getValidUntil();
105 if (earliestExpiration == null) {
106 earliestExpiration = elementExpirationTime;
107 } else {
108 if (elementExpirationTime != null && elementExpirationTime.isBefore(earliestExpiration)) {
109 earliestExpiration = elementExpirationTime;
110 }
111 }
112 }
113
114
115 List<XMLObject> children = xmlObject.getOrderedChildren();
116 if (children != null) {
117 for (XMLObject child : xmlObject.getOrderedChildren()) {
118 if (child != null) {
119 earliestExpiration = getEarliestExpiration(child, earliestExpiration, now);
120 }
121 }
122 }
123
124 return earliestExpiration;
125 }
126 }