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

test

parent bfaec12b
Loading
Loading
Loading
Loading
+46 −14
Original line number Diff line number Diff line
@@ -174,18 +174,34 @@ sess.addSessionData(*ssid,"uid",uid.c_str());
void blogi::Auth::login(const int tid,const char* username, const char* password,uuid::uuid &authid, const std::string &ssid, const std::string &domain){
    libhttppp::HTTPException httpException;

    // Parse user@domain if no explicit domain provided
    // Prefer explicit domain, but gracefully fall back to user@domain and
    // default source selection if the explicit domain does not match.
    std::string user(username);
    std::string dom = domain;
    if(dom.empty()){
        auto atpos = user.rfind('@');

    const auto atpos = user.rfind('@');
    std::string userDomain;
    std::string userNameOnly = user;
    if(atpos != std::string::npos){
            dom = user.substr(atpos + 1);
            user = user.substr(0, atpos);
        userDomain = user.substr(atpos + 1);
        userNameOnly = user.substr(0, atpos);
    }

    if(dom.empty() && !userDomain.empty()){
        dom = userDomain;
        user = userNameOnly;
    }

    const AuthSource *src = _config.findAuthSource(dom);
    if(!src && !userDomain.empty()){
        src = _config.findAuthSource(userDomain);
        if(src)
            user = userNameOnly;
    }
    if(!src){
        src = _config.findAuthSource("");
    }

    if(!src){
        httpException[libhttppp::HTTPException::Error] << "No auth source found for domain: " << dom;
        throw httpException;
@@ -197,18 +213,34 @@ void blogi::Auth::login(const int tid,const char* username, const char* password
void blogi::Auth::Apilogin(const int tid,const char *username,const char *password,uuid::uuid &authid, const std::string &domain){
    libhttppp::HTTPException httpException;

    // Parse user@domain if no explicit domain provided
    // Prefer explicit domain, but gracefully fall back to user@domain and
    // default source selection if the explicit domain does not match.
    std::string user(username);
    std::string dom = domain;
    if(dom.empty()){
        auto atpos = user.rfind('@');

    const auto atpos = user.rfind('@');
    std::string userDomain;
    std::string userNameOnly = user;
    if(atpos != std::string::npos){
            dom = user.substr(atpos + 1);
            user = user.substr(0, atpos);
        userDomain = user.substr(atpos + 1);
        userNameOnly = user.substr(0, atpos);
    }

    if(dom.empty() && !userDomain.empty()){
        dom = userDomain;
        user = userNameOnly;
    }

    const AuthSource *src = _config.findAuthSource(dom);
    if(!src && !userDomain.empty()){
        src = _config.findAuthSource(userDomain);
        if(src)
            user = userNameOnly;
    }
    if(!src){
        src = _config.findAuthSource("");
    }

    if(!src){
        httpException[libhttppp::HTTPException::Error] << "No auth source found for domain: " << dom;
        throw httpException;