Skip to content

Commit f8de94e

Browse files
author
Porcupiney Hairs
committed
refactor SpringWebClient
1 parent 2525cfd commit f8de94e

File tree

2 files changed

+39
-116
lines changed

2 files changed

+39
-116
lines changed

java/ql/src/experimental/CWE-918/RequestForgeryCustomizations.qll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,42 @@ module RequestForgery {
141141
}
142142
}
143143
}
144+
145+
/**
146+
* A class representing all Spring Rest Template methods
147+
* which take an URL as an argument.
148+
*/
149+
class SpringRestTemplateUrlMethods extends Method {
150+
SpringRestTemplateUrlMethods() {
151+
this.getDeclaringType() instanceof SpringRestTemplate and
152+
this.hasName("doExecute")
153+
or
154+
this.hasName("postForEntity")
155+
or
156+
this.hasName("postForLocation")
157+
or
158+
this.hasName("postForObject")
159+
or
160+
this.hasName("put")
161+
or
162+
this.hasName("exchange")
163+
or
164+
this.hasName("execute")
165+
or
166+
this.hasName("getForEntity")
167+
or
168+
this.hasName("getForObject")
169+
or
170+
this.hasName("patchForObject")
171+
}
172+
173+
/**
174+
* Gets the argument which corresponds to a URL argument
175+
* passed as a `java.net.URL` object or as a string or the like
176+
*/
177+
Argument getUrlArgument(MethodAccess ma) {
178+
// doExecute(URI url, HttpMethod method, RequestCallback requestCallback,
179+
// ResponseExtractor<T> responseExtractor)
180+
result = ma.getArgument(0)
181+
}
182+
}

java/ql/src/semmle/code/java/frameworks/spring/SpringWebClient.qll

Lines changed: 0 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -27,119 +27,3 @@ class SpringWebClient extends Interface {
2727
this.hasQualifiedName("org.springframework.web.reactive.function.client", "WebClient")
2828
}
2929
}
30-
31-
/**
32-
* An abstract class representing all Spring Rest Template methods
33-
* which take an URL as an argument.
34-
*/
35-
abstract class SpringRestTemplateUrlMethods extends Method {
36-
/**
37-
* Gets the argument which corresponds to a URL argument
38-
* passed as a `java.net.URL` object or as a string or the like
39-
*/
40-
abstract Argument getUrlArgument(MethodAccess ma);
41-
}
42-
43-
/** Models `RestTemplate` class's `doExecute` method */
44-
class RestTemplateDoExecute extends SpringRestTemplateUrlMethods {
45-
RestTemplateDoExecute() {
46-
this.getDeclaringType() instanceof SpringRestTemplate and
47-
this.hasName("doExecute")
48-
}
49-
50-
override Argument getUrlArgument(MethodAccess ma) {
51-
// doExecute(URI url, HttpMethod method, RequestCallback requestCallback,
52-
// ResponseExtractor<T> responseExtractor)
53-
result = ma.getArgument(0)
54-
}
55-
}
56-
57-
/** Models `RestTemplate` class's `exchange` method */
58-
class RestTemplateExchange extends SpringRestTemplateUrlMethods {
59-
RestTemplateExchange() {
60-
this.getDeclaringType() instanceof SpringRestTemplate and
61-
this.hasName("exchange")
62-
}
63-
64-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
65-
}
66-
67-
/** Models `RestTemplate` class's `execute` method */
68-
class RestTemplateExecute extends SpringRestTemplateUrlMethods {
69-
RestTemplateExecute() {
70-
this.getDeclaringType() instanceof SpringRestTemplate and
71-
this.hasName("execute")
72-
}
73-
74-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
75-
}
76-
77-
/** Models `RestTemplate` class's `getForEntity` method */
78-
class RestTemplateGetForEntity extends SpringRestTemplateUrlMethods {
79-
RestTemplateGetForEntity() {
80-
this.getDeclaringType() instanceof SpringRestTemplate and
81-
this.hasName("getForEntity")
82-
}
83-
84-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
85-
}
86-
87-
/** Models `RestTemplate` class's `getForObject` method */
88-
class RestTemplateGetForObject extends SpringRestTemplateUrlMethods {
89-
RestTemplateGetForObject() {
90-
this.getDeclaringType() instanceof SpringRestTemplate and
91-
this.hasName("getForObject")
92-
}
93-
94-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
95-
}
96-
97-
/** Models `RestTemplate` class's `patchForObject` method */
98-
class RestTemplatePatchForObject extends SpringRestTemplateUrlMethods {
99-
RestTemplatePatchForObject() {
100-
this.getDeclaringType() instanceof SpringRestTemplate and
101-
this.hasName("patchForObject")
102-
}
103-
104-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
105-
}
106-
107-
/** Models `RestTemplate` class's `postForEntity` method */
108-
class RestTemplatePostForEntity extends SpringRestTemplateUrlMethods {
109-
RestTemplatePostForEntity() {
110-
this.getDeclaringType() instanceof SpringRestTemplate and
111-
this.hasName("postForEntity")
112-
}
113-
114-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
115-
}
116-
117-
/** Models `RestTemplate` class's `postForLocation` method */
118-
class RestTemplatePostForLocation extends SpringRestTemplateUrlMethods {
119-
RestTemplatePostForLocation() {
120-
this.getDeclaringType() instanceof SpringRestTemplate and
121-
this.hasName("postForLocation")
122-
}
123-
124-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
125-
}
126-
127-
/** Models `RestTemplate` class's `postForObject` method */
128-
class RestTemplatePostForObject extends SpringRestTemplateUrlMethods {
129-
RestTemplatePostForObject() {
130-
this.getDeclaringType() instanceof SpringRestTemplate and
131-
this.hasName("postForObject")
132-
}
133-
134-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
135-
}
136-
137-
/** Models `RestTemplate` class's `put` method */
138-
class RestTemplatePut extends SpringRestTemplateUrlMethods {
139-
RestTemplatePut() {
140-
this.getDeclaringType() instanceof SpringRestTemplate and
141-
this.hasName("put")
142-
}
143-
144-
override Argument getUrlArgument(MethodAccess ma) { result = ma.getArgument(0) }
145-
}

0 commit comments

Comments
 (0)