Esempio n. 1
0
/**
 * Takes partial tags and replaces them with a parsed partial template.
 * 
 * @param sds tag  The tag 
 *
 * @retval sds buff  Partial template buffer.
 */
static sds tag_partial(sds tag) 
{
	puts("tag_partial");
	printf("tag found: '%s'\n",tag);
	sds re = sdsempty();
	sds f = sdsempty();
	sds buff = sdsempty();

	re = sdscatprintf(re, "%s>([^}]+)%s", ldelim, rdelim);
	struct slre_cap caps[1];

	if (slre_match(re, tag, strlen(tag), caps, 1) > 0) {
		f = sdscatprintf(f,"%.*s", caps[0].len, caps[0].ptr);
		sdstrim(f," ");
		sds fname = sdscatprintf(sdsempty(),"%s%s", tpldir, f);
		fname = sdscat(fname,tplext);
		//puts(fname);

		FILE * fp;
		if ((fp = fopen(fname, "r")) != NULL) {
			fclose(fp);
			buff = render_template(f);
		}
		puts("free fname");
		sdsfree(fname);
		
	} 
	puts("free f");
	sdsfree(f);
//	//sdsfree(buff);
	puts("free re");
	sdsfree(re);
	return buff;
}
Esempio n. 2
0
void register_handler(request_args &r){
    mustache::Context* dict = base_template_variables(new mustache::Context(), scripts);
    mustache::PlustacheTypes::ObjectType registration_form_section, message_section;
    if(header_value(r.req.headers,"METHOD") == "POST"){
        std::unordered_map<std::string,std::string> registration_form = getFormFields(r.req.body);
        for(auto fields:registration_form){
            std::cout << fields.first << " = " << fields.second << std::endl;
        }
        time_t now = time(NULL);
        std::tm *timeinfo = localtime(&now);
        std::vector<std::string> names = {"",""};
        boost::split(names, registration_form["name"], boost::is_any_of(" "));
        User u(registration_form["userid"],
               names[0],
               names[1],
             registration_form["password"],
             *timeinfo);
        soci::session sql(r.db_pool);
        int status = User::create(sql,u);
        if(status==1){
            message_section["STATUS"] = "success";
        }else if(status==2){
            message_section["STATUS"] = "User id already exists.";
        }else{
            message_section["STATUS"] = "fail";
        }
    }
    dict->add("REGISTER_FORM",registration_form_section);
    dict->add("MESSAGE",message_section);
    r.conn.reply_http(r.req,render_template("register",dict),200,"OK",default_headers);
}
Esempio n. 3
0
void login_handler(request_args &r){
    int code=200;
    std::vector<m2pp::header> redir_headers = {{"Content-Type","text/html"}};
    mustache::Context* dict = base_template_variables(new mustache::Context(), scripts);
    mustache::PlustacheTypes::ObjectType login_form_section, message_section;
    soci::session sql(r.db_pool);
    User *user  = new User();
    if(header_value(r.req.headers,"METHOD") == "POST"){
        std::unordered_map<std::string,std::string> login_form = getFormFields(r.req.body);
        for(auto fields:login_form){
            std::cout << fields.first << " = " << fields.second << std::endl;
        }
        std::string username = login_form["userid"];
        log_DEBUG(username);
        sql << "select * from users where username = '******'",soci::into(*user);
        if(!sql.got_data()){
            message_section["STATUS"] = "Username is not registered.";
        }else{
            redir_headers.push_back({"Location","/nutrition/" });
            code = 303;
        }
    }
    dict->add("LOGIN_FORM", login_form_section);
    dict->add("MESSAGE", message_section);
    
    r.conn.reply_http(r.req,render_template("login",dict),code,"OK",redir_headers);
}
Esempio n. 4
0
JNIEXPORT jint JNICALL
Java_buzz_fizz_jdust_JDust_renderTemplate(JNIEnv* env, jobject callingObject, jobject state, jstring fullDust, jstring dustTemplate, jstring dustContext)
{
    const char* cFullDust = env->GetStringUTFChars(fullDust, 0);
    const char* cDustTemplate = env->GetStringUTFChars(dustTemplate, 0);
    const char* cDustContext = env->GetStringUTFChars(dustContext, 0);


    JStore jstore(env, state);
    int ret = render_template(jstore, cFullDust, cDustTemplate, cDustContext);

    env->ReleaseStringUTFChars(fullDust, cFullDust);
    env->ReleaseStringUTFChars(dustTemplate, cDustTemplate);
    env->ReleaseStringUTFChars(dustContext, cDustContext);
    return ret;
}
Esempio n. 5
0
apr_status_t lwt_template_render (apr_array_header_t *t, lua_State *L,
		apr_pool_t *pool, FILE *f, const char **err) {
	render_rec *d;
	apr_status_t status;

	d = (render_rec *) apr_pcalloc(pool, sizeof(render_rec));
	d->t = t;
	d->L = L;
	d->pool = pool;
	d->f = f;
	d->templates = apr_hash_make(pool);

	lua_pushcfunction(d->L, lwt_util_traceback);
	d->errfunc = lua_gettop(d->L);
	if ((status = render_template(d)) != APR_SUCCESS) {
		if (err != NULL) {
			*err = d->err;
		}
		return status;
	}
	lua_pop(d->L, 1);

	return APR_SUCCESS;
}
Esempio n. 6
0
/*
 * Renders a template.
 */
