Changeset f2c6ab73bbeb02eb513a3952a380305eeeae60ff

Show
Ignore:
Timestamp:
01/27/11 21:22:20 (16 months ago)
Author:
ajk <ajk@…>
Children:
aab07470af6dc81c6a52e8b8446582745216df17
Parents:
cbc895b6da7a6196ef0422747bd7dec2a40551d5
git-committer:
ajk <ajk@…> (01/27/11 21:22:20)
Message:

#82: Integrate sub/unsub messages and email confirmation messages

Signed-off-by: ajk <ajk@…>

Files:
8 modified

Legend:

Unmodified
Added
Removed
  • db/group.cc

    r383796f rf2c6ab7  
    11/*  This file is part of Alue, the multiprotocol Internet discussion daemon 
    22 
    3     Copyright © 2009, 2010 Antti-Juhani Kaijanaho 
     3    Copyright © 2009, 2010, 2011 Antti-Juhani Kaijanaho 
    44 
    55    Alue is free software: you can redistribute it and/or modify it 
     
    167167                mam->insert("group", 
    168168                            new tlate::group_value(shared_from_this(), u)); 
    169                 if (u->is_delivery_email_verified()) 
    170                         mam->insert("verified"); 
    171169 
    172170                boost::shared_ptr<tlate::tlate> tl = tlate::tlate::parse(tln); 
     
    181179 
    182180        void group::add_subscriber(boost::shared_ptr<user> u, 
    183                                    server::conn_cb cb) 
     181                                   server::conn_cb cb, 
     182                                   boost::asio::ip::address peer) 
    184183        { 
    185184                BOOST_ASSERT(u); 
    186185                ensure_subscriber_role(); 
    187186                u->add_role(subscriber_role); 
    188                 send_submail(u, "sub.msg", cb); 
     187                if (!u->is_delivery_email_verified()) 
     188                        u->send_delivery_email_cookie 
     189                                (cb, peer.to_string()); 
     190                else 
     191                        send_submail(u, "sub.msg", cb); 
    189192        } 
    190193        void group::delete_subscriber(boost::shared_ptr<user> u, 
     
    193196                ensure_subscriber_role(); 
    194197                u->delete_role(subscriber_role); 
    195                 send_submail(u, "unsub.msg", cb); 
     198                if (u->is_delivery_email_verified()) 
     199                        send_submail(u, "unsub.msg", cb); 
    196200        } 
    197201        bool group::is_subscriber(boost::shared_ptr<const user> u) 
  • db/group.hh

    r383796f rf2c6ab7  
    11/*  This file is part of Alue, the multiprotocol Internet discussion daemon 
    22 
    3     Copyright © 2009, 2010 Antti-Juhani Kaijanaho 
     3    Copyright © 2009, 2010, 2011 Antti-Juhani Kaijanaho 
    44 
    55    Alue is free software: you can redistribute it and/or modify it 
     
    9999 
    100100                void add_subscriber(boost::shared_ptr<user> u, 
    101                                     server::conn_cb cb); 
     101                                    server::conn_cb cb, 
     102                                   boost::asio::ip::address peer); 
    102103                void delete_subscriber(boost::shared_ptr<user> u, 
    103104                                       server::conn_cb cb); 
  • db/role.hh

    r2114058 rf2c6ab7  
    8383                } 
    8484 
     85                bool is_subscriber_role() const 
     86                        { return is_subscriber_role(name); } 
     87 
     88                std::string whose_subscriber_role() const { 
     89                        return name.substr(subscriber_prefix.length()); 
     90                } 
     91 
    8592                static bool is_subscriber_role(std::string str) { 
    8693                        return  str.substr(0, subscriber_prefix.length()) 
  • db/user.cc

    r2114058 rf2c6ab7  
    2727#include "../tlate/data_model.hh" 
    2828#include "../tlate/tlate.hh" 
     29#include "../tlate/user_value.hh" 
    2930#include "../uri.hh" 
    3031 
     
    152153                mam->insert("to", 
    153154                            ::msg::make_phrase(ton) + " <" + to + ">"); 
    154                 mam->insert("userid", userid); 
     155                mam->insert("user", new tlate::user_value(shared_from_this())); 
    155156                mam->insert("link", link.str()); 
    156157                mam->insert("request_ip", request_ip); 
     
    166167                cb.smtpc().send_mail(recv, mos.str()); 
    167168        } 
    168         bool user::verify_delivery_email(std::string cookie) 
     169        bool user::verify_delivery_email(std::string cookie, server::conn_cb cb) 
    169170        { 
    170171                if (delivery_email_verified) return true; 
     
    178179                dbase->add_record(os.str()); 
    179180                BOOST_ASSERT(delivery_email_verified); 
     181 
     182                tlate::data_model::ptr mam(new tlate::data_model); 
     183 
     184                std::string ton = display_name; 
     185                std::string to = delivery_email; 
     186                std::string from =  
     187                        config["alue-name"].as<std::string>() + 
     188                        " <" + 
     189                        config["operator-email"].as<std::string>() + 
     190                        ">"; 
     191                mam->insert("from", from); 
     192                mam->insert("to", 
     193                            ::msg::make_phrase(ton) + " <" + to + ">"); 
     194                mam->insert("user", new tlate::user_value(shared_from_this())); 
     195 
     196                boost::shared_ptr<tlate::tlate> tl = 
     197                        tlate::tlate::parse("confirmed.msg"); 
     198                std::ostringstream mos; 
     199                mos << tl->eval(mam); 
     200                         
     201                std::list<std::string> recv; 
     202                recv.push_back(to); 
     203                                 
     204                cb.smtpc().send_mail(recv, mos.str()); 
     205 
    180206                return true; 
    181207        } 
  • db/user.hh

    r2114058 rf2c6ab7  
    8484                void send_delivery_email_cookie(server::conn_cb cb, 
    8585                                                std::string request_ip); 
    86                 bool verify_delivery_email(std::string cookie); 
     86                bool verify_delivery_email(std::string cookie, 
     87                                           server::conn_cb cb); 
    8788 
    8889                bool allow_cleartext_password() const { 
     
    122123                        return err; 
    123124                } 
     125 
     126                boost::shared_ptr<db> get_db() const { return dbase; }; 
    124127        }; 
    125128} 
  • http/confirm.cc

    r2705dcb rf2c6ab7  
    11/*  This file is part of Alue, the multiprotocol Internet discussion daemon 
    22 
    3     Copyright © 2009, 2010 Antti-Juhani Kaijanaho 
     3    Copyright © 2009, 2010, 2011 Antti-Juhani Kaijanaho 
    44 
    55    Alue is free software: you can redistribute it and/or modify it 
     
    7777                { 
    7878                        boost::shared_ptr<resource> er; 
    79                         if (u->verify_delivery_email(tokstr)) 
     79                        if (u->verify_delivery_email(tokstr, cb)) 
    8080                                er.reset(new redir_resource(cb, 
    8181                                                            "/confirmed.html", 
  • http/sub.cc

    r383796f rf2c6ab7  
    11/*  This file is part of Alue, the multiprotocol Internet discussion daemon 
    22 
    3     Copyright © 2009, 2010 Antti-Juhani Kaijanaho 
     3    Copyright © 2009, 2010, 2011 Antti-Juhani Kaijanaho 
    44 
    55    Alue is free software: you can redistribute it and/or modify it 
     
    9898                if (sub) 
    9999                { 
    100                         gr->add_subscriber(u, cb); 
    101                         if (!u->is_delivery_email_verified()) 
    102                                 u->send_delivery_email_cookie 
    103                                         (cb, req->get_peer().to_string()); 
     100                        gr->add_subscriber(u, cb, req->get_peer()); 
    104101                } 
    105102                else 
  • tlate/user_value.cc

    r868b365 rf2c6ab7  
    11/*  This file is part of Alue, the multiprotocol Internet discussion daemon 
    22 
    3     Copyright © 2009 Antti-Juhani Kaijanaho 
     3    Copyright © 2009, 2011 Antti-Juhani Kaijanaho 
    44 
    55    Alue is free software: you can redistribute it and/or modify it 
     
    2121#include "user_value.hh" 
    2222 
     23#include "../db/db.hh" 
     24#include "../db/group.hh" 
     25#include "../db/role.hh" 
    2326#include "../db/user.hh" 
    2427#include "../html/util.hh" 
     28#include "../tlate/group_value.hh" 
     29#include "../tlate/list_value.hh" 
    2530 
    2631namespace tlate 
     
    4045                else if (var == "chpasswd") 
    4146                        rv.reset(new string_value("/passwd/")); 
     47                else if (var == "subs") 
     48                { 
     49                        const std::set<db::role::ptr> &roles = u->get_roles(); 
     50                        list_value::ptr sublist; 
     51                        for (std::set<db::role::ptr>::const_iterator it  
     52                                     = roles.begin(); 
     53                             it != roles.end(); it++) 
     54                        { 
     55                                if (!sublist) sublist.reset(new list_value); 
     56                                db::role::ptr r = *it; 
     57                                if (!r->is_subscriber_role()) continue; 
     58                                db::group::ptr gr; 
     59                                try 
     60                                { 
     61                                        gr = u->get_db()->lookup_group 
     62                                                (r->whose_subscriber_role()); 
     63                                } 
     64                                catch (db::no_such_group) 
     65                                { 
     66                                        continue; 
     67                                } 
     68                                group_value::ptr gv(new group_value(gr, u)); 
     69                                                                 
     70                                sublist->push_back(gv); 
     71                        } 
     72                        rv = sublist; 
     73                } 
     74                 
    4275                return rv; 
    4376        }