Warning: session_start(): open(/var/lib/php/sessions/sess_rc8mpre301ne7027cpo7jc6hia, 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
concept Domain {
S domain;
S moduleLibID;
bool mustBeEnabled;
toString { ret super.toString() + " " + domain; }
}
cmodule2 Eleu3 > DynEleu {
transient CRUD domainCRUD;
switchable bool verbose;
switchable bool debugNanoHTTPD;
switchable S sameSite;
start {
NanoHTTPD_debug = debugNanoHTTPD;
dbIndexingCI(Domain, 'domain);
uniqCI Domain(domain := "");
domainCRUD = new CRUD(Domain);
tablePopupMenu(domainCRUD.table(), voidfunc(JPopupMenu menu, int row) {
Domain d = domainCRUD.selected(), ret if null;
if (nempty(d.moduleLibID))
addMenuItem(menu, "Load module", r { dm_makeOrShow(d.moduleLibID) });
});
dm_registerAs eleuWithCRUD();
}
visualize {
var c = jtabs(
"Main", super,
"Domains" := domainCRUD.visualize());
domainCRUD.table(),
ret c;
}
@Override
S moduleForDomain(S domain) {
domain = dropAfterColon(domain); // drop port number
for (Domain d : domainsInMatchingOrder()) {
if (domainIsUnder_extended(domain, d.domain)) {
S mod = findMod(d);
if (verbose) print("Domain matched: " + domain + " / " + d.domain + " => " + mod);
try answer mod;
} else
if (verbose) print("Domain not matched: " + domain + " / " + d.domain);
}
ret findMod(defaultDomain());
}
Domain defaultDomain() {
ret conceptWhereCI Domain(domain := "");
}
S findMod(Domain d) {
if (d == null || empty(d.moduleLibID)) null;
ret d.mustBeEnabled
? dm_findModuleWithParams(d.moduleLibID, enabled := true)
: dm_findModule(d.moduleLibID);
}
ServeHttp_CookieHandler makeCookieHandler() {
ServeHttp_CookieHandler cookieHandler = super.makeCookieHandler();
cookieHandler.metaParams = appendPrefixIfNempty("SameSite=", sameSite);
ret cookieHandler;
}
// API
Cl domainsInMatchingOrder() {
ret sortByCalculatedFieldICDesc(
filter(list(Domain), d -> !eqic(d.domain, "")),
d -> reversed(d.domain));
}
void addDomain(S domain, S moduleLibID, bool mustBeEnabled) {
uniq Domain(+domain, +moduleLibID, +mustBeEnabled);
}
}