ZNC trunk
Loading...
Searching...
No Matches
HTTPSock.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2026 ZNC, see the NOTICE file for details.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ZNC_HTTPSOCK_H
18#define ZNC_HTTPSOCK_H
19
20#include <znc/zncconfig.h>
21#include <znc/Socket.h>
22#include <znc/FileUtils.h>
23
24class CModule;
25
26class CHTTPSock : public CSocket {
27 public:
28 CHTTPSock(CModule* pMod, const CString& sURIPrefix);
29 CHTTPSock(CModule* pMod, const CString& sURIPrefix,
30 const CString& sHostname, unsigned short uPort,
31 int iTimeout = 60);
32 virtual ~CHTTPSock();
33
34 // Csocket derived members
35 void ReadData(const char* data, size_t len) override;
36 void ReadLine(const CString& sData) override;
37 void Connected() override;
38 Csock* GetSockObj(const CString& sHost, unsigned short uPort) override = 0;
39 // !Csocket derived members
40
41 // Hooks
42 virtual bool ForceLogin();
43 virtual bool OnLogin(const CString& sUser, const CString& sPass,
44 bool bBasic);
45 virtual void OnPageRequest(const CString& sURI) = 0;
46 virtual bool PrintFile(const CString& sFileName, CString sContentType = "");
47 // !Hooks
48
49 void CheckPost();
50 bool SentHeader() const;
51 bool PrintHeader(off_t uContentLength, const CString& sContentType = "",
52 unsigned int uStatusId = 200,
53 const CString& sStatusMsg = "OK");
54 void AddHeader(const CString& sName, const CString& sValue);
58 static bool IsValidHeaderField(const CString& s);
63 void OmitHardeningHeader(const CString& sName);
64 void SetContentType(const CString& sContentType);
65
67 bool Redirect(const CString& sURL);
68 bool PrintErrorPage(unsigned int uStatusId, const CString& sStatusMsg,
69 const CString& sMessage);
70 static void ParseParams(const CString& sParams,
71 std::map<CString, VCString>& msvsParams);
72 void ParseURI();
73 void GetPage();
74 static CString GetDate(time_t tm = 0);
75 CString GetRemoteIP() const override;
76
77 // Cookies
78 CString GetRequestCookie(const CString& sKey) const;
79 bool SendCookie(const CString& sKey, const CString& sValue);
80 // Cookies
81
82 // Setters
83 void SetDocRoot(const CString& s);
84 void SetLoggedIn(bool b) { m_bLoggedIn = b; }
85 // !Setters
86
87 // Getters
89 bool IsLoggedIn() const { return m_bLoggedIn; }
90 const CString& GetDocRoot() const;
91 const CString& GetUser() const;
92 const CString& GetPass() const;
93 const CString& GetParamString() const;
94 const CString& GetContentType() const;
95 const CString& GetURI() const;
96 const CString& GetURIPrefix() const;
97 bool IsPost() const;
98 // !Getters
99
100 // Parameter access
101 CString GetParam(const CString& sName, bool bPost = true,
102 const CString& sFilter = "\r\n") const;
103 CString GetRawParam(const CString& sName, bool bPost = true) const;
104 bool HasParam(const CString& sName, bool bPost = true) const;
105 const std::map<CString, VCString>& GetParams(bool bPost = true) const;
106 size_t GetParamValues(const CString& sName, VCString& vsRet,
107 bool bPost = true,
108 const CString& sFilter = "\r\n") const;
109 size_t GetParamValues(const CString& sName, std::set<CString>& ssRet,
110 bool bPost = true,
111 const CString& sFilter = "\r\n") const;
112 // !Parameter access
113 private:
114 static CString GetRawParam(const CString& sName,
115 const std::map<CString, VCString>& msvsParams);
116 static CString GetParam(const CString& sName,
117 const std::map<CString, VCString>& msvsParams,
118 const CString& sFilter);
119 static size_t GetParamValues(const CString& sName, VCString& vsRet,
120 const std::map<CString, VCString>& msvsParams,
121 const CString& sFilter);
122 static size_t GetParamValues(const CString& sName, std::set<CString>& ssRet,
123 const std::map<CString, VCString>& msvsParams,
124 const CString& sFilter);
125
126 void WriteFileUncompressed(CFile& File);
127 void WriteFileGzipped(CFile& File);
128
132 void WriteHardeningHeaders(unsigned int uStatusId);
133
134 protected:
135 void PrintPage(const CString& sPage);
136 void Init();
137
144 unsigned long m_uPostLen;
152 std::map<CString, VCString> m_msvsPOSTParams;
153 std::map<CString, VCString> m_msvsGETParams;
162};
163
164#endif // !ZNC_HTTPSOCK_H
std::set< CString > SCString
Definition ZNCString.h:37
std::vector< CString > VCString
Definition ZNCString.h:38
Definition FileUtils.h:30
Definition HTTPSock.h:26
void GetPage()
std::map< CString, VCString > m_msvsPOSTParams
Definition HTTPSock.h:152
MCString m_msRequestCookies
Definition HTTPSock.h:159
void AddHeader(const CString &sName, const CString &sValue)
bool HasParam(const CString &sName, bool bPost=true) const
const CString & GetContentType() const
CString m_sUser
Definition HTTPSock.h:147
void ReadData(const char *data, size_t len) override
Ready to read data event.
bool PrintNotFound()
SCString m_ssOmitHardening
Definition HTTPSock.h:155
bool m_bHTTP10Client
Definition HTTPSock.h:156
CString m_sPostData
Definition HTTPSock.h:145
bool m_bAcceptGzip
Definition HTTPSock.h:158
void OmitHardeningHeader(const CString &sName)
Suppress one of the default security/cache hardening headers for the next response.
CString m_sDocRoot
Definition HTTPSock.h:150
bool m_bDone
Definition HTTPSock.h:142
const CString & GetURIPrefix() const
bool PrintErrorPage(unsigned int uStatusId, const CString &sStatusMsg, const CString &sMessage)
CString m_sPass
Definition HTTPSock.h:148
CHTTPSock(CModule *pMod, const CString &sURIPrefix, const CString &sHostname, unsigned short uPort, int iTimeout=60)
CHTTPSock(CModule *pMod, const CString &sURIPrefix)
bool Redirect(const CString &sURL)
CString GetPath() const
bool SentHeader() const
CString GetRawParam(const CString &sName, bool bPost=true) const
CString m_sIfNoneMatch
Definition HTTPSock.h:157
void CheckPost()
virtual bool OnLogin(const CString &sUser, const CString &sPass, bool bBasic)
virtual ~CHTTPSock()
void Connected() override
Connected event.
static bool IsValidHeaderField(const CString &s)
Returns false if s contains CR or LF.
MCString m_msResponseCookies
Definition HTTPSock.h:160
Csock * GetSockObj(const CString &sHost, unsigned short uPort) override=0
bool PrintHeader(off_t uContentLength, const CString &sContentType="", unsigned int uStatusId=200, const CString &sStatusMsg="OK")
virtual bool ForceLogin()
bool m_bSentHeader
Definition HTTPSock.h:138
std::map< CString, VCString > m_msvsGETParams
Definition HTTPSock.h:153
virtual void OnPageRequest(const CString &sURI)=0
CString m_sURIPrefix
Definition HTTPSock.h:161
bool IsLoggedIn() const
Definition HTTPSock.h:89
void ParseURI()
const CString & GetPass() const
void SetDocRoot(const CString &s)
virtual bool PrintFile(const CString &sFileName, CString sContentType="")
static CString GetDate(time_t tm=0)
void SetContentType(const CString &sContentType)
const CString & GetDocRoot() const
void ReadLine(const CString &sData) override
const CString & GetUser() const
bool IsPost() const
size_t GetParamValues(const CString &sName, std::set< CString > &ssRet, bool bPost=true, const CString &sFilter="\r\n") const
CString m_sURI
Definition HTTPSock.h:146
unsigned long m_uPostLen
Definition HTTPSock.h:144
void Init()
const CString & GetURI() const
bool m_bBasicAuth
Definition HTTPSock.h:143
bool m_bGotHeader
Definition HTTPSock.h:139
const std::map< CString, VCString > & GetParams(bool bPost=true) const
CString m_sContentType
Definition HTTPSock.h:149
void SetLoggedIn(bool b)
Definition HTTPSock.h:84
bool SendCookie(const CString &sKey, const CString &sValue)
bool m_bLoggedIn
Definition HTTPSock.h:140
void PrintPage(const CString &sPage)
bool m_bPost
Definition HTTPSock.h:141
static void ParseParams(const CString &sParams, std::map< CString, VCString > &msvsParams)
const CString & GetParamString() const
size_t GetParamValues(const CString &sName, VCString &vsRet, bool bPost=true, const CString &sFilter="\r\n") const
CString GetRemoteIP() const override
MCString m_msHeaders
Definition HTTPSock.h:154
CString m_sForwardedIP
Definition HTTPSock.h:151
CString GetRequestCookie(const CString &sKey) const
CString GetParam(const CString &sName, bool bPost=true, const CString &sFilter="\r\n") const
The base class for your own ZNC modules.
Definition Modules.h:420
Base Csock implementation to be used by modules.
Definition Socket.h:269
String class that is used inside ZNC.
Definition ZNCString.h:50
Basic socket class.
Definition Csocket.h:564
A dictionary for strings.
Definition ZNCString.h:577