Warning: session_start(): open(/var/lib/php/sessions/sess_j8frubjp837co2sstv3353mk9r, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
// for sub-bots
please include function serveRedirect.
please include function serve403.
please include function serve404.
please include function serve500.
please include function serveFile.
please include function serveFileWithName.
please include function serveFile_maxCache.
please include function serveByteArray.
please include function serveByteArray_maxCache.
sclass WebRequest {
NanoHTTPD.IHTTPSession httpSession;
S uri, subURI;
SS params;
S cookie;
Session session;
*(NanoHTTPD.IHTTPSession *httpSession, S *uri, SS *params) {}
S clientIP() {
ret unnull(getClientIPFromHeaders(httpSession.getHeaders()));
}
S cookie() { ret cookie; }
S domain() { ret mapGet(httpSession.getHeaders(), "host"); }
User loggedInUser() { ret session == null ? null : session.user; }
S googleClientID() {
S domain = lower(domain());
File jsonFile = googleClientSecretFileForDomain(domain);
if (!fileExists(jsonFile)) fail("No Google client secret for " + domain);
Map map = decodeJSONMap(loadTextFile(jsonFile));
map = (Map) map.get("web");
ret (S) map.get("client_id");
}
}
concept User {
GlobalID globalID = aGlobalIDObject();
long lastSeen;
}
/*concept CookieUser > User {
S cookie;
toString { ret "[cookieUser]"; }
}*/
concept GoogleUser > User {
long googleLogInDate;
S googleEmail, googleFirstName, googleLastName;
bool googleEmailVerified;
toString { ret googleFirstName + " " + googleLastName; }
}
concept Session {
S cookie;
User user;
}
cmodule Eleu3 > DynPrintLogAndEnabled {
!include #1027628 // HTTP+HTTPS servers
start {
dbIndexing(Session, 'cookie, GoogleUser, 'googleEmail);
dm_restartOnFieldChange enabled();
if (!enabled) ret;
set redirectHttpToHttps;
start_webServers(serverSocketFactory_botCompanyEtc());
}
O webServe(S uri, SS params) {
Pair spamCheck = spamBlocker.checkRequest(uri, serveHttp_clientIP());
if (spamCheck.b) {
sleepSeconds(60.0);
ret print("go away");
}
printVars("webServe", +uri);
// Serve Let's encrypt challenges
if (startsWith(uri, "/.well-known/"))
ret loadTextFile(userDir("validation.txt"));
// make WebRequest
WebRequest req = new(NanoHTTPD.currentSession!, uri, params);
req.cookie = nu ServeHttp_CookieHandler(verbose := true).handle();
// Get session
req.session = nempty(req.cookie) ? uniq Session(cookie := req.cookie) : null;
// Serve Google verification
if (eqic(uri, "/google-verify"))
ret serveGoogleVerify(req);
// Serve Rewrite DB
S uri2 = appendSlash(uri);
new Matches m;
if (startsWith(uri2, "/db/", m)) {
S mod = dm_findModuleWithParams("#1028965/RewriteDBWebBot", enabled := true);
if (mod != null) {
dm_call(mod, 'setEleu, mc());
req.subURI = "/" + m.rest();
ret dm_call(mod, 'html, req);
}
ret "DB not loaded";
}
// Serve CRUDDIE
S cruddie = dm_findModuleWithParams("#1028961/Cruddie", enabled := true);
if (cruddie != null) {
dm_call(cruddie, 'setEleu, mc());
ret dm_call(cruddie, 'html, req);
}
ret "hello";
}
O serveGoogleVerify(WebRequest req) {
Payload payload = googleVerifyUserToken2(req.googleClientID(), req.params.get("token"));
S email = payload == null ? null : payload.getEmail();
if (empty(email)) ret print("google-verify", "No");
// create/update an object for the user
GoogleUser user = uniqCI_sync GoogleUser(googleEmail := email);
cset(user,
googleEmailVerified := payload.getEmailVerified(),
googleFirstName := strOrNull(payload.get("given_name")),
googleLastName := strOrNull(payload.get("family_name")),
googleLogInDate := now());
// link user to session
cset(req.session, +user);
ret print("google-verify", payload.getEmail() + " " + (payload.getEmailVerified() ? "(verified)" : "(not verified)"));
}
}