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

test

parent e4b4e690
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -267,6 +267,48 @@ bool webedit::Server::isAuthenticated(const std::string &authid) {
    return false;
}

void webedit::Server::ensureSessionFromAuthid(const std::string &authid,
                                              const std::string &sessionid) {
    if (authid.empty() || _authPools.empty())
        return;

    // Already hydrated for this editor session — nothing to do.
    std::string existing;
    _session.getData(sessionid, "authid", existing);
    if (!existing.empty())
        return;

    uuid::uuid sid(authid.c_str());
    const uuid::uuid loginGpoId("e7d3b8b3-4825-11f0-ae2b-3cecefce9cb6");

    for (size_t i = 0; i < _authPools.size(); ++i) {
        try {
            auto pooled = _authPools[i]->acquire();
            pooled.setSessionID(sid);

            if (!pooled.client().ClientAuth() ||
                !pooled.client().GPOcheck(loginGpoId))
                continue;

            authdb::SessionData sdat;
            pooled.client().SessionInfo(sdat);

            std::string displayname = sdat.getUsername();
            uuid::uuid uid;
            sdat.getUid(uid);
            std::string uidStr = uid.c_str();

            _session.addData(sessionid, "authid", authid);
            _session.addData(sessionid, "uid", uidStr);
            _session.addData(sessionid, "username", displayname);
            _session.addData(sessionid, "domain", _config.getAuthSource(i).domain);
            return;
        } catch (...) {
            continue;
        }
    }
}

void webedit::Server::handleLogin(libhttppp::HttpRequest &curreq,
                                   const std::string &sessionid) {
    if (_authPools.empty()) {