Skip to content

Commit 83b183a

Browse files
「Request parameters are invalid」が出た時に、どのパラメータが悪いのかを知らせるようにした。
1 parent da347f4 commit 83b183a

9 files changed

Lines changed: 42 additions & 9 deletions

File tree

dConnectDevicePlugin/dConnectDevicePluginSDK/dconnect-device-plugin-sdk/src/main/java/org/deviceconnect/android/profile/AuthorizationProfile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private void createClient(final Intent request, final Intent response) {
181181
String packageName = request.getStringExtra(AuthorizationProfile.PARAM_PACKAGE);
182182
String serviceId = request.getStringExtra(DConnectProfile.PARAM_SERVICE_ID);
183183
if (packageName == null) {
184-
MessageUtils.setInvalidRequestParameterError(response);
184+
MessageUtils.setInvalidRequestParameterError(response, "Request parameters are invalid, PackageName is null.");
185185
} else {
186186
// Local OAuthでクライアント作成
187187
PackageInfoOAuth packageInfo = new PackageInfoOAuth(packageName, serviceId);

dConnectDevicePlugin/dConnectDevicePluginSDK/dconnect-device-plugin-sdk/src/main/java/org/deviceconnect/android/profile/DConnectProfile.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.content.Intent;
1212
import android.net.Uri;
1313
import android.os.Bundle;
14+
import android.util.Log;
1415

1516
import org.deviceconnect.android.event.Event;
1617
import org.deviceconnect.android.message.DevicePluginContext;
@@ -20,6 +21,7 @@
2021
import org.deviceconnect.android.profile.spec.OpenAPIValidator;
2122
import org.deviceconnect.android.profile.spec.models.Method;
2223
import org.deviceconnect.android.profile.spec.models.Swagger;
24+
import org.deviceconnect.android.profile.spec.models.parameters.Parameter;
2325
import org.deviceconnect.android.service.DConnectService;
2426
import org.deviceconnect.message.DConnectMessage;
2527
import org.deviceconnect.message.intent.message.IntentDConnectMessage;
@@ -245,7 +247,36 @@ private boolean validateRequest(final Intent request) {
245247
}
246248
return true;
247249
}
248-
250+
/**
251+
* 不正なリクエストパラメータを返します.
252+
*
253+
* @param request リクエスト
254+
* @return 不正なリクエストパラメータ
255+
*/
256+
private String getInvalidParameter(final Intent request) {
257+
DConnectService service = getService();
258+
StringBuilder builder = new StringBuilder();
259+
if (service != null) {
260+
DConnectServiceSpec spec = service.getServiceSpec();
261+
if (spec != null) {
262+
Swagger swagger = spec.findProfileSpec(getProfile(request));
263+
if (swagger != null) {
264+
Bundle extras = request.getExtras();
265+
if (extras == null) {
266+
return builder.toString();
267+
}
268+
List<Parameter> parameters = OpenAPIValidator.findParameters(swagger, request);
269+
for (Parameter parameter : parameters) {
270+
Object value = extras.get(parameter.getName());
271+
if (!OpenAPIValidator.validate(parameter, value)) {
272+
builder.append(parameter.getName()).append(",");
273+
}
274+
}
275+
}
276+
}
277+
}
278+
return builder.toString();
279+
}
249280
/**
250281
* RESPONSEメソッドハンドラー.
251282
*
@@ -262,8 +293,10 @@ public boolean onRequest(final Intent request, final Intent response) {
262293
DConnectApi api = findApi(request);
263294
if (api != null) {
264295
if (!validateRequest(request)) {
296+
String invalidDetails = getInvalidParameter(request);
297+
invalidDetails = invalidDetails.substring(0, invalidDetails.length() - 1);
265298
// API 定義ファイルでパラメータエラーとなった
266-
MessageUtils.setInvalidRequestParameterError(response);
299+
MessageUtils.setInvalidRequestParameterError(response, "Request parameters are invalid: " + invalidDetails);
267300
return true;
268301
}
269302
return api.onRequest(request, response);

dConnectDevicePlugin/dConnectDevicePluginSDK/dconnect-device-plugin-sdk/src/main/java/org/deviceconnect/android/profile/spec/OpenAPIValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static boolean validate(Swagger swagger, Intent request) {
8686
* @param request リクエスト
8787
* @return パラメータの仕様リスト
8888
*/
89-
private static List<Parameter> findParameters(Swagger swagger, Intent request) {
89+
public static List<Parameter> findParameters(Swagger swagger, Intent request) {
9090
List<Parameter> parameters = new ArrayList<>();
9191

9292
Operation operation = DConnectServiceSpec.findOperationSpec(swagger, request);
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a2412e743ca5812340bd64b8114437a1
1+
43049bdb12241666dbb769c8ddfa6e47
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
02c4b295217acf7056755b1fc55a8bb7f2adb197
1+
98fc6f3802be34c44454d2c9adcf96dcab1458aa

dConnectDevicePlugin/dConnectDevicePluginSDK/repository/org/deviceconnect/dconnect-device-plugin-sdk/maven-metadata.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@
3333
<version>2.8.3</version>
3434
<version>2.8.4</version>
3535
</versions>
36-
<lastUpdated>20200319010010</lastUpdated>
36+
<lastUpdated>20200319023902</lastUpdated>
3737
</versioning>
3838
</metadata>
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
45002959e18e7f2c2b30a7a7d416b6c1
1+
03db08542af8f2c7725ca9a5672051c4
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d19269be404c42bbefaa09ac115a30759a72ab14
1+
f38f6beee3471babb02a3356053dc21d21bb51e8

0 commit comments

Comments
 (0)