/* Path is the path to the esp.json */ static int defineApp(HttpRoute *route, cchar *path) { EspRoute *eroute; if ((eroute = espRoute(route)) == 0) { return MPR_ERR_MEMORY; } eroute->top = eroute; if (path) { if (!mprPathExists(path, R_OK)) { mprLog("error esp", 0, "Cannot open %s", path); return MPR_ERR_CANT_FIND; } httpSetRouteHome(route, mprGetPathDir(path)); eroute->configFile = sclone(path); } espSetDefaultDirs(route); httpAddRouteHandler(route, "espHandler", ""); httpAddRouteIndex(route, "index.esp"); httpAddRouteIndex(route, "index.html"); httpSetRouteXsrf(route, 1); mprLog("info esp", 3, "ESP app: %s", path); return 0; }
/* 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; }