git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1166587 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.4-M1
@@ -0,0 +1,179 @@ | |||
package org.apache.archiva.rest.api.model; | |||
/* | |||
* 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 javax.xml.bind.annotation.XmlRootElement; | |||
import java.io.Serializable; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4 | |||
*/ | |||
@XmlRootElement( name = "networkProxy" ) | |||
public class NetworkProxy | |||
implements Serializable | |||
{ | |||
private String id; | |||
/** | |||
* The network protocol to use with this proxy: "http", "socks-4" | |||
* . | |||
*/ | |||
private String protocol = "http"; | |||
/** | |||
* The proxy host. | |||
*/ | |||
private String host; | |||
/** | |||
* The proxy port. | |||
*/ | |||
private int port = 8080; | |||
/** | |||
* The proxy user. | |||
*/ | |||
private String username; | |||
/** | |||
* The proxy password. | |||
*/ | |||
private String password; | |||
public NetworkProxy() | |||
{ | |||
// no op | |||
} | |||
public NetworkProxy( String id, String protocol, String host, int port, String username, String password ) | |||
{ | |||
this.id = id; | |||
this.protocol = protocol; | |||
this.host = host; | |||
this.port = port; | |||
this.username = username; | |||
this.password = password; | |||
} | |||
public String getId() | |||
{ | |||
return id; | |||
} | |||
public void setId( String id ) | |||
{ | |||
this.id = id; | |||
} | |||
public String getProtocol() | |||
{ | |||
return protocol; | |||
} | |||
public void setProtocol( String protocol ) | |||
{ | |||
this.protocol = protocol; | |||
} | |||
public String getHost() | |||
{ | |||
return host; | |||
} | |||
public void setHost( String host ) | |||
{ | |||
this.host = host; | |||
} | |||
public int getPort() | |||
{ | |||
return port; | |||
} | |||
public void setPort( int port ) | |||
{ | |||
this.port = port; | |||
} | |||
public String getUsername() | |||
{ | |||
return username; | |||
} | |||
public void setUsername( String username ) | |||
{ | |||
this.username = username; | |||
} | |||
public String getPassword() | |||
{ | |||
return password; | |||
} | |||
public void setPassword( String password ) | |||
{ | |||
this.password = password; | |||
} | |||
@Override | |||
public boolean equals( Object o ) | |||
{ | |||
if ( this == o ) | |||
{ | |||
return true; | |||
} | |||
if ( o == null || getClass() != o.getClass() ) | |||
{ | |||
return false; | |||
} | |||
NetworkProxy that = (NetworkProxy) o; | |||
if ( id != null ? !id.equals( that.id ) : that.id != null ) | |||
{ | |||
return false; | |||
} | |||
return true; | |||
} | |||
@Override | |||
public int hashCode() | |||
{ | |||
int result = 17; | |||
result = 37 * result + ( id != null ? id.hashCode() : 0 ); | |||
return result; | |||
} | |||
@Override | |||
public String toString() | |||
{ | |||
final StringBuilder sb = new StringBuilder(); | |||
sb.append( "NetworkProxy" ); | |||
sb.append( "{id='" ).append( id ).append( '\'' ); | |||
sb.append( ", protocol='" ).append( protocol ).append( '\'' ); | |||
sb.append( ", host='" ).append( host ).append( '\'' ); | |||
sb.append( ", port=" ).append( port ); | |||
sb.append( ", username='" ).append( username ).append( '\'' ); | |||
sb.append( ", password='" ).append( password ).append( '\'' ); | |||
sb.append( '}' ); | |||
return sb.toString(); | |||
} | |||
} |
@@ -0,0 +1,78 @@ | |||
package org.apache.archiva.rest.api.services; | |||
/* | |||
* 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 org.apache.archiva.admin.repository.RepositoryAdminException; | |||
import org.apache.archiva.rest.api.model.NetworkProxy; | |||
import org.apache.archiva.security.common.ArchivaRoleConstants; | |||
import org.codehaus.plexus.redback.authorization.RedbackAuthorization; | |||
import javax.ws.rs.Consumes; | |||
import javax.ws.rs.GET; | |||
import javax.ws.rs.POST; | |||
import javax.ws.rs.Path; | |||
import javax.ws.rs.PathParam; | |||
import javax.ws.rs.Produces; | |||
import javax.ws.rs.core.MediaType; | |||
import java.util.List; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4 | |||
*/ | |||
@Path( "/networkProxyService/" ) | |||
public interface NetworkProxyService | |||
{ | |||
@Path( "getNetworkProxies" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
List<NetworkProxy> getNetworkProxies() | |||
throws RepositoryAdminException; | |||
@Path( "getNetworkProxy/{networkProxyId}" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
NetworkProxy getNetworkProxy( @PathParam( "networkProxyId" ) String networkProxyId ) | |||
throws RepositoryAdminException; | |||
@Path( "addNetworkProxy" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
void addNetworkProxy( NetworkProxy networkProxy ) | |||
throws RepositoryAdminException; | |||
@Path( "updateNetworkProxy" ) | |||
@POST | |||
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
void updateNetworkProxy( NetworkProxy networkProxy ) | |||
throws RepositoryAdminException; | |||
@Path( "deleteNetworkProxy/{networkProxyId}" ) | |||
@GET | |||
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } ) | |||
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) | |||
Boolean deleteNetworkProxy( @PathParam( "networkProxyId" ) String networkProxyId ) | |||
throws RepositoryAdminException; | |||
} |
@@ -0,0 +1,102 @@ | |||
package org.apache.archiva.rest.services; | |||
/* | |||
* 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 net.sf.beanlib.provider.replicator.BeanReplicator; | |||
import org.apache.archiva.admin.repository.RepositoryAdminException; | |||
import org.apache.archiva.admin.repository.networkproxy.NetworkProxyAdmin; | |||
import org.apache.archiva.rest.api.model.NetworkProxy; | |||
import org.apache.archiva.rest.api.services.NetworkProxyService; | |||
import org.springframework.stereotype.Service; | |||
import javax.inject.Inject; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* @author Olivier Lamy | |||
*/ | |||
@Service( "networkProxyService#rest" ) | |||
public class DefaultNetworkProxyService | |||
extends AbstractRestService | |||
implements NetworkProxyService | |||
{ | |||
@Inject | |||
private NetworkProxyAdmin networkProxyAdmin; | |||
public List<NetworkProxy> getNetworkProxies() | |||
throws RepositoryAdminException | |||
{ | |||
List<NetworkProxy> networkProxies = new ArrayList<NetworkProxy>(); | |||
for ( org.apache.archiva.admin.repository.networkproxy.NetworkProxy networkProxy : networkProxyAdmin.getNetworkProxies() ) | |||
{ | |||
networkProxies.add( new BeanReplicator().replicateBean( networkProxy, NetworkProxy.class ) ); | |||
} | |||
return networkProxies; | |||
} | |||
public NetworkProxy getNetworkProxy( String networkProxyId ) | |||
throws RepositoryAdminException | |||
{ | |||
org.apache.archiva.admin.repository.networkproxy.NetworkProxy networkProxy = | |||
networkProxyAdmin.getNetworkProxy( networkProxyId ); | |||
return networkProxy == null ? null : new BeanReplicator().replicateBean( networkProxy, NetworkProxy.class ); | |||
} | |||
public void addNetworkProxy( NetworkProxy networkProxy ) | |||
throws RepositoryAdminException | |||
{ | |||
if ( networkProxy == null ) | |||
{ | |||
return; | |||
} | |||
getNetworkProxyAdmin().addNetworkProxy( new BeanReplicator().replicateBean( networkProxy, | |||
org.apache.archiva.admin.repository.networkproxy.NetworkProxy.class ), | |||
getAuditInformation() ); | |||
} | |||
public void updateNetworkProxy( NetworkProxy networkProxy ) | |||
throws RepositoryAdminException | |||
{ | |||
if ( networkProxy == null ) | |||
{ | |||
return; | |||
} | |||
getNetworkProxyAdmin().updateNetworkProxy( new BeanReplicator().replicateBean( networkProxy, | |||
org.apache.archiva.admin.repository.networkproxy.NetworkProxy.class ), | |||
getAuditInformation() ); | |||
} | |||
public Boolean deleteNetworkProxy( String networkProxyId ) | |||
throws RepositoryAdminException | |||
{ | |||
getNetworkProxyAdmin().deleteNetworkProxy( networkProxyId, getAuditInformation() ); | |||
return Boolean.TRUE; | |||
} | |||
public NetworkProxyAdmin getNetworkProxyAdmin() | |||
{ | |||
return networkProxyAdmin; | |||
} | |||
public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin ) | |||
{ | |||
this.networkProxyAdmin = networkProxyAdmin; | |||
} | |||
} |
@@ -54,6 +54,7 @@ | |||
<ref bean="remoteRepositoriesService#rest"/> | |||
<ref bean="repositoryGroupService#rest"/> | |||
<ref bean="proxyConnectorService#rest"/> | |||
<ref bean="networkProxyService#rest"/> | |||
</jaxrs:serviceBeans> | |||
<jaxrs:outInterceptors> |
@@ -21,6 +21,7 @@ package org.apache.archiva.rest.services; | |||
import org.apache.archiva.rest.api.model.ManagedRepository; | |||
import org.apache.archiva.rest.api.services.ManagedRepositoriesService; | |||
import org.apache.archiva.rest.api.services.NetworkProxyService; | |||
import org.apache.archiva.rest.api.services.PingService; | |||
import org.apache.archiva.rest.api.services.ProxyConnectorService; | |||
import org.apache.archiva.rest.api.services.RemoteRepositoriesService; | |||
@@ -93,6 +94,17 @@ public abstract class AbstractArchivaRestTest | |||
return service; | |||
} | |||
protected NetworkProxyService getNetworkProxyService() | |||
{ | |||
NetworkProxyService service = | |||
JAXRSClientFactory.create( "http://localhost:" + port + "/services/archivaServices/", | |||
NetworkProxyService.class ); | |||
WebClient.client( service ).header( "Authorization", authorizationHeader ); | |||
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000 ); | |||
return service; | |||
} | |||
protected ManagedRepository getTestManagedRepository() | |||
{ | |||
String location = new File( FileUtil.getBasedir(), "target/test-repo" ).getAbsolutePath(); |
@@ -0,0 +1,94 @@ | |||
package org.apache.archiva.rest.services; | |||
/* | |||
* 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 org.apache.archiva.rest.api.model.NetworkProxy; | |||
import org.junit.Test; | |||
/** | |||
* @author Olivier Lamy | |||
*/ | |||
public class NetworkProxyServiceTest | |||
extends AbstractArchivaRestTest | |||
{ | |||
@Test | |||
public void addAndDelete() | |||
throws Exception | |||
{ | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertTrue( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
getNetworkProxyService().addNetworkProxy( getNetworkProxy( "foo" ) ); | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertFalse( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
assertEquals( 1, getNetworkProxyService().getNetworkProxies().size() ); | |||
getNetworkProxyService().deleteNetworkProxy( "foo" ); | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertTrue( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
} | |||
@Test | |||
public void addAndUpdateAndDelete() | |||
throws Exception | |||
{ | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertTrue( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
getNetworkProxyService().addNetworkProxy( getNetworkProxy( "foo" ) ); | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertFalse( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
assertEquals( 1, getNetworkProxyService().getNetworkProxies().size() ); | |||
NetworkProxy networkProxy = getNetworkProxy( "foo" ); | |||
networkProxy.setHost( "http://toto.com" ); | |||
networkProxy.setPassword( "newpasswd" ); | |||
networkProxy.setUsername( "newusername" ); | |||
networkProxy.setPort( 9191 ); | |||
getNetworkProxyService().updateNetworkProxy( networkProxy ); | |||
assertEquals( networkProxy.getHost(), getNetworkProxyService().getNetworkProxy( "foo" ).getHost() ); | |||
assertEquals( networkProxy.getPassword(), getNetworkProxyService().getNetworkProxy( "foo" ).getPassword() ); | |||
assertEquals( networkProxy.getUsername(), getNetworkProxyService().getNetworkProxy( "foo" ).getUsername() ); | |||
assertEquals( networkProxy.getPort(), getNetworkProxyService().getNetworkProxy( "foo" ).getPort() ); | |||
getNetworkProxyService().deleteNetworkProxy( "foo" ); | |||
assertNotNull( getNetworkProxyService().getNetworkProxies() ); | |||
assertTrue( getNetworkProxyService().getNetworkProxies().isEmpty() ); | |||
} | |||
NetworkProxy getNetworkProxy( String id ) | |||
{ | |||
NetworkProxy networkProxy = new NetworkProxy(); | |||
networkProxy.setId( id ); | |||
networkProxy.setHost( "http://foo.com" ); | |||
networkProxy.setPassword( "passwd" ); | |||
networkProxy.setUsername( "username" ); | |||
networkProxy.setPort( 9090 ); | |||
return networkProxy; | |||
} | |||
} |