Changeset 5d836bde01291d90fa3c62d9841ee1084afa3ff7

Show
Ignore:
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:
4 modified

Legend:

Unmodified
Added
Removed
  • db/db.cc

    r19beb87 r5d836bd  
    295295        } 
    296296 
     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 
    297314        void db::init() 
    298315        {                 
     
    319336                        try 
    320337                        { 
    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); 
    344339                        } 
    345340                        catch (illformed_db &id) 
     
    509504                        record += '\n'; 
    510505 
     506                boost::posix_time::ptime timestamp = 
     507                        boost::posix_time::second_clock::universal_time(); 
     508 
    511509                std::ofstream dbfile(dbname.c_str(), std::ios_base::app); 
    512510                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) 
    516512                       << "\n" 
    517513                       << record 
    518514                       << ".END\n"; 
    519515                dbfile.close(); 
     516                std::istringstream ss(record); 
     517                db_reader dr(ss); 
     518                read_record(dr, timestamp); 
    520519        } 
    521520 
  • db/db.hh

    r19beb87 r5d836bd  
    105105                } 
    106106 
    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  
    114107                boost::shared_ptr<role> create_role(std::string name, 
    115108                                                    std::string description); 
     
    145138                void do_article(db_detail::db_reader &, std::string); 
    146139                void do_role(db_detail::db_reader &, std::string); 
     140                void read_record(db_detail::db_reader &dr, 
     141                                 boost::posix_time::ptime); 
    147142                void register_role(boost::shared_ptr<role>); 
    148143        }; 
  • db/user.cc

    r19beb87 r5d836bd  
    7070                   << "\n"; 
    7171                dbase->add_record(os.str()); 
    72                 display_name = new_name; 
     72                BOOST_ASSERT(display_name == new_name); 
    7373        } 
    7474        void user::set_display_email(std::string new_addr) 
     
    8282                   << "\n"; 
    8383                dbase->add_record(os.str()); 
    84                 display_email = new_addr; 
     84                BOOST_ASSERT(display_email == new_addr); 
    8585        } 
    8686        bool user::set_delivery_email(std::string new_addr) 
     
    9898                   << "\n"; 
    9999                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; 
    106100                return true; 
     101                BOOST_ASSERT(delivery_email == new_addr); 
     102                BOOST_ASSERT(!delivery_email_verified); 
     103                BOOST_ASSERT(delivery_email_cookie == token); 
    107104        } 
    108105        void user::set_allow_cleartext_password(bool val) 
     
    116113                   << "\n"; 
    117114                dbase->add_record(os.str()); 
    118                 do_allow_cleartext_password = val; 
     115                BOOST_ASSERT(do_allow_cleartext_password == val); 
    119116        } 
    120117        void user::send_delivery_email_cookie(server::conn_cb cb, 
     
    131128                           << "\n"; 
    132129                        dbase->add_record(os.str()); 
    133                         delivery_email_cookie = token; 
     130                        BOOST_ASSERT(delivery_email_cookie == token); 
    134131                } 
    135132                std::string ton = display_name; 
     
    179176                   << "\n"; 
    180177                dbase->add_record(os.str()); 
    181                 delivery_email_verified = true; 
     178                BOOST_ASSERT(delivery_email_verified); 
    182179                return true; 
    183180        } 
  • db/user.hh

    r4c34ee2 r5d836bd  
    3434        class db; 
    3535        class role; 
     36 
    3637        class user : public boost::noncopyable 
    3738                   , public boost::enable_shared_from_this<user>