예제 #1
0
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));
                }
            }
        }
    }
}
예제 #2
0
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;
}
예제 #3
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;
}