diff --git a/srcs/cgi-bin/cgi b/srcs/cgi-bin/cgi new file mode 100755 index 0000000..14e0d29 --- /dev/null +++ b/srcs/cgi-bin/cgi @@ -0,0 +1,4 @@ +#! /bin/bash +echo "status: 100\r\n" +echo "\r\n\r\n" +echo "hiii" diff --git a/srcs/cgi-bin/cgi_cpp.cpp b/srcs/cgi-bin/cgi_cpp.cpp index 7b8b730..7d7ffaa 100644 --- a/srcs/cgi-bin/cgi_cpp.cpp +++ b/srcs/cgi-bin/cgi_cpp.cpp @@ -1,40 +1,53 @@ # include "cgi_utils.hpp" -int main () +int main (int ac, char **av, char ** env) { - std::vector split_str; - std::vector sub_split_str; - std::vector::const_iterator it; - std::string input; - std::string http_header; - std::string http_body; + std::string http_req_body; + std::string http_resp_header; + std::string http_resp_body; - std::cin >> input; + std::string tmp; + (void)ac; + (void)av; + (void)env; - http_body = HTML_BODY_TOP; + /* + rq_method = find_method(); + rq_body = parse_body(); + rq_query = parse_query(); - http_body += fill_env("REQUEST_METHOD", "h3"); - - split_str = split(input, "&"); - for (it = split_str.begin(); it != split_str.end(); ++it) + method used : GET + form query : key=val&key=val + form body : EMPTY + output : + first name: John + last name: Doe + cgi env variables : + CONTENT_TYPE: value + ... + */ + tmp = "

PRINT ENV _________________

"; + for (int i = 0; env[i] != NULL; ++i) { - sub_split_str = split(*it, "="); - http_body += "

"; - http_body += sub_split_str[0]; - http_body += "

"; - http_body += "

"; - http_body += sub_split_str[1]; - http_body += "

"; + tmp += "

"; + tmp += env[i]; + tmp += "

"; } + tmp += "

___________________________

"; - http_body += HTML_BODY_BOTTOM; + http_req_body = parse_form_infos(); - http_header = "Content-Type: text/html; charset=UTF-8" CRLF; - http_header += "Content-Length: "; - http_header += itos(http_body.size()); + http_resp_body = HTML_BODY_TOP; + http_resp_body += fill_tag("ENV:", "h3") + fill_env("REQUEST_METHOD"); + http_resp_body += fill_form(http_req_body, "h3", "p"); + http_resp_body += tmp; + http_resp_body += HTML_BODY_BOTTOM; - std::cout << http_header << CRLF CRLF << http_body; + http_resp_header = "Content-Type: text/html; charset=UTF-8" CRLF; + http_resp_header += "Content-Length: " + itos(http_resp_body.size()); + + std::cout << http_resp_header << CRLF CRLF << http_resp_body; return 0; } diff --git a/srcs/cgi-bin/cgi_utils.cpp b/srcs/cgi-bin/cgi_utils.cpp index 0c30116..2d5dcb6 100644 --- a/srcs/cgi-bin/cgi_utils.cpp +++ b/srcs/cgi-bin/cgi_utils.cpp @@ -51,28 +51,56 @@ std::string itos(int n) return ( strs.str() ); } +std::string fill_tag(std::string content, std::string tag) +{ + std::string ret; + + ret = "<" + tag + ">" + content + ""; + return ret; +} + std::string fill_env(std::string env, std::string tag) { std::string ret; char * ret_env; - ret = "<"; - ret += tag; - ret += ">"; + ret = "<" + tag + ">"; ret_env = getenv(env.c_str()); if (ret_env != NULL) ret += ret_env; else - { - ret += env; - ret += " not foud"; - } + ret += env + " not foud"; - ret += ""; + ret += ""; return ret; } +std::string + parse_form_infos() +{ + std::string ret; + + std::cin >> ret; + return ret; +} + +std::string + fill_form(std::string form, std::string tag_key, std::string tag_val) +{ + std::vector split_str; + std::vector sub_split_str; + std::vector::const_iterator it; + std::string ret; + + split_str = split(form, "&"); + for (it = split_str.begin(); it != split_str.end(); ++it) + { + sub_split_str = split(*it, "="); + ret = "<" + tag_key + ">" + sub_split_str[0] + ": "; + ret = "<" + tag_val + ">" + sub_split_str[1] + ""; + } + return ret; +} + diff --git a/srcs/cgi-bin/cgi_utils.hpp b/srcs/cgi-bin/cgi_utils.hpp index eca8b3f..a491d39 100644 --- a/srcs/cgi-bin/cgi_utils.hpp +++ b/srcs/cgi-bin/cgi_utils.hpp @@ -34,7 +34,20 @@ std::string itos(int n); std::string - fill_env(std::string env, std::string tag); + fill_env(std::string env, std::string tag = "p"); + +std::string + fill_tag(std::string env, std::string tag = "p"); + +std::string + fill_form( + std::string form, + std::string tag_key = "p", + std::string tag_val = "p" + ); + +std::string + parse_form_infos(); #endif