summaryrefslogtreecommitdiff
path: root/src/cgi.hh
blob: 37f2c98fb932843f420cbd6a7c737fd510d5760e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef CGI_HH
#define CGI_HH

#include <functional>
#include <map>
#include <string>
#include <vector>

namespace stuff {

class CGI {
public:
    enum request_type {
        GET,
        HEAD,
        POST,
        PUT,
        TRACE,

        UNKNOWN,
    };

    virtual void post_data(std::vector<char>* data) = 0;
    // Return true if post data is multipart, false otherwise
    virtual bool post_data(std::map<std::string,std::string>* data) = 0;
    virtual void query_data(std::map<std::string,std::string>* data) = 0;
    // Will first try post_data and fallback to query_data
    void get_data(std::map<std::string,std::string>* data);
    virtual std::string request_path() = 0;
    virtual std::string request_uri() = 0;
    virtual std::string remote_addr() = 0;
    virtual request_type request_type() = 0;
    virtual std::string content_type() = 0;
    virtual std::string http_auth() = 0;

    static int run(std::function<bool(CGI*)> handle_request);

protected:
    CGI() {}
    virtual ~CGI() {}
    CGI(const CGI&) = delete;
    CGI& operator=(const CGI&) = delete;
};

}  // namespace stuff

#endif /* CGI_HH */