Esempio n. 1
0
NEOERR* blog_static_get(HDF *hdf, HASH *dbh)
{
    mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "aux");
    NEOERR *err;

    LPRE_DBOP(hdf, conn);

    int bid = hdf_get_int_value(hdf, PRE_QUERY".bid", 0);

    MDB_QUERY_RAW(conn, "blog", BLOG_COL, " id=%d AND state=%d ",
                  NULL, bid, BLOG_ST_NORMAL);
    err = mdb_set_row(hdf, conn, BLOG_COL, PRE_OUTPUT".blog");
    if (err != STATUS_OK) return nerr_pass(err);

    /*
     * previous
     * TODO id%32 ===> id%%d, BLOG_SUBDIR_NUM
     */
    MDB_QUERY_RAW(conn, "blog", " id%32 ||'/'|| id as id, title ",
                  " id < %d AND state=%d ORDER BY ID DESC LIMIT 1 ",
                  NULL, bid, BLOG_ST_NORMAL);
    err = mdb_set_row(hdf, conn, " fnameprev, titleprev ", PRE_OUTPUT".blog");
    if (err != STATUS_OK) return nerr_pass(err);

    /*
     * next 
     */
    MDB_QUERY_RAW(conn, "blog", " id%32 ||'/'|| id as id, title ",
                  " id > %d AND state=%d ORDER BY ID LIMIT 1 ",
                  NULL, bid, BLOG_ST_NORMAL);
    err = mdb_set_row(hdf, conn, " fnamenext, titlenext ", PRE_OUTPUT".blog");

    return nerr_pass(err);
}
Esempio n. 2
0
NEOERR* blog_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "aux");
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "aic");
    char *aname, *author;
    NEOERR *err;

    LPRE_DBOP(cgi->hdf, conn);

    APP_CHECK_LOGIN();

    if (hdf_get_int_value(evt->hdfrcv, "state", 0) < LCS_ST_ADMIN)
        return nerr_raise(LERR_LIMIT, "%s wan't be admin", aname);

    int bid = hdf_get_int_value(cgi->hdf, PRE_QUERY".bid", 0);
    /* just rend tpl */
    if (bid == 0) return STATUS_OK;

    MDB_QUERY_RAW(conn, "blog", BLOG_COL, " id=%d ",
                  NULL, bid, BLOG_ST_NORMAL);
    err = mdb_set_row(cgi->hdf, conn, BLOG_COL, PRE_OUTPUT".blog");
    if (err != STATUS_OK) return nerr_pass(err);

    author = hdf_get_value(cgi->hdf, PRE_OUTPUT".blog.author", NULL);
    if (!author) return nerr_raise(LERR_MISS_DATA, "%s not exist", aname);
    
    if (strcmp(aname, author))
        return nerr_raise(LERR_LIMIT, "%s not %s", aname, author);

    return STATUS_OK;
}
Esempio n. 3
0
static NEOERR* aux_cmd_memoryget(struct aux_entry *e, QueueEntry *q)
{
	unsigned char *val = NULL; size_t vsize = 0;
	NEOERR *err;
    int id = 0;

    mdb_conn *db = e->db;
    struct cache *cd = e->cd;

    REQ_FETCH_PARAM_INT(q->hdfrcv, "id", id);

    if (m_memory_maxid < 1) return nerr_raise(NERR_ASSERT, "empty memory");

    /*
     * neo_rand() may get 0, so, +1
     */
    if (id == 0) id = neo_rand(m_memory_maxid) + 1;

    if (cache_getf(cd, &val, &vsize, PREFIX_MEMORY"%d", id)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        MDB_QUERY_RAW(db, "memory", _COL_MEMORY,
                      "id<=%d AND statu=%d ORDER BY id DESC LIMIT 1",
                      NULL, id, MEMORY_ST_OK);
        err = mdb_set_row(q->hdfsnd, db, _COL_MEMORY, NULL);
        if (err != STATUS_OK) return nerr_pass(err);

        CACHE_HDF(q->hdfsnd, MEMORY_CC_SEC, PREFIX_MEMORY"%d", id);
    }
    
    return STATUS_OK;
}
Esempio n. 4
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;
}
Esempio n. 5
0
static NEOERR* dyn_cmd_getadmin(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    unsigned char *val = NULL; size_t vsize = 0;
    char *uname, *aname;
    int uid, aid;
    NEOERR *err;

    REQ_GET_PARAM_STR(q->hdfrcv, "uname", uname);
    REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname);
    uid = hash_string(uname);
    aid = hash_string(aname);

    if (cache_getf(cd, &val, &vsize, PREFIX_ADMIN"%d_%d", uid, aid)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        MDB_QUERY_RAW(db, "track", TRACK_COL, "uid=%d AND aid=%d AND type=%d "
                      " ORDER BY id DESC LIMIT 1;",
                      NULL, uid, aid, TYPE_JOIN);
        err = mdb_set_row(q->hdfsnd, db, TRACK_COL, NULL);
        nerr_handle(&err, NERR_NOT_FOUND);
        if (err != STATUS_OK) return nerr_pass(err);

        CACHE_HDF(q->hdfsnd, ONE_MINUTE, PREFIX_ADMIN"%d_%d", uid, aid);
    }
    
    return STATUS_OK;
}
Esempio n. 6
0
static NEOERR* aic_cmd_app_getrlink(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    char *aname;
    NEOERR *err;

    REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname);

    MDB_QUERY_RAW(db, "appreset", RESET_COL, "aname=$1", "s", aname);
    err = mdb_set_row(q->hdfsnd, db, RESET_COL, NULL);
    if (nerr_handle(&err, NERR_NOT_FOUND))
        return nerr_raise(REP_ERR_NRESET, "%s hasn't reseted", aname);

    return nerr_pass(err);
}
Esempio n. 7
0
/*
 * input : aname(STR)
 * return: NORMAL
 * reply : ["state": 0, ...] OR []
 */
