static void copyMappings(HttpRoute *route, MprJson *dest, MprJson *obj) { MprJson *child, *job, *jvalue; cchar *key, *value; int ji; for (ITERATE_CONFIG(route, obj, child, ji)) { if (child->type & MPR_JSON_OBJ) { job = mprCreateJson(MPR_JSON_OBJ); copyMappings(route, job, child); mprSetJsonObj(dest, child->name, job); } else { key = child->value; if (sends(key, "|time")) { key = ssplit(sclone(key), " \t|", NULL); if ((value = mprGetJson(route->config, key)) != 0) { mprSetJson(dest, child->name, itos(httpGetTicks(value)), MPR_JSON_NUMBER); } } else { if ((jvalue = mprGetJsonObj(route->config, key)) != 0) { mprSetJsonObj(dest, child->name, mprCloneJson(jvalue)); } } } } }
static cchar *getClientConfig(HttpConn *conn) { HttpRoute *route; MprJson *mappings, *obj; conn = getConn(); for (route = conn->rx->route; route; route = route->parent) { if (route->clientConfig) { return route->clientConfig; } } route = conn->rx->route; if ((obj = mprGetJsonObj(route->config, "esp.mappings")) != 0) { mappings = mprCreateJson(MPR_JSON_OBJ); copyMappings(route, mappings, obj); mprWriteJson(mappings, "prefix", route->prefix, 0); route->clientConfig = mprJsonToString(mappings, MPR_JSON_QUOTES); } return route->clientConfig; }
/* Load the config.json */ PUBLIC int espLoadConfig(HttpRoute *route) { EspRoute *eroute; MprJson *msettings; MprPath cinfo; cchar *cpath, *value; eroute = route->eroute; cpath = mprJoinPath(route->documents, "config.json"); if (mprGetPathInfo(cpath, &cinfo) == 0) { if (eroute->config && cinfo.mtime > eroute->configLoaded) { eroute->config = 0; } eroute->configLoaded = cinfo.mtime; } if (!eroute->config) { if ((eroute->config = mprLoadJson(cpath)) != 0) { /* Blend the mode properties into settings */ eroute->mode = mprGetJsonValue(eroute->config, "mode", 0); if ((msettings = mprGetJson(eroute->config, sfmt("modes.%s", eroute->mode), 0)) != 0) { mprBlendJson(mprLookupJson(eroute->config, "settings"), msettings, 0); } if ((value = espGetConfig(route, "settings.showErrors", 0)) != 0) { httpSetRouteShowErrors(route, smatch(value, "true")); } if ((value = espGetConfig(route, "settings.update", 0)) != 0) { eroute->update = smatch(value, "true"); } if ((value = espGetConfig(route, "settings.keepSource", 0)) != 0) { eroute->keepSource = smatch(value, "true"); } if ((eroute->serverPrefix = espGetConfig(route, "settings.serverPrefix", 0)) == 0) { eroute->serverPrefix = sclone(BIT_ESP_SERVER_PREFIX); } if ((value = espGetConfig(route, "settings.login.name", 0)) != 0) { /* Automatic login as this user. Password not required */ httpSetAuthUsername(route->auth, value); } if ((value = espGetConfig(route, "settings.xsrfToken", 0)) != 0) { httpSetRouteXsrf(route, smatch(value, "true")); } if ((value = espGetConfig(route, "settings.sendJson", 0)) != 0) { eroute->json = smatch(value, "true"); } if (espTestConfig(route, "settings.map", "compressed")) { httpAddRouteMapping(route, "js,css,less", "min.${1}.gz, min.${1}, ${1}.gz"); httpAddRouteMapping(route, "html,xml", "${1}.gz"); } if (!eroute->database) { if ((eroute->database = espGetConfig(route, "server.database", 0)) != 0) { if (espOpenDatabase(route, eroute->database) < 0) { mprError("Cannot open database %s", eroute->database); return MPR_ERR_CANT_OPEN; } } } eroute->json = espTestConfig(route, "settings.json", "1"); } else { eroute->config = mprCreateJson(MPR_JSON_OBJ); espAddComponent(route, "legacy-mvc"); } if (espHasComponent(route, "legacy-mvc")) { eroute->legacy = 1; } } return 0; }