throw correct exception if target address violates rfc standard

Signed-off-by: Michael Hirsch <michael.hirsch@bosch-si.com>
This commit is contained in:
Michael Hirsch
2016-06-21 16:36:01 +02:00
parent 2e23ed3871
commit bf1ca010c7
4 changed files with 83 additions and 55 deletions

View File

@@ -24,82 +24,73 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", "The given entity already exists in database"),
"The given entity already exists in database"),
/**
*
*/
SP_REPO_INVALID_TARGET_ADDRESS("hawkbit.server.error.repo.invalidTargetAddress", "The target address is not well formed"),
/** /**
* *
*/ */
SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound", SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound", "The given entity does not exist in database"),
"The given entity does not exist in database"),
/** /**
* *
*/ */
SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification", SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification", "The given entity has been changed by another user/session"),
"The given entity has been changed by another user/session"),
/** /**
* *
*/ */
SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax", SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax", "The given sort paramter is not well formed"),
"The given sort paramter is not well formed"),
/** /**
* *
*/ */
SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", "The given search paramter is not well formed"),
"The given search paramter is not well formed"),
/** /**
* *
*/ */
SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", "The given search parameter field does not exist"),
"The given search parameter field does not exist"),
/** /**
* *
*/ */
SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", "The given sort parameter field does not exist"),
"The given sort parameter field does not exist"),
/** /**
* *
*/ */
SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", "The given sort parameter direction does not exist"),
"The given sort parameter direction does not exist"),
/** /**
* *
*/ */
SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", "The given request body is not well formed"),
"The given request body is not well formed"),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed", SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed", "Upload of artifact failed with internal server error."),
"Upload of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", "Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."),
"Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", "Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."),
"Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."),
/** /**
* *
*/ */
SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", "Creation if Distribution Set failed as module is missing that is configured as mandatory."),
"Creation if Distribution Set failed as module is missing that is configured as mandatory."),
/** /**
* *
*/ */
SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", "Upload of artifact failed as the file exceeds its maximum permitted size"),
"Upload of artifact failed as the file exceeds its maximum permitted size"),
/** /**
* *
*/ */
@@ -108,63 +99,53 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", "Deletion of artifact failed with internal server error."),
"Deletion of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", "Load of artifact failed with internal server error."),
"Load of artifact failed with internal server error."),
/** /**
* *
*/ */
SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", "Too many status entries have been inserted."),
"Too many status entries have been inserted."),
/** /**
* *
*/ */
SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", "Too many attribute entries have been inserted."),
"Too many attribute entries have been inserted."),
/** /**
* error message, which describes that the action can not be canceled cause * error message, which describes that the action can not be canceled cause
* the action is inactive. * the action is inactive.
*/ */
SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", "Only active actions which are in status pending are canceable."),
"Only active actions which are in status pending are canceable."),
/** /**
* error message, which describes that the action can not be force quit * error message, which describes that the action can not be force quit
* cause the action is inactive. * cause the action is inactive.
*/ */
SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", "Only active actions which are in status pending can be force quit."),
"Only active actions which are in status pending can be force quit."),
/** /**
* *
*/ */
SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", "Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"),
"Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"),
/** /**
* *
*/ */
SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", "Distribution set type is not yet defined. Modules cannot be added until definition."),
"Distribution set type is not yet defined. Modules cannot be added until definition."),
/** /**
* *
*/ */
SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", "Distribution set type does not contain the given module, i.e. is incompatible."),
"Distribution set type does not contain the given module, i.e. is incompatible."),
/** /**
* *
*/ */
SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", "The entity cannot be inserted due the tenant does not exists"),
"The entity cannot be inserted due the tenant does not exists"),
/** /**
* *
@@ -174,14 +155,12 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", "The given entity is read only and the change cannot be completed."),
"The given entity is read only and the change cannot be completed."),
/** /**
* *
*/ */
SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", "The given configuration value is invalid."),
"The given configuration value is invalid."),
/** /**
* *
*/ */
@@ -190,8 +169,7 @@ public enum SpServerError {
/** /**
* *
*/ */
SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", "The rollout is currently in the wrong state for the current operation");
"The rollout is currently in the wrong state for the current operation");
private final String key; private final String key;
private final String message; private final String message;

View File

@@ -0,0 +1,42 @@
/**
* Copyright (c) 2015 Bosch Software Innovations GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.hawkbit.repository.exception;
import org.eclipse.hawkbit.exception.SpServerError;
import org.eclipse.hawkbit.exception.SpServerRtException;
/**
* Exception which is thrown when trying to set an invalid target address.
*/
public class InvalidTargetAddressException extends SpServerRtException {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param message
* the message for this exception
*/
public InvalidTargetAddressException(final String message) {
super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS);
}
/**
*
* @param message
* the message for this exception
* @param cause
* the cause for this exception
*/
public InvalidTargetAddressException(final String message, final Throwable cause) {
super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, cause);
}
}

View File

@@ -37,6 +37,7 @@ import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import org.eclipse.hawkbit.repository.exception.InvalidTargetAddressException;
import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder;
import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder;
import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet;
@@ -173,10 +174,16 @@ public class JpaTargetInfo implements Persistable<Long>, TargetInfo {
* @throws IllegalArgumentException * @throws IllegalArgumentException
* If the given string violates RFC&nbsp;2396 * If the given string violates RFC&nbsp;2396
*/ */
@Override
public void setAddress(final String address) { public void setAddress(final String address) {
// check if this is a real URI // check if this is a real URI
if (address != null) { if (address != null) {
URI.create(address); try {
URI.create(address);
} catch (final IllegalArgumentException e) {
throw new InvalidTargetAddressException(
"The given address " + address + " violates the RFC-2396 specification", e);
}
} }
this.address = address; this.address = address;

View File

@@ -67,6 +67,7 @@ public class ResponseExceptionHandler {
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_ROLLOUT_ILLEGAL_STATE, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_ROLLOUT_ILLEGAL_STATE, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_VALUE_INVALID, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_VALUE_INVALID, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_KEY_INVALID, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_KEY_INVALID, HttpStatus.BAD_REQUEST);
ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, HttpStatus.BAD_REQUEST);
} }
private static HttpStatus getStatusOrDefault(final SpServerError error) { private static HttpStatus getStatusOrDefault(final SpServerError error) {