456 |
456 |
457 DavResource* parse_propfind_response(DavSession *sn, DavResource *root, UcxBuffer *response) { |
457 DavResource* parse_propfind_response(DavSession *sn, DavResource *root, UcxBuffer *response) { |
458 char *url = NULL; |
458 char *url = NULL; |
459 curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &url); |
459 curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &url); |
460 if(!root) { |
460 if(!root) { |
461 printf("method.c: TODO: remove\n"); |
461 printf("methods.c: TODO: remove\n"); |
462 root = dav_resource_new_href(sn, util_url_path(url)); // TODO: remove |
462 root = dav_resource_new_href(sn, util_url_path(url)); // TODO: remove |
463 } |
463 } |
464 |
464 |
465 //printf("%.*s\n\n", response->size, response->space); |
465 //printf("%.*s\n\n", response->size, response->space); |
466 xmlDoc *doc = xmlReadMemory(response->space, response->size, url, NULL, 0); |
466 xmlDoc *doc = xmlReadMemory(response->space, response->size, url, NULL, 0); |
489 // create resource |
489 // create resource |
490 char *name = NULL; |
490 char *name = NULL; |
491 DavKey *key = NULL; |
491 DavKey *key = NULL; |
492 if(DAV_DECRYPT_NAME(sn) && response->crypto_name && (key = dav_context_get_key(sn->context, response->crypto_key))) { |
492 if(DAV_DECRYPT_NAME(sn) && response->crypto_name && (key = dav_context_get_key(sn->context, response->crypto_key))) { |
493 if(!response->crypto_key) { |
493 if(!response->crypto_key) { |
494 // TODO: error |
494 sn->error = DAV_ERROR; |
495 fprintf(stderr, "encrypted resource without key\n"); |
495 dav_session_set_errstr(sn, "Missing crypto-key property"); |
496 return NULL; |
496 return NULL; |
497 } |
497 } |
498 name = util_decrypt_str_k(sn, response->crypto_name, key); |
498 name = util_decrypt_str_k(sn, response->crypto_name, key); |
499 if(!name) { |
499 if(!name) { |
500 // TODO: error |
500 sn->error = DAV_ERROR; |
501 fprintf(stderr, "decrypted name is null\n"); |
501 dav_session_set_errstr(sn, "Cannot decrypt resource name"); |
502 return NULL; |
502 return NULL; |
503 } |
503 } |
504 } else { |
504 } else { |
505 sstr_t resname = sstr(util_resource_name(response->href)); |
505 sstr_t resname = sstr(util_resource_name(response->href)); |
506 int nlen = 0; |
506 int nlen = 0; |
638 if(!res) { |
638 if(!res) { |
639 // create new resource object |
639 // create new resource object |
640 char *name = NULL; |
640 char *name = NULL; |
641 if(DAV_DECRYPT_NAME(sn) && crypto_name) { |
641 if(DAV_DECRYPT_NAME(sn) && crypto_name) { |
642 if(!crypto_key) { |
642 if(!crypto_key) { |
643 // TODO: error |
643 sn->error = DAV_ERROR; |
644 fprintf(stderr, "encrypted resource without key\n"); |
644 dav_session_set_errstr(sn, "Missing crypto-key property"); |
|
645 return -1; |
645 } |
646 } |
646 name = util_decrypt_str(sn, crypto_name, crypto_key); |
647 name = util_decrypt_str(sn, crypto_name, crypto_key); |
647 if(!name) { |
648 if(!name) { |
648 // TODO: error |
649 sn->error = DAV_ERROR; |
649 fprintf(stderr, "decrypted name is null\n"); |
650 dav_session_set_errstr(sn, "Cannot decrypt resource name"); |
|
651 return -1; |
650 } |
652 } |
651 } else { |
653 } else { |
652 sstr_t resname = sstr(util_resource_name(href)); |
654 sstr_t resname = sstr(util_resource_name(href)); |
653 int nlen = 0; |
655 int nlen = 0; |
654 char *uname = curl_easy_unescape( |
656 char *uname = curl_easy_unescape( |