/** * 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; }
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); }
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); }
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; }
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; }
/* * 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; }