📄 userdata.cpp
字号:
/*
userData.cpp
Maneja las opciones elegidas por el usuario.
Autor: Sergio Scarnatto
*/
#include "stdafx.h"
#include "resource.h"
#include "userData.h"
#include <atlbase.h>
#include "Rijndael.h"
#include <iostream>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
userData::userData()
{
/*
* Lleno los valores con lo que esta guardado, o con defaults...
*/
char np[17]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
np[0]= 0x70; np[1]= 0x38; np[2]= 0x4E; np[3]= 0x27;
np[4]= 0x63; np[5]= 0x34; np[6]= 0x71; np[7]= 0x76;
np[8]= 0x2B; np[9]= 0x2F; np[10]= 0x40; np[11]= 0x62;
np[12]= 0x50; np[13]= 0x32; np[14]= 0x35; np[15]= 0x3E;
m_sunvsbillgates = np;
initData();
}
userData::~userData()
{
}
CString userData::getServidor()
{
return this->Servidor;
}
CString userData::getUsuario()
{
return this->Usuario;
}
CString userData::getClave()
{
return this->Clave;
}
DWORD userData::getGuardarClave()
{
return this->guardarClave;
}
int userData::setUsuario(CString unUsuario)
{
this->Usuario = unUsuario;
return 0;
}
int userData::setServidor(CString unServidor)
{
this->Servidor = unServidor;
return 0;
}
int userData::setClave(CString unaClave, DWORD unGuardarClave)
{
this->Clave = unaClave;
this->guardarClave = unGuardarClave;
return 0;
}
/*
saveUsuario : Salva los datos del usuario en el registro.
Software\MailMonitor\Defaults\*
*/
int userData::saveUsuario()
{
CRegKey reg;
CString _appname;
CString regBase;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname + "\\Defaults";
reg.Create(HKEY_CURRENT_USER, regBase);
reg.SetValue(Usuario, "Usuario");
reg.SetValue(encrypt(Servidor), "Servidor");
reg.SetValue(BuscarCada, "BuscarCada");
reg.SetValue(MailProgramFN, "MailProgramFN");
reg.SetValue(SoundFN, "SoundFN");
reg.SetValue(bPlaySound, "bPlaySound");
reg.SetValue(bIniciarMailPrg, "bIniciarMailPrg");
reg.SetValue(bUseDefSound, "bUseDefSound");
reg.Close();
CString _sp;
regBase = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
DWORD lRet = reg.Create(HKEY_CURRENT_USER, regBase);
if (lRet == ERROR_SUCCESS)
{
if (bIniciarConWindows)
{
_sp = "\"";
_sp += __argv[0];
_sp += "\" -m";
reg.SetValue(_sp, _appname);
}
else
reg.DeleteValue(_appname);
}
reg.Close();
return 0;
}
/*
saveClave : Salva la clave del usuario y la opci髇 de guardarla para la
pr髕ima vez que entre al programa.
*/
int userData::saveClave()
{
CRegKey reg;
CString _appname;
CString regBase;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname + "\\Defaults";
reg.Create(HKEY_CURRENT_USER, regBase);
if (guardarClave == 1)
{
reg.SetValue(encrypt(Clave), "Clave");
}
else
reg.SetValue(encrypt(""), "Clave");
reg.SetValue(guardarClave, "GuardarClave");
reg.Close();
return 0;
}
int userData::setBuscarCada(DWORD vBuscarCada)
{
this->BuscarCada = vBuscarCada;
return 0;
}
DWORD userData::getBuscarCada()
{
return this->BuscarCada;
}
int userData::setMailProgramFN(CString vMailProgramFN)
{
this->MailProgramFN = vMailProgramFN;
return 0;
}
CString userData::getMailProgramFN()
{
return this->MailProgramFN;
}
int userData::setSoundFN(CString vSoundFN)
{
this->SoundFN = vSoundFN;
return 0;
}
CString userData::getSoundFN()
{
return this->SoundFN;
}
int userData::setbIniciarConWindows(DWORD value)
{
this->bIniciarConWindows = value;
return 0;
}
DWORD userData::getbIniciarConWindows()
{
return this->bIniciarConWindows;
}
int userData::setbPlaySound(DWORD value)
{
this->bPlaySound = value;
return 0;
}
DWORD userData::getbPlaySound()
{
return this->bPlaySound;
}
int userData::setbIniciarMailPrg(DWORD value)
{
this->bIniciarMailPrg = value;
return 0;
}
DWORD userData::getbIniciarMailPrg()
{
return this->bIniciarMailPrg;
}
int userData::setbUseDefSound(DWORD value)
{
this->bUseDefSound = value;
return 0;
}
DWORD userData::getbUseDefSound()
{
return this->bUseDefSound;
}
bool userData::getEsPrimerCheck()
{
return this->bEsPrimerCheck;
}
void userData::initRegMsgs()
{
DWORD lRet;
CString regBase;
DWORD dwIndex = 0;
DWORD dwSize = 255;
char valor[255];
CRegKey reg;
CString _appname;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";
lRet = reg.Open(HKEY_CURRENT_USER, regBase);
if (lRet != ERROR_SUCCESS)
bEsPrimerCheck = true;
else
bEsPrimerCheck = false;
reg.Close();
lRet = reg.Create(HKEY_CURRENT_USER, regBase);
valor[0] = '\0';
lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);
while (lRet == ERROR_SUCCESS && lRet != ERROR_NO_MORE_ITEMS)
{
reg.SetValue("0", valor);
valor[0] = '\0';
dwSize = 255;
lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);
}
reg.Close();
}
void userData::removeRegMsgs()
{
DWORD lRet;
CString regBase;
DWORD dwIndex = 0;
DWORD dwSize = 255;
DWORD dwSize2 = 255;
char valor[255];
char valor2[255];
CString s;
CRegKey reg;
CString _appname;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";
lRet = reg.Create(HKEY_CURRENT_USER, regBase);
valor[0] = '\0';
lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);
while (lRet == ERROR_SUCCESS && lRet != ERROR_NO_MORE_ITEMS)
{
reg.QueryValue(valor2, valor, &dwSize2);
s = valor2;
if (s == "0")
reg.DeleteValue(valor);
valor[0] = '\0';
dwSize = 255;
lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);
}
reg.Close();
}
// Verifica si el mensaje es nuevo
bool userData::IsNewMail(CString vUIDL)
{
CString regBase;
CRegKey reg;
DWORD dwSize = 255;
char valor[255];
CString s;
CString _appname;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";
reg.Create(HKEY_CURRENT_USER, regBase);
valor[0] = '\0';
reg.QueryValue(valor, vUIDL, &dwSize);
s = valor;
reg.SetValue("1", vUIDL);
reg.Close();
if (s == "" && bEsPrimerCheck == false)
return true;
else
return false;
}
/*
initData : Recupera los datos del usuario, zona, dispositivo y telefonos.
*/
void userData::initData()
{
CString _appname;
CString regBase;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\"+_appname + "\\Defaults";
LONG lRet;
DWORD dwSize = 255;
CRegKey reg;
char valor[256];
DWORD iValor;
DWORD dwIndex = 0;
lRet = reg.Open(HKEY_CURRENT_USER, regBase);
if (lRet != ERROR_SUCCESS)
{
// Es la primera vez que corre... creo los defaults!
reg.Close();
initRegistry();
}
lRet = reg.Create(HKEY_CURRENT_USER, regBase);
valor[0] = '\0';
dwSize = 255;
lRet = reg.QueryValue(valor, "Servidor", &dwSize);
Servidor = decrypt(valor);
// Obtengo el nombre de usuario.
dwSize = 255;
lRet = reg.QueryValue(valor, "Usuario", &dwSize);
Usuario = valor;
// Obtengo su seteo de gardar clave
lRet = reg.QueryValue(iValor, "GuardarClave");
guardarClave = iValor;
if (guardarClave)
{
// Recupero su clave
// Obtengo su clave
dwSize = 255;
lRet = reg.QueryValue(valor, "Clave", &dwSize);
Clave = decrypt(valor);
}
iValor = 5;
lRet = reg.QueryValue(iValor, "BuscarCada");
BuscarCada = iValor;
dwSize = 255;
valor[0]= '\0';
lRet = reg.QueryValue(valor, "MailProgramFN", &dwSize);
MailProgramFN = valor;
dwSize = 255;
valor[0]= '\0';
lRet = reg.QueryValue(valor, "SoundFN", &dwSize);
SoundFN = valor;
iValor = 1;
lRet = reg.QueryValue(iValor, "bPlaySound");
bPlaySound = iValor;
iValor = 0;
lRet = reg.QueryValue(iValor, "bIniciarMailPrg");
bIniciarMailPrg = iValor;
iValor = 1;
lRet = reg.QueryValue(iValor, "bUseDefSound");
bUseDefSound = iValor;
reg.Close();
regBase = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
lRet = reg.Create(HKEY_CURRENT_USER, regBase);
if (lRet == ERROR_SUCCESS)
{
CString s;
dwSize = 255;
valor[0] = '\0';
reg.QueryValue(valor, _appname, &dwSize);
s = valor;
if (s == "")
{
reg.DeleteValue(_appname);
bIniciarConWindows = false;
}
else
bIniciarConWindows = true;
}
reg.Close();
}
/*
initRegistry : Iniciliza todas entradas al registro.
*/
void userData::initRegistry()
{
CString _appname;
CString _sufijo;
CString regBase;
CRegKey reg;
_appname.LoadString(IDS_APP_NAME);
regBase = "Software\\" + _appname;
reg.Create(HKEY_CURRENT_USER, regBase);
reg.Close();
reg.Create(HKEY_CURRENT_USER, regBase + "\\Defaults");
reg.SetValue(encrypt(""), "Clave");
reg.SetValue("", "Usuario");
reg.SetValue((DWORD)0, "GuardarClave");
CString sdef;
sdef.LoadString(IDS_SERVIDORWEBMAIL);
reg.SetValue(sdef, "Servidor");
reg.SetValue((DWORD)5, "BuscarCada");
reg.SetValue("", "MailProgramFN");
reg.SetValue("", "SoundFN");
reg.SetValue((DWORD)1, "bPlaySound");
reg.SetValue((DWORD)0, "bIniciarMailPrg");
reg.SetValue((DWORD)1, "bUseDefSound");
reg.Close();
}
//Function to convert unsigned char to string of length 2
void userData::Char2Hex(unsigned char ch, char* szHex)
{
unsigned char byte[2];
byte[0] = ch/16;
byte[1] = ch%16;
for(int i=0; i<2; i++)
{
if(byte[i] >= 0 && byte[i] <= 9)
szHex[i] = '0' + byte[i];
else
szHex[i] = 'A' + byte[i] - 10;
}
szHex[2] = 0;
}
//Function to convert string of length 2 to unsigned char
void userData::Hex2Char(char const* szHex, unsigned char& rch)
{
rch = 0;
for(int i=0; i<2; i++)
{
if(*(szHex + i) >='0' && *(szHex + i) <= '9')
rch = (rch << 4) + (*(szHex + i) - '0');
else if(*(szHex + i) >='A' && *(szHex + i) <= 'F')
rch = (rch << 4) + (*(szHex + i) - 'A' + 10);
else
break;
}
}
//Function to convert string of unsigned chars to string of chars
void userData::CharStr2HexStr(unsigned char const* pucCharStr, char* pszHexStr, int iSize)
{
int i;
char szHex[3];
pszHexStr[0] = 0;
for(i=0; i<iSize; i++)
{
Char2Hex(pucCharStr[i], szHex);
strcat(pszHexStr, szHex);
}
}
//Function to convert string of chars to string of unsigned chars
void userData::HexStr2CharStr(char const* pszHexStr, unsigned char* pucCharStr, int iSize)
{
int i;
unsigned char ch;
for(i=0; i<iSize; i++)
{
Hex2Char(pszHexStr+2*i, ch);
pucCharStr[i] = ch;
}
}
#define ENCRYPT_BLOCK_SIZE 80
CString userData::encrypt(const char * szCad)
{
char szHex[ENCRYPT_BLOCK_SIZE*2+1];
//One block testing
CRijndael oRijndael;
oRijndael.MakeKey(m_sunvsbillgates, CRijndael::sm_chain0, 16, 16);
char szDataIn[ENCRYPT_BLOCK_SIZE+1];
char szDataOut[ENCRYPT_BLOCK_SIZE+1];
memset(szDataIn, 0, ENCRYPT_BLOCK_SIZE+1);
memset(szDataOut, 0, ENCRYPT_BLOCK_SIZE+1);
strcpy(szDataIn, szCad);
oRijndael.Encrypt(szDataIn, szDataOut, ENCRYPT_BLOCK_SIZE, CRijndael::ECB);
CharStr2HexStr((unsigned char*)szDataOut, szHex, ENCRYPT_BLOCK_SIZE);
CString s;
strcpy(s.GetBuffer(ENCRYPT_BLOCK_SIZE*2),szHex);
s.ReleaseBuffer();
return s;
}
CString userData::decrypt(const char * szCad)
{
//One block testing
CRijndael oRijndael;
oRijndael.MakeKey(m_sunvsbillgates, CRijndael::sm_chain0, 16, 16);
char szDataIn[ENCRYPT_BLOCK_SIZE+1];
char szDataOut[ENCRYPT_BLOCK_SIZE+1];
memset(szDataIn, 0, ENCRYPT_BLOCK_SIZE+1);
memset(szDataOut, 0, ENCRYPT_BLOCK_SIZE+1);
HexStr2CharStr(szCad, (unsigned char*) szDataIn, ENCRYPT_BLOCK_SIZE);
oRijndael.Decrypt(szDataIn, szDataOut, ENCRYPT_BLOCK_SIZE, CRijndael::ECB);
CString s;
strcpy(s.GetBuffer(ENCRYPT_BLOCK_SIZE),szDataOut);
s.ReleaseBuffer();
return s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -