Search in sources :

Example 16 with IndexCreationFeature

use of org.apache.archiva.repository.features.IndexCreationFeature in project archiva by apache.

the class RepositoryProviderMock method updateManagedInstance.

@Override
public void updateManagedInstance(EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration) throws RepositoryException {
    try {
        managedRepository.setName(managedRepository.getPrimaryLocale(), configuration.getName());
        managedRepository.setLocation(new URI(configuration.getLocation() == null ? "" : configuration.getLocation()));
        managedRepository.setBaseUri(new URI(""));
        managedRepository.setBlocksRedeployment(configuration.isBlockRedeployments());
        managedRepository.setDescription(managedRepository.getPrimaryLocale(), configuration.getDescription());
        managedRepository.setLayout(configuration.getLayout());
        managedRepository.setScanned(configuration.isScanned());
        managedRepository.setSchedulingDefinition(configuration.getRefreshCronExpression());
        if (configuration.isReleases()) {
            managedRepository.addActiveReleaseScheme(ReleaseScheme.RELEASE);
        }
        if (configuration.isSnapshots()) {
            managedRepository.addActiveReleaseScheme(ReleaseScheme.SNAPSHOT);
        }
        ArtifactCleanupFeature acf = managedRepository.getFeature(ArtifactCleanupFeature.class).get();
        acf.setRetentionPeriod(Period.ofDays(configuration.getRetentionPeriod()));
        acf.setDeleteReleasedSnapshots(configuration.isDeleteReleasedSnapshots());
        acf.setRetentionCount(configuration.getRetentionCount());
        IndexCreationFeature icf = managedRepository.getFeature(IndexCreationFeature.class).get();
        icf.setIndexPath(new URI(configuration.getIndexDir()));
        icf.setSkipPackedIndexCreation(configuration.isSkipPackedIndexCreation());
        StagingRepositoryFeature srf = managedRepository.getFeature(StagingRepositoryFeature.class).get();
        srf.setStageRepoNeeded(configuration.isStageRepoNeeded());
    } catch (Exception e) {
        throw new RepositoryException("Error", e);
    }
}
Also used : IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) RepositoryException(org.apache.archiva.repository.RepositoryException) ArtifactCleanupFeature(org.apache.archiva.repository.features.ArtifactCleanupFeature) StagingRepositoryFeature(org.apache.archiva.repository.features.StagingRepositoryFeature) URI(java.net.URI) RepositoryException(org.apache.archiva.repository.RepositoryException)

Example 17 with IndexCreationFeature

use of org.apache.archiva.repository.features.IndexCreationFeature in project archiva by apache.

the class ArchivaDavResourceFactory method getResourceFromGroup.

