--- /dev/null
+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();
+ }
+}
--- /dev/null
+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;
+}
--- /dev/null
+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;
+ }
+}
<ref bean="remoteRepositoriesService#rest"/>
<ref bean="repositoryGroupService#rest"/>
<ref bean="proxyConnectorService#rest"/>
+ <ref bean="networkProxyService#rest"/>
</jaxrs:serviceBeans>
<jaxrs:outInterceptors>
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;
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();
--- /dev/null
+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;
+ }
+}