pwexport.cpp
来自「一款密码保险箱源码」· C++ 代码 · 共 818 行 · 第 1/2 页
CPP
818 行
{
_ExpStr(_T("\""));
_ExpSetSep(_T("\",\""));
_ExpResetSkip();
_ExpStrIf(pOptions->bGroup, _T("Password Groups"));
_ExpStrIf(pOptions->bGroupTree, _T("Group Tree"));
_ExpStrIf(pOptions->bTitle, _T("Account"));
_ExpStrIf(pOptions->bUserName, _T("Login Name"));
_ExpStrIf(pOptions->bPassword, _T("Password"));
_ExpStrIf(pOptions->bURL, _T("Web Site"));
_ExpStrIf(pOptions->bNotes, _T("Comments"));
_ExpStrIf(pOptions->bUUID, _T("UUID"));
_ExpStrIf(pOptions->bImage, _T("Icon"));
_ExpStrIf(pOptions->bCreationTime, _T("Creation Time"));
_ExpStrIf(pOptions->bLastAccTime, _T("Last Access"));
_ExpStrIf(pOptions->bLastModTime, _T("Last Modification"));
_ExpStrIf(pOptions->bExpireTime, _T("Expires"));
_ExpStrIf(pOptions->bAttachment, _T("Attachment Description"));
_ExpStrIf(pOptions->bAttachment, _T("Attachment"));
_ExpStr(_T("\""));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_KEEPASS)
{
DWORD dwGroupEnum;
PW_GROUP pwgTemplate;
for(dwGroupEnum = 0; dwGroupEnum < (DWORD)aGroupIds.size(); dwGroupEnum++)
{
PW_GROUP *pgCopy = m_pMgr->GetGroupById(aGroupIds[dwGroupEnum]);
ASSERT(pgCopy != NULL); if(pgCopy == NULL) return FALSE;
pwgTemplate = *pgCopy;
pwgTemplate.usLevel = (USHORT)(pwgTemplate.usLevel - usLevel);
pStoreMgr->AddGroup(&pwgTemplate);
}
}
else { ASSERT(FALSE); }
DWORD uNumEntries = m_pMgr->GetNumberOfEntries();
for(j = 0; j < (DWORD)aGroupIds.size(); j++)
{
dwThisId = aGroupIds[j];
if(m_pOptions->bExportBackups == FALSE)
{
if(dwThisId == dwInvalidId1) continue;
else if(dwThisId == dwInvalidId2) continue;
}
for(i = 0; i < uNumEntries; i++)
{
p = m_pMgr->GetEntry(i);
ASSERT_ENTRY(p);
// Are we exporting this group?
if(p->uGroupId != dwThisId) continue;
pg = m_pMgr->GetGroupById(p->uGroupId);
ASSERT(pg != NULL); if(pg == NULL) continue;
m_pMgr->UnlockEntryPassword(p);
_UuidToString(p->uuid, &strUUID);
strImage.Format(_T("%u"), p->uImageId);
if((m_nFormat == PWEXP_CSV) || (m_nFormat == PWEXP_XML))
{
_PwTimeToXmlTime(p->tCreation, &strCreationTime);
_PwTimeToXmlTime(p->tLastAccess, &strLastAccTime);
_PwTimeToXmlTime(p->tLastMod, &strLastModTime);
_PwTimeToXmlTime(p->tExpire, &strExpireTime);
}
else
{
_PwTimeToString(p->tCreation, &strCreationTime);
_PwTimeToString(p->tLastAccess, &strLastAccTime);
_PwTimeToString(p->tLastMod, &strLastModTime);
_PwTimeToString(p->tExpire, &strExpireTime);
}
strGroupTree = MakeGroupTreeString(pg->uGroupId);
ASSERT(p->pszBinaryDesc != NULL);
if((pOptions->bAttachment == TRUE) && (p->uBinaryDataLen != 0) && (p->pBinaryData != NULL))
{
DWORD dwBufSize = (((p->uBinaryDataLen + 2) / 3) << 2) + 1;
pbEncodedAttachment = new BYTE[dwBufSize + 1];
ASSERT(pbEncodedAttachment != NULL);
if(pbEncodedAttachment != NULL)
{
if(CBase64Codec::Encode(p->pBinaryData, p->uBinaryDataLen,
pbEncodedAttachment, &dwBufSize) == false)
{
SAFE_DELETE_ARRAY(pbEncodedAttachment);
}
}
}
else pbEncodedAttachment = NULL;
if(m_nFormat == PWEXP_TXT)
{
_ExpSetSep(NULL);
_ExpStrIf(pOptions->bTitle, _T("["));
_ExpStrIf(pOptions->bTitle, p->pszTitle);
_ExpStrIf(pOptions->bTitle, _T("]"));
if(pOptions->bTitle == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bGroup, TRL("Group:"));
_ExpStrIf(pOptions->bGroup, _T(" "));
_ExpStrIf(pOptions->bGroup, pg->pszGroupName);
if(pOptions->bGroup == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bGroupTree, TRL("Group Tree"));
_ExpStrIf(pOptions->bGroupTree, _T(": "));
_ExpStrIf(pOptions->bGroupTree, strGroupTree);
if(pOptions->bGroupTree == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bUserName, TRL("UserName:"));
_ExpStrIf(pOptions->bUserName, _T(" "));
_ExpStrIf(pOptions->bUserName, p->pszUserName);
if(pOptions->bUserName == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bURL, TRL("URL:"));
_ExpStrIf(pOptions->bURL, _T(" "));
_ExpStrIf(pOptions->bURL, p->pszURL);
if(pOptions->bURL == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bPassword, TRL("Password:"));
_ExpStrIf(pOptions->bPassword, _T(" "));
_ExpStrIf(pOptions->bPassword, p->pszPassword);
if(pOptions->bPassword == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bNotes, TRL("Notes:"));
_ExpStrIf(pOptions->bNotes, _T(" "));
_ExpStrIf(pOptions->bNotes, p->pszAdditional);
if(pOptions->bNotes == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bUUID, TRL("UUID"));
_ExpStrIf(pOptions->bUUID, _T(": "));
_ExpStrIf(pOptions->bUUID, strUUID);
if(pOptions->bUUID == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bImage, TRL("Icon"));
_ExpStrIf(pOptions->bImage, _T(": "));
_ExpStrIf(pOptions->bImage, strImage);
if(pOptions->bImage == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bCreationTime, TRL("Creation Time"));
_ExpStrIf(pOptions->bCreationTime, _T(": "));
_ExpStrIf(pOptions->bCreationTime, strCreationTime);
if(pOptions->bCreationTime == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bLastAccTime, TRL("Last Access"));
_ExpStrIf(pOptions->bLastAccTime, _T(": "));
_ExpStrIf(pOptions->bLastAccTime, strLastAccTime);
if(pOptions->bLastAccTime == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bLastModTime, TRL("Last Modification"));
_ExpStrIf(pOptions->bLastModTime, _T(": "));
_ExpStrIf(pOptions->bLastModTime, strLastModTime);
if(pOptions->bLastModTime == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bExpireTime, TRL("Expires"));
_ExpStrIf(pOptions->bExpireTime, _T(": "));
_ExpStrIf(pOptions->bExpireTime, strExpireTime);
if(pOptions->bExpireTime == TRUE) _ExpStr(m_pszNewLine);
if(p->pszBinaryDesc[0] != 0)
{
_ExpStrIf(pOptions->bAttachment, TRL("Attachment Description"));
_ExpStrIf(pOptions->bAttachment, _T(": "));
_ExpStrIf(pOptions->bAttachment, p->pszBinaryDesc);
if(pOptions->bAttachment == TRUE) _ExpStr(m_pszNewLine);
}
if((p->uBinaryDataLen != 0) && (pbEncodedAttachment != NULL))
{
_ExpStrIf(pOptions->bAttachment, TRL("Attachment"));
_ExpStrIf(pOptions->bAttachment, _T(": "));
_ExpStrIf(pOptions->bAttachment, (LPCTSTR)pbEncodedAttachment);
if(pOptions->bAttachment == TRUE) _ExpStr(m_pszNewLine);
}
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_HTML)
{
_ExpStr(_T("<tr><td>"));
_ExpSetSep(_T("</td><td>"));
_ExpResetSkip();
_ExpHtmlStrIf(pOptions->bGroup, pg->pszGroupName);
_ExpHtmlStrIf(pOptions->bGroupTree, strGroupTree);
_ExpHtmlStrIf(pOptions->bTitle, p->pszTitle);
_ExpHtmlStrIf(pOptions->bUserName, p->pszUserName);
if((pOptions->bURL == TRUE) && (_tcslen(p->pszURL) != 0))
{
_ExpStrIf(pOptions->bURL, _T("<a href=\""));
_ExpStr(p->pszURL);
_ExpStr(_T("\">"));
_ExpHtmlStr(p->pszURL);
_ExpStr(_T("</a>"));
}
else _ExpHtmlStrIf(pOptions->bURL, _T(""));
_ExpHtmlStrIf(pOptions->bPassword, p->pszPassword);
_ExpHtmlStrIf(pOptions->bNotes, p->pszAdditional);
_ExpHtmlStrIf(pOptions->bUUID, strUUID);
_ExpHtmlStrIf(pOptions->bImage, strImage);
_ExpHtmlStrIf(pOptions->bCreationTime, strCreationTime);
_ExpHtmlStrIf(pOptions->bLastAccTime, strLastAccTime);
_ExpHtmlStrIf(pOptions->bLastModTime, strLastModTime);
_ExpHtmlStrIf(pOptions->bExpireTime, strExpireTime);
if(p->pszBinaryDesc[0] != 0)
_ExpStrIf(pOptions->bAttachment, p->pszBinaryDesc);
else
_ExpHtmlStrIf(pOptions->bAttachment, _T(""));
if((p->uBinaryDataLen != 0) && (pbEncodedAttachment != NULL))
_ExpStrIf(pOptions->bAttachment, (LPCTSTR)pbEncodedAttachment);
else
_ExpHtmlStrIf(pOptions->bAttachment, _T(""));
_ExpStr(_T("</td></tr>"));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_XML)
{
_ExpSetSep(NULL);
_ExpStr(_T("<pwentry>")); _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bGroup, _T("\t<group"));
if((pOptions->bGroup == TRUE) && (strGroupTree.GetLength() != 0))
{
_ExpStrIf(pOptions->bGroupTree, _T(" tree=\""));
_ExpStrIf(pOptions->bGroupTree, (LPCTSTR)strGroupTree);
_ExpStrIf(pOptions->bGroupTree, _T("\""));
}
_ExpStrIf(pOptions->bGroup, _T(">"));
_ExpXmlStrIf(pOptions->bGroup, pg->pszGroupName);
_ExpStrIf(pOptions->bGroup, _T("</group>"));
if(pOptions->bGroup == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bTitle, _T("\t<title>"));
_ExpXmlStrIf(pOptions->bTitle, p->pszTitle);
_ExpStrIf(pOptions->bTitle, _T("</title>"));
if(pOptions->bTitle == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bUserName, _T("\t<username>"));
_ExpXmlStrIf(pOptions->bUserName, p->pszUserName);
_ExpStrIf(pOptions->bUserName, _T("</username>"));
if(pOptions->bUserName == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bURL, _T("\t<url>"));
_ExpXmlStrIf(pOptions->bURL, p->pszURL);
_ExpStrIf(pOptions->bURL, _T("</url>"));
if(pOptions->bURL == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bPassword, _T("\t<password>"));
_ExpXmlStrIf(pOptions->bPassword, p->pszPassword);
_ExpStrIf(pOptions->bPassword, _T("</password>"));
if(pOptions->bPassword == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bNotes, _T("\t<notes>"));
_ExpXmlStrIf(pOptions->bNotes, p->pszAdditional);
_ExpStrIf(pOptions->bNotes, _T("</notes>"));
if(pOptions->bNotes == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bUUID, _T("\t<uuid>"));
_ExpXmlStrIf(pOptions->bUUID, strUUID);
_ExpStrIf(pOptions->bUUID, _T("</uuid>"));
if(pOptions->bUUID == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bImage, _T("\t<image>"));
_ExpXmlStrIf(pOptions->bImage, (LPCTSTR)strImage);
_ExpStrIf(pOptions->bImage, _T("</image>"));
if(pOptions->bImage == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bCreationTime, _T("\t<creationtime>"));
_ExpXmlStrIf(pOptions->bCreationTime, (LPCTSTR)strCreationTime);
_ExpStrIf(pOptions->bCreationTime, _T("</creationtime>"));
if(pOptions->bCreationTime == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bLastModTime, _T("\t<lastmodtime>"));
_ExpXmlStrIf(pOptions->bLastModTime, (LPCTSTR)strLastModTime);
_ExpStrIf(pOptions->bLastModTime, _T("</lastmodtime>"));
if(pOptions->bLastModTime == TRUE) _ExpStr(m_pszNewLine);
_ExpStrIf(pOptions->bLastAccTime, _T("\t<lastaccesstime>"));
_ExpXmlStrIf(pOptions->bLastAccTime, (LPCTSTR)strLastAccTime);
_ExpStrIf(pOptions->bLastAccTime, _T("</lastaccesstime>"));
if(pOptions->bLastAccTime == TRUE) _ExpStr(m_pszNewLine);
if(memcmp(&p->tExpire, &tNever, sizeof(PW_TIME)) == 0)
_ExpStrIf(pOptions->bExpireTime, _T("\t<expiretime expires=\"false\">"));
else
_ExpStrIf(pOptions->bExpireTime, _T("\t<expiretime expires=\"true\">"));
_ExpXmlStrIf(pOptions->bExpireTime, (LPCTSTR)strExpireTime);
_ExpStrIf(pOptions->bExpireTime, _T("</expiretime>"));
if(pOptions->bExpireTime == TRUE) _ExpStr(m_pszNewLine);
if(p->pszBinaryDesc[0] != 0)
{
_ExpStrIf(pOptions->bAttachment, _T("\t<attachdesc>"));
_ExpXmlStrIf(pOptions->bAttachment, p->pszBinaryDesc);
_ExpStrIf(pOptions->bAttachment, _T("</attachdesc>"));
if(pOptions->bAttachment == TRUE) _ExpStr(m_pszNewLine);
}
if((p->uBinaryDataLen != 0) && (pbEncodedAttachment != NULL))
{
_ExpStrIf(pOptions->bAttachment, _T("\t<attachment>"));
_ExpStrIf(pOptions->bAttachment, (LPCTSTR)pbEncodedAttachment);
_ExpStrIf(pOptions->bAttachment, _T("</attachment>"));
if(pOptions->bAttachment == TRUE) _ExpStr(m_pszNewLine);
}
_ExpStr(_T("</pwentry>"));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_CSV)
{
_ExpStr(_T("\""));
_ExpSetSep(_T("\",\""));
_ExpResetSkip();
_ExpCsvStrIf(pOptions->bGroup, pg->pszGroupName);
_ExpCsvStrIf(pOptions->bGroupTree, strGroupTree);
_ExpCsvStrIf(pOptions->bTitle, p->pszTitle);
_ExpCsvStrIf(pOptions->bUserName, p->pszUserName);
_ExpCsvStrIf(pOptions->bPassword, p->pszPassword);
_ExpCsvStrIf(pOptions->bURL, p->pszURL);
_ExpCsvStrIf(pOptions->bNotes, p->pszAdditional);
_ExpCsvStrIf(pOptions->bUUID, strUUID);
_ExpCsvStrIf(pOptions->bImage, strImage);
_ExpCsvStrIf(pOptions->bCreationTime, strCreationTime);
_ExpCsvStrIf(pOptions->bLastAccTime, strLastAccTime);
_ExpCsvStrIf(pOptions->bLastModTime, strLastModTime);
_ExpCsvStrIf(pOptions->bExpireTime, strExpireTime);
if(p->pszBinaryDesc[0] != 0)
_ExpCsvStrIf(pOptions->bAttachment, p->pszBinaryDesc);
else
_ExpCsvStrIf(pOptions->bAttachment, _T(""));
if((p->uBinaryDataLen != 0) && (pbEncodedAttachment != NULL))
_ExpCsvStrIf(pOptions->bAttachment, (LPCTSTR)pbEncodedAttachment);
else
_ExpCsvStrIf(pOptions->bAttachment, _T(""));
_ExpStr(_T("\""));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_KEEPASS)
{
VERIFY(pStoreMgr->AddEntry(p));
}
else { ASSERT(FALSE); }
SAFE_DELETE_ARRAY(pbEncodedAttachment);
m_pMgr->LockEntryPassword(p);
}
}
if(m_nFormat == PWEXP_TXT)
{ // Nothing to do to finalize TXT
}
else if(m_nFormat == PWEXP_HTML)
{
_ExpStr(_T("</table></body></html>"));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_XML)
{
_ExpStr(_T("</pwlist>"));
_ExpStr(m_pszNewLine);
}
else if(m_nFormat == PWEXP_CSV)
{ // Nothing to do to finalize CSV
}
else if(m_nFormat == PWEXP_KEEPASS)
{
if(pStoreMgr->SaveDatabase(pszFile) != PWE_SUCCESS) bReturn = FALSE;
}
else { ASSERT(FALSE); } // Unknown format, should never happen
if(m_nFormat != PWEXP_KEEPASS)
{
ASSERT(fp != NULL);
if(fp != NULL) fclose(fp);
fp = NULL; m_fp = NULL;
}
aGroupIds.clear();
return bReturn;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?