Loading src/auth.cpp +46 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading
src/auth.cpp +46 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading