Lot of user management code
This commit is contained in:
@@ -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, );
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -14,7 +14,7 @@ struct category
|
||||
class Preferences
|
||||
{
|
||||
public:
|
||||
std::vector<category> _categories;
|
||||
std::vector<struct category> _categories;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user