private DavResource getResourceFromGroup(DavServletRequest request, List<String> repositories, ArchivaDavResourceLocator locator, RepositoryGroupConfiguration repositoryGroupConfiguration) throws DavException {
    if (repositoryGroupConfiguration.getRepositories() == null || repositoryGroupConfiguration.getRepositories().isEmpty()) {
        Path file = Paths.get(System.getProperty("appserver.base"), "groups/" + repositoryGroupConfiguration.getId());
        return new ArchivaDavResource(file.toString(), "groups/" + repositoryGroupConfiguration.getId(), null, request.getDavSession(), locator, this, mimeTypes, auditListeners, scheduler, fileLockManager);
    }
    List<Path> mergedRepositoryContents = new ArrayList<>();
    // multiple repo types so we guess they are all the same type
    // so use the first one
    // FIXME add a method with group in the repository storage
    String firstRepoId = repositoryGroupConfiguration.getRepositories().get(0);
    String path = getLogicalResource(locator, repositoryRegistry.getManagedRepository(firstRepoId), false);
    if (path.startsWith("/")) {
        path = path.substring(1);
    }
    LogicalResource logicalResource = new LogicalResource(path);
    // flow:
    // if the current user logged in has permission to any of the repositories, allow user to
    // browse the repo group but displaying only the repositories which the user has permission to access.
    // otherwise, prompt for authentication.
    String activePrincipal = getActivePrincipal(request);
    boolean allow = isAllowedToContinue(request, repositories, activePrincipal);
    // remove last /
    String pathInfo = StringUtils.removeEnd(request.getPathInfo(), "/");
    if (allow) {
        if (StringUtils.endsWith(pathInfo, repositoryGroupConfiguration.getMergedIndexPath())) {
            Path mergedRepoDir = buildMergedIndexDirectory(repositories, activePrincipal, request, repositoryGroupConfiguration);
            mergedRepositoryContents.add(mergedRepoDir);
        } else {
            if (StringUtils.equalsIgnoreCase(pathInfo, "/" + repositoryGroupConfiguration.getId())) {
                Path tmpDirectory = Paths.get(SystemUtils.getJavaIoTmpDir().toString(), repositoryGroupConfiguration.getId(), repositoryGroupConfiguration.getMergedIndexPath());
                if (!Files.exists(tmpDirectory)) {
                    synchronized (tmpDirectory.toAbsolutePath().toString()) {
                        if (!Files.exists(tmpDirectory)) {
                            try {
                                Files.createDirectories(tmpDirectory);
                            } catch (IOException e) {
                                throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not create direcotory " + tmpDirectory);
                            }
                        }
                    }
                }
                mergedRepositoryContents.add(tmpDirectory.getParent());
            }
            for (String repository : repositories) {
                ManagedRepositoryContent managedRepository = null;
                ManagedRepository repo = repositoryRegistry.getManagedRepository(repository);
                if (repo == null) {
                    throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid managed repository <" + repository + ">");
                }
                managedRepository = repo.getContent();
                if (managedRepository == null) {
                    log.error("Inconsistency detected. Repository content not found for '{}'", repository);
                    throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid managed repository <" + repository + ">");
                }
                Path resourceFile = Paths.get(managedRepository.getRepoRoot(), logicalResource.getPath());
                if (Files.exists(resourceFile)) {
                    // in case of group displaying index directory doesn't have sense !!
                    IndexCreationFeature idf = managedRepository.getRepository().getFeature(IndexCreationFeature.class).get();
                    String repoIndexDirectory = idf.getIndexPath().toString();
                    if (StringUtils.isNotEmpty(repoIndexDirectory)) {
                        if (!Paths.get(repoIndexDirectory).isAbsolute()) {
                            repoIndexDirectory = Paths.get(managedRepository.getRepository().getLocation()).resolve(StringUtils.isEmpty(repoIndexDirectory) ? ".indexer" : repoIndexDirectory).toAbsolutePath().toString();
                        }
                    }
                    if (StringUtils.isEmpty(repoIndexDirectory)) {
                        repoIndexDirectory = Paths.get(managedRepository.getRepository().getLocation()).resolve(".indexer").toAbsolutePath().toString();
                    }
                    if (!StringUtils.equals(FilenameUtils.normalize(repoIndexDirectory), FilenameUtils.normalize(resourceFile.toAbsolutePath().toString()))) {
                        // for prompted authentication
                        if (httpAuth.getSecuritySession(request.getSession(true)) != null) {
                            try {
                                if (isAuthorized(request, repository)) {
                                    mergedRepositoryContents.add(resourceFile);
                                    log.debug("Repository '{}' accessed by '{}'", repository, activePrincipal);
                                }
                            } catch (DavException e) {
                                // TODO: review exception handling
                                log.debug("Skipping repository '{}' for user '{}': {}", managedRepository, activePrincipal, e.getMessage());
                            }
                        } else {
                            // for the current user logged in
                            try {
                                if (servletAuth.isAuthorized(activePrincipal, repository, WebdavMethodUtil.getMethodPermission(request.getMethod()))) {
                                    mergedRepositoryContents.add(resourceFile);
                                    log.debug("Repository '{}' accessed by '{}'", repository, activePrincipal);
                                }
                            } catch (UnauthorizedException e) {
                                // TODO: review exception handling
                                log.debug("Skipping repository '{}' for user '{}': {}", managedRepository, activePrincipal, e.getMessage());
                            }
                        }
                    }
                }
            }
        }
    } else {
        throw new UnauthorizedDavException(locator.getRepositoryId(), "User not authorized.");
    }
    ArchivaVirtualDavResource resource = new ArchivaVirtualDavResource(mergedRepositoryContents, logicalResource.getPath(), mimeTypes, locator, this);
    // compatibility with MRM-440 to ensure browsing the repository group works ok
    if (resource.isCollection() && !request.getRequestURI().endsWith("/")) {
        throw new BrowserRedirectException(resource.getHref());
    }
    return resource;
}
Also used : Path(java.nio.file.Path) ManagedRepository(org.apache.archiva.repository.ManagedRepository) DavException(org.apache.jackrabbit.webdav.DavException) ArrayList(java.util.ArrayList) IOException(java.io.IOException) IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) ManagedRepositoryContent(org.apache.archiva.repository.ManagedRepositoryContent) UnauthorizedException(org.apache.archiva.redback.authorization.UnauthorizedException)

