diff options
author | Alexander Lantsev <aunsane@gmail.com> | 2014-10-06 19:23:04 +0000 |
---|---|---|
committer | Alexander Lantsev <aunsane@gmail.com> | 2014-10-06 19:23:04 +0000 |
commit | 8efc51aefbfcc6a41d9acabe9383a337500b0049 (patch) | |
tree | 8d86530327e674d551cf61580d1daaf2a07d9262 /protocols/Tox/src/tox_profile.cpp | |
parent | cea7fc1a7e6b72703914d7a92763bb4236976db6 (diff) |
Tox: - password dialog for encrypted profile
git-svn-id: http://svn.miranda-ng.org/main/trunk@10713 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Tox/src/tox_profile.cpp')
-rw-r--r-- | protocols/Tox/src/tox_profile.cpp | 131 |
1 files changed, 89 insertions, 42 deletions
diff --git a/protocols/Tox/src/tox_profile.cpp b/protocols/Tox/src/tox_profile.cpp index 6fe48686b6..417042a9b6 100644 --- a/protocols/Tox/src/tox_profile.cpp +++ b/protocols/Tox/src/tox_profile.cpp @@ -15,13 +15,13 @@ std::tstring CToxProto::GetToxProfilePath(const TCHAR *accountName) return profilePath;
}
-void CToxProto::LoadToxProfile()
+bool CToxProto::LoadToxProfile()
{
DWORD size = GetFileSize(hProfile, NULL);
if (size == 0)
{
debugLogA("CToxProto::LoadToxData: tox profile is empty");
- return;
+ return false;
}
DWORD read = 0;
@@ -30,34 +30,53 @@ void CToxProto::LoadToxProfile() {
debugLogA("CToxProto::LoadToxData: could not read tox profile");
mir_free(data);
- return;
+ return false;
}
if (tox_is_data_encrypted(data))
{
- ptrT password(getTStringA("Password"));
- char *password_utf8 = mir_utf8encodeW(password);
- if (tox_encrypted_load(tox, data, size, (uint8_t*)password_utf8, strlen(password_utf8)) == TOX_ERROR)
+ ptrA password(mir_utf8encodeW(ptrT(getTStringA("Password"))));
+ if (password == NULL || strlen(password) == 0)
+ {
+ INT_PTR result = DialogBoxParam(
+ g_hInstance,
+ MAKEINTRESOURCE(IDD_PASSWORD),
+ NULL,
+ ToxProfilePasswordProc,
+ (LPARAM)this);
+
+ switch (result)
+ {
+ default: return false;
+ }
+ }
+
+ if (tox_encrypted_load(tox, data, size, (uint8_t*)(char*)password, strlen(password)) == TOX_ERROR)
{
debugLogA("CToxProto::LoadToxData: could not decrypt tox profile");
+ mir_free(data);
+ return false;
}
- mir_free(password_utf8);
}
else
{
if (tox_load(tox, data, size) == TOX_ERROR)
{
debugLogA("CToxProto::LoadToxData: could not load tox profile");
+ mir_free(data);
+ return false;
}
}
mir_free(data);
+
+ return true;
}
void CToxProto::SaveToxProfile()
{
- ptrT password(getTStringA("Password"));
- bool needToEncrypt = password && _tcslen(password);
+ ptrA password(mir_utf8encodeW(ptrT(getTStringA("Password"))));
+ bool needToEncrypt = password && strlen(password);
DWORD size = needToEncrypt
? tox_encrypted_size(tox)
: tox_size(tox);
@@ -65,22 +84,19 @@ void CToxProto::SaveToxProfile() uint8_t *data = (uint8_t*)mir_calloc(size);
if (needToEncrypt)
{
- char *passwordInUtf8 = mir_utf8encodeW(password);
- if (tox_encrypted_save(tox, data, (uint8_t*)passwordInUtf8, strlen(passwordInUtf8)) == TOX_ERROR)
+ if (tox_encrypted_save(tox, data, (uint8_t*)(char*)password, strlen(password)) == TOX_ERROR)
{
debugLogA("CToxProto::LoadToxData: could not encrypt tox profile");
- mir_free(passwordInUtf8);
mir_free(data);
return;
}
- mir_free(passwordInUtf8);
}
else
{
tox_save(tox, data);
}
- SetFilePointer(hProfile, 0, 0, FILE_BEGIN);
+ SetFilePointer(hProfile, 0, NULL, FILE_BEGIN);
SetEndOfFile(hProfile);
DWORD written = 0;
if (!WriteFile(hProfile, data, size, &written, NULL) || size != written)
@@ -125,43 +141,74 @@ INT_PTR CToxProto::ToxProfileImportProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPA break;
case IDC_BROWSE_PROFILE:
+ {
+ TCHAR filter[MAX_PATH] = { 0 };
+ mir_sntprintf(filter, MAX_PATH, _T("%s\0*.*"), TranslateT("All files (*.*)"));
+
+ OPENFILENAME ofn = { sizeof(ofn) };
+ ofn.hwndOwner = hwnd;
+ ofn.lpstrFilter = filter;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFile = profilePath;
+ ofn.lpstrTitle = TranslateT("Select tox profile");
+ ofn.nMaxFile = MAX_PATH;
+ ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER;
+
+ if (GetOpenFileName(&ofn) && profilePath)
{
- TCHAR filter[MAX_PATH] = { 0 };
- mir_sntprintf(filter, MAX_PATH, _T("%s\0*.*"), TranslateT("All files (*.*)"));
-
- OPENFILENAME ofn = { sizeof(ofn) };
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = filter;
- ofn.nFilterIndex = 1;
- ofn.lpstrFile = profilePath;
- ofn.lpstrTitle = TranslateT("Select tox profile");
- ofn.nMaxFile = MAX_PATH;
- ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER;
-
- if (GetOpenFileName(&ofn) && profilePath)
- {
- EnableWindow(GetDlgItem(hwnd, IDOK), TRUE);
- SetDlgItemText(hwnd, IDC_PROFILE_PATH, profilePath);
- }
+ EnableWindow(GetDlgItem(hwnd, IDOK), TRUE);
+ SetDlgItemText(hwnd, IDC_PROFILE_PATH, profilePath);
}
+ }
break;
case IDOK:
+ {
+ std::tstring defaultProfilePath = GetToxProfilePath(accountName);
+ if (profilePath && _tcslen(profilePath))
{
- std::tstring defaultProfilePath = GetToxProfilePath(accountName);
- if (profilePath && _tcslen(profilePath))
- {
- if (_tcsicmp(profilePath, defaultProfilePath.c_str()) != 0)
- {
- CopyFile(profilePath, defaultProfilePath.c_str(), FALSE);
- }
- }
- else
+ if (_tcsicmp(profilePath, defaultProfilePath.c_str()) != 0)
{
- fclose(_wfopen(defaultProfilePath.c_str(), _T("w")));
+ CopyFile(profilePath, defaultProfilePath.c_str(), FALSE);
}
- EndDialog(hwnd, 1);
}
+ else
+ {
+ fclose(_wfopen(defaultProfilePath.c_str(), _T("w")));
+ }
+ EndDialog(hwnd, 1);
+ }
+ break;
+
+ case IDCANCEL:
+ EndDialog(hwnd, 0);
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+INT_PTR CToxProto::ToxProfilePasswordProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ CToxProto *proto = (CToxProto*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwnd);
+ {
+ proto = (CToxProto*)lParam;
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+ }
+ return TRUE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ EndDialog(hwnd, 1);
break;
case IDCANCEL:
|