static OCStackResult OCParseSecurityPayload(OCPayload** outPayload, CborValue* rootValue) { if (!outPayload) { return OC_STACK_INVALID_PARAM; } bool err = false; char * securityData = NULL; CborValue map; size_t len; err = err || cbor_value_enter_container(rootValue, &map); err = err || cbor_value_dup_text_string(&map, &securityData, &len, NULL); err = err || cbor_value_leave_container(rootValue, &map); if(err) { OC_LOG(ERROR, TAG, "Cbor in error condition"); OICFree(securityData); return OC_STACK_MALFORMED_RESPONSE; } *outPayload = (OCPayload*)OCSecurityPayloadCreate(securityData); OICFree(securityData); return OC_STACK_OK; }
static OCStackResult OCParseSecurityPayload(OCPayload** outPayload, CborValue* rootValue) { OCStackResult ret = OC_STACK_MALFORMED_RESPONSE; CborError err; char *securityData = NULL; VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid parameter"); VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid cbor"); CborValue strVal; err = cbor_value_enter_container(rootValue, &strVal); VERIFY_CBOR_SUCCESS(TAG, err, "Failed entering container"); if (cbor_value_is_text_string(&strVal)) { size_t len = 0; err = cbor_value_dup_text_string(&strVal, &securityData, &len, NULL); VERIFY_CBOR_SUCCESS(TAG, err, "Failed reading security data"); *outPayload = (OCPayload *)OCSecurityPayloadCreate(securityData); VERIFY_PARAM_NON_NULL(TAG, *outPayload, "Invalid cbor"); ret = OC_STACK_OK; } exit: OICFree(securityData); return ret; }
//Cred DELETE request TEST(CredEntityHandlerTest, CredEntityHandlerDeleteTest) { OCEntityHandlerRequest ehReq = OCEntityHandlerRequest(); static OCPersistentStorage ps = OCPersistentStorage(); const OicSecCred_t* subjectCred1 = NULL; const OicSecCred_t* subjectCred2 = NULL; char *jsonStr = NULL; OCEntityHandlerResult ehRet = OC_EH_ERROR; char query[] = "sub=c3ViamVjdDE="; SetPersistentHandler(&ps, true); OicSecCred_t *cred = getCredList(); VERIFY_NON_NULL(TAG, cred, ERROR); jsonStr = BinToCredJSON(cred); VERIFY_NON_NULL(TAG, jsonStr, ERROR); // Create Entity Handler POST request payload ehReq.method = OC_REST_POST; ehReq.payload = (OCPayload*)OCSecurityPayloadCreate(jsonStr); ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq); EXPECT_TRUE(OC_EH_ERROR == ehRet); // Verify if SRM contains Credential for the subject subjectCred1 = GetCredResourceData(&cred->subject); EXPECT_TRUE(NULL != subjectCred1); // Create Entity Handler DELETE request ehReq.method = OC_REST_DELETE; ehReq.query = (char*)OICMalloc(strlen(query)+1); VERIFY_NON_NULL(TAG, ehReq.query, ERROR); OICStrcpy(ehReq.query, strlen(query)+1, query); ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq); EXPECT_TRUE(OC_EH_ERROR == ehRet); // Verify if SRM has deleted ACE for the subject subjectCred2 = GetCredResourceData(&cred->subject); EXPECT_TRUE(NULL == subjectCred2); exit: // Perform cleanup OICFree(ehReq.query); OICFree(jsonStr); OCPayloadDestroy(ehReq.payload); if(NULL != cred) { DeInitCredResource(); DeleteCredList(cred); } }
static OCStackResult OCParseSecurityPayload(OCPayload** outPayload, CborValue* arrayVal) { if (!outPayload) { return OC_STACK_INVALID_PARAM; } bool err = false; char * securityData = NULL; if(cbor_value_is_map(arrayVal)) { CborValue curVal; err = err || cbor_value_map_find_value(arrayVal, OC_RSRVD_REPRESENTATION, &curVal); if(cbor_value_is_valid(&curVal)) { size_t len; err = err || cbor_value_dup_text_string(&curVal, &securityData, &len, NULL); } } else { OC_LOG(ERROR, TAG, "Cbor main value not a map"); return OC_STACK_MALFORMED_RESPONSE; } err = err || cbor_value_advance(arrayVal); if(err) { OC_LOG(ERROR, TAG, "Cbor in error condition"); OICFree(securityData); return OC_STACK_MALFORMED_RESPONSE; } *outPayload = (OCPayload*)OCSecurityPayloadCreate(securityData); OICFree(securityData); return OC_STACK_OK; }
//Cred DELETE request TEST(CredResourceTest, CredEntityHandlerDeleteTest) { OCEntityHandlerRequest ehReq = OCEntityHandlerRequest(); static OCPersistentStorage ps = OCPersistentStorage(); const OicSecCred_t* subjectCred1 = NULL; const OicSecCred_t* subjectCred2 = NULL; OCEntityHandlerResult ehRet = OC_EH_ERROR; char query[] = "subjectuuid=31313131-3131-3131-3131-313131313131"; //canonical uuid of subject1 SetPersistentHandler(&ps, true); OicSecCred_t *cred = getCredList(); ASSERT_TRUE(NULL != cred); uint8_t *payload = NULL; size_t size = 0; EXPECT_EQ(OC_STACK_OK, CredToCBORPayload(cred, &payload, &size)); if (!payload) { DeleteCredList(cred); } ASSERT_TRUE(NULL != payload); // Create Entity Handler POST request payload ehReq.method = OC_REST_POST; ehReq.payload = (OCPayload *)OCSecurityPayloadCreate(payload, size); if (!ehReq.payload) { OICFree(payload); DeleteCredList(cred); } ASSERT_TRUE( NULL != ehReq.payload); EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OC_REQUEST_FLAG, &ehReq, NULL)); // Verify if SRM contains Credential for the subject subjectCred1 = GetCredResourceData(&cred->subject); EXPECT_TRUE(NULL != subjectCred1); // Create Entity Handler DELETE request ehReq.method = OC_REST_DELETE; ehReq.query = (char *)OICCalloc(1, strlen(query)+1); if (!ehReq.query) { OICFree(payload); DeleteCredList(cred); } ASSERT_TRUE(NULL != ehReq.query); OICStrcpy(ehReq.query, strlen(query)+1, query); ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq, NULL); EXPECT_EQ(OC_EH_ERROR, ehRet); // Verify if SRM has deleted ACE for the subject subjectCred2 = GetCredResourceData(&cred->subject); EXPECT_TRUE(NULL == subjectCred2); // Perform cleanup OICFree(ehReq.query); OICFree(payload); DeInitCredResource(); DeleteCredList(cred); OCPayloadDestroy((OCPayload *)ehReq.payload); }