Exemple #1
0
NEOERR* member_new_data_add(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = hash_lookup(evth, "member");
    char *mnick, *mname, *mid;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_GET_STR(cgi->hdf, PRE_QUERY".mnick", mnick);
    HDF_GET_STR(cgi->hdf, PRE_QUERY".mname", mname);

    LEGAL_CHECK_NICK(mnick);
    LEGAL_CHECK_NAME(mname);

    hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY));

    MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_ADD, FLAGS_SYNC);

    mid = hdf_get_value(evt->hdfrcv, "mid", NULL);

    member_after_login(cgi, evth, mname, mnick, mid);

    char *s;
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mnick", s);
    hdf_set_value(cgi->hdf, PRE_RESERVE".event.es_one", s);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mname", s);
    hdf_set_value(cgi->hdf, PRE_RESERVE".event.es_two", s);

    HDF *node = hdf_get_obj(cgi->hdf, PRE_RESERVE".event");

    return nerr_pass(trace_event(node, evth, ses, TRACE_TYPE_MEMBER_REG));
}
Exemple #2
0
NEOERR* member_check_login_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mdb_conn *db = hash_lookup(dbh, "main");
    char *mname, *mmsn;
    NEOERR *err;
    
    MCS_NOT_NULLB(cgi->hdf, db);

    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mname", mname);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mmsn", mmsn);
    if (!mname || !mmsn) {
        HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mname", mname);
        HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mmsn", mmsn);
    }
    hdf_set_value(cgi->hdf, PRE_RESERVE".mname", mname);

    MDB_QUERY_RAW(db, "member", _COL_MEMBER, "mname=$1", "s", mname);
    err = mdb_set_row(cgi->hdf, db, _COL_MEMBER, PRE_OUTPUT".member", MDB_FLAG_Z);
    if (err != STATUS_OK) return nerr_pass(err);

    char *mmsndb = hdf_get_value(cgi->hdf, PRE_OUTPUT".member.mmsn", NULL);
    if (!mmsndb || strcmp(mmsndb, mmsn)) {
        hdf_remove_tree(cgi->hdf, PRE_OUTPUT".member");
        return nerr_raise(LERR_NOTLOGIN, "msn don't match");
    }
    
    return STATUS_OK;
}
Exemple #3
0
NEOERR* member_pic_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = hash_lookup(evth, "member");
    HDF *node;
    char *s = NULL, *defs = NULL, *path, *size;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".defs", defs);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".fpath", path);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".fsize", size);

    node = hdf_get_child(cgi->hdf, PRE_QUERY".type");
    if (!node) HDF_GET_STR(cgi->hdf, PRE_QUERY".type", s);

    hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY));

    MEVENT_TRIGGER(evt, NULL, REQ_CMD_MEMBER_PRIV_GET, FLAGS_SYNC);

    if (s) goto getval;
    while (node) {
        s = hdf_obj_value(node);
getval:
        /*
         * turn & into & in url format
         */
        mstr_html_unescape(evt->hdfrcv, s);
        s = hdf_get_value(evt->hdfrcv, s, NULL);
        if (s && *s) {
            if (!strncmp(s, "http:", 5)) {
                hdf_set_value(cgi->hdf, PRE_OUTPUT".302", s);
                return STATUS_OK;
            }
            break;
        }

        if (node) node = hdf_obj_next(node);
    }

    if (!s || !*s) {
        if (!defs) s = SITE_DOMAIN;
        else if (!strcmp(defs, "segv")) return STATUS_OK;
        else s = defs;
    }

    if (!path) path = hdf_get_value(g_cfg,
                                        "Config.font.member.path",
                                        "/usr/share/ttf/Times.ttf");

    if (!size) size = hdf_get_value(g_cfg, "Config.font.member.size", "14.");

    return nerr_pass(mimg_create_from_string(s, path, atof(size), &ses->data));
}
Exemple #4
0
NEOERR* member_edit_data_mod(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "member");
    char *mname, *msn, *omsn, *rlink;
    NEOERR *err;

    MEMBER_CHECK_LOGIN();

    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".msn", msn);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".omsn", omsn);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".rlink", rlink);
    if (msn && *msn) {
        if (omsn && *omsn) {
            /*
             * modify msn through msn
             */
            hdf_set_value(evt->hdfsnd, "mname", mname);
            hdf_set_value(evt->hdfsnd, "msn", omsn);
            MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_CHECK_MSN, FLAGS_SYNC);
        } else if (rlink && *rlink) {
            /*
             * modify msn through rlink
             */
            hdf_set_value(evt->hdfsnd, "mname", mname);
            MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_GETRLINK, FLAGS_SYNC);

            char *s = hdf_get_value(evt->hdfrcv, "rlink", NULL);
            if (!s || strcmp(s, rlink))
                return nerr_raise(LERR_USERINPUT, "验证码错误");
        } else return nerr_raise(LERR_USERINPUT, "修改密码需要提供旧密码");
    } else {
        /*
         * modify base information
         */
        hdf_set_value(evt->hdfsnd, "mname", mname);
        hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY));

        MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_UP, FLAGS_NONE);
    }

    return STATUS_OK;
}
Exemple #5
0
NEOERR* member_account_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "member");
    char *mnick, *mname, *mid, *rlink;
    NEOERR *err;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mname", mname);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".rlink", rlink);

    if (mname && rlink) {
        hdf_set_value(evt->hdfsnd, "mname", mname);
        MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_GETRLINK, FLAGS_SYNC);

        mnick = hdf_get_value(evt->hdfrcv, "mnick", NULL);

        char *s = hdf_get_value(evt->hdfrcv, "rlink", NULL);
        if (!s || strcmp(s, rlink))
            return nerr_raise(LERR_USERINPUT, "验证码错误");

        hdf_set_value(evt->hdfsnd, "mname", mname);
        MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_GET, FLAGS_SYNC);
        hdf_copy(cgi->hdf, PRE_OUTPUT".member", evt->hdfrcv);

        mid = hdf_get_value(evt->hdfrcv, "mid", NULL);
        member_after_login(cgi, evth, mname, mnick, mid);

        hdf_set_value(cgi->hdf, PRE_OUTPUT".rlink", rlink);
    } else {
        MEMBER_CHECK_LOGIN();
    }

    SET_DASHBOARD_ACTION(cgi->hdf);

    return STATUS_OK;
}
Exemple #6
0
NEOERR* member_check_login_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = hash_lookup(evth, "member");
    char *mname, *mmsn;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mname", mname);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".mmsn", mmsn);
    if (!mname || !mmsn) {
        HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mname", mname);
        HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".mmsn", mmsn);
    }
    hdf_set_value(cgi->hdf, PRE_RESERVE".mname", mname);

    hdf_set_value(evt->hdfsnd, "mname", mname);
    hdf_set_value(evt->hdfsnd, "mmsn", mmsn);

    MEVENT_TRIGGER(evt, mname, REQ_CMD_MEMBER_CHECK_MMSN, FLAGS_SYNC);

    hdf_copy(cgi->hdf, PRE_OUTPUT".member", evt->hdfrcv);

    return STATUS_OK;
}
Exemple #7
0
NEOERR* session_init(CGI *cgi, HASH *dbh, session_t **ses)
{
    session_t *lses;
    HDF *node, *onode;
    char tok[LEN_HDF_KEY], *s;
    NEOERR *err;

    /*
     * follow cgi_parse(), to process _type_object
     */
    s = hdf_get_value(cgi->hdf, PRE_QUERY"._type_object", NULL);
    if (s) {
        ULIST *list;
        string_array_split(&list, s, ",", 50);
        ITERATE_MLIST(list) {
            snprintf(tok, sizeof(tok), "%s.%s",
                     PRE_QUERY, neos_strip((char*)list->items[t_rsv_i]));
            onode = hdf_get_obj(cgi->hdf, tok);
            if (onode) {
                err = mjson_string_to_hdf(onode, NULL, MJSON_EXPORT_NONE);
                TRACE_NOK(err);
            }
        }
        uListDestroy(&list, ULIST_FREE);
    }

    *ses = NULL;

    lses = calloc(1, sizeof(session_t));
    if (!lses) return nerr_raise(NERR_NOMEM, "calloc memory for session_t failure");

    /*
     * mname
     */
    HDF_FETCH_STR(cgi->hdf, PRE_COOKIE".mname", s);
    if (!s) HDF_FETCH_STR(cgi->hdf, PRE_COOKIE".username", s);
    if (s) lses->mname = strdup(s);

    /*
     * province
     */
    HDF_FETCH_STR(cgi->hdf, PRE_COOKIE".province", s);
    hdf_init(&lses->province);
    if (s) {
        neos_unescape((UINT8*)s, strlen(s), '%');
        hdf_set_value(lses->province, NULL, s);
        mjson_export_to_hdf(lses->province, NULL, MJSON_EXPORT_NONE, false);
    }

    /*
     * city
     */
    HDF_FETCH_STR(cgi->hdf, PRE_COOKIE".city", s);
    hdf_init(&lses->city);
    if (s) {
        neos_unescape((UINT8*)s, strlen(s), '%');
        hdf_set_value(lses->city, NULL, s);
        mjson_export_to_hdf(lses->city, NULL, MJSON_EXPORT_NONE, false);
    }

    /*
     * browser
     */
    HDF_FETCH_STR(cgi->hdf, PRE_HTTP".UserAgent", s);
    if (s) {
        mstr_repchr(s, ' ', '\0');
        for (int i = 0; i < m_browsers_size; i++) {
            if (!strncasecmp(s, m_browsers[i], strlen(m_browsers[i]))) {
                lses->browser = i;
                break;
            }
        }
        s = strchr(s, '/');
        if (s) lses->bversion = strtof(s+1, NULL);
    }

    /*
     * reqtype
     */
    lses->reqtype = CGI_REQ_HTML;
    char *uri = hdf_get_value(cgi->hdf, PRE_REQ_URI_RW, NULL);
    if (!uri) {
        uri = "terminal";
        lses->reqtype = CGI_REQ_TERMINAL;
    }
    mstr_repchr(uri, '/', '_');
    uri = mstr_strip(uri, '_');
    if (!strncmp(uri, "json_", 5)) {
        uri = uri+5;
        lses->reqtype = CGI_REQ_AJAX;
    } else if (!strncmp(uri, "image_", 6)) {
        uri = uri+6;
        lses->reqtype = CGI_REQ_IMAGE;
    }

    /*
     * dataer, render
     */
    switch (http_req_method(cgi)) {
        case CGI_REQ_POST:
            snprintf(tok, sizeof(tok), "%s_data_mod", uri);
            break;
        case CGI_REQ_PUT:
            snprintf(tok, sizeof(tok), "%s_data_add", uri);
            break;
        case CGI_REQ_DEL:
            snprintf(tok, sizeof(tok), "%s_data_del", uri);
            break;
        default:
        case CGI_REQ_GET:
            snprintf(tok, sizeof(tok), "%s_data_get", uri);
            break;
    }
    lses->dataer = strdup(tok);
    lses->render = strdup(uri);

    /*
     * tm_cache_browser
     */
    node = hdf_get_obj(g_cfg, PRE_CFG_FILECACHE".0");
    while (node != NULL) {
        if (reg_search(hdf_get_value(node, "uri", "NULL"), uri)) {
            lses->tm_cache_browser = hdf_get_int_value(node, "tm_cache", 0);
            break;
        }
        node = hdf_obj_next(node);
    }

    /*
     * DONE
     */
    *ses = lses;

    return STATUS_OK;
}
Exemple #8
0
NEOERR* system_view_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mdb_conn *db = hash_lookup(dbh, "trace");
    STRING str; string_init(&str);
    char *mname, *s;
    NEOERR *err;

    MCS_NOT_NULLB(cgi->hdf, db);
    
    MEMBER_CHECK_ADMIN();
    SET_DASHBOARD_ACTION(cgi->hdf);

    /*
     * prepare query condition
     */
    hdf_set_int_value(cgi->hdf, PRE_QUERY".type", TRACE_TYPE_PAGEVIEW);
    HDF_FETCH_STR(cgi->hdf, PRE_QUERY".times", s);
    if (!s) hdf_set_value(cgi->hdf, PRE_QUERY".timed", "current_date - 2");
    err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY),
                              hdf_get_obj(g_cfg, "Db.QueryCond.system.view"),
                              &str, NULL);
    if (err != STATUS_OK) return nerr_pass(err);

    /*
     * pageview
     */
    MDB_QUERY_RAW(db, "emap", _COL_EMAP_PAGEVIEW,
                  " %s GROUP BY date_trunc('hour', intime) "
                  " ORDER BY date_trunc('hour', intime)", NULL, str.buf);
    err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_PAGEVIEW, PRE_OUTPUT".pageviews",
                       NULL, MDB_FLAG_EMPTY_OK);
    if (err != STATUS_OK) return nerr_pass(err);

    /*
     * userview
     */
    MDB_QUERY_RAW(db, "emap", _COL_EMAP_USERVIEW,
                  " %s GROUP BY date_trunc('hour', intime) "
                  " ORDER BY date_trunc('hour', intime)", NULL, str.buf);
    err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_USERVIEW, PRE_OUTPUT".userviews",
                       NULL, MDB_FLAG_EMPTY_OK);
    if (err != STATUS_OK) return nerr_pass(err);

    /*
     * day count
     */
    MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEVIEW,
                  " %s GROUP BY date_trunc('day', intime) "
                  " ORDER BY date_trunc('day', intime)", NULL, str.buf);
    err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEVIEW, PRE_OUTPUT".dateviews",
                       NULL, MDB_FLAG_EMPTY_OK);
    if (err != STATUS_OK) return nerr_pass(err);
    MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEUSER,
                  " %s GROUP BY date_trunc('day', intime) "
                  " ORDER BY date_trunc('day', intime)", NULL, str.buf);
    err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEUSER, PRE_OUTPUT".dateusers",
                       NULL, MDB_FLAG_EMPTY_OK);
    if (err != STATUS_OK) return nerr_pass(err);

    string_clear(&str);

    hdf_set_attr(cgi->hdf, PRE_OUTPUT".pageviews", "type", "array");
    hdf_set_attr(cgi->hdf, PRE_OUTPUT".userviews", "type", "array");
    
    return STATUS_OK;
}