storage_uri::storage_uri(const web::http::uri& primary_uri, const web::http::uri& secondary_uri) : m_primary_uri(primary_uri), m_secondary_uri(secondary_uri) { if (primary_uri.is_empty()) { throw std::invalid_argument("primary_uri"); } if (!secondary_uri.is_empty() && (primary_uri.resource() != secondary_uri.resource())) { throw std::invalid_argument(utility::conversions::to_utf8string(protocol::error_storage_uri_mismatch)); } }
web::http::uri generate_queue_uri(const web::http::uri& base_uri, const utility::string_t& prefix, bool get_metadata, int max_results, const continuation_token& continuation_token) { if (base_uri.is_empty()) { return web::http::uri(); } web::http::uri_builder builder(base_uri); if (!prefix.empty()) { builder.append_query(U("prefix"), prefix); } if (get_metadata) { builder.append_query(U("include"), U("metadata")); } if (max_results >= 0) { builder.append_query(U("maxresults"), max_results); } if (!continuation_token.empty()) { builder.append_query(continuation_token.next_marker()); } return builder.to_uri(); }
web::http::uri generate_queue_uri(const web::http::uri& base_uri, const utility::string_t& prefix, bool get_metadata, int max_results, const continuation_token& token) { if (base_uri.is_empty()) { return web::http::uri(); } web::http::uri_builder builder(base_uri); if (!prefix.empty()) { builder.append_query(core::make_query_parameter(uri_query_prefix, prefix)); } if (get_metadata) { builder.append_query(core::make_query_parameter(uri_query_include, component_metadata, /* do_encoding */ false)); } if (max_results > 0) { builder.append_query(core::make_query_parameter(uri_query_max_results, max_results, /* do_encoding */ false)); } if (!token.empty()) { builder.append_query(token.next_marker()); } return builder.to_uri(); }
web::http::uri blob_service_test_base::defiddler(const web::http::uri& uri) { if (uri.host() == U("ipv4.fiddler")) { web::http::uri_builder builder(uri); builder.set_host(U("127.0.0.1")); return builder.to_uri(); } return uri; }
web::http::uri generate_queue_uri(const web::http::uri& base_uri, const cloud_queue& queue) { if (base_uri.is_empty()) { return web::http::uri(); } web::http::uri_builder builder(base_uri); builder.append_path(queue.name(), /* do_encoding */ true); return builder.to_uri(); }
storage_credentials parse_query(const web::http::uri& uri, bool require_signed_resource) { // Order of the strings in the sas_parameters vector is per MSDN's // definition of Shared Access Signatures. const utility::string_t sas_parameters[] = { protocol::uri_query_sas_version, protocol::uri_query_sas_resource, protocol::uri_query_sas_table_name, protocol::uri_query_sas_start, protocol::uri_query_sas_expiry, protocol::uri_query_sas_permissions, protocol::uri_query_sas_start_partition_key, protocol::uri_query_sas_start_row_key, protocol::uri_query_sas_end_partition_key, protocol::uri_query_sas_end_row_key, protocol::uri_query_sas_identifier, protocol::uri_query_sas_cache_control, protocol::uri_query_sas_content_disposition, protocol::uri_query_sas_content_encoding, protocol::uri_query_sas_content_language, protocol::uri_query_sas_content_type, protocol::uri_query_sas_signature, }; const int sas_parameters_size = (int) (sizeof(sas_parameters) / sizeof(sas_parameters[0])); auto splitted_query = web::http::uri::split_query(uri.query()); bool params_found = false; web::http::uri_builder builder; for (int i = 0; i < sas_parameters_size; ++i) { auto param = splitted_query.find(sas_parameters[i]); if (param != splitted_query.end()) { params_found = true; add_query_if_not_empty(builder, param->first, param->second, /* do_encoding */ false); } } if (!params_found) { return storage_credentials(); } auto signature = splitted_query.find(protocol::uri_query_sas_signature); auto signed_resource = splitted_query.find(protocol::uri_query_sas_resource); if ((signature == splitted_query.end()) || (require_signed_resource && (signed_resource == splitted_query.end()))) { throw std::invalid_argument(protocol::error_missing_params_for_sas); } return storage_credentials(builder.query()); }
web::http::uri generate_queue_message_uri(const web::http::uri& base_uri, const cloud_queue& queue, const utility::string_t& message_id) { if (base_uri.is_empty()) { return web::http::uri(); } web::http::uri_builder builder(base_uri); builder.append_path(queue.name(), /* do_encoding */ true); builder.append_path(_XPLATSTR("messages")); builder.append_path(message_id, /* do_encoding */ true); return builder.to_uri(); }
cloud_storage_account cloud_storage_account::get_development_storage_account(const web::http::uri& proxy_uri) { web::http::uri_builder builder; if (!proxy_uri.is_empty()) { builder.set_scheme(proxy_uri.scheme()); builder.set_host(proxy_uri.host()); } else { builder.set_scheme(U("http")); builder.set_host(U("127.0.0.1")); } builder.set_path(devstore_account_name); builder.set_port(10000); auto blob_endpoint = storage_uri(builder.to_uri()); builder.set_port(10001); auto queue_endpoint = storage_uri(builder.to_uri()); builder.set_port(10002); auto table_endpoint = storage_uri(builder.to_uri()); auto credentials = storage_credentials(devstore_account_name, devstore_account_key); auto account = cloud_storage_account(credentials, blob_endpoint, queue_endpoint, table_endpoint); account.m_is_development_storage_account = true; account.m_settings.insert(std::make_pair(use_development_storage_setting_string, use_development_storage_setting_value)); if (!proxy_uri.is_empty()) { account.m_settings.insert(std::make_pair(development_storage_proxy_uri_setting_string, proxy_uri.to_string())); } return account; }