Search in sources :

Example 1 with DistributionUrlProvider

use of ch.cyberduck.core.cdn.DistributionUrlProvider in project cyberduck by iterate-ch.

the class GoogleStorageUrlProvider method toUrl.

/**
 * This creates an URL that uses Cookie-based Authentication. The ACLs for the given Google user account
 * has to be setup first.
 * <p>
 * Google Storage lets you provide browser-based authenticated downloads to users who do not have
 * Google Storage accounts. To do this, you apply Google account-based ACLs to the object and then
 * you provide users with a URL that is scoped to the object.
 */
@Override
public DescriptiveUrlBag toUrl(final Path file) {
    final DescriptiveUrlBag list = new DefaultUrlProvider(session.getHost()).toUrl(file);
    if (file.isFile()) {
        // Authenticated browser download using cookie-based Google account authentication in conjunction with ACL
        list.add(new DescriptiveUrl(URI.create(String.format("https://storage.cloud.google.com%s", URIEncoder.encode(file.getAbsolute()))), DescriptiveUrl.Type.authenticated, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), LocaleFactory.localizedString("Authenticated"))));
        // Website configuration
        final Distribution distribution = new Distribution(Distribution.DOWNLOAD, URI.create(String.format("%s://%s.%s", Distribution.DOWNLOAD.getScheme(), containerService.getContainer(file).getName(), session.getHost().getProtocol().getDefaultHostname())), false);
        distribution.setUrl(URI.create(String.format("%s://%s.%s", Distribution.DOWNLOAD.getScheme(), containerService.getContainer(file).getName(), session.getHost().getProtocol().getDefaultHostname())));
        list.addAll(new DistributionUrlProvider(distribution).toUrl(file));
    }
    // gsutil URI
    list.add(new DescriptiveUrl(URI.create(String.format("gs://%s%s", containerService.getContainer(file).getName(), file.isRoot() ? Path.DELIMITER : containerService.isContainer(file) ? Path.DELIMITER : String.format("/%s", URIEncoder.encode(containerService.getKey(file))))), DescriptiveUrl.Type.provider, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), session.getHost().getProtocol().getName())));
    return list;
}
Also used : DescriptiveUrl(ch.cyberduck.core.DescriptiveUrl) DefaultUrlProvider(ch.cyberduck.core.shared.DefaultUrlProvider) DescriptiveUrlBag(ch.cyberduck.core.DescriptiveUrlBag) Distribution(ch.cyberduck.core.cdn.Distribution) DistributionUrlProvider(ch.cyberduck.core.cdn.DistributionUrlProvider)

Example 2 with DistributionUrlProvider

use of ch.cyberduck.core.cdn.DistributionUrlProvider in project cyberduck by iterate-ch.

the class SwiftUrlProvider method toUrl.

@Override
public DescriptiveUrlBag toUrl(final Path file) {
    final DescriptiveUrlBag list = new DescriptiveUrlBag();
    if (file.isFile()) {
        Region region = null;
        try {
            region = regionService.lookup(file);
        } catch (BackgroundException e) {
            log.warn(String.format("Failure looking up region for %s %s", file, e.getMessage()));
        }
        if (null == region) {
            list.addAll(new DefaultUrlProvider(session.getHost()).toUrl(file));
        } else {
            list.addAll(new HostWebUrlProvider(session.getHost()).toUrl(file));
            list.add(new DescriptiveUrl(URI.create(region.getStorageUrl(containerService.getContainer(file).getName(), containerService.getKey(file)).toString()), DescriptiveUrl.Type.provider, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), session.getHost().getProtocol().getScheme().name().toUpperCase(Locale.ROOT))));
            // In one hour
            list.addAll(this.sign(region, file, this.getExpiry((int) TimeUnit.HOURS.toSeconds(1))));
            // Default signed URL expiring in 24 hours.
            list.addAll(this.sign(region, file, this.getExpiry((int) TimeUnit.SECONDS.toSeconds(new HostPreferences(session.getHost()).getInteger("s3.url.expire.seconds")))));
            // 1 Week
            list.addAll(this.sign(region, file, this.getExpiry((int) TimeUnit.DAYS.toSeconds(7))));
            // 1 Month
            list.addAll(this.sign(region, file, this.getExpiry((int) TimeUnit.DAYS.toSeconds(30))));
            // 1 Year
            list.addAll(this.sign(region, file, this.getExpiry((int) TimeUnit.DAYS.toSeconds(365))));
        }
    }
    // Filter by matching container name
    final Optional<Set<Distribution>> filtered = distributions.entrySet().stream().filter(entry -> new SimplePathPredicate(containerService.getContainer(file)).test(entry.getKey())).map(Map.Entry::getValue).findFirst();
    if (filtered.isPresent()) {
        // Add CloudFront distributions
        for (Distribution distribution : filtered.get()) {
            list.addAll(new DistributionUrlProvider(distribution).toUrl(file));
        }
    }
    return list;
}
Also used : HostWebUrlProvider(ch.cyberduck.core.HostWebUrlProvider) Set(java.util.Set) DescriptiveUrlBag(ch.cyberduck.core.DescriptiveUrlBag) HostPreferences(ch.cyberduck.core.preferences.HostPreferences) DescriptiveUrl(ch.cyberduck.core.DescriptiveUrl) DefaultUrlProvider(ch.cyberduck.core.shared.DefaultUrlProvider) Distribution(ch.cyberduck.core.cdn.Distribution) Region(ch.iterate.openstack.swift.model.Region) SimplePathPredicate(ch.cyberduck.core.SimplePathPredicate) Map(java.util.Map) BackgroundException(ch.cyberduck.core.exception.BackgroundException) DistributionUrlProvider(ch.cyberduck.core.cdn.DistributionUrlProvider)

