Changeset 5d836bde01291d90fa3c62d9841ee1084afa3ff7
- Timestamp:
- 08/16/10 20:39:35 (18 months ago)
- Author:
- Antti-Juhani Kaijanaho <antti-juhani@…>
- Children:
- 563ece2aeca700b9245bc2ac709c7fd346fea911
- Parents:
- 994811461679afe70ab81e079fd87191d609be9d
- git-committer:
- Antti-Juhani Kaijanaho <antti-juhani@…> (08/16/10 20:39:35)
- Message:
-
[db::user,db::db] Update user data by parsing the new record, not directly
Signed-off-by: Antti-Juhani Kaijanaho <antti-juhani@…>
- Location:
- db
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r19beb87
|
r5d836bd
|
|
| 295 | 295 | } |
| 296 | 296 | |
| | 297 | void db::read_record(db_reader &dr, boost::posix_time::ptime timestamp) |
| | 298 | { |
| | 299 | std::string line; |
| | 300 | dr.readline(line); |
| | 301 | std::string cmd = util::split(line); |
| | 302 | if (cmd == "NEWGROUP") |
| | 303 | do_newgroup(dr, line, timestamp); |
| | 304 | else if (cmd == "USER") |
| | 305 | do_user(dr, line); |
| | 306 | else if (cmd == "ROLE") |
| | 307 | do_role(dr, line); |
| | 308 | else if (cmd == "ARTICLE") |
| | 309 | do_article(dr, line); |
| | 310 | else |
| | 311 | throw illformed_db("unrecognized record type " + cmd); |
| | 312 | } |
| | 313 | |
| 297 | 314 | void db::init() |
| 298 | 315 | { |
| … |
… |
|
| 319 | 336 | try |
| 320 | 337 | { |
| 321 | | dr.readline(line); |
| 322 | | std::string cmd = util::split(line); |
| 323 | | if (cmd == "NEWGROUP") |
| 324 | | do_newgroup(dr, line, timestamp); |
| 325 | | else if (cmd == "USER") |
| 326 | | do_user(dr, line); |
| 327 | | else if (cmd == "ROLE") |
| 328 | | do_role(dr, line); |
| 329 | | else if (cmd == "ARTICLE") |
| 330 | | do_article(dr, line); |
| 331 | | else |
| 332 | | { |
| 333 | | logger::logline ll; |
| 334 | | ll << "warning: unrecognized " |
| 335 | | << "record type " |
| 336 | | << cmd; |
| 337 | | while (true) |
| 338 | | { |
| 339 | | dr.readline(line); |
| 340 | | util::strip(line); |
| 341 | | if (line == ".END") break; |
| 342 | | } |
| 343 | | } |
| | 338 | read_record(dr, timestamp); |
| 344 | 339 | } |
| 345 | 340 | catch (illformed_db &id) |
| … |
… |
|
| 509 | 504 | record += '\n'; |
| 510 | 505 | |
| | 506 | boost::posix_time::ptime timestamp = |
| | 507 | boost::posix_time::second_clock::universal_time(); |
| | 508 | |
| 511 | 509 | std::ofstream dbfile(dbname.c_str(), std::ios_base::app); |
| 512 | 510 | dbfile << ".BEGIN " |
| 513 | | << boost::posix_time::to_iso_string( |
| 514 | | boost::posix_time::second_clock::universal_time() |
| 515 | | ) |
| | 511 | << boost::posix_time::to_iso_string(timestamp) |
| 516 | 512 | << "\n" |
| 517 | 513 | << record |
| 518 | 514 | << ".END\n"; |
| 519 | 515 | dbfile.close(); |
| | 516 | std::istringstream ss(record); |
| | 517 | db_reader dr(ss); |
| | 518 | read_record(dr, timestamp); |
| 520 | 519 | } |
| 521 | 520 | |
-
|
r19beb87
|
r5d836bd
|
|
| 105 | 105 | } |
| 106 | 106 | |
| 107 | | void update_users_email(boost::shared_ptr<user> u, |
| 108 | | std::string od, std::string nw) { |
| 109 | | boost::lock_guard<boost::recursive_mutex> lg(mt); |
| 110 | | if (users_email[od] == u) users_email[od].reset(); |
| 111 | | users_email[nw] = u; |
| 112 | | } |
| 113 | | |
| 114 | 107 | boost::shared_ptr<role> create_role(std::string name, |
| 115 | 108 | std::string description); |
| … |
… |
|
| 145 | 138 | void do_article(db_detail::db_reader &, std::string); |
| 146 | 139 | void do_role(db_detail::db_reader &, std::string); |
| | 140 | void read_record(db_detail::db_reader &dr, |
| | 141 | boost::posix_time::ptime); |
| 147 | 142 | void register_role(boost::shared_ptr<role>); |
| 148 | 143 | }; |
-
|
r19beb87
|
r5d836bd
|
|
| 70 | 70 | << "\n"; |
| 71 | 71 | dbase->add_record(os.str()); |
| 72 | | display_name = new_name; |
| | 72 | BOOST_ASSERT(display_name == new_name); |
| 73 | 73 | } |
| 74 | 74 | void user::set_display_email(std::string new_addr) |
| … |
… |
|
| 82 | 82 | << "\n"; |
| 83 | 83 | dbase->add_record(os.str()); |
| 84 | | display_email = new_addr; |
| | 84 | BOOST_ASSERT(display_email == new_addr); |
| 85 | 85 | } |
| 86 | 86 | bool user::set_delivery_email(std::string new_addr) |
| … |
… |
|
| 98 | 98 | << "\n"; |
| 99 | 99 | dbase->add_record(os.str()); |
| 100 | | dbase->update_users_email(shared_from_this(), |
| 101 | | delivery_email, |
| 102 | | new_addr); |
| 103 | | delivery_email_verified = false; |
| 104 | | delivery_email_cookie = token; |
| 105 | | delivery_email = new_addr; |
| 106 | 100 | return true; |
| | 101 | BOOST_ASSERT(delivery_email == new_addr); |
| | 102 | BOOST_ASSERT(!delivery_email_verified); |
| | 103 | BOOST_ASSERT(delivery_email_cookie == token); |
| 107 | 104 | } |
| 108 | 105 | void user::set_allow_cleartext_password(bool val) |
| … |
… |
|
| 116 | 113 | << "\n"; |
| 117 | 114 | dbase->add_record(os.str()); |
| 118 | | do_allow_cleartext_password = val; |
| | 115 | BOOST_ASSERT(do_allow_cleartext_password == val); |
| 119 | 116 | } |
| 120 | 117 | void user::send_delivery_email_cookie(server::conn_cb cb, |
| … |
… |
|
| 131 | 128 | << "\n"; |
| 132 | 129 | dbase->add_record(os.str()); |
| 133 | | delivery_email_cookie = token; |
| | 130 | BOOST_ASSERT(delivery_email_cookie == token); |
| 134 | 131 | } |
| 135 | 132 | std::string ton = display_name; |
| … |
… |
|
| 179 | 176 | << "\n"; |
| 180 | 177 | dbase->add_record(os.str()); |
| 181 | | delivery_email_verified = true; |
| | 178 | BOOST_ASSERT(delivery_email_verified); |
| 182 | 179 | return true; |
| 183 | 180 | } |
-
|
r4c34ee2
|
r5d836bd
|
|
| 34 | 34 | class db; |
| 35 | 35 | class role; |
| | 36 | |
| 36 | 37 | class user : public boost::noncopyable |
| 37 | 38 | , public boost::enable_shared_from_this<user> |