Copyright Microsoft Corporation
Licensed 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.
/**
* Copyright Microsoft Corporation
*
* Licensed 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.
*/
package com.microsoft.azure.storage;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import com.microsoft.azure.storage.core.PathUtility;
import com.microsoft.azure.storage.core.SR;
Represents storage credentials for delegated access to Blob service resources via a shared access signature.
/**
* Represents storage credentials for delegated access to Blob service resources via a shared access signature.
*/
public final class StorageCredentialsSharedAccessSignature extends StorageCredentials {
Stores the shared access signature token.
/**
* Stores the shared access signature token.
*/
private final String token;
Creates an instance of the StorageCredentialsSharedAccessSignature
class using the specified shared
access signature token.
Params: - token –
A
String
that represents shared access signature token.
/**
* Creates an instance of the <code>StorageCredentialsSharedAccessSignature</code> class using the specified shared
* access signature token.
*
* @param token
* A <code>String</code> that represents shared access signature token.
*/
public StorageCredentialsSharedAccessSignature(final String token) {
this.token = token;
if (token == null) {
this.setHttpsOnly(false);
}
else {
try {
Map<String, String[]> queryParams = PathUtility.parseQueryString(token);
final String[] protocols = queryParams.get(Constants.QueryConstants.SIGNED_PROTOCOLS);
this.setHttpsOnly((protocols != null) && Constants.HTTPS.equals(protocols[0]));
}
catch (StorageException e) {
this.setHttpsOnly(false);
}
}
}
Returns the shared access signature token.
Returns: A String
that contains the token.
/**
* Returns the shared access signature token.
*
* @return A <code>String</code> that contains the token.
*/
public String getToken() {
return this.token;
}
Returns a String
that represents this instance, optionally including sensitive data.
Params: - exportSecrets –
true
to include sensitive data in the return string; otherwise, false
.
Returns: A String
that represents this object, optionally including sensitive data.
/**
* Returns a <code>String</code> that represents this instance, optionally including sensitive data.
*
* @param exportSecrets
* <code>true</code> to include sensitive data in the return string; otherwise, <code>false</code>.
* @return A <code>String</code> that represents this object, optionally including sensitive data.
*/
@Override
public String toString(final boolean exportSecrets) {
return String.format("%s=%s", CloudStorageAccount.SHARED_ACCESS_SIGNATURE_NAME, exportSecrets ? this.token
: "[signature hidden]");
}
Transforms a resource URI into a shared access signature URI, by appending a shared access token and using the
specified operation context.
Params: - resourceUri –
A
java.net.URI
object that represents the resource URI to be transformed. - opContext – An
OperationContext
object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws: - StorageException –
If a storage service error occurred.
- URISyntaxException –
If the resource URI is not properly formatted.
Returns: A java.net.URI
object that represents the signature, including the resource URI and the
shared access token.
/**
* Transforms a resource URI into a shared access signature URI, by appending a shared access token and using the
* specified operation context.
*
* @param resourceUri
* A <code>java.net.URI</code> object that represents the resource URI to be transformed.
* @param opContext
* An {@link OperationContext} object that represents the context for the current operation. This object
* is used to track requests to the storage service, and to provide additional runtime information about
* the operation.
*
* @return A <code>java.net.URI</code> object that represents the signature, including the resource URI and the
* shared access token.
*
* @throws StorageException
* If a storage service error occurred.
* @throws URISyntaxException
* If the resource URI is not properly formatted.
*/
@Override
public URI transformUri(final URI resourceUri, final OperationContext opContext)
throws URISyntaxException, StorageException {
if (resourceUri == null) {
return null;
}
if(this.isHttpsOnly() && !resourceUri.getScheme().equals(Constants.HTTPS)) {
throw new IllegalArgumentException(SR.CANNOT_TRANSFORM_NON_HTTPS_URI_WITH_HTTPS_ONLY_CREDENTIALS);
}
// append the sas token to the resource uri
URI sasUri = PathUtility.addToQuery(resourceUri, this.token);
// append the api version parameter to the sas uri
String apiVersion = Constants.QueryConstants.API_VERSION + "=" + Constants.HeaderConstants.TARGET_STORAGE_VERSION;
return PathUtility.addToQuery(sasUri, apiVersion);
}
Transforms a resource URI into a shared access signature URI, by appending a shared access token and using the
specified operation context.
Params: - resourceUri –
A
StorageUri
object that represents the resource URI to be transformed. - opContext – An
OperationContext
object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws: - StorageException –
If a storage service error occurred.
- URISyntaxException –
If the resource URI is not properly formatted.
Returns: A StorageUri
object that represents the signature, including the resource URI and the
shared access token.
/**
* Transforms a resource URI into a shared access signature URI, by appending a shared access token and using the
* specified operation context.
*
* @param resourceUri
* A <code>StorageUri</code> object that represents the resource URI to be transformed.
* @param opContext
* An {@link OperationContext} object that represents the context for the current operation. This object
* is used to track requests to the storage service, and to provide additional runtime information about
* the operation.
*
* @return A <code>StorageUri</code> object that represents the signature, including the resource URI and the
* shared access token.
*
* @throws StorageException
* If a storage service error occurred.
* @throws URISyntaxException
* If the resource URI is not properly formatted.
*/
@Override
public StorageUri transformUri(StorageUri resourceUri, OperationContext opContext) throws URISyntaxException,
StorageException {
return new StorageUri(this.transformUri(resourceUri.getPrimaryUri(), opContext), this.transformUri(
resourceUri.getSecondaryUri(), opContext));
}
}