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;
}
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;
}
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;
}
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);
}
Aggregations