static apr_status_t render_template (render_rec *d) {
        int i, cnt;
        template_node_t *n;
        apr_status_t status;
	const char *str;
	apr_array_header_t *t_save;

	d->depth++;
	if (d->depth > TEMPLATE_MAX_DEPTH) {
		d->err = apr_psprintf(d->pool, "template depth exceeds %d",
				TEMPLATE_MAX_DEPTH);
		return APR_EGENERAL;
	}

	i = 0;
	while (i < d->t->nelts) {
		n = ((template_node_t *) d->t->elts) + i;
		switch (n->type) {
		case TEMPLATE_TJUMP:
			i = n->jump_next;
			break;

		case TEMPLATE_TIF:
			if ((status = evaluate_exp(d, n->if_index, 1))
					!= APR_SUCCESS) {
				return status;
			} 
			if (lua_toboolean(d->L, -1)) {
				i++;
			} else {
				i = n->if_next;
			}
			lua_pop(d->L, 1);
			break;

		case TEMPLATE_TFOR_INIT:
			if ((status = evaluate_exp(d, n->for_init_index, 3))
					!= APR_SUCCESS) {
				return status;
			}
			i++;
			break;

		case TEMPLATE_TFOR_NEXT:
			lua_pushvalue(d->L, -3);
			lua_pushvalue(d->L, -3);
			lua_pushvalue(d->L, -3);
			cnt = n->for_next_names->nelts;
			if (lua_pcall(d->L, 2, cnt, d->errfunc) != 0) {
				return runtime_error(d);
			}
			if (lua_isnil(d->L, -cnt)) {
				lua_pop(d->L, 3 + cnt);
				i = n->for_next_next;
			} else {
				lua_pushvalue(d->L, -cnt);
				lua_replace(d->L, -1 - cnt - 1);
				while (cnt > 0) {
					cnt--;
					lua_setglobal(d->L, ((const char **)
							n->for_next_names
							->elts)[cnt]);
				}
				i++;
			}
			break;

		case TEMPLATE_TSET:
			cnt = n->set_names->nelts;
			if ((status = evaluate_exp(d, n->set_index, cnt))
					!= APR_SUCCESS) {
				return status;
			}
			while (cnt > 0) {
				cnt--;
				lua_setglobal(d->L, ((const char **)
						n->set_names->elts)[cnt]);
			}
			i++;
			break;
 
		case TEMPLATE_TINCLUDE:
			if ((status = evaluate_exp_str(d, n->include_index))
					!= APR_SUCCESS) {
				return status;
			}
			str = lua_tostring(d->L, -1);
			lua_pop(d->L, 1);
			t_save = d->t;
			d->t = (apr_array_header_t *) apr_hash_get(d->templates,
					str, strlen(str));
			if (d->t == NULL) {
				if ((status = lwt_template_parse(str, d->L,
						n->include_flags, d->pool,
						&d->t, &d->err))
						!= APR_SUCCESS) {
					return status;
				}
				apr_hash_set(d->templates, str, strlen(str),
						d->t);
			}
			if ((status = render_template(d)) != APR_SUCCESS) {
				return status;
			}
			d->t = t_save;
			i++;
			break;			

		case TEMPLATE_TSUB:
			lua_rawgeti(d->L, LUA_REGISTRYINDEX, n->sub_index);
			switch (lua_pcall(d->L, 0, 1, d->errfunc)) {
			case 0:
				if (lua_isstring(d->L, -1)) {
					str = lua_tostring(d->L, -1);
				} else if (lua_isnil(d->L, -1) && (n->sub_flags
						& TEMPLATE_FSUPNIL)) {
					str = "";
				} else {
					str = apr_psprintf(d->pool, "(%s)",
							luaL_typename(d->L,
							-1));
				}
				break;

			case LUA_ERRRUN:
				if (n->sub_flags & TEMPLATE_FSUPERR) {
					str = "";
				} else {
					return runtime_error(d);
				}
				break;

			default:
				return runtime_error(d);
			}
			lua_pop(d->L, 1);
			if (n->sub_flags & TEMPLATE_FESCURL) {
				str = lwt_util_escape_uri(d->pool, str);
			}
			if (n->sub_flags & TEMPLATE_FESCXML) {
				str = ap_escape_html(d->pool, str);
			}
			if (n->sub_flags & TEMPLATE_FESCJS) {
				str = lwt_util_escape_js(d->pool, str);
			}
			fputs(str, d->f);
			i++;
			break;

		case TEMPLATE_TRAW:
			fwrite(n->raw_str, n->raw_len, 1, d->f);
			i++;
			break;
		}
	}

	d->depth--;

	return APR_SUCCESS;
}