static int copyParams(HttpConn *conn, cchar **envv, int index, MprJson *params, cchar *prefix) { MprJson *param; int i; for (ITERATE_JSON(params, param, i)) { copyInner(conn, envv, index++, param->name, param->value, prefix); } envv[index] = 0; return index; }
/* <% scripts(patterns); %> Where patterns may contain *, ** and !pattern for exclusion */ PUBLIC void scripts(cchar *patterns) { HttpStream *stream; HttpRx *rx; HttpRoute *route; EspRoute *eroute; MprList *files; MprJson *cscripts, *script; cchar *uri, *path, *version; int next, ci; stream = getStream(); rx = stream->rx; route = rx->route; eroute = route->eroute; patterns = httpExpandRouteVars(route, patterns); if (!patterns || !*patterns) { version = espGetConfig(route, "version", "1.0.0"); if (eroute->combineScript) { scripts(eroute->combineScript); } else if (espGetConfig(route, "http.content.combine[@=js]", 0)) { if (espGetConfig(route, "http.content.minify[@=js]", 0)) { eroute->combineScript = sfmt("all-%s.min.js", version); } else { eroute->combineScript = sfmt("all-%s.js", version); } scripts(eroute->combineScript); } else { if ((cscripts = mprGetJsonObj(route->config, "client.scripts")) != 0) { for (ITERATE_JSON(cscripts, script, ci)) { scripts(script->value); } } } return; }
PUBLIC void espShowRequest(HttpConn *conn) { MprHash *env; MprJson *params, *param; MprKey *kp; MprJson *jkey; HttpRx *rx; int i; rx = conn->rx; httpAddHeaderString(conn, "Cache-Control", "no-cache"); httpCreateCGIParams(conn); espRender(conn, "\r\n"); /* Query */ for (ITERATE_JSON(rx->params, jkey, i)) { espRender(conn, "PARAMS %s=%s\r\n", jkey->name, jkey->value ? jkey->value : "null"); } espRender(conn, "\r\n"); /* Http Headers */ env = espGetHeaderHash(conn); for (ITERATE_KEYS(env, kp)) { espRender(conn, "HEADER %s=%s\r\n", kp->key, kp->data ? kp->data: "null"); } espRender(conn, "\r\n"); /* Server vars */ for (ITERATE_KEYS(conn->rx->svars, kp)) { espRender(conn, "SERVER %s=%s\r\n", kp->key, kp->data ? kp->data: "null"); } espRender(conn, "\r\n"); /* Form vars */ if ((params = espGetParams(conn)) != 0) { for (ITERATE_JSON(params, param, i)) { espRender(conn, "FORM %s=%s\r\n", param->name, param->value); } espRender(conn, "\r\n"); } #if KEEP /* Body */ q = conn->readq; if (q->first && rx->bytesRead > 0 && scmp(rx->mimeType, "application/x-www-form-urlencoded") == 0) { buf = q->first->content; mprAddNullToBuf(buf); if ((numKeys = getParams(&keys, mprGetBufStart(buf), (int) mprGetBufLength(buf))) > 0) { for (i = 0; i < (numKeys * 2); i += 2) { value = keys[i+1]; espRender(conn, "BODY %s=%s\r\n", keys[i], value ? value: "null"); } } espRender(conn, "\r\n"); } #endif }
/* WARNING: may yield */ PUBLIC int espLoadConfig(HttpRoute *route) { EspRoute *eroute; cchar *name, *package; bool modified; eroute = route->eroute; if (!route->update) { return 0; } package = mprJoinPath(mprGetPathDir(eroute->configFile), "package.json"); modified = 0; ifConfigModified(route, eroute->configFile, &modified); ifConfigModified(route, package, &modified); if (modified) { lock(esp); httpInitConfig(route); #if DEPRECATED || 1 /* Don't reload if configFile == package.json */ if (!mprSamePath(package, eroute->configFile)) { #endif if (mprPathExists(package, R_OK)) { if (httpLoadConfig(route, package) < 0) { unlock(esp); return MPR_ERR_CANT_LOAD; } } } if (httpLoadConfig(route, eroute->configFile) < 0) { unlock(esp); return MPR_ERR_CANT_LOAD; } if ((name = espGetConfig(route, "name", 0)) != 0) { eroute->appName = name; } if (espLoadCompilerRules(route) < 0) { return MPR_ERR_CANT_OPEN; } unlock(esp); } if (!route->cookie) { httpSetRouteCookie(route, sfmt("esp-%s", eroute->appName)); } if (route->database && !eroute->edi) { if (espOpenDatabase(route, route->database) < 0) { mprLog("error esp", 0, "Cannot open database %s", route->database); return MPR_ERR_CANT_LOAD; } } #if !ME_STATIC if (!(route->flags & HTTP_ROUTE_NO_LISTEN)) { MprJson *preload, *item; cchar *errMsg, *source; char *kind; int i; /* WARNING: may yield when compiling modules */ if (eroute->combine) { source = mprJoinPaths(route->home, httpGetDir(route, "CACHE"), sfmt("%s.c", eroute->appName), NULL); } else { source = mprJoinPaths(route->home, httpGetDir(route, "SRC"), "app.c", NULL); } lock(esp); if (espLoadModule(route, NULL, "app", source, &errMsg) < 0) { if (eroute->combine) { mprLog("error esp", 0, "%s", errMsg); unlock(esp); return MPR_ERR_CANT_LOAD; } } if (!eroute->combine && (preload = mprGetJsonObj(route->config, "esp.preload")) != 0) { for (ITERATE_JSON(preload, item, i)) { source = ssplit(sclone(item->value), ":", &kind); if (*kind == '\0') { kind = "controller"; } source = mprJoinPaths(route->home, httpGetDir(route, "CONTROLLERS"), source, NULL); if (espLoadModule(route, NULL, kind, source, &errMsg) < 0) { mprLog("error esp", 0, "Cannot preload esp module %s. %s", source, errMsg); unlock(esp); return MPR_ERR_CANT_LOAD; } } } unlock(esp); }