diff options
Diffstat (limited to 'protocols/WhatsApp')
-rw-r--r-- | protocols/WhatsApp/WhatsApp_11.vcxproj | 8 | ||||
-rw-r--r-- | protocols/WhatsApp/WhatsApp_11.vcxproj.filters | 23 | ||||
-rw-r--r-- | protocols/WhatsApp/res/WART-1.5.0.0.exe | bin | 0 -> 3171328 bytes | |||
-rw-r--r-- | protocols/WhatsApp/res/whatsapp.rc | 41 | ||||
-rw-r--r-- | protocols/WhatsApp/src/dialogs.cpp | 14 | ||||
-rw-r--r-- | protocols/WhatsApp/src/main.cpp | 141 | ||||
-rw-r--r-- | protocols/WhatsApp/src/resource.h | 22 |
7 files changed, 221 insertions, 28 deletions
diff --git a/protocols/WhatsApp/WhatsApp_11.vcxproj b/protocols/WhatsApp/WhatsApp_11.vcxproj index a6b9560291..224d35989f 100644 --- a/protocols/WhatsApp/WhatsApp_11.vcxproj +++ b/protocols/WhatsApp/WhatsApp_11.vcxproj @@ -267,6 +267,14 @@ <ResourceCompile Include="res\version.rc" />
<ResourceCompile Include="res\whatsapp.rc" />
</ItemGroup>
+ <ItemGroup>
+ <Image Include="res\add-group.ico" />
+ <Image Include="res\add-user-to-group.ico" />
+ <Image Include="res\change-group-subject.ico" />
+ <Image Include="res\leave-group.ico" />
+ <Image Include="res\remove-user-from-group.ico" />
+ <Image Include="res\whatsapp.ico" />
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
diff --git a/protocols/WhatsApp/WhatsApp_11.vcxproj.filters b/protocols/WhatsApp/WhatsApp_11.vcxproj.filters index f1a5df8f07..e79bc694be 100644 --- a/protocols/WhatsApp/WhatsApp_11.vcxproj.filters +++ b/protocols/WhatsApp/WhatsApp_11.vcxproj.filters @@ -30,6 +30,9 @@ <Filter Include="WhatsAPI++\OpenSSL">
<UniqueIdentifier>{eaedb8f8-8e43-4360-9007-b1a3448d2d16}</UniqueIdentifier>
</Filter>
+ <Filter Include="Resources\Icons">
+ <UniqueIdentifier>{06318065-d7dc-4678-b6d0-8c5feca76d8f}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\chat.cpp">
@@ -199,4 +202,24 @@ <Filter>Resources</Filter>
</ResourceCompile>
</ItemGroup>
+ <ItemGroup>
+ <Image Include="res\add-group.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ <Image Include="res\add-user-to-group.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ <Image Include="res\change-group-subject.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ <Image Include="res\leave-group.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ <Image Include="res\remove-user-from-group.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ <Image Include="res\whatsapp.ico">
+ <Filter>Resources\Icons</Filter>
+ </Image>
+ </ItemGroup>
</Project>
\ No newline at end of file diff --git a/protocols/WhatsApp/res/WART-1.5.0.0.exe b/protocols/WhatsApp/res/WART-1.5.0.0.exe Binary files differnew file mode 100644 index 0000000000..3a989ee74f --- /dev/null +++ b/protocols/WhatsApp/res/WART-1.5.0.0.exe diff --git a/protocols/WhatsApp/res/whatsapp.rc b/protocols/WhatsApp/res/whatsapp.rc index 0b4784f5a9..8d81cc154a 100644 --- a/protocols/WhatsApp/res/whatsapp.rc +++ b/protocols/WhatsApp/res/whatsapp.rc @@ -13,10 +13,11 @@ #undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
-// Deutsch (Deutschland) resources
+// Немецкий (Германия) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
@@ -52,12 +53,6 @@ END #ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
- IDD_WHATSAPPACCOUNT, DIALOG
- BEGIN
- BOTTOMMARGIN, 111
- HORZGUIDE, 97
- END
-
IDD_INPUTBOX, DIALOG
BEGIN
VERTGUIDE, 12
@@ -75,24 +70,28 @@ END // Dialog
//
-IDD_WHATSAPPACCOUNT DIALOGEX 0, 0, 185, 118
+IDD_WHATSAPPACCOUNT DIALOGEX 0, 0, 185, 168
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
LTEXT "Phone-Number",IDC_STATIC,6,6,48,8
EDITTEXT IDC_LOGIN,84,6,95,12,ES_AUTOHSCROLL
LTEXT "Including country code, without '+' or '00'",IDC_STATIC,66,21,118,17
+ LTEXT "Password",IDC_STATIC,6,60,47,8
+ EDITTEXT IDC_PW,60,60,119,12,ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "Nickname",IDC_STATIC,6,42,48,12
EDITTEXT IDC_NICK,60,42,120,12,ES_AUTOHSCROLL
- PUSHBUTTON "Request Code",IDC_BUTTON_REQUEST_CODE,6,97,54,14
- PUSHBUTTON "Register Code",IDC_BUTTON_REGISTER,66,97,60,14
+ PUSHBUTTON "Request Code",IDC_BUTTON_REQUEST_CODE,6,150,54,17,NOT WS_VISIBLE | WS_DISABLED
+ PUSHBUTTON "Register Code",IDC_BUTTON_REGISTER,66,149,60,18,NOT WS_VISIBLE | WS_DISABLED
EDITTEXT IDC_CC,60,6,24,12,ES_AUTOHSCROLL
- LTEXT "SMS-Code:",IDC_STATIC,6,72,36,8
- EDITTEXT IDC_REG_CODE_1,60,72,24,12,ES_AUTOHSCROLL
- LTEXT "-",IDC_STATIC,86,73,8,12
- EDITTEXT IDC_REG_CODE_2,90,72,24,12,ES_AUTOHSCROLL
- LTEXT "Will only be used for registration",IDC_STATIC,66,86,108,10
- CONTROL "Use SSL connection (443 port)",IDC_SSL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,58,120,10
+ LTEXT "SMS-Code:",IDC_STATIC,6,120,36,8,NOT WS_VISIBLE | WS_DISABLED
+ EDITTEXT IDC_REG_CODE_1,60,120,24,12,ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED
+ LTEXT "-",IDC_STATIC,86,122,8,12,NOT WS_VISIBLE | WS_DISABLED
+ EDITTEXT IDC_REG_CODE_2,90,120,24,12,ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED
+ LTEXT "Will only be used for registration",IDC_STATIC,66,134,108,10,NOT WS_VISIBLE | WS_DISABLED
+ CONTROL "Use SSL connection (443 port)",IDC_SSL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,108,120,10
+ LTEXT "Paste password from WART utility",IDC_STATIC,65,76,111,8
+ LTEXT "Use WART utility from Plugins folder for registering your number and generating password",IDC_STATIC,6,85,174,22
END
IDD_INPUTBOX DIALOGEX 0, 0, 300, 66
@@ -121,10 +120,18 @@ IDI_ADD_USER_TO_GROUP ICON "add-user-to-group.ico" IDI_CHANGE_GROUP_SUBJECT ICON "change-group-subject.ico"
IDI_LEAVE_GROUP ICON "leave-group.ico"
IDI_REMOVE_USER_FROM_GROUP ICON "remove-user-from-group.ico"
-#endif // Deutsch (Deutschland) resources
+#endif // Немецкий (Германия) resources
/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+//
+// BIN
+//
+
+IDR_REGISTERUTILITY BIN "WART-1.5.0.0.exe"
+
+
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
diff --git a/protocols/WhatsApp/src/dialogs.cpp b/protocols/WhatsApp/src/dialogs.cpp index ee658f8e77..9a2955b1d7 100644 --- a/protocols/WhatsApp/src/dialogs.cpp +++ b/protocols/WhatsApp/src/dialogs.cpp @@ -34,10 +34,19 @@ INT_PTR CALLBACK WhatsAppAccountProc(HWND hwnd, UINT message, WPARAM wparam, LPA db_free(&dbv);
}
+ if ( !db_get_s(0,proto->ModuleName(),WHATSAPP_KEY_PASS,&dbv,DBVT_ASCIIZ))
+ {
+ CallService(MS_DB_CRYPT_DECODESTRING,strlen(dbv.pszVal)+1,
+ reinterpret_cast<LPARAM>(dbv.pszVal));
+ SetDlgItemTextA(hwnd,IDC_PW,dbv.pszVal);
+ db_free(&dbv);
+ }
+
if (!proto->isOffline()) {
SendMessage(GetDlgItem(hwnd,IDC_CC),EM_SETREADONLY,1,0);
SendMessage(GetDlgItem(hwnd,IDC_LOGIN),EM_SETREADONLY,1,0);
SendMessage(GetDlgItem(hwnd,IDC_NICK),EM_SETREADONLY,1,0);
+ SendMessage(GetDlgItem(hwnd,IDC_PW),EM_SETREADONLY,1,0);
EnableWindow(GetDlgItem(hwnd, IDC_SSL), FALSE);
}
@@ -94,6 +103,7 @@ INT_PTR CALLBACK WhatsAppAccountProc(HWND hwnd, UINT message, WPARAM wparam, LPA case IDC_LOGIN:
case IDC_NICK:
case IDC_SSL:
+ case IDC_PW:
SendMessage(GetParent(hwnd) ,PSM_CHANGED, 0, 0);
}
}
@@ -116,6 +126,10 @@ INT_PTR CALLBACK WhatsAppAccountProc(HWND hwnd, UINT message, WPARAM wparam, LPA db_set_b(0, proto->ModuleName(), WHATSAPP_KEY_SSL, IsDlgButtonChecked(hwnd, IDC_SSL));
+ GetDlgItemTextA(hwnd,IDC_PW,str,sizeof(str));
+ CallService(MS_DB_CRYPT_ENCODESTRING,sizeof(str),reinterpret_cast<LPARAM>(str));
+ db_set_s(0,proto->ModuleName(),WHATSAPP_KEY_PASS,str);
+
return TRUE;
}
break;
diff --git a/protocols/WhatsApp/src/main.cpp b/protocols/WhatsApp/src/main.cpp index d2f45c7fdf..e602ea63e1 100644 --- a/protocols/WhatsApp/src/main.cpp +++ b/protocols/WhatsApp/src/main.cpp @@ -11,7 +11,7 @@ PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX),
"WhatsApp Protocol",
__VERSION_DWORD,
- "Provides basic support for WhatsApp. [Built: "__DATE__" "__TIME__"]",
+ "Provides basic support for WhatsApp.",
"Uli Hecht",
"uli.hecht@gmail.com",
"© 2013 Uli Hecht",
@@ -22,6 +22,137 @@ PLUGININFOEX pluginInfo = { };
+BOOL IsRunAsAdmin()
+{
+ BOOL fIsRunAsAdmin = FALSE;
+ DWORD dwError = ERROR_SUCCESS;
+ PSID pAdministratorsGroup = NULL;
+
+ // Allocate and initialize a SID of the administrators group.
+ SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
+ if ( !AllocateAndInitializeSid(
+ &NtAuthority,
+ 2,
+ SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS,
+ 0, 0, 0, 0, 0, 0,
+ &pAdministratorsGroup))
+ {
+ dwError = GetLastError();
+ goto Cleanup;
+ }
+
+ // Determine whether the SID of administrators group is enabled in
+ // the primary access token of the process.
+ if ( !CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))
+ {
+ dwError = GetLastError();
+ goto Cleanup;
+ }
+
+Cleanup:
+ // Centralized cleanup for all allocated resources.
+ if (pAdministratorsGroup)
+ {
+ FreeSid(pAdministratorsGroup);
+ pAdministratorsGroup = NULL;
+ }
+
+ // Throw the error if something failed in the function.
+ if (ERROR_SUCCESS != dwError)
+ {
+ throw dwError;
+ }
+
+ return fIsRunAsAdmin;
+}
+
+int UnpackRegisterUtility(HINSTANCE hInstance, const wchar_t *profileName)
+{
+ wchar_t fileName[MAX_PATH];
+ ::GetModuleFileName(hInstance, fileName, MAX_PATH);
+
+ wchar_t *RegisterUtilityPath = ::wcsrchr(fileName, '\\');
+ if (RegisterUtilityPath != NULL)
+ *RegisterUtilityPath = 0;
+ ::mir_snwprintf(fileName, SIZEOF(fileName), L"%s\\%s", fileName, L"WART-1.5.0.0.exe");
+ if ( ::GetFileAttributes(fileName) == DWORD(-1))
+ {
+ HRSRC hRes = ::FindResource(hInstance, MAKEINTRESOURCE(IDR_REGISTERUTILITY), L"BIN");
+ if (hRes)
+ {
+ HGLOBAL hResource = ::LoadResource(hInstance, hRes);
+ if (hResource)
+ {
+ HANDLE hFile;
+ char *pData = (char *)LockResource(hResource);
+ DWORD dwSize = SizeofResource(hInstance, hRes), written = 0;
+ if ((hFile = ::CreateFile(
+ fileName,
+ GENERIC_WRITE,
+ 0,
+ NULL,
+ CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL,
+ 0)) != INVALID_HANDLE_VALUE)
+ {
+ ::WriteFile(hFile, (void *)pData, dwSize, &written, NULL);
+ ::CloseHandle(hFile);
+ }
+ else
+ {
+ // Check the current process's "run as administrator" status.
+ // Elevate the process if it is not run as administrator.
+ if (!IsRunAsAdmin())
+ {
+ wchar_t path[MAX_PATH], cmdLine[100];
+ ::GetModuleFileName(NULL, path, ARRAYSIZE(path));
+
+ if (profileName)
+ ::mir_snwprintf(
+ cmdLine,
+ SIZEOF(cmdLine),
+ L" /restart:%d /profile=%s",
+ ::GetCurrentProcessId(),
+ profileName);
+ else
+ ::mir_snwprintf(
+ cmdLine,
+ SIZEOF(cmdLine),
+ L" /restart:%d",
+ ::GetCurrentProcessId());
+
+ // Launch itself as administrator.
+ SHELLEXECUTEINFO sei = { sizeof(sei) };
+ sei.lpVerb = L"runas";
+ sei.lpFile = path;
+ sei.lpParameters = cmdLine;
+ //sei.hwnd = hDlg;
+ sei.nShow = SW_NORMAL;
+
+ if ( !::ShellExecuteEx(&sei))
+ {
+ DWORD dwError = ::GetLastError();
+ if (dwError == ERROR_CANCELLED)
+ {
+ // The user refused to allow privileges elevation.
+ // Do nothing ...
+ }
+ }
+ }
+ else
+ return 0;
+ }
+ }
+ else
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ return 1;
+}
/////////////////////////////////////////////////////////////////////////////
// Protocol instances
@@ -69,6 +200,14 @@ static HANDLE g_hEvents[1]; extern "C" int __declspec(dllexport) Load(void)
{
+ VARST profilename( _T("%miranda_profilename%"));
+
+ if ( !UnpackRegisterUtility(g_hInstance, (TCHAR *)profilename))
+ {
+ ::MessageBox(NULL, TranslateT("Did not unpack registration utility WART-1.5.0.0.exe."), _T("WhatsApp"), MB_OK | MB_ICONERROR);
+ return 1;
+ }
+
mir_getLP(&pluginInfo);
mir_getCLI();
diff --git a/protocols/WhatsApp/src/resource.h b/protocols/WhatsApp/src/resource.h index 08ca2a251a..1c2d4f26a9 100644 --- a/protocols/WhatsApp/src/resource.h +++ b/protocols/WhatsApp/src/resource.h @@ -3,17 +3,19 @@ // Used by whatsapp.rc
//
#define IDD_WHATSAPPACCOUNT 101
-#define IDI_WHATSAPP 103
-#define IDD_INPUTBOX 103
-#define IDI_ADD_GROUP 106
-#define IDI_ADD_USER_TO_GROUP 107
-#define IDI_RENAME_GROUP 108
-#define IDI_CHANGE_GROUP_SUBJECT 108
-#define IDI_LEAVE_GROUP 109
-#define IDI_REMOVE_USER_FROM_GROUP 110
+#define IDD_INPUTBOX 102
+#define IDR_REGISTERUTILITY 103
+#define IDI_WHATSAPP 203
+#define IDI_ADD_GROUP 206
+#define IDI_ADD_USER_TO_GROUP 207
+#define IDI_RENAME_GROUP 208
+#define IDI_CHANGE_GROUP_SUBJECT 209
+#define IDI_LEAVE_GROUP 210
+#define IDI_REMOVE_USER_FROM_GROUP 211
#define IDC_LOGIN 1003
-#define IDC_SSL 1004
-#define IDC_NICK 1005
+#define IDC_PW 1004
+#define IDC_SSL 1005
+#define IDC_NICK 1006
#define IDC_BUTTON_REQUEST_CODE 1007
#define IDC_BUTTON_REGISTER 1008
#define IDC_CC 1009
|