Skip to content

Commit 3638e7b

Browse files
committed
Add result validating
1 parent 7492be2 commit 3638e7b

8 files changed

Lines changed: 194 additions & 208 deletions

File tree

3.0-changes.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
- Migrated JinjavaConfig to immutable
22
- Removed whitespaceRequiredWithinTokens LegacyOverride and converted to BuiltinFeatures
3-
- Nested interpretation disabled by defaut
3+
- Nested interpretation disabled by default
4+
- Removed restricted methods and properties from JinjavaConfig

src/main/java/com/hubspot/jinjava/JinjavaConfig.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import com.hubspot.jinjava.el.JinjavaObjectUnwrapper;
2727
import com.hubspot.jinjava.el.JinjavaProcessors;
2828
import com.hubspot.jinjava.el.ObjectUnwrapper;
29+
import com.hubspot.jinjava.el.ext.MethodValidator;
30+
import com.hubspot.jinjava.el.ext.MethodValidatorConfig;
2931
import com.hubspot.jinjava.features.FeatureConfig;
3032
import com.hubspot.jinjava.features.Features;
3133
import com.hubspot.jinjava.interpret.Context.Library;
@@ -100,10 +102,6 @@ default int getMaxMacroRecursionDepth() {
100102

101103
ImmutableMap<Library, ImmutableSet<String>> getDisabled();
102104

103-
ImmutableSet<String> getRestrictedMethods();
104-
105-
ImmutableSet<String> getRestrictedProperties();
106-
107105
@Value.Default
108106
default boolean isFailOnUnknownTokens() {
109107
return false;
@@ -164,9 +162,22 @@ default TokenScannerSymbols getTokenScannerSymbols() {
164162
return new DefaultTokenScannerSymbols();
165163
}
166164

165+
@Value.Default
166+
default MethodValidator getMethodValidator() {
167+
return MethodValidator.create(MethodValidatorConfig.of());
168+
}
169+
167170
@Value.Default
168171
default ELResolver getElResolver() {
169-
return JinjavaInterpreterResolver.DEFAULT_RESOLVER_READ_ONLY;
172+
return JinjavaInterpreterResolver.createDefaultResolver(
173+
isDefaultReadOnlyResolver(),
174+
getMethodValidator()
175+
);
176+
}
177+
178+
@Value.Default
179+
default boolean isDefaultReadOnlyResolver() {
180+
return true;
170181
}
171182

172183
@Value.Default

src/main/java/com/hubspot/jinjava/el/ExpressionResolver.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222
import com.hubspot.jinjava.interpret.UnknownTokenException;
2323
import com.hubspot.jinjava.interpret.errorcategory.BasicTemplateErrorCategory;
2424
import com.hubspot.jinjava.lib.fn.ELFunctionDefinition;
25+
import com.hubspot.jinjava.objects.serialization.PyishObjectMapper;
2526
import com.hubspot.jinjava.util.WhitespaceUtils;
2627
import de.odysseus.el.tree.TreeBuilderException;
2728
import java.util.Arrays;
2829
import java.util.List;
30+
import java.util.Objects;
2931
import javax.el.ELException;
3032
import javax.el.ExpressionFactory;
3133
import javax.el.PropertyNotFoundException;
@@ -343,4 +345,12 @@ public Object resolveProperty(Object object, List<String> propertyNames) {
343345
public Object wrap(Object object) {
344346
return resolver.wrap(object);
345347
}
348+
349+
public String getAsString(Object object) {
350+
if (interpreter.getConfig().getLegacyOverrides().isUsePyishObjectMapper()) {
351+
// resolver.
352+
return PyishObjectMapper.getAsUnquotedPyishString(object);
353+
}
354+
return Objects.toString(object, "");
355+
}
346356
}

src/main/java/com/hubspot/jinjava/el/JinjavaInterpreterResolver.java

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.hubspot.jinjava.el.ext.ExtendedParser;
99
import com.hubspot.jinjava.el.ext.JinjavaBeanELResolver;
1010
import com.hubspot.jinjava.el.ext.JinjavaListELResolver;
11+
import com.hubspot.jinjava.el.ext.MethodValidator;
12+
import com.hubspot.jinjava.el.ext.MethodValidatorConfig;
1113
import com.hubspot.jinjava.el.ext.NamedParameter;
1214
import com.hubspot.jinjava.interpret.DeferredValueException;
1315
import com.hubspot.jinjava.interpret.DisabledException;
@@ -50,39 +52,30 @@
5052

5153
public class JinjavaInterpreterResolver extends SimpleResolver {
5254

53-
public static final ELResolver DEFAULT_RESOLVER_READ_ONLY = new CompositeELResolver() {
54-
{
55-
add(new ArrayELResolver(true));
56-
add(new JinjavaListELResolver(true));
57-
add(new TypeConvertingMapELResolver(true));
58-
add(new ResourceBundleELResolver());
59-
add(
60-
new JinjavaBeanELResolver(
61-
JinjavaBeanELResolver.JinjavaBeanELResolverConfig
62-
.builder()
63-
.withReadOnly(true)
64-
.build()
65-
)
66-
);
67-
}
68-
};
69-
70-
public static final ELResolver DEFAULT_RESOLVER_READ_WRITE = new CompositeELResolver() {
71-
{
72-
add(new ArrayELResolver(false));
73-
add(new JinjavaListELResolver(false));
74-
add(new TypeConvertingMapELResolver(false));
75-
add(new ResourceBundleELResolver());
76-
add(
77-
new JinjavaBeanELResolver(
78-
JinjavaBeanELResolver.JinjavaBeanELResolverConfig
79-
.builder()
80-
.withReadOnly(false)
81-
.build()
82-
)
83-
);
84-
}
85-
};
55+
public static ELResolver createDefaultResolver(
56+
boolean readOnly,
57+
MethodValidator methodValidator
58+
) {
59+
return new CompositeELResolver() {
60+
{
61+
add(new ArrayELResolver(readOnly));
62+
add(new JinjavaListELResolver(readOnly));
63+
add(new TypeConvertingMapELResolver(readOnly));
64+
add(new ResourceBundleELResolver());
65+
add(new JinjavaBeanELResolver(readOnly, methodValidator));
66+
}
67+
};
68+
}
69+
70+
public static final ELResolver DEFAULT_RESOLVER_READ_ONLY = createDefaultResolver(
71+
true,
72+
MethodValidator.create(MethodValidatorConfig.of())
73+
);
74+
75+
public static final ELResolver DEFAULT_RESOLVER_READ_WRITE = createDefaultResolver(
76+
false,
77+
MethodValidator.create(MethodValidatorConfig.of())
78+
);
8679

8780
private final JinjavaInterpreter interpreter;
8881
private final ObjectUnwrapper objectUnwrapper;

0 commit comments

Comments
 (0)