static NEOERR* aic_cmd_appinfo(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    unsigned char *val = NULL; size_t vsize = 0;
    int aid, pid;
    char *aname;
    NEOERR *err;

    REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname);
    aid = hash_string(aname);

    if (cache_getf(cd, &val, &vsize, PREFIX_APPINFO"%d", aid)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        hdf_set_value(q->hdfsnd, "pname", aname);
        MDB_QUERY_RAW(db, "appinfo", APPINFO_COL, "aid=%d", NULL, aid);
        err = mdb_set_row(q->hdfsnd, db, APPINFO_COL, NULL);
        if (nerr_handle(&err, NERR_NOT_FOUND))
            return nerr_raise(REP_ERR_NREGIST, "%s %d hasn't regist", aname, aid);
        if (err != STATUS_OK) return nerr_pass(err);
        pid = hdf_get_int_value(q->hdfsnd, "pid", 0);
        if (pid != 0) {
            MDB_QUERY_RAW(db, "appinfo", "aname", "aid=%d", NULL, pid);
            err = mdb_set_row(q->hdfsnd, db, "pname", NULL);
            nerr_handle(&err, NERR_NOT_FOUND);
            if (err != STATUS_OK) return nerr_pass(err);
        }
        MDB_QUERY_RAW(db, "appinfo", "COUNT(*)+1 AS numuser", "pid=%d",
                      NULL, aid);
        err = mdb_set_row(q->hdfsnd, db, "numuser", NULL);
        if (err != STATUS_OK) return nerr_pass(err);

        CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_APPINFO"%d", aid);
    }
    
    return STATUS_OK;
}
Esempio n. 8
0
static NEOERR* aux_cmd_impdetail(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    unsigned char *val = NULL; size_t vsize = 0;
    NEOERR *err;
    int id;

    REQ_GET_PARAM_INT(q->hdfrcv, "id", id);

    if (cache_getf(cd, &val, &vsize, PREFIX_IMP_DETAIL"%d", id)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        MDB_QUERY_RAW(db, "improve", IMP_COL, "id=%d", NULL, id);
        err = mdb_set_row(q->hdfsnd, db, IMP_COL, NULL);
        if (err != STATUS_OK) return nerr_pass(err);

        CACHE_HDF(q->hdfsnd, IMP_CC_SEC, PREFIX_IMP_DETAIL"%d", id);
    }
    
    return STATUS_OK;
}
Esempio n. 9
0
static NEOERR* aic_cmd_appousers(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    unsigned char *val = NULL; size_t vsize = 0;
    int count, offset;
    int pid;
    char *pname, *aname;
    NEOERR *err;

    REQ_GET_PARAM_STR(q->hdfrcv, "pname", pname);
    pid = hash_string(pname);
    
    mmisc_pagediv(q->hdfrcv, NULL, &count, &offset, NULL, q->hdfsnd);
    
    if (cache_getf(cd, &val, &vsize, PREFIX_APPOUSER"%d_%d", pid, offset)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        MMISC_PAGEDIV_SET_N(q->hdfsnd, db, "appinfo", "pid=%d OR aid=%d",
                            NULL, pid, pid);
        MDB_QUERY_RAW(db, "appinfo", APPINFO_COL,
                      "pid=%d OR aid=%d ORDER BY uptime DESC LIMIT %d OFFSET %d",
                      NULL, pid, pid, count, offset);
        err = mdb_set_rows(q->hdfsnd, db, APPINFO_COL, "users", "1");
        if (err != STATUS_OK) return nerr_pass(err);
        HDF *node = hdf_get_child(q->hdfsnd, "users");
        while (node) {
            /* numcamer */
            aname = hdf_get_value(node, "aname", NULL);
            if (aname) {
                MDB_QUERY_RAW(db, "userinfo", " COUNT(*) AS numcamer ",
                              "aid=%d", NULL, hash_string(aname));
                err = mdb_set_row(node, db, " numcamer ", NULL);
                if (err != STATUS_OK) return nerr_pass(err);
            }
            node = hdf_obj_next(node);
        }
        CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_APPOUSER"%d_%d", pid, offset);
    }
    
    return STATUS_OK;
}
Esempio n. 10
0
NEOERR* member_login_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mdb_conn *db = hash_lookup(dbh, "main");
    char *mname, *msn;
    NEOERR *err;
    
    MCS_NOT_NULLB(cgi->hdf, db);

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

    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 *msndb = hdf_get_value(cgi->hdf, PRE_OUTPUT".member.msn", NULL);
    if (!msndb || strcmp(msndb, msn)) {
        hdf_remove_tree(cgi->hdf, PRE_OUTPUT".member");
        return nerr_raise(LERR_LOGINPSW, "msn incorrct");
    }

    return nerr_pass(member_after_login(cgi, dbh, mname));
}
Esempio n. 11
0
static NEOERR* aic_cmd_app_getsecy(struct queue_entry *q, struct cache *cd, mdb_conn *db)
{
    unsigned char *val = NULL; size_t vsize = 0;
    char *aname;
    int aid;
    NEOERR *err;

    REQ_GET_PARAM_STR(q->hdfrcv, "aname", aname);
    aid = hash_string(aname);

    if (cache_getf(cd, &val, &vsize, PREFIX_SECY"%d", aid)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        MDB_QUERY_RAW(db, "appinfo", " aname ",
                      " (aid=%d OR pid=%d) AND tune & %d = %d ",
                      NULL, aid, aid, LCS_TUNE_SECY, LCS_TUNE_SECY);
        err = mdb_set_row(q->hdfsnd, db, " aname ", NULL);
        nerr_handle(&err, NERR_NOT_FOUND);
        if (err != STATUS_OK) return nerr_pass(err);
        CACHE_HDF(q->hdfsnd, AIC_CC_SEC, PREFIX_SECY"%d", aid);
    }

    return STATUS_OK;
}
Esempio n. 12
0
static NEOERR* city_cmd_s(struct city_entry *e, QueueEntry *q)
{
	unsigned char *val = NULL; size_t vsize = 0;
    char *p = NULL, *c;
	NEOERR *err;

    mdb_conn *db = e->db;
    struct cache *cd = e->cd;

    REQ_GET_PARAM_STR(q->hdfrcv, "c", c);
    REQ_FETCH_PARAM_STR(q->hdfrcv, "p", p);

    if (cache_getf(cd, &val, &vsize, PREFIX_CITY"%s.%s", p, c)) {
        unpack_hdf(val, vsize, &q->hdfsnd);
    } else {
        if (p) {
            char tok[64] = {0};
            strncpy(tok, p, 64);
            if (!strstr(p, "省") && !strstr(p, "区"))
                snprintf(tok, sizeof(tok), "%s省", p);

            MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", tok);
            mdb_set_row(q->hdfsnd, db, _COL_CITY, "province", MDB_FLAG_NO_ERR);
        }

        MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c);
        err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z);
        if (nerr_handle(&err, NERR_NOT_FOUND)) {
            if (strstr(c, "市")) c[strlen(c)-3] = '\0';
            MDB_QUERY_RAW(db, "city", _COL_CITY, "s=$1", "s", c);
            err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys",
                               NULL, MDB_FLAG_EMPTY_OK);
        }
        if (err != STATUS_OK) return nerr_pass(err);

        /*
         * get city's parents
         */
        int cnt = 0;
        char *pid = hdf_get_valuef(q->hdfsnd, "citys.0.pid");
        while (pid && atoi(pid) > 0) {
            MDB_QUERY_RAW(db, "city", _COL_CITY, "id=%d", NULL, atoi(pid));
            err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "citys", NULL, MDB_FLAG_Z);
            TRACE_NOK(err);
            pid = hdf_get_valuef(q->hdfsnd, "citys.%d.pid", ++cnt);
        }
        
        /*
         * 北京市 has no subcities
         */
        /*
        int id = hdf_get_int_value(q->hdfsnd, "city.id", 0);
        MDB_QUERY_RAW(db, "city", _COL_CITY, "pid=%d", NULL, id);
        err = mdb_set_rows(q->hdfsnd, db, _COL_CITY, "subcities",
        NULL, MDB_FLAG_EMPTY_OK);
        if (err != STATUS_OK) return nerr_pass(err);
        */
        
        CACHE_HDF(q->hdfsnd, CITY_CC_SEC, PREFIX_CITY"%s.%s", p, c);
    }
    
    return STATUS_OK;
}