Lot of user management code

This commit is contained in:
2010-06-27 21:39:49 +02:00
parent e72e36f27d
commit ceaf9a836e
16 changed files with 449 additions and 70 deletions

View File

@@ -102,6 +102,23 @@ void Database::CreateDatabase()
init_script.close();
}
wxString Database::HashPassword(wxString password)
{
blk_SHA_CTX sha_ctx;
unsigned char sha[20];
wxString wxSHA;
blk_SHA1_Init(&sha_ctx);
blk_SHA1_Update(&sha_ctx, password.c_str(), password.Length());
blk_SHA1_Final(sha, &sha_ctx);
for(int i=0; i<20; i++)
wxSHA += wxString::Format(wxT("%02x"), (int)sha[i]);
return wxSHA;
}
std::list<wxString> Database::GetUsers()
{
std::list<wxString> res;
@@ -124,18 +141,10 @@ std::list<wxString> Database::GetUsers()
bool Database::IsValidUser(wxString user, wxString password)
{
bool res;
blk_SHA_CTX sha_ctx;
unsigned char sha[20];
wxString req, wxSHA;
wxString req;
wxSQLite3ResultSet set;
blk_SHA1_Init(&sha_ctx);
blk_SHA1_Update(&sha_ctx, password.c_str(), password.Length());
blk_SHA1_Final(sha, &sha_ctx);
for(int i=0; i<20; i++)
wxSHA += wxString::Format(wxT("%02x"), (int)sha[i]);
req = _("SELECT name FROM user WHERE name='") + user + _("' AND password='") + wxSHA + _("'");
req = _("SELECT name FROM user WHERE name='") + user + _("' AND password='") + HashPassword(password) + _("'");
EXECUTE_SQL_QUERY(req, set, false);
@@ -454,6 +463,7 @@ wxString Database::AddAccount(User* user, struct Account ac)
EXECUTE_SQL_UPDATE(req, _("0"));
req = _("SELECT id FROM account WHERE name='") + ac.name + _("'") ;
req += _("AND user='") + user->_id + _("'");
EXECUTE_SQL_QUERY(req , set, _("0"));
@@ -701,3 +711,128 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT
EXECUTE_SQL_UPDATE(req, );
}
}
void Database::ChangePassword(User* user, wxString password)
{
wxString req;
req = _("UPDATE user SET ") ;
req += _("password='") + HashPassword(password) + _("'");
req += _(" WHERE name='") + user->_name + _("'");
EXECUTE_SQL_UPDATE(req, );
}
bool Database::UserExists(wxString name)
{
wxSQLite3ResultSet set;
wxString req;
bool res=false;
req = _("SELECT name FROM user WHERE name='") + name + _("'") ;
EXECUTE_SQL_QUERY(req , set, false);
if (set.NextRow())
res = true;
else
res = false;
set.Finalize();
return res;
}
void Database::ChangeName(User* user, wxString name)
{
wxString req;
req = _("UPDATE user SET ") ;
req += _("name='") + name + _("'");
req += _(" WHERE name='") + user->_name + _("'");
EXECUTE_SQL_UPDATE(req, );
}
void Database::NewUser(wxString name)
{
wxString req, id;
wxSQLite3ResultSet set;
req = _("INSERT INTO user ('name', 'password') VALUES ('") ;
req += name + _("'");
req += _(", '") + HashPassword(_("")) + _("'");
req += _(")");
EXECUTE_SQL_UPDATE(req, );
req = _("SELECT id FROM user WHERE ");
req += _("name='") + name + _("'");
EXECUTE_SQL_QUERY(req , set, );
set.NextRow();
id = set.GetAsString(_("id"));
set.Finalize();
req = _("SELECT * FROM default_preference");
EXECUTE_SQL_QUERY(req, set,);
while (set.NextRow())
{
req = _("INSERT INTO preference ('user', 'type', 'name', 'value') VALUES ('") ;
req += id + _("'");
req += _(", '") + set.GetAsString(_("type")) + _("'");
req += _(", '") + set.GetAsString(_("name")) + _("'");
req += _(", '") + set.GetAsString(_("value")) + _("'");
req += _(")");
EXECUTE_SQL_UPDATE(req, );
}
set.Finalize();
return ;
}
void Database::KillMe(User* user)
{
wxString req;
std::vector<Account>::iterator it;
req = _("DELETE FROM preference WHERE user='") + user->_id + _("'");
EXECUTE_SQL_UPDATE(req, );
if (!user->_accounts.empty())
{
it = user->_accounts.begin();
req = _("DELETE FROM account_amount WHERE account IN('") + it->id;
it++;
for (;it != user->_accounts.end(); it++)
{
req += _("', '") + it->id ;
}
req += _("')");
EXECUTE_SQL_UPDATE(req, );
it = user->_accounts.begin();
req = _("DELETE FROM operation WHERE account IN('") + it->id;
it++;
for (;it != user->_accounts.end(); it++)
{
req += _("', '") + it->id ;
}
req += _("')");
EXECUTE_SQL_UPDATE(req, );
}
req = _("DELETE FROM account WHERE user='") + user->_id + _("'");
EXECUTE_SQL_UPDATE(req, );
req = _("DELETE FROM user WHERE id='") + user->_id + _("'");
EXECUTE_SQL_UPDATE(req, );
}

View File

@@ -42,10 +42,17 @@ class Database
std::map<int, std::vector<int> > GetAllOperations(User* user);
void GenerateMonth(User* user, int monthFrom, int yearFrom, int monthTo, int yearTo);
void ChangePassword(User* user, wxString password);
bool UserExists(wxString name);
void ChangeName(User* user, wxString name);
void NewUser(wxString name);
void KillMe(User* user);
private:
wxSQLite3Database _db;
void CreateDatabase();
wxString HashPassword(wxString password);
};
#endif

View File

@@ -14,7 +14,7 @@ struct category
class Preferences
{
public:
std::vector<category> _categories;
std::vector<struct category> _categories;
};
#endif