use of org.apache.archiva.repository.features.RemoteIndexFeature in project archiva by apache.
the class RepositoryProviderMock method getRemoteConfiguration.
@Override
public RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException {
RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration();
configuration.setId(remoteRepository.getId());
configuration.setName(remoteRepository.getName());
configuration.setDescription(remoteRepository.getDescription());
configuration.setLayout(remoteRepository.getLayout());
configuration.setRefreshCronExpression(remoteRepository.getSchedulingDefinition());
configuration.setCheckPath(remoteRepository.getCheckPath());
configuration.setExtraHeaders(remoteRepository.getExtraHeaders());
configuration.setExtraParameters(remoteRepository.getExtraParameters());
configuration.setTimeout((int) remoteRepository.getTimeout().getSeconds());
RepositoryCredentials creds = remoteRepository.getLoginCredentials();
if (creds != null) {
PasswordCredentials pwdCreds = (PasswordCredentials) creds;
configuration.setUsername(pwdCreds.getUsername());
configuration.setPassword(new String(pwdCreds.getPassword()));
}
configuration.setUrl(remoteRepository.getLocation() == null ? "" : remoteRepository.getLocation().toString());
RemoteIndexFeature rif = remoteRepository.getFeature(RemoteIndexFeature.class).get();
configuration.setDownloadRemoteIndex(rif.isDownloadRemoteIndex());
configuration.setDownloadRemoteIndexOnStartup(rif.isDownloadRemoteIndexOnStartup());
configuration.setIndexDir(rif.getIndexUri() == null ? "" : rif.getIndexUri().toString());
configuration.setRemoteDownloadNetworkProxyId(rif.getProxyId());
return configuration;
}
use of org.apache.archiva.repository.features.RemoteIndexFeature in project archiva by apache.
the class ArchivaIndexManagerMock method update.
@Override
public void update(final ArchivaIndexingContext context, final boolean fullUpdate) throws IndexUpdateFailedException {
log.info("start download remote index for remote repository {}", context.getRepository().getId());
URI remoteUpdateUri;
if (!(context.getRepository() instanceof RemoteRepository) || !(context.getRepository().supportsFeature(RemoteIndexFeature.class))) {
throw new IndexUpdateFailedException("The context is not associated to a remote repository with remote index " + context.getId());
} else {
RemoteIndexFeature rif = context.getRepository().getFeature(RemoteIndexFeature.class).get();
remoteUpdateUri = context.getRepository().getLocation().resolve(rif.getIndexUri());
}
final RemoteRepository remoteRepository = (RemoteRepository) context.getRepository();
executeUpdateFunction(context, indexingContext -> {
try {
// create a temp directory to download files
Path tempIndexDirectory = Paths.get(indexingContext.getIndexDirectoryFile().getParent(), ".tmpIndex");
Path indexCacheDirectory = Paths.get(indexingContext.getIndexDirectoryFile().getParent(), ".indexCache");
Files.createDirectories(indexCacheDirectory);
if (Files.exists(tempIndexDirectory)) {
org.apache.archiva.common.utils.FileUtils.deleteDirectory(tempIndexDirectory);
}
Files.createDirectories(tempIndexDirectory);
tempIndexDirectory.toFile().deleteOnExit();
String baseIndexUrl = indexingContext.getIndexUpdateUrl();
String wagonProtocol = remoteUpdateUri.toURL().getProtocol();
NetworkProxy networkProxy = null;
if (remoteRepository.supportsFeature(RemoteIndexFeature.class)) {
RemoteIndexFeature rif = remoteRepository.getFeature(RemoteIndexFeature.class).get();
if (StringUtils.isNotBlank(rif.getProxyId())) {
try {
networkProxy = networkProxyAdmin.getNetworkProxy(rif.getProxyId());
} catch (RepositoryAdminException e) {
log.error("Error occured while retrieving proxy {}", e.getMessage());
}
if (networkProxy == null) {
log.warn("your remote repository is configured to download remote index trought a proxy we cannot find id:{}", rif.getProxyId());
}
}
final StreamWagon wagon = (StreamWagon) wagonFactory.getWagon(new WagonFactoryRequest(wagonProtocol, remoteRepository.getExtraHeaders()).networkProxy(networkProxy));
int readTimeout = (int) rif.getDownloadTimeout().toMillis() * 1000;
wagon.setReadTimeout(readTimeout);
wagon.setTimeout((int) remoteRepository.getTimeout().toMillis() * 1000);
if (wagon instanceof AbstractHttpClientWagon) {
HttpConfiguration httpConfiguration = new HttpConfiguration();
HttpMethodConfiguration httpMethodConfiguration = new HttpMethodConfiguration();
httpMethodConfiguration.setUsePreemptive(true);
httpMethodConfiguration.setReadTimeout(readTimeout);
httpConfiguration.setGet(httpMethodConfiguration);
AbstractHttpClientWagon.class.cast(wagon).setHttpConfiguration(httpConfiguration);
}
wagon.addTransferListener(new DownloadListener());
ProxyInfo proxyInfo = null;
if (networkProxy != null) {
proxyInfo = new ProxyInfo();
proxyInfo.setType(networkProxy.getProtocol());
proxyInfo.setHost(networkProxy.getHost());
proxyInfo.setPort(networkProxy.getPort());
proxyInfo.setUserName(networkProxy.getUsername());
proxyInfo.setPassword(networkProxy.getPassword());
}
AuthenticationInfo authenticationInfo = null;
if (remoteRepository.getLoginCredentials() != null && (remoteRepository.getLoginCredentials() instanceof PasswordCredentials)) {
PasswordCredentials creds = (PasswordCredentials) remoteRepository.getLoginCredentials();
authenticationInfo = new AuthenticationInfo();
authenticationInfo.setUserName(creds.getUsername());
authenticationInfo.setPassword(new String(creds.getPassword()));
}
wagon.connect(new org.apache.maven.wagon.repository.Repository(remoteRepository.getId(), baseIndexUrl), authenticationInfo, proxyInfo);
Path indexDirectory = indexingContext.getIndexDirectoryFile().toPath();
if (!Files.exists(indexDirectory)) {
Files.createDirectories(indexDirectory);
}
ResourceFetcher resourceFetcher = new WagonResourceFetcher(log, tempIndexDirectory, wagon, remoteRepository);
IndexUpdateRequest request = new IndexUpdateRequest(indexingContext, resourceFetcher);
request.setForceFullUpdate(fullUpdate);
request.setLocalIndexCacheDir(indexCacheDirectory.toFile());
// indexUpdater.fetchAndUpdateIndex( request );
indexingContext.updateTimestamp(true);
}
} catch (AuthenticationException e) {
log.error("Could not login to the remote proxy for updating index of {}", remoteRepository.getId(), e);
throw new IndexUpdateFailedException("Login in to proxy failed while updating remote repository " + remoteRepository.getId(), e);
} catch (ConnectionException e) {
log.error("Connection error during index update for remote repository {}", remoteRepository.getId(), e);
throw new IndexUpdateFailedException("Connection error during index update for remote repository " + remoteRepository.getId(), e);
} catch (MalformedURLException e) {
log.error("URL for remote index update of remote repository {} is not correct {}", remoteRepository.getId(), remoteUpdateUri, e);
throw new IndexUpdateFailedException("URL for remote index update of repository is not correct " + remoteUpdateUri, e);
} catch (IOException e) {
log.error("IOException during index update of remote repository {}: {}", remoteRepository.getId(), e.getMessage(), e);
throw new IndexUpdateFailedException("IOException during index update of remote repository " + remoteRepository.getId() + (StringUtils.isNotEmpty(e.getMessage()) ? ": " + e.getMessage() : ""), e);
} catch (WagonFactoryException e) {
log.error("Wagon for remote index download of {} could not be created: {}", remoteRepository.getId(), e.getMessage(), e);
throw new IndexUpdateFailedException("Error while updating the remote index of " + remoteRepository.getId(), e);
}
});
}
use of org.apache.archiva.repository.features.RemoteIndexFeature in project archiva by apache.
the class MavenRepositoryProviderTest method createRemoteInstance.
@Test
public void createRemoteInstance() throws Exception {
RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration();
repo.setUsername("testuser001");
repo.setPassword("pwd0000abc");
repo.setCheckPath("test/check.html");
repo.setTimeout(50);
repo.setUrl("https://repo.maven.apache.org/maven2/test");
repo.setDownloadRemoteIndex(true);
repo.setDownloadRemoteIndexOnStartup(true);
Map<String, String> header = new HashMap<>();
header.put("header1", "value1");
header.put("header2", "value2");
repo.setExtraHeaders(header);
Map<String, String> params = new HashMap<>();
params.put("param1", "pval1");
params.put("param2", "pval2");
repo.setExtraParameters(params);
repo.setRefreshCronExpression("0 1 07 ? * MON");
repo.setRemoteDownloadTimeout(333);
repo.setRemoteIndexUrl("testremote/.index");
repo.setDescription("This is a test");
repo.setId("test001");
repo.setName("Remote Test Repo 001");
repo.setIndexDir("testindex/.index");
repo.setLayout("maven2");
repo.setType(RepositoryType.MAVEN.toString());
repo.setIndexDir("local/.index");
RemoteRepository mr = provider.createRemoteInstance(repo);
assertEquals("test001", mr.getId());
assertEquals("This is a test", mr.getDescription());
assertNotNull(mr.getLocation());
assertEquals("https://repo.maven.apache.org/maven2/test", mr.getLocation().toString());
assertEquals("Remote Test Repo 001", mr.getName());
assertEquals("test001", mr.getId());
assertEquals("0 1 07 ? * MON", mr.getSchedulingDefinition());
assertEquals(50, mr.getTimeout().get(ChronoUnit.SECONDS));
assertTrue(mr.isScanned());
assertNotNull(mr.getLoginCredentials());
assertTrue(mr.getLoginCredentials() instanceof PasswordCredentials);
PasswordCredentials creds = (PasswordCredentials) mr.getLoginCredentials();
assertEquals("testuser001", creds.getUsername());
assertEquals("pwd0000abc", new String(creds.getPassword()));
assertEquals("value1", mr.getExtraHeaders().get("header1"));
assertEquals("pval2", mr.getExtraParameters().get("param2"));
assertEquals("maven2", mr.getLayout());
try {
ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature(ArtifactCleanupFeature.class).get();
throw new Exception("artifactCleanupFeature should not be available");
} catch (UnsupportedFeatureException e) {
// correct
}
IndexCreationFeature indexCreationFeature = mr.getFeature(IndexCreationFeature.class).get();
assertEquals("local/.index", indexCreationFeature.getIndexPath().toString());
try {
StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature(StagingRepositoryFeature.class).get();
throw new Exception("stagingRepositoryFeature should not be available");
} catch (UnsupportedFeatureException e) {
// correct
}
RemoteIndexFeature remoteIndexFeature = mr.getFeature(RemoteIndexFeature.class).get();
assertNull(remoteIndexFeature.getProxyId());
}
use of org.apache.archiva.repository.features.RemoteIndexFeature in project archiva by apache.
the class MavenRepositoryProvider method getRemoteConfiguration.
@Override
public RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException {
if (!(remoteRepository instanceof MavenRemoteRepository)) {
log.error("Wrong remote repository type " + remoteRepository.getClass().getName());
throw new RepositoryException("The given repository type cannot be handled by the maven provider: " + remoteRepository.getClass().getName());
}
RemoteRepositoryConfiguration cfg = new RemoteRepositoryConfiguration();
cfg.setType(remoteRepository.getType().toString());
cfg.setId(remoteRepository.getId());
cfg.setName(remoteRepository.getName());
cfg.setDescription(remoteRepository.getDescription());
cfg.setUrl(remoteRepository.getLocation().toString());
cfg.setTimeout((int) remoteRepository.getTimeout().toMillis() / 1000);
cfg.setCheckPath(remoteRepository.getCheckPath());
RepositoryCredentials creds = remoteRepository.getLoginCredentials();
if (creds != null) {
if (creds instanceof PasswordCredentials) {
PasswordCredentials pCreds = (PasswordCredentials) creds;
cfg.setPassword(new String(pCreds.getPassword()));
cfg.setUsername(pCreds.getUsername());
}
}
cfg.setLayout(remoteRepository.getLayout());
cfg.setExtraParameters(remoteRepository.getExtraParameters());
cfg.setExtraHeaders(remoteRepository.getExtraHeaders());
cfg.setRefreshCronExpression(remoteRepository.getSchedulingDefinition());
IndexCreationFeature indexCreationFeature = remoteRepository.getFeature(IndexCreationFeature.class).get();
cfg.setIndexDir(convertUriToPath(indexCreationFeature.getIndexPath()));
cfg.setPackedIndexDir(convertUriToPath(indexCreationFeature.getPackedIndexPath()));
RemoteIndexFeature remoteIndexFeature = remoteRepository.getFeature(RemoteIndexFeature.class).get();
cfg.setRemoteIndexUrl(remoteIndexFeature.getIndexUri().toString());
cfg.setRemoteDownloadTimeout((int) remoteIndexFeature.getDownloadTimeout().get(ChronoUnit.SECONDS));
cfg.setDownloadRemoteIndexOnStartup(remoteIndexFeature.isDownloadRemoteIndexOnStartup());
cfg.setDownloadRemoteIndex(remoteIndexFeature.isDownloadRemoteIndex());
cfg.setRemoteDownloadNetworkProxyId(remoteIndexFeature.getProxyId());
return cfg;
}
use of org.apache.archiva.repository.features.RemoteIndexFeature in project archiva by apache.
the class MavenRepositoryProvider method updateRemoteInstance.
@Override
public void updateRemoteInstance(EditableRemoteRepository repo, RemoteRepositoryConfiguration cfg) throws RepositoryException {
setBaseConfig(repo, cfg);
repo.setCheckPath(cfg.getCheckPath());
repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
try {
repo.setLocation(new URI(cfg.getUrl()));
} catch (UnsupportedURIException | URISyntaxException e) {
log.error("Could not set remote url " + cfg.getUrl());
throw new RepositoryException("The url config is not a valid uri: " + cfg.getUrl());
}
repo.setTimeout(Duration.ofSeconds(cfg.getTimeout()));
RemoteIndexFeature remoteIndexFeature = repo.getFeature(RemoteIndexFeature.class).get();
remoteIndexFeature.setDownloadRemoteIndex(cfg.isDownloadRemoteIndex());
remoteIndexFeature.setDownloadRemoteIndexOnStartup(cfg.isDownloadRemoteIndexOnStartup());
remoteIndexFeature.setDownloadTimeout(Duration.ofSeconds(cfg.getRemoteDownloadTimeout()));
remoteIndexFeature.setProxyId(cfg.getRemoteDownloadNetworkProxyId());
if (cfg.isDownloadRemoteIndex()) {
try {
remoteIndexFeature.setIndexUri(new URI(cfg.getRemoteIndexUrl()));
} catch (URISyntaxException e) {
log.error("Could not set remote index url " + cfg.getRemoteIndexUrl());
remoteIndexFeature.setDownloadRemoteIndex(false);
remoteIndexFeature.setDownloadRemoteIndexOnStartup(false);
}
}
for (Object key : cfg.getExtraHeaders().keySet()) {
repo.addExtraHeader(key.toString(), cfg.getExtraHeaders().get(key).toString());
}
for (Object key : cfg.getExtraParameters().keySet()) {
repo.addExtraParameter(key.toString(), cfg.getExtraParameters().get(key).toString());
}
PasswordCredentials credentials = new PasswordCredentials("", new char[0]);
if (cfg.getPassword() != null && cfg.getUsername() != null) {
credentials.setPassword(cfg.getPassword().toCharArray());
credentials.setUsername(cfg.getUsername());
repo.setCredentials(credentials);
} else {
credentials.setPassword(new char[0]);
}
IndexCreationFeature indexCreationFeature = repo.getFeature(IndexCreationFeature.class).get();
if (cfg.getIndexDir() != null) {
indexCreationFeature.setIndexPath(getURIFromString(cfg.getIndexDir()));
}
if (cfg.getPackedIndexDir() != null) {
indexCreationFeature.setPackedIndexPath(getURIFromString(cfg.getPackedIndexDir()));
}
log.debug("Updated remote instance {}", repo);
}
Aggregations