mirror of https://github.com/apache/archiva.git
Implementing V2 REST service
This commit is contained in:
parent
b97724c6a7
commit
069783fb77
|
@ -49,6 +49,10 @@ public class EntityNotFoundException extends RepositoryAdminException
|
|||
return new EntityNotFoundException( message, parameters );
|
||||
}
|
||||
|
||||
public static EntityNotFoundException ofMessage(String message, String... parameters) {
|
||||
return new EntityNotFoundException( message, parameters );
|
||||
}
|
||||
|
||||
public EntityNotFoundException( String s, String... parameters )
|
||||
{
|
||||
super( s );
|
||||
|
|
|
@ -26,6 +26,9 @@ import java.util.Locale;
|
|||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* Base exception class for the admin interfaces. Exceptions should set keys that allows identifying and classifying the error.
|
||||
*
|
||||
* @author Olivier Lamy
|
||||
* @since 1.4-M1
|
||||
*/
|
||||
|
@ -54,7 +57,18 @@ public class RepositoryAdminException
|
|||
*/
|
||||
String[] parameters = new String[0];
|
||||
|
||||
protected static String getMessage( String key, String[] params )
|
||||
{
|
||||
return MessageFormat.format( bundle.getString( key ), params );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to retrieve a message from the bundle for the given key and returns the
|
||||
* exception.
|
||||
* @param key the identifier of the error
|
||||
* @param params parameters for translating the message
|
||||
* @return the exception
|
||||
*/
|
||||
public static RepositoryAdminException ofKey(String key, String... params) {
|
||||
String message = getMessage( key, params );
|
||||
RepositoryAdminException ex = new RepositoryAdminException( message );
|
||||
|
@ -63,11 +77,14 @@ public class RepositoryAdminException
|
|||
return ex;
|
||||
}
|
||||
|
||||
protected static String getMessage( String key, String[] params )
|
||||
{
|
||||
return MessageFormat.format( bundle.getString( key ), params );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to retrieve a message from the bundle for the given key and returns the
|
||||
* exception.
|
||||
* @param key the identifier of the error
|
||||
* @param cause the exception that caused the error
|
||||
* @param params parameters for translating the message
|
||||
* @return the exception
|
||||
*/
|
||||
public static RepositoryAdminException ofKey(String key, Throwable cause, String... params) {
|
||||
String message = getMessage( key, params );
|
||||
RepositoryAdminException ex = new RepositoryAdminException( message, cause );
|
||||
|
@ -77,6 +94,14 @@ public class RepositoryAdminException
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tries to retrieve a message from the bundle for the given key and the given field and returns the
|
||||
* exception.
|
||||
* @param key the identifier of the error
|
||||
* @param fieldName the field this exception is for
|
||||
* @param params parameters for translating the message
|
||||
* @return the exception
|
||||
*/
|
||||
public static RepositoryAdminException ofKeyAndField(String key, String fieldName, String... params) {
|
||||
String message = getMessage( key, params );
|
||||
RepositoryAdminException ex = new RepositoryAdminException( message, fieldName );
|
||||
|
@ -85,6 +110,15 @@ public class RepositoryAdminException
|
|||
return ex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to retrieve a message from the bundle for the given key and the given field and returns the
|
||||
* exception.
|
||||
* @param key the identifier of the error
|
||||
* @param fieldName the field this exception is for
|
||||
* @param cause the exception that caused this error
|
||||
* @param params parameters for translating the message
|
||||
* @return the exception
|
||||
*/
|
||||
public static RepositoryAdminException ofKeyAndField(String key, Throwable cause, String fieldName, String... params) {
|
||||
String message = getMessage( key, params );
|
||||
RepositoryAdminException ex = new RepositoryAdminException( message, cause, fieldName );
|
||||
|
|
|
@ -51,7 +51,7 @@ public class RepositoryGroup
|
|||
/**
|
||||
* The TTL (time to live) of the repo group's merged index.
|
||||
*/
|
||||
private int mergedIndexTtl = 30;
|
||||
private int mergedIndexTtl = -1;
|
||||
|
||||
/**
|
||||
* default model value is empty so none
|
||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.archiva.admin.model.group;
|
|||
*/
|
||||
|
||||
import org.apache.archiva.admin.model.AuditInformation;
|
||||
import org.apache.archiva.admin.model.EntityExistsException;
|
||||
import org.apache.archiva.admin.model.EntityNotFoundException;
|
||||
import org.apache.archiva.admin.model.RepositoryAdminException;
|
||||
import org.apache.archiva.admin.model.beans.RepositoryGroup;
|
||||
|
@ -28,6 +29,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Methods for administering repository groups (virtual repositories)
|
||||
* @author Olivier Lamy
|
||||
* @since 1.4-M1
|
||||
*/
|
||||
|
@ -57,8 +59,19 @@ public interface RepositoryGroupAdmin
|
|||
Boolean deleteRepositoryGroup( String repositoryGroupId, AuditInformation auditInformation )
|
||||
throws RepositoryAdminException;
|
||||
|
||||
/**
|
||||
* Adds the given managed repository to the repository group.
|
||||
*
|
||||
* @param repositoryGroupId the id of the repository group
|
||||
* @param repositoryId the id of the managed repository
|
||||
* @param auditInformation audit information
|
||||
* @return <code>true</code>, if the repository was added, otherwise <code>false</code>
|
||||
* @throws RepositoryAdminException If an error occurred , while adding the group.
|
||||
* @throws EntityNotFoundException If the repository group or the managed repository with the given id does not exist
|
||||
* @throws EntityExistsException If the managed repository is already member of the group
|
||||
*/
|
||||
Boolean addRepositoryToGroup( String repositoryGroupId, String repositoryId, AuditInformation auditInformation )
|
||||
throws RepositoryAdminException;
|
||||
throws RepositoryAdminException, EntityNotFoundException, EntityExistsException;
|
||||
|
||||
Boolean deleteRepositoryFromGroup( String repositoryGroupId, String repositoryId,
|
||||
AuditInformation auditInformation )
|
||||
|
|
|
@ -25,3 +25,4 @@ repository_group.merged_index_ttl.min=Merged Index TTL must be greater than {0}.
|
|||
repository_group.repository.not_found=The member repository with id "{0}" does not exist. Cannot be used in a repository group.
|
||||
repository_group.registry.add_error=The registry could not add the repository "{0}": {1}
|
||||
repository_group.registry.update_error=The registry could not update the repository "{0}": {1}
|
||||
repository_group.not_editable=The repository group "{0}" is not editable
|
||||
|
|
|
@ -229,22 +229,22 @@ public class DefaultRepositoryGroupAdmin
|
|||
org.apache.archiva.repository.RepositoryGroup repositoryGroup = repositoryRegistry.getRepositoryGroup( repositoryGroupId );
|
||||
if ( repositoryGroup == null )
|
||||
{
|
||||
throw new RepositoryAdminException(
|
||||
"repositoryGroup with id " + repositoryGroupId + " doesn't not exists so cannot add repository to it" );
|
||||
throw EntityNotFoundException.ofMessage(
|
||||
"Repository group with id " + repositoryGroupId + " doesn't not exists so cannot add repository to it", repositoryGroupId );
|
||||
}
|
||||
|
||||
if (!(repositoryGroup instanceof EditableRepositoryGroup)) {
|
||||
throw new RepositoryAdminException("The repository group is not editable "+repositoryGroupId);
|
||||
throw RepositoryAdminException.ofKey("repository_group.not_editable",repositoryGroupId);
|
||||
}
|
||||
EditableRepositoryGroup editableRepositoryGroup = (EditableRepositoryGroup) repositoryGroup;
|
||||
if ( editableRepositoryGroup.getRepositories().stream().anyMatch( repo -> repositoryId.equals(repo.getId())) )
|
||||
{
|
||||
throw new RepositoryAdminException(
|
||||
"repositoryGroup with id " + repositoryGroupId + " already contain repository with id" + repositoryId );
|
||||
throw new EntityExistsException(
|
||||
"Repository group with id " + repositoryGroupId + " already contain repository with id" + repositoryId );
|
||||
}
|
||||
org.apache.archiva.repository.ManagedRepository managedRepo = repositoryRegistry.getManagedRepository(repositoryId);
|
||||
if (managedRepo==null) {
|
||||
throw new RepositoryAdminException("Repository with id "+repositoryId+" does not exist" );
|
||||
throw EntityNotFoundException.ofMessage("Repository with id "+repositoryId+" does not exist", repositoryId );
|
||||
}
|
||||
|
||||
editableRepositoryGroup.addRepository( managedRepo );
|
||||
|
@ -265,19 +265,20 @@ public class DefaultRepositoryGroupAdmin
|
|||
org.apache.archiva.repository.RepositoryGroup repositoryGroup = repositoryRegistry.getRepositoryGroup( repositoryGroupId );
|
||||
if ( repositoryGroup == null )
|
||||
{
|
||||
throw new RepositoryAdminException( "repositoryGroup with id " + repositoryGroupId
|
||||
+ " doesn't not exists so cannot remove repository from it" );
|
||||
throw EntityNotFoundException.ofMessage( "Repository group with id " + repositoryGroupId
|
||||
+ " doesn't not exists so cannot remove repository from it", repositoryGroupId );
|
||||
}
|
||||
|
||||
if ( !repositoryGroup.getRepositories().stream().anyMatch( repo -> repositoryId.equals(repo.getId()) ) )
|
||||
{
|
||||
throw new RepositoryAdminException(
|
||||
throw EntityNotFoundException.ofMessage(
|
||||
"repositoryGroup with id " + repositoryGroupId + " doesn't not contains repository with id"
|
||||
+ repositoryId
|
||||
+ repositoryId, repositoryId
|
||||
);
|
||||
}
|
||||
|
||||
if (!(repositoryGroup instanceof EditableRepositoryGroup)) {
|
||||
throw new RepositoryAdminException("Repository group is not editable " + repositoryGroupId);
|
||||
throw RepositoryAdminException.ofKey("repository_group.not_editable",repositoryGroupId);
|
||||
}
|
||||
EditableRepositoryGroup editableRepositoryGroup = (EditableRepositoryGroup) repositoryGroup;
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ public interface RepositoryGroupService
|
|||
PagedResult<RepositoryGroup> getRepositoriesGroups(@QueryParam("q") @DefaultValue( "" ) String searchTerm,
|
||||
@QueryParam( "offset" ) @DefaultValue( "0" ) Integer offset,
|
||||
@QueryParam( "limit" ) @DefaultValue( value = DEFAULT_PAGE_LIMIT ) Integer limit,
|
||||
@QueryParam( "orderBy") @DefaultValue( "key" ) List<String> orderBy,
|
||||
@QueryParam( "orderBy") @DefaultValue( "id" ) List<String> orderBy,
|
||||
@QueryParam("order") @DefaultValue( "asc" ) String order)
|
||||
throws ArchivaRestServiceException;
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ import org.apache.archiva.admin.model.EntityNotFoundException;
|
|||
import org.apache.archiva.admin.model.RepositoryAdminException;
|
||||
import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;
|
||||
import org.apache.archiva.components.rest.model.PagedResult;
|
||||
import org.apache.archiva.components.rest.util.PagingHelper;
|
||||
import org.apache.archiva.components.rest.util.QueryHelper;
|
||||
import org.apache.archiva.redback.rest.services.RedbackAuthenticationThreadLocal;
|
||||
import org.apache.archiva.redback.rest.services.RedbackRequestInformation;
|
||||
|
@ -34,6 +33,7 @@ import org.apache.archiva.rest.api.services.v2.RepositoryGroupService;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -50,9 +50,10 @@ import java.util.stream.Collectors;
|
|||
* REST V2 Implementation for repository groups.
|
||||
*
|
||||
* @author Martin Stockhammer <martin_s@apache.org>
|
||||
* @since 3.0
|
||||
* @see RepositoryGroupService
|
||||
* @since 3.0
|
||||
*/
|
||||
@Service("v2.repositoryGroupService#rest")
|
||||
public class DefaultRepositoryGroupService implements RepositoryGroupService
|
||||
{
|
||||
@Context
|
||||
|
@ -63,8 +64,7 @@ public class DefaultRepositoryGroupService implements RepositoryGroupService
|
|||
|
||||
private static final Logger log = LoggerFactory.getLogger( DefaultRepositoryGroupService.class );
|
||||
|
||||
private static final QueryHelper<org.apache.archiva.admin.model.beans.RepositoryGroup> QUERY_HELPER = new QueryHelper( new String[]{"id"} );
|
||||
private static final PagingHelper PROP_PAGING_HELPER = new PagingHelper( );
|
||||
private static final QueryHelper<org.apache.archiva.admin.model.beans.RepositoryGroup> QUERY_HELPER = new QueryHelper<>( new String[]{"id"} );
|
||||
|
||||
@Inject
|
||||
private RepositoryGroupAdmin repositoryGroupAdmin;
|
||||
|
@ -77,11 +77,11 @@ public class DefaultRepositoryGroupService implements RepositoryGroupService
|
|||
}
|
||||
|
||||
|
||||
protected AuditInformation getAuditInformation()
|
||||
protected AuditInformation getAuditInformation( )
|
||||
{
|
||||
RedbackRequestInformation redbackRequestInformation = RedbackAuthenticationThreadLocal.get();
|
||||
User user = redbackRequestInformation == null ? null : redbackRequestInformation.getUser();
|
||||
String remoteAddr = redbackRequestInformation == null ? null : redbackRequestInformation.getRemoteAddr();
|
||||
RedbackRequestInformation redbackRequestInformation = RedbackAuthenticationThreadLocal.get( );
|
||||
User user = redbackRequestInformation == null ? null : redbackRequestInformation.getUser( );
|
||||
String remoteAddr = redbackRequestInformation == null ? null : redbackRequestInformation.getRemoteAddr( );
|
||||
return new AuditInformation( user, remoteAddr );
|
||||
}
|
||||
|
||||
|
@ -101,8 +101,10 @@ public class DefaultRepositoryGroupService implements RepositoryGroupService
|
|||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
log.error( "Repository admin error: {}", e.getMessage( ), e );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage() ) );
|
||||
} catch ( ArithmeticException e ) {
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage( ) ) );
|
||||
}
|
||||
catch ( ArithmeticException e )
|
||||
{
|
||||
log.error( "Could not convert total count: {}", e.getMessage( ) );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.INVALID_RESULT_SET_ERROR ) );
|
||||
}
|
||||
|
@ -112,28 +114,34 @@ public class DefaultRepositoryGroupService implements RepositoryGroupService
|
|||
@Override
|
||||
public RepositoryGroup getRepositoryGroup( String repositoryGroupId ) throws ArchivaRestServiceException
|
||||
{
|
||||
if ( StringUtils.isEmpty( repositoryGroupId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
try
|
||||
{
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup group = repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId );
|
||||
return RepositoryGroup.of( group );
|
||||
}
|
||||
catch ( EntityNotFoundException e ) {
|
||||
catch ( EntityNotFoundException e )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage() ));
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage( ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
private org.apache.archiva.admin.model.beans.RepositoryGroup toModel( RepositoryGroup group) {
|
||||
private org.apache.archiva.admin.model.beans.RepositoryGroup toModel( RepositoryGroup group )
|
||||
{
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup result = new org.apache.archiva.admin.model.beans.RepositoryGroup( );
|
||||
result.setId( group.getId( ) );
|
||||
result.setLocation( group.getLocation( ) );
|
||||
result.setRepositories( new ArrayList<>( group.getRepositories( ) ) );
|
||||
result.setMergedIndexPath( group.getMergeConfiguration().getMergedIndexPath() );
|
||||
result.setMergedIndexTtl( group.getMergeConfiguration().getMergedIndexTtlMinutes() );
|
||||
result.setCronExpression( group.getMergeConfiguration().getIndexMergeSchedule() );
|
||||
result.setMergedIndexPath( group.getMergeConfiguration( ).getMergedIndexPath( ) );
|
||||
result.setMergedIndexTtl( group.getMergeConfiguration( ).getMergedIndexTtlMinutes( ) );
|
||||
result.setCronExpression( group.getMergeConfiguration( ).getIndexMergeSchedule( ) );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -143,72 +151,203 @@ public class DefaultRepositoryGroupService implements RepositoryGroupService
|
|||
try
|
||||
{
|
||||
Boolean result = repositoryGroupAdmin.addRepositoryGroup( toModel( repositoryGroup ), getAuditInformation( ) );
|
||||
if (result) {
|
||||
if ( result )
|
||||
{
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup newGroup = repositoryGroupAdmin.getRepositoryGroup( repositoryGroup.getId( ) );
|
||||
if (newGroup!=null) {
|
||||
if ( newGroup != null )
|
||||
{
|
||||
return RepositoryGroup.of( newGroup );
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_ADD_FAILED ) );
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_ADD_FAILED ) );
|
||||
}
|
||||
} catch ( EntityExistsException e ) {
|
||||
httpServletResponse.setHeader( "Location", uriInfo.getAbsolutePathBuilder( ).path( repositoryGroup.getId() ).build( ).toString( ) );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_EXIST, repositoryGroup.getId( )), 303 );
|
||||
}
|
||||
catch ( EntityExistsException e )
|
||||
{
|
||||
httpServletResponse.setHeader( "Location", uriInfo.getAbsolutePathBuilder( ).path( repositoryGroup.getId( ) ).build( ).toString( ) );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_EXIST, repositoryGroup.getId( ) ), 303 );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
if (e.keyExists()) {
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.PREFIX+e.getKey(), e.getParameters() ) );
|
||||
} else
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage( ) ) );
|
||||
}
|
||||
return handleAdminException( e );
|
||||
}
|
||||
}
|
||||
|
||||
private RepositoryGroup handleAdminException( RepositoryAdminException e ) throws ArchivaRestServiceException
|
||||
{
|
||||
log.error( "Repository admin error: {}", e.getMessage( ), e );
|
||||
if ( e.keyExists( ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.PREFIX + e.getKey( ), e.getParameters( ) ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage( ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RepositoryGroup updateRepositoryGroup( String groupId, RepositoryGroup repositoryGroup ) throws ArchivaRestServiceException
|
||||
public RepositoryGroup updateRepositoryGroup( String repositoryGroupId, RepositoryGroup repositoryGroup ) throws ArchivaRestServiceException
|
||||
{
|
||||
if ( StringUtils.isEmpty( repositoryGroupId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup updateGroup = toModel( repositoryGroup );
|
||||
try
|
||||
{
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup originGroup = repositoryGroupAdmin.getRepositoryGroup( groupId );
|
||||
if ( StringUtils.isEmpty( updateGroup.getId())) {
|
||||
updateGroup.setId( groupId );
|
||||
org.apache.archiva.admin.model.beans.RepositoryGroup originGroup = repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId );
|
||||
if ( StringUtils.isEmpty( updateGroup.getId( ) ) )
|
||||
{
|
||||
updateGroup.setId( repositoryGroupId );
|
||||
}
|
||||
if (StringUtils.isEmpty( updateGroup.getLocation() )) {
|
||||
updateGroup.setLocation( originGroup.getLocation() );
|
||||
if ( StringUtils.isEmpty( updateGroup.getLocation( ) ) )
|
||||
{
|
||||
updateGroup.setLocation( originGroup.getLocation( ) );
|
||||
}
|
||||
if (StringUtils.isEmpty( updateGroup.getMergedIndexPath() )) {
|
||||
updateGroup.setMergedIndexPath( originGroup.getMergedIndexPath() );
|
||||
if ( StringUtils.isEmpty( updateGroup.getMergedIndexPath( ) ) )
|
||||
{
|
||||
updateGroup.setMergedIndexPath( originGroup.getMergedIndexPath( ) );
|
||||
}
|
||||
if ( updateGroup.getCronExpression( ) == null )
|
||||
{
|
||||
updateGroup.setCronExpression( originGroup.getCronExpression( ) );
|
||||
}
|
||||
if ( updateGroup.getRepositories( ) == null || updateGroup.getRepositories( ).size( ) == 0 )
|
||||
{
|
||||
updateGroup.setRepositories( originGroup.getRepositories( ) );
|
||||
}
|
||||
if ( updateGroup.getMergedIndexTtl( ) <= 0 )
|
||||
{
|
||||
updateGroup.setMergedIndexTtl( originGroup.getMergedIndexTtl( ) );
|
||||
}
|
||||
repositoryGroupAdmin.updateRepositoryGroup( updateGroup, getAuditInformation( ) );
|
||||
return RepositoryGroup.of( repositoryGroupAdmin.getRepositoryGroup( groupId ) );
|
||||
return RepositoryGroup.of( repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId ) );
|
||||
}
|
||||
catch ( EntityNotFoundException e )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
log.error( "Repository admin error: {}", e.getMessage( ), e );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_ADMIN_ERROR, e.getMessage( ) ) );
|
||||
return handleAdminException( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response deleteRepositoryGroup( String repositoryGroupId ) throws ArchivaRestServiceException
|
||||
{
|
||||
return null;
|
||||
if ( StringUtils.isEmpty( repositoryGroupId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
try
|
||||
{
|
||||
Boolean deleted = repositoryGroupAdmin.deleteRepositoryGroup( repositoryGroupId, getAuditInformation( ) );
|
||||
if ( !deleted )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_DELETE_FAILED ) );
|
||||
}
|
||||
return Response.ok( ).build( );
|
||||
}
|
||||
catch ( EntityNotFoundException e )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
handleAdminException( e );
|
||||
// cannot happen:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RepositoryGroup addRepositoryToGroup( String repositoryGroupId, String repositoryId ) throws ArchivaRestServiceException
|
||||
{
|
||||
return null;
|
||||
if ( StringUtils.isEmpty( repositoryGroupId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
if ( StringUtils.isEmpty( repositoryId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
try
|
||||
{
|
||||
repositoryGroupAdmin.addRepositoryToGroup( repositoryGroupId, repositoryId, getAuditInformation( ) );
|
||||
return RepositoryGroup.of( repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId ) );
|
||||
}
|
||||
catch ( EntityNotFoundException e )
|
||||
{
|
||||
return handleNotFoundException( repositoryGroupId, repositoryId, e );
|
||||
}
|
||||
catch ( EntityExistsException e )
|
||||
{
|
||||
// This is thrown, if the repositoryId is already assigned to the group. We ignore this for the PUT action (nothing to do).
|
||||
try
|
||||
{
|
||||
return RepositoryGroup.of( repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId ) );
|
||||
}
|
||||
catch ( RepositoryAdminException repositoryAdminException )
|
||||
{
|
||||
return handleAdminException( e );
|
||||
}
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
return handleAdminException( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RepositoryGroup deleteRepositoryFromGroup( String repositoryGroupId, String repositoryId ) throws org.apache.archiva.rest.api.services.v2.ArchivaRestServiceException
|
||||
{
|
||||
return null;
|
||||
if ( StringUtils.isEmpty( repositoryGroupId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
if ( StringUtils.isEmpty( repositoryId ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_NOT_EXIST, "" ), 404 );
|
||||
}
|
||||
try
|
||||
{
|
||||
repositoryGroupAdmin.deleteRepositoryFromGroup( repositoryGroupId, repositoryId, getAuditInformation( ) );
|
||||
return RepositoryGroup.of( repositoryGroupAdmin.getRepositoryGroup( repositoryGroupId ) );
|
||||
}
|
||||
catch ( EntityNotFoundException e )
|
||||
{
|
||||
return handleNotFoundException( repositoryGroupId, repositoryId, e );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
return handleAdminException( e );
|
||||
}
|
||||
}
|
||||
|
||||
protected RepositoryGroup handleNotFoundException( String repositoryGroupId, String repositoryId, EntityNotFoundException e ) throws ArchivaRestServiceException
|
||||
{
|
||||
if ( e.getParameters( ).length > 0 )
|
||||
{
|
||||
if ( repositoryGroupId.equals( e.getParameters( )[0] ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
else if ( repositoryId.equals( e.getParameters( )[0] ) )
|
||||
{
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
}
|
||||
log.warn( "Entity not found but neither group nor repo set in exception" );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( ErrorKeys.REPOSITORY_GROUP_NOT_EXIST, repositoryGroupId ), 404 );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -19,10 +19,8 @@ package org.apache.archiva.rest.services.v2;/*
|
|||
import org.apache.archiva.admin.model.RepositoryAdminException;
|
||||
import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
|
||||
import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
|
||||
import org.apache.archiva.components.cache.Cache;
|
||||
import org.apache.archiva.components.rest.model.PagedResult;
|
||||
import org.apache.archiva.components.rest.model.PropertyEntry;
|
||||
import org.apache.archiva.components.rest.util.PagingHelper;
|
||||
import org.apache.archiva.components.rest.util.QueryHelper;
|
||||
import org.apache.archiva.redback.authentication.Authenticator;
|
||||
import org.apache.archiva.redback.common.ldap.connection.LdapConnection;
|
||||
|
@ -83,10 +81,9 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
private static final Logger log = LoggerFactory.getLogger( DefaultSecurityConfigurationService.class );
|
||||
|
||||
private static final String[] KNOWN_LDAP_CONTEXT_PROVIDERS = {"com.sun.jndi.ldap.LdapCtxFactory","com.ibm.jndi.LDAPCtxFactory"};
|
||||
private List<String> availableContextProviders = new ArrayList<>( );
|
||||
private final List<String> availableContextProviders = new ArrayList<>( );
|
||||
|
||||
private static final QueryHelper<PropertyEntry> PROP_QUERY_HELPER = new QueryHelper( new String[]{"key"} );
|
||||
private static final PagingHelper PROP_PAGING_HELPER = new PagingHelper( );
|
||||
private static final QueryHelper<PropertyEntry> PROP_QUERY_HELPER = new QueryHelper<>( new String[]{"key"} );
|
||||
|
||||
static
|
||||
{
|
||||
|
@ -124,10 +121,6 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
@Inject
|
||||
private LdapUserMapper ldapUserMapper;
|
||||
|
||||
@Inject
|
||||
@Named( value = "cache#users" )
|
||||
private Cache usersCache;
|
||||
|
||||
|
||||
@PostConstruct
|
||||
void init( )
|
||||
|
@ -215,23 +208,10 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
boolean userManagerChanged = !CollectionUtils.isEqualCollection( newConfiguration.getActiveUserManagers( ), conf.getUserManagerImpls( ) );
|
||||
boolean rbacManagerChanged = !CollectionUtils.isEqualCollection( newConfiguration.getActiveRbacManagers( ), conf.getRbacManagerImpls( ) );
|
||||
|
||||
boolean ldapConfigured = false;
|
||||
for ( String um : newConfiguration.getActiveUserManagers( ) )
|
||||
{
|
||||
if ( um.contains( "ldap" ) )
|
||||
{
|
||||
ldapConfigured = true;
|
||||
}
|
||||
}
|
||||
boolean ldapConfigured = newConfiguration.getActiveUserManagers( ).stream( ).anyMatch( um -> um.contains( "ldap" ) );
|
||||
if ( !ldapConfigured )
|
||||
{
|
||||
for ( String rbm : newConfiguration.getActiveRbacManagers( ) )
|
||||
{
|
||||
if ( rbm.contains( "ldap" ) )
|
||||
{
|
||||
ldapConfigured = true;
|
||||
}
|
||||
}
|
||||
ldapConfigured= newConfiguration.getActiveRbacManagers( ).stream( ).anyMatch( um -> um.contains( "ldap" ) );
|
||||
}
|
||||
|
||||
updateConfig( newConfiguration, conf );
|
||||
|
@ -347,7 +327,7 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
.collect( Collectors.toList( ) );
|
||||
return new PagedResult<>( totalCount, offset, limit, result );
|
||||
} catch (ArithmeticException e) {
|
||||
log.error( "The total count of the result properties is higher than max integer value! {}" );
|
||||
log.error( "The total count of the result properties is higher than max integer value!" );
|
||||
throw new ArchivaRestServiceException( ErrorMessage.of( INVALID_RESULT_SET_ERROR ) );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
|
@ -461,7 +441,7 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
|
||||
}
|
||||
|
||||
static final Properties toProperties( Map<String, String> values )
|
||||
static Properties toProperties( Map<String, String> values )
|
||||
{
|
||||
Properties result = new Properties( );
|
||||
for ( Map.Entry<String, String> entry : values.entrySet( ) )
|
||||
|
@ -471,7 +451,7 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
return result;
|
||||
}
|
||||
|
||||
private static final boolean isContextFactoryAvailable(final String factoryClass)
|
||||
private static boolean isContextFactoryAvailable( final String factoryClass)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -635,7 +615,7 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BeanInformation> getAvailableUserManagers( ) throws ArchivaRestServiceException
|
||||
public List<BeanInformation> getAvailableUserManagers( )
|
||||
{
|
||||
Map<String, UserManager> beans = applicationContext.getBeansOfType( UserManager.class );
|
||||
|
||||
|
@ -656,7 +636,7 @@ public class DefaultSecurityConfigurationService implements SecurityConfiguratio
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BeanInformation> getAvailableRbacManagers( ) throws ArchivaRestServiceException
|
||||
public List<BeanInformation> getAvailableRbacManagers( )
|
||||
{
|
||||
Map<String, RBACManager> beans = applicationContext.getBeansOfType( RBACManager.class );
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ public interface ErrorKeys
|
|||
|
||||
String PREFIX = "archiva.";
|
||||
String REPOSITORY_GROUP_PREFIX = PREFIX + "repository_group.";
|
||||
String REPOSITORY_PREFIX = PREFIX + "repository.";
|
||||
|
||||
String INVALID_RESULT_SET_ERROR = "archiva.result_set.invalid";
|
||||
String REPOSITORY_ADMIN_ERROR = "archiva.repositoryadmin.error";
|
||||
|
@ -49,4 +50,7 @@ public interface ErrorKeys
|
|||
String REPOSITORY_GROUP_ADD_FAILED = REPOSITORY_GROUP_PREFIX+"add.failed" ;
|
||||
String REPOSITORY_GROUP_EXIST = REPOSITORY_GROUP_PREFIX+"exists";
|
||||
|
||||
String REPOSITORY_GROUP_DELETE_FAILED = REPOSITORY_GROUP_PREFIX + "delete.failed";
|
||||
String REPOSITORY_NOT_EXIST = REPOSITORY_PREFIX + "notexist";
|
||||
|
||||
}
|
||||
|
|
|
@ -117,6 +117,7 @@
|
|||
|
||||
<jaxrs:serviceBeans>
|
||||
<ref bean="v2.defaultSecurityConfigurationService" />
|
||||
<ref bean="v2.repositoryGroupService#rest" />
|
||||
</jaxrs:serviceBeans>
|
||||
|
||||
<jaxrs:features>
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
package org.apache.archiva.rest.services.v2;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import io.restassured.response.Response;
|
||||
import org.apache.archiva.components.rest.model.PagedResult;
|
||||
import org.apache.archiva.components.rest.model.PropertyEntry;
|
||||
import org.apache.archiva.rest.api.model.v2.BeanInformation;
|
||||
import org.apache.archiva.rest.api.model.v2.CacheConfiguration;
|
||||
import org.apache.archiva.rest.api.model.v2.LdapConfiguration;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestInstance;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static io.restassured.RestAssured.given;
|
||||
import static io.restassured.http.ContentType.JSON;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* @author Martin Stockhammer <martin_s@apache.org>
|
||||
*/
|
||||
@TestInstance( TestInstance.Lifecycle.PER_CLASS )
|
||||
@Tag( "rest-native" )
|
||||
@TestMethodOrder( MethodOrderer.Random.class )
|
||||
@DisplayName( "Native REST tests for V2 RepositoryGroupService" )
|
||||
public class NativeRepositoryGroupServiceTest extends AbstractNativeRestServices
|
||||
{
|
||||
@Override
|
||||
protected String getServicePath( )
|
||||
{
|
||||
return "/repository_groups";
|
||||
}
|
||||
|
||||
@BeforeAll
|
||||
void setup( ) throws Exception
|
||||
{
|
||||
super.setupNative( );
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
void destroy( ) throws Exception
|
||||
{
|
||||
super.shutdownNative( );
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConfiguration() {
|
||||
String token = getAdminToken( );
|
||||
Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
|
||||
.when( )
|
||||
.get( "" )
|
||||
.prettyPeek()
|
||||
.then( ).statusCode( 200 ).extract( ).response( );
|
||||
assertNotNull( response );
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue