bool myLabelcompare(SecureString a, SecureString b) { const char* aStr = a.getUnsecureString(); const char* bStr = b.getUnsecureString(); bool res = _strcmpi(aStr, bStr) < 0; a.UnsecuredStringFinished(); b.UnsecuredStringFinished(); return res; }
bool myPwdCompare(Pwd* a, Pwd* b) { SecureString aSstr = a->GetDescription(); const char* aStr = aSstr.getUnsecureString(); SecureString bSstr = b->GetDescription(); const char* bStr = bSstr.getUnsecureString(); bool res = _strcmpi(aStr, bStr) < 0; aSstr.UnsecuredStringFinished(); bSstr.UnsecuredStringFinished(); return res; }
PwdList::PwdVector PwdList::Filter(const SecureString& pattern, const PwdLabelVector& labels) { std::lock_guard<std::recursive_mutex> lock(mutex_lock); PwdVector filtered; if (pattern.length() > 0) { SecureString patternCpy = pattern; char* strPtrn = (char*)patternCpy.getUnsecureString(); for (auto it = pwds.begin(); it != pwds.end(); it++) { SecureString description = (*it)->GetDescription(); if (strcasestr((char*)description.getUnsecureString(), strPtrn) != NULL) { filtered.push_back((*it)); } description.UnsecuredStringFinished(); } patternCpy.UnsecuredStringFinished(); } else { filtered = PwdVector(pwds.begin(), pwds.end()); } if (labels.size() > 0) { for (auto iLabel = labels.begin(); iLabel != labels.end(); iLabel++) { PwdVector passed; for (auto iPwd = filtered.begin(); iPwd != filtered.end(); iPwd++) { if ((*iPwd)->HasLabel(*iLabel)) { passed.push_back(*iPwd); } } filtered = passed; } } pwds.sort(myPwdCompare); return filtered; }
PwdLabelVector PwdList::FilterLabels(SecureString pattern) { std::lock_guard<std::recursive_mutex> lock(mutex_lock); PwdLabelVector vector; const char* strPtrn = pattern.getUnsecureString(); for (auto it = existingLabels.begin(); it != existingLabels.end(); it++) { if (strstr(strPtrn, (*it).getUnsecureString()) != NULL) { vector.push_back((*it)); } (*it).UnsecuredStringFinished(); } pattern.UnsecuredStringFinished(); std::sort(vector.begin(), vector.end(), myLabelcompare); return vector; }