Commit c25e6361 authored by jan.koester's avatar jan.koester
Browse files

test

parent 713879a5
Loading
Loading
Loading
Loading
+50 −49
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include "conf.h"
#include "theme.h"
#include "session.h"
#include <authdb/user.h>

namespace blogi {
  const uuid::uuid emptyuuid;
@@ -233,59 +234,59 @@ bool blogi::Auth::isLoggedIn(const int tid,libhttppp::HttpRequest &curreq,const
}

int blogi::Auth::getAuthorId(const int tid, const uuid::uuid &authid) {
    bool ok=false;
    int authorId = 0;
    
    for(size_t i=0; i<_config.getAuthSourceCount(); ++i) {
        const AuthSource &src = _config.getAuthSource(i);
    for (size_t si = 0; si < _config.getAuthSourceCount(); ++si) {
        const AuthSource &src = _config.getAuthSource(si);
        try {
            authdb::client::ClientConnection authcon(&src.url);
            
            authdb::client::Client clt(&authcon);
            
            authdb::client::SessionData sdat;
            uuid::uuid auid;
            
            if(!clt.getSession(authid.toString().c_str(), sdat)){
                   continue;
            }            
            
            sdat.getUid(auid);

            authdb::client::UserData udat(auid);
            if(!clt.getUser(udat))
                    continue;
            
            std::string username;
            authdb::client::ClientConnection authcon;
            authcon.setUrl(src.url);
            authcon.setClientName(src.clientName);
            authcon.setClientSecret(src.clientSecret);
            authcon.setSessionID(authid);

            for(authdb::client::UserData::Data *dat=udat.find("username"); dat; dat=dat->next()) {
                if(dat->type==authdb::UserData::typeEmpty)
                    continue;
                username=dat->data;
            }
            authdb::client::Client clt(authcon);
            if (!clt.ClientAuth()) continue;

            authdb::SessionData sdat;
            clt.SessionInfo(sdat);
            uuid::uuid uid;
            sdat.getUid(uid);
            class authdb::UserData ud(uid);
            clt.UserInfo(ud);
            
            std::string username = ud.getUsername();
            std::string displayname = ud.getFirstname() + " " + ud.getLastname();
            std::string email = ud.getMail();

            std::vector<char> sbuf;
            dbpp::SQL asql;
            dbpp::DBResult ares;
            asql << "SELECT id FROM users WHERE sid='" << dbpp::SQL::escaped(sbuf, uid.c_str()) << "' LIMIT 1;";
            int ucount = _dbconn[tid]->exec(asql, ares);
            if (ucount > 0) {
                int authorId = atoi(ares[0][0]);
                // Update displayname in case it changed
                dbpp::SQL usql;
                dbpp::DBResult ures;
            std::vector<char> esc;
            usql << "SELECT id FROM users WHERE sid='" << dbpp::SQL::escaped(esc, auid.toString().c_str()) << "' LIMIT 1;";
            if(_db[tid]->exec(&usql, ures)>0) {
                 authorId=atoi(ures.front()[0]);
                usql << "UPDATE users SET displayname='" << dbpp::SQL::escaped(sbuf, displayname.c_str())
                     << "', username='" << dbpp::SQL::escaped(sbuf, username.c_str())
                     << "', email='" << dbpp::SQL::escaped(sbuf, email.c_str())
                     << "' WHERE id=" << authorId << ";";
                try { _dbconn[tid]->exec(usql, ures); } catch (...) {}
                return authorId;
            } else {
                dbpp::SQL isql;
                dbpp::DBResult ires;
                 isql << "INSERT INTO users (sid, username) VALUES ('"
                      << dbpp::SQL::escaped(esc, auid.toString().c_str()) << "','"
                      << dbpp::SQL::escaped(esc, username.c_str()) << "') RETURNING id;";
                 _db[tid]->exec(&isql, ires);
                 authorId=atoi(ires.front()[0]);
            }
            ok=true;
            break;
                isql << "INSERT INTO users (sid,username,email,displayname) VALUES ('"
                     << dbpp::SQL::escaped(sbuf, uid.c_str()) << "','"
                     << dbpp::SQL::escaped(sbuf, username.c_str()) << "','"
                     << dbpp::SQL::escaped(sbuf, email.c_str()) << "','"
                     << dbpp::SQL::escaped(sbuf, displayname.c_str()) << "') RETURNING id;";
                _dbconn[tid]->exec(isql, ires);
                return atoi(ires[0][0]);
            }
        } catch (...) {
            continue;
        }
    }
    
    if(!ok)
        throw authdb::client::ClientException("author_id could not be resolved");
    return authorId;
    return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ namespace blogi {
        void login(const int tid,const char *username,const char *password,uuid::uuid &authid,const std::string &ssid,const std::string &domain="");
        void Apilogin(const int tid,const char *username,const char *password,uuid::uuid &authid,const std::string &domain="");
        bool isLoggedIn(const int tid,const uuid::uuid &authid);
        bool isLoggedIn(const int tid,libhttppp::HttpRequest bool isLoggedIn(const int tid,libhttppp::HttpRequest &curreq,const std::string &ssid);curreq,const std::string bool isLoggedIn(const int tid,libhttppp::HttpRequest &curreq,const std::string &ssid);ssid);
        bool isLoggedIn(const int tid,libhttppp::HttpRequest &curreq,const std::string &ssid);
        int getAuthorId(const int tid, const uuid::uuid &authid);
    private:
        void _doLogin(const AuthSource &src, const char *username, const char *password,