Example 3 with DistributionUrlProvider

use of ch.cyberduck.core.cdn.DistributionUrlProvider in project cyberduck by iterate-ch.

the class S3UrlProvider method toUrl.

@Override
public DescriptiveUrlBag toUrl(final Path file) {
    final DescriptiveUrlBag list = new DescriptiveUrlBag();
    if (session.getClient().getConfiguration().getBoolProperty("s3service.disable-dns-buckets", false)) {
        list.addAll(new DefaultUrlProvider(session.getHost()).toUrl(file));
    } else {
        list.add(this.toUrl(file, session.getHost().getProtocol().getScheme(), session.getHost().getPort()));
        list.add(this.toUrl(file, Scheme.http, 80));
        if (StringUtils.isNotBlank(session.getHost().getWebURL())) {
            // Only include when custom domain is configured
            list.addAll(new HostWebUrlProvider(session.getHost()).toUrl(file));
        }
    }
    if (file.isFile()) {
        if (!session.getHost().getCredentials().isAnonymousLogin()) {
            // X-Amz-Expires must be less than a week (in seconds); that is, the given X-Amz-Expires must be less
            // than 604800 seconds
            // In one hour
            list.add(this.toSignedUrl(file, (int) TimeUnit.HOURS.toSeconds(1)));
            // Default signed URL expiring in 24 hours.
            list.add(this.toSignedUrl(file, (int) TimeUnit.SECONDS.toSeconds(new HostPreferences(session.getHost()).getInteger("s3.url.expire.seconds"))));
            // 1 Week
            list.add(this.toSignedUrl(file, (int) TimeUnit.DAYS.toSeconds(7)));
            switch(session.getSignatureVersion()) {
                case AWS2:
                    // 1 Month
                    list.add(this.toSignedUrl(file, (int) TimeUnit.DAYS.toSeconds(30)));
                    // 1 Year
                    list.add(this.toSignedUrl(file, (int) TimeUnit.DAYS.toSeconds(365)));
                    break;
                case AWS4HMACSHA256:
                    break;
            }
        }
    }
    // AWS services require specifying an Amazon S3 bucket using S3://bucket
    list.add(new DescriptiveUrl(URI.create(String.format("s3://%s%s", containerService.getContainer(file).getName(), file.isRoot() ? Path.DELIMITER : containerService.isContainer(file) ? Path.DELIMITER : String.format("/%s", URIEncoder.encode(containerService.getKey(file))))), DescriptiveUrl.Type.provider, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), "S3")));
    // Filter by matching container name
    final Optional<Set<Distribution>> filtered = distributions.entrySet().stream().filter(entry -> new SimplePathPredicate(containerService.getContainer(file)).test(entry.getKey())).map(Map.Entry::getValue).findFirst();
    if (filtered.isPresent()) {
        // Add CloudFront distributions
        for (Distribution distribution : filtered.get()) {
            list.addAll(new DistributionUrlProvider(distribution).toUrl(file));
        }
    }
    return list;
}
Also used : HostWebUrlProvider(ch.cyberduck.core.HostWebUrlProvider) DescriptiveUrl(ch.cyberduck.core.DescriptiveUrl) Set(java.util.Set) DefaultUrlProvider(ch.cyberduck.core.shared.DefaultUrlProvider) DescriptiveUrlBag(ch.cyberduck.core.DescriptiveUrlBag) Distribution(ch.cyberduck.core.cdn.Distribution) SimplePathPredicate(ch.cyberduck.core.SimplePathPredicate) Map(java.util.Map) DistributionUrlProvider(ch.cyberduck.core.cdn.DistributionUrlProvider) HostPreferences(ch.cyberduck.core.preferences.HostPreferences)