Example 18 with IndexCreationFeature

use of org.apache.archiva.repository.features.IndexCreationFeature in project archiva by apache.

the class MavenIndexManagerTest method createTestContext.

private ArchivaIndexingContext createTestContext() throws URISyntaxException, IndexCreationFailedException, IOException {
    indexPath = Paths.get("target/repositories/test-repo/.index-test");
    FileUtils.deleteDirectory(indexPath);
    repository = new MavenManagedRepository("test-repo", "Test Repo", Paths.get("target/repositories"));
    repository.setLocation(new URI("test-repo"));
    IndexCreationFeature icf = repository.getFeature(IndexCreationFeature.class).get();
    icf.setIndexPath(new URI(".index-test"));
    ctx = mavenIndexManager.createContext(repository);
    return ctx;
}
Also used : IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) MavenManagedRepository(org.apache.archiva.repository.maven2.MavenManagedRepository) URI(java.net.URI)

Example 19 with IndexCreationFeature

use of org.apache.archiva.repository.features.IndexCreationFeature in project archiva by apache.

the class ArchivaIndexManagerMock method getIndexPath.

private Path getIndexPath(Repository repo) throws IOException {
    IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get();
    Path repoDir = repo.getLocalPath();
    URI indexDir = icf.getIndexPath();
    Path indexDirectory = null;
    if (!StringUtils.isEmpty(indexDir.toString())) {
        indexDirectory = PathUtil.getPathFromUri(indexDir);
        // not absolute so create it in repository directory
        if (!indexDirectory.isAbsolute()) {
            indexDirectory = repoDir.resolve(indexDirectory);
        }
    } else {
        indexDirectory = repoDir.resolve(".index");
    }
    if (!Files.exists(indexDirectory)) {
        Files.createDirectories(indexDirectory);
    }
    return indexDirectory;
}
Also used : Path(java.nio.file.Path) IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) URI(java.net.URI)

Example 20 with IndexCreationFeature

use of org.apache.archiva.repository.features.IndexCreationFeature in project archiva by apache.

the class GenericIndexManager method getIndexPath.

private Path getIndexPath(Repository repo) throws IOException {
    IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get();
    Path repoDir = repo.getLocalPath();
    URI indexDir = icf.getIndexPath();
    Path indexDirectory = null;
    if (!StringUtils.isEmpty(indexDir.toString())) {
        indexDirectory = PathUtil.getPathFromUri(indexDir);
        // not absolute so create it in repository directory
        if (!indexDirectory.isAbsolute()) {
            indexDirectory = repoDir.resolve(indexDirectory);
        }
    } else {
        indexDirectory = repoDir.resolve(DEFAULT_INDEXER_DIR);
    }
    if (!Files.exists(indexDirectory)) {
        Files.createDirectories(indexDirectory);
    }
    return indexDirectory;
}
Also used : Path(java.nio.file.Path) IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) URI(java.net.URI)

Aggregations

IndexCreationFeature (org.apache.archiva.repository.features.IndexCreationFeature)27 URI (java.net.URI)11 ArtifactCleanupFeature (org.apache.archiva.repository.features.ArtifactCleanupFeature)10 StagingRepositoryFeature (org.apache.archiva.repository.features.StagingRepositoryFeature)10 Path (java.nio.file.Path)9 RepositoryException (org.apache.archiva.repository.RepositoryException)6 IOException (java.io.IOException)5 ManagedRepositoryConfiguration (org.apache.archiva.configuration.ManagedRepositoryConfiguration)5 RemoteIndexFeature (org.apache.archiva.repository.features.RemoteIndexFeature)5 Test (org.junit.Test)5 PasswordCredentials (org.apache.archiva.repository.PasswordCredentials)4 RemoteRepositoryConfiguration (org.apache.archiva.configuration.RemoteRepositoryConfiguration)3 ManagedRepository (org.apache.archiva.repository.ManagedRepository)3 BasicManagedRepository (org.apache.archiva.repository.BasicManagedRepository)2 RemoteRepository (org.apache.archiva.repository.RemoteRepository)2 RepositoryCredentials (org.apache.archiva.repository.RepositoryCredentials)2 UnsupportedURIException (org.apache.archiva.repository.UnsupportedURIException)2 IndexingContext (org.apache.maven.index.context.IndexingContext)2 URISyntaxException (java.net.URISyntaxException)1 Files (java.nio.file.Files)1