Beispiel #1
0
static void clientIoGet(const char* dntoken)
{
	const char text[] = "Hello, world!";
	char* url = Qiniu_String_Concat("http://", domain, "/", key, "?token=", dntoken, NULL);

	long code, httpCode;
	CURL* curl = curl_easy_init();
	Qiniu_Buffer resp;
	Qiniu_Buffer respHeader;

	Qiniu_Buffer_Init(&resp, 1024);
	Qiniu_Buffer_Init(&respHeader, 1024);

	printf("url: %s\n", url);

	curl_easy_setopt(curl, CURLOPT_URL, url);
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Qiniu_Buffer_Fwrite);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resp);
	curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, Qiniu_Buffer_Fwrite);
	curl_easy_setopt(curl, CURLOPT_HEADERDATA, &respHeader);

	code = curl_easy_perform(curl);

	printf("\n%s", Qiniu_Buffer_CStr(&respHeader));
	CU_ASSERT(code == 0);

	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode);
	CU_ASSERT(httpCode == 200);

	CU_ASSERT_STRING_EQUAL(Qiniu_Buffer_CStr(&resp), text);

	curl_easy_cleanup(curl);
}
Beispiel #2
0
char* Qiniu_Mac_SignToken(Qiniu_Mac* self, char* policy_str)
{
	char* token;
	char* encoded_digest;
	char digest[EVP_MAX_MD_SIZE + 1];
	unsigned int dgtlen = sizeof(digest);
	HMAC_CTX ctx;
	Qiniu_Mac mac;

	char* encoded_policy_str = Qiniu_String_Encode(policy_str);

	if (self) {
		mac = *self;
	} else {
		mac.accessKey = QINIU_ACCESS_KEY;
		mac.secretKey = QINIU_SECRET_KEY;
	}

	HMAC_CTX_init(&ctx);
	HMAC_Init_ex(&ctx, mac.secretKey, strlen(mac.secretKey), EVP_sha1(), NULL);
	HMAC_Update(&ctx, encoded_policy_str, strlen(encoded_policy_str));
	HMAC_Final(&ctx, digest, &dgtlen);
	HMAC_CTX_cleanup(&ctx);

	encoded_digest = Qiniu_Memory_Encode(digest, dgtlen);
	token = Qiniu_String_Concat(mac.accessKey, ":", encoded_digest, ":", encoded_policy_str, NULL);
	free(encoded_policy_str);
	free(encoded_digest);

	return token;
}
Beispiel #3
0
static Qiniu_Error Qiniu_Mac_Auth(
	void* self, Qiniu_Header** header, const char* url, const char* addition, size_t addlen)
{
	Qiniu_Error err;
	char* auth;
	char* enc_digest;
	char digest[EVP_MAX_MD_SIZE + 1];
	unsigned int dgtlen = sizeof(digest);
	HMAC_CTX ctx;
	Qiniu_Mac mac;

	char const* path = strstr(url, "://");
	if (path != NULL) {
		path = strchr(path + 3, '/');
	}
	if (path == NULL) {
		err.code = 400;
		err.message = "invalid url";
		return err;
	}

	if (self) {
		mac = *(Qiniu_Mac*)self;
	} else {
		mac.accessKey = QINIU_ACCESS_KEY;
		mac.secretKey = QINIU_SECRET_KEY;
	}

	HMAC_CTX_init(&ctx);
	HMAC_Init_ex(&ctx, mac.secretKey, strlen(mac.secretKey), EVP_sha1(), NULL);
	HMAC_Update(&ctx, path, strlen(path));
	HMAC_Update(&ctx, "\n", 1);

	if (addlen > 0) {
		HMAC_Update(&ctx, addition, addlen);
	}

	HMAC_Final(&ctx, digest, &dgtlen);
	HMAC_CTX_cleanup(&ctx);

	enc_digest = Qiniu_Memory_Encode(digest, dgtlen);

	auth = Qiniu_String_Concat("Authorization: QBox ", mac.accessKey, ":", enc_digest, NULL);
	free(enc_digest);

	*header = curl_slist_append(*header, auth);
	free(auth);

	return Qiniu_OK;
}
Beispiel #4
0
char* Qiniu_RS_MakeBaseUrl(const char* domain, const char* key)
{
	Qiniu_Bool fesc;
	char* baseUrl;
	char* escapedKey = Qiniu_PathEscape(key, &fesc);

	baseUrl = Qiniu_String_Concat("http://", domain, "/", escapedKey, NULL);

	if (fesc) {
		Qiniu_Free(escapedKey);
	}

	return baseUrl;
}
Beispiel #5
0
static void clientIoGet(const char* dntoken)
{
	Qiniu_Eq eq;
	Qiniu_Seq seq;
	Qiniu_Int64 fsize = testFsize;
	Qiniu_Reader in = Qiniu_SeqReader(&seq, fsize, 10, '0', 0);
	Qiniu_Writer w = Qiniu_EqWriter(&eq, in);

	char* url = Qiniu_String_Concat("http://", domain, "/", key, "?token=", dntoken, NULL);

	long code, httpCode;
	CURL* curl = curl_easy_init();
	Qiniu_Buffer respHeader;
	Qiniu_Buffer_Init(&respHeader, 1024);

	printf("url: %s\n", url);

	curl_easy_setopt(curl, CURLOPT_URL, url);
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, w.Write);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, w.self);
	curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, Qiniu_Buffer_Fwrite);
	curl_easy_setopt(curl, CURLOPT_HEADERDATA, &respHeader);

	code = curl_easy_perform(curl);

	printf("\n%s", Qiniu_Buffer_CStr(&respHeader));
	printf("\ncurl.code: %d, eq.result: %d\n", (int)code, eq.result);
	CU_ASSERT(code == 0);

	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode);
	CU_ASSERT(httpCode == 200);

	CU_ASSERT(Qiniu_Is(&eq));

	curl_easy_cleanup(curl);
}