Example 4 with DistributionUrlProvider

use of ch.cyberduck.core.cdn.DistributionUrlProvider in project cyberduck by iterate-ch.

the class CustomOriginCloudFrontDistributionConfigurationTest method testWriteReadUpdate.

@Test
@Ignore
public void testWriteReadUpdate() throws Exception {
    final Host origin = new Host(new TestProtocol(), String.format("%s.localdomain", UUID.randomUUID().toString()));
    origin.setWebURL("http://example.net");
    origin.setDefaultPath("public_html");
    final CustomOriginCloudFrontDistributionConfiguration configuration = new CustomOriginCloudFrontDistributionConfiguration(origin, new DefaultX509TrustManager() {

        @Override
        public void checkServerTrusted(final X509Certificate[] certs, final String cipher) {
        // 
        }
    }, new DefaultX509KeyManager());
    final Path file = new Path("/public_html", EnumSet.of(Path.Type.directory));
    final Distribution writeDistributionConfiguration = new Distribution(Distribution.CUSTOM, false);
    // Create
    final DisabledLoginCallback login = new DisabledLoginCallback() {

        @Override
        public Credentials prompt(final Host bookmark, final String username, final String title, final String reason, final LoginOptions options) {
            return new Credentials(System.getProperties().getProperty("s3.key"), System.getProperties().getProperty("s3.secret"));
        }
    };
    configuration.write(file, writeDistributionConfiguration, login);
    // Read
    final Distribution distribution = configuration.read(file, Distribution.CUSTOM, login);
    assertNotNull(distribution.getId());
    assertFalse(distribution.isEnabled());
    assertEquals("http://example.net/public_html", distribution.getOrigin().toString());
    assertEquals("http://example.net/f", new DistributionUrlProvider(distribution).toUrl(new Path("/public_html/f", EnumSet.of(Path.Type.file))).find(DescriptiveUrl.Type.origin).getUrl());
    assertEquals(Distribution.CUSTOM, distribution.getMethod());
    assertNull(distribution.getIndexDocument());
    assertNull(distribution.getErrorDocument());
    assertNull(distribution.getLoggingContainer());
    assertEquals("Amazon CloudFront", distribution.getName());
    distribution.setEnabled(false);
    // Update
    configuration.write(file, distribution, login);
    configuration.deleteDownloadDistribution(file, distribution);
}
Also used : Path(ch.cyberduck.core.Path) TestProtocol(ch.cyberduck.core.TestProtocol) Host(ch.cyberduck.core.Host) X509Certificate(java.security.cert.X509Certificate) LoginOptions(ch.cyberduck.core.LoginOptions) Distribution(ch.cyberduck.core.cdn.Distribution) DisabledLoginCallback(ch.cyberduck.core.DisabledLoginCallback) DefaultX509KeyManager(ch.cyberduck.core.ssl.DefaultX509KeyManager) Credentials(ch.cyberduck.core.Credentials) DistributionUrlProvider(ch.cyberduck.core.cdn.DistributionUrlProvider) DefaultX509TrustManager(ch.cyberduck.core.ssl.DefaultX509TrustManager) Ignore(org.junit.Ignore) Test(org.junit.Test) IntegrationTest(ch.cyberduck.test.IntegrationTest)

Aggregations

Distribution (ch.cyberduck.core.cdn.Distribution)4 DistributionUrlProvider (ch.cyberduck.core.cdn.DistributionUrlProvider)4 DescriptiveUrl (ch.cyberduck.core.DescriptiveUrl)3 DescriptiveUrlBag (ch.cyberduck.core.DescriptiveUrlBag)3 DefaultUrlProvider (ch.cyberduck.core.shared.DefaultUrlProvider)3 HostWebUrlProvider (ch.cyberduck.core.HostWebUrlProvider)2 SimplePathPredicate (ch.cyberduck.core.SimplePathPredicate)2 HostPreferences (ch.cyberduck.core.preferences.HostPreferences)2 Map (java.util.Map)2 Set (java.util.Set)2 Credentials (ch.cyberduck.core.Credentials)1 DisabledLoginCallback (ch.cyberduck.core.DisabledLoginCallback)1 Host (ch.cyberduck.core.Host)1 LoginOptions (ch.cyberduck.core.LoginOptions)1 Path (ch.cyberduck.core.Path)1 TestProtocol (ch.cyberduck.core.TestProtocol)1 BackgroundException (ch.cyberduck.core.exception.BackgroundException)1 DefaultX509KeyManager (ch.cyberduck.core.ssl.DefaultX509KeyManager)1 DefaultX509TrustManager (ch.cyberduck.core.ssl.DefaultX509TrustManager)1 IntegrationTest (ch.cyberduck.test.IntegrationTest)1