1 | #include "globals.h"
|
---|
2 |
|
---|
3 | #define SERVER "webserver/1.0"
|
---|
4 | #define PROTOCOL "HTTP/1.0"
|
---|
5 | #define RFC1123FMT "%a, %d %b %Y %H:%M:%S GMT"
|
---|
6 | #define AUTHREALM "OScam"
|
---|
7 | #define AUTHNONCEVALIDSECS 15
|
---|
8 | #define MAXGETPARAMS 100
|
---|
9 |
|
---|
10 | #define CSS "p {color: white; }\n\
|
---|
11 | h2 {color: orange; font-family: Arial; font-size: 14px; line-height: 12px;}\n\
|
---|
12 | h4 {color: black; font-family: Arial; font-size: 12px; line-height: 9px; }\n\
|
---|
13 | TABLE{background-color:#66CCFF;}\n\
|
---|
14 | TD{height:10px; border:1px solid gray; font-family: Arial; font-size: 11px; padding:5px; background-color:#6666FF;}\n\
|
---|
15 | TH{height:10px; border:1px solid gray; font-family: Arial; font-size: 12px; padding:5px; background-color:#330033;color:#FFFF00;}\n\
|
---|
16 | TR.s TD{background-color:#6666FF;}\n\
|
---|
17 | TR.r TD{background-color:orange;}\n\
|
---|
18 | TR.p TD{background-color:yellow;}\n\
|
---|
19 | TR.c TD{background-color:green;}\n\
|
---|
20 | TR.online TD{background-color:#009900;}\n\
|
---|
21 | TR.expired TD{background-color:orange;}\n\
|
---|
22 | DIV.log{border:1px solid black;background-color: black; font-family:\"Courier New\", monospace ; color:yellow; font-size: 11px;}\n\
|
---|
23 | TABLE.menu{background-color:black; align:center; font-size: 10px;}\n\
|
---|
24 | TABLE.menu TD{border:2px outset lightgrey; background-color:silver; font-color:black; font-family: Arial;}\n\
|
---|
25 | TABLE.status{background-color:#66CCFF;empty-cells:show;}\n\
|
---|
26 | TABLE.invisible TD {border:0px; font-family: Arial; font-size: 12px; padding:5px; background-color:#6666FF;}}\n\
|
---|
27 | TD.menu {border:2px outset lightgrey; background-color:silver; font-color:black; font-family: Arial; font-size:11px;}\n\
|
---|
28 | body {background-color: grey; font-family: Arial; font-size: 12px;}\n\
|
---|
29 | A:link {text-decoration: none; color:blue}\n\
|
---|
30 | A:visited {text-decoration: none; color:blue}\n\
|
---|
31 | A:active {text-decoration: none; color:white}\n\
|
---|
32 | A:hover {text-decoration: none; color: red;}"
|
---|
33 |
|
---|
34 | #define TPLHEADER "<HTML>\n\
|
---|
35 | <HEAD>\n\
|
---|
36 | <TITLE>OSCAM ##CS_VERSION## build ###CS_SVN_VERSION##</TITLE>\n\
|
---|
37 | <link rel=\"stylesheet\" type=\"text/css\" href=\"site.css\">\n\
|
---|
38 | ##REFRESH##\
|
---|
39 | </HEAD>\n\
|
---|
40 | <BODY>\n\
|
---|
41 | <H2>OSCAM ##CS_VERSION## build ###CS_SVN_VERSION##</H2>"
|
---|
42 | #define TPLFOOTER "<HR/><H4>OSCAM Webinterface - ##CURDATE## ##CURTIME##</H4></BODY></HTML>"
|
---|
43 | #define TPLREFRESH "<meta http-equiv=\"refresh\" content=\"##REFRESHTIME##\"; URL=/status.html\" />\n"
|
---|
44 | #define TPLMENU "<TABLE border=0 class=\"menu\">\n\
|
---|
45 | <TR>\n\
|
---|
46 | <TD CLASS=\"menu\"><A HREF=\"status.html\">STATUS</TD>\n\
|
---|
47 | <TD CLASS=\"menu\"><A HREF=\"config.html\">CONFIGURATION</TD>\n\
|
---|
48 | <TD CLASS=\"menu\"><A HREF=\"readers.html\">READERS</TD>\n\
|
---|
49 | <TD CLASS=\"menu\"><A HREF=\"userconfig.html\">USERS</TD>\n\
|
---|
50 | <TD CLASS=\"menu\"><A HREF=\"services.html\">SERVICES</TD>\n\
|
---|
51 | </TR>\n\
|
---|
52 | </TABLE>"
|
---|
53 | #define TPLSTATUS "##TPLHEADER##\
|
---|
54 | ##TPLMENU##\n\
|
---|
55 | <BR><BR><TABLE WIDTH=\"100%\" cellspacing=\"0\" class=\"status\">\n\
|
---|
56 | <TR><TH>PID</TH><TH>Typ</TH><TH>ID</TH><TH>Label</TH><TH>AU</TH><TH>0</TH><TH>Address</TH><TH>Port</TH><TH>Protocol</TH><TH>Login</TH><TH>Login</TH><TH>Time</TH><TH>caid:srvid</TH><TH>Last Channel</TH><TH>Idle</TH><TH>CWOK</TH><TH>CWNOK</TH><TH>0</TH>\n\
|
---|
57 | ##CLIENTSTATUS##\
|
---|
58 | </TABLE><BR>\n\
|
---|
59 | <DIV class=\"log\">\n\
|
---|
60 | ##LOGHISTORY##\
|
---|
61 | </DIV>\n\
|
---|
62 | ##TPLFOOTER##"
|
---|
63 | #define TPLCLIENTSTATUSBIT "<TR class=\"##CLIENTTYPE##\"><TD>##CLIENTPID##</TD><TD>##CLIENTTYPE##</TD><TD>##CLIENTCNR##</TD><TD>##CLIENTUSER##</TD><TD>##CLIENTCAU##</TD><TD>##CLIENTCRYPTED##</TD><TD>##CLIENTIP##</TD><TD>##CLIENTPORT##</TD><TD>##CLIENTPROTO##</TD><TD>##CLIENTLOGINDATE##</TD><TD>##CLIENTLOGINTIME##</TD><TD>##CLIENTLOGINSECS##</TD><TD>##CLIENTCAID##:##CLIENTSRVID##</TD><TD>##CLIENTSRVNAME##</TD><TD>##CLIENTIDLESECS##</TD><TD>##CWOK##</TD><TD>##CWNOK##</TD><TD>##CLIENTCON##</TD></TR>"
|
---|
64 | #define TPLUSERCONFIGLIST "##TPLHEADER##\
|
---|
65 | ##TPLMENU##\n\
|
---|
66 | ##MESSAGE##\
|
---|
67 | <BR><BR><TABLE cellspacing=\"0\" cellpadding=\"10\">\n\
|
---|
68 | <TR><TH>Label</TH>\r\n\t<TH>Status</TH>\r\n\t<TH>Last Channel</TH>\r\n\t<TH>Idle (Sec)</TH>\r\n\t<TH colspan=\"2\" align=\"center\">Action</TH>\r\n</TR>\
|
---|
69 | ##USERCONFIGS##\
|
---|
70 | <TR>\n\
|
---|
71 | \t<FORM action=\"/user_edit.html\" method=\"get\">\n\
|
---|
72 | \t<TD>New User:</TD>\n\
|
---|
73 | \t<TD colspan=\"2\"><input name=\"user\" type=\"text\"></TD>\n\
|
---|
74 | \t<TD colspan=\"3\" align=\"center\"><input type=\"submit\" value=\"Add User\"></TD>\n\
|
---|
75 | \t</FORM>\n\
|
---|
76 | <TR>\n\
|
---|
77 | </TABLE>\n\
|
---|
78 | ##TPLFOOTER##"
|
---|
79 | #define TPLUSERCONFIGLISTBIT "<TR class=\"##CLASSNAME##\">\n\
|
---|
80 | \t<TD>##USER##</TD>\n\t<TD>##STATUS####EXPIRED##</TD>\n\t<TD>##LASTCHANNEL##</TD>\r\n\t<TD>##IDLESECS##</TD>\n\t<TD><A HREF=\"user_edit.html?user=##USERENC##\">Edit Settings</A></TD>\n\
|
---|
81 | \t<TD><A HREF=\"userconfig.html?user=##USERENC##&action=delete\">Delete User</A></TD>\n\
|
---|
82 | </TR>\n"
|
---|
83 | #define TPLUSEREDIT "##TPLHEADER##\
|
---|
84 | ##TPLMENU##\n\
|
---|
85 | ##MESSAGE##\
|
---|
86 | <BR><BR>\n\
|
---|
87 | <form action=\"/user_edit.html\" method=\"get\">\n\
|
---|
88 | <input name=\"user\" type=\"hidden\" value=\"##USERNAME##\">\n\
|
---|
89 | <input name=\"action\" type=\"hidden\" value=\"execute\">\n\
|
---|
90 | <TABLE cellspacing=\"0\">\n\
|
---|
91 | <TH> </TH><TH>Edit User ##USERNAME##</TH>\n\
|
---|
92 | <TR><TD>Password:</TD><TD><input name=\"pwd\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"##PASSWORD##\"></TD></TR>\n\
|
---|
93 | <TR><TD>Exp. Date:</TD><TD><input name=\"expdate\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"##EXPDATE##\"></TD></TR>\n\
|
---|
94 | <TR><TD>Group:</TD><TD><input name=\"group\" type=\"text\" size=\"10\" maxlength=\"10\" value=\"##GROUPS##\"></TD></TR>\n\
|
---|
95 | <TR><TD>Hostname:</TD><TD><input name=\"hostname\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"##DYNDNS##\"></TD></TR>\n\
|
---|
96 | <TR><TD>Uniq:</TD><TD><select name=\"uniq\">\n\
|
---|
97 | \t<option value=\"0\" ##UNIQSELECTED0##>none</option>\n\
|
---|
98 | \t<option value=\"1\" ##UNIQSELECTED1##>strict</option>\n\
|
---|
99 | \t<option value=\"2\" ##UNIQSELECTED2##>per IP</option>\n\
|
---|
100 | </SELECT></TD></TR>\n\
|
---|
101 | <TR><TD>Sleep:</TD><TD><input name=\"sleep\" type=\"text\" size=\"4\" maxlength=\"4\" value=\"0\"></TD></TR>\n\
|
---|
102 | <TR><TD>Monlevel:</TD><TD><select name=\"monlevel\">\n\
|
---|
103 | \t<option value=\"0\" ##MONSELECTED0##>no access to monitor</option>\n\
|
---|
104 | \t<option value=\"1\" ##MONSELECTED1##>only server and own procs</option>\n\
|
---|
105 | \t<option value=\"2\" ##MONSELECTED2##>all procs, but viewing only, default</option>\n\
|
---|
106 | \t<option value=\"3\" ##MONSELECTED3##>all procs, reload of oscam.user possible</option>\n\
|
---|
107 | \t<option value=\"4\" ##MONSELECTED4##>complete access</option>\n\
|
---|
108 | </select></TD></TR>\n\
|
---|
109 | <TR><TD>AU:</TD><TD><select name=\"au\">\n\
|
---|
110 | \t<option value=\" \" ##AUSELECTED##>none</option>\n\
|
---|
111 | \t<option value=\"1\" ##AUTOAUSELECTED##>auto</option>\n\
|
---|
112 | ##RDROPTION##\
|
---|
113 | </select></TD></TR>\n\
|
---|
114 | <TR><TD>Services:</TD><TD><TABLE cellspacing=\"0\" class=\"invisible\">##SIDS##</TD></TR></TABLE>\n\
|
---|
115 | <TR><TD>CAID:</TD><TD><input name=\"caid\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"##CAIDS##\"></TD></TR>\n\
|
---|
116 | <TR><TD>Ident:</TD><TD><input name=\"ident\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"##IDENTS##\"></TD></TR>\n\
|
---|
117 | <TR><TD>Betatunnel:</TD><TD><input name=\"betatunnel\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"##BETATUNNELS##\"></TD></TR>\n\
|
---|
118 | ##TPLUSEREDITANTICASC##\
|
---|
119 | <TR><TD> </TD><TD align=\"right\"><input type=\"submit\" value=\"Save Settings\" title=\"Save settings and reload users\"></TD></TR>\n\
|
---|
120 | </TABLE>\n\
|
---|
121 | </form>\n\
|
---|
122 | ##TPLFOOTER##"
|
---|
123 | #define TPLUSEREDITRDRSELECTED "\t<option value=\"##READERNAME##\" ##SELECTED##>##READERNAME##</option>"
|
---|
124 | #define TPLUSEREDITSIDOKBIT "<TR><TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"##SIDLABEL##\" ##CHECKED##> ##SIDLABEL##</TD>"
|
---|
125 | #define TPLUSEREDITSIDNOBIT "<TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"!##SIDLABEL##\" ##CHECKED##> !##SIDLABEL##</TD></TR>"
|
---|
126 | #ifdef CS_ANTICASC
|
---|
127 | #define TPLUSEREDITANTICASC "<TR><TD>Anticascading numusers:</TD><TD><input name=\"numusers\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"##AC_USERS##\"></TD></TR>\n\
|
---|
128 | <TR><TD>Anticascading penalty:</TD><TD><input name=\"penalty\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"##AC_PENALTY##\"></TD></TR>"
|
---|
129 | #endif
|
---|
130 | #define TPLSIDTAB "##TPLHEADER##\
|
---|
131 | ##TPLMENU##\n\
|
---|
132 | <BR><BR><DIV class=\"log\">\n\
|
---|
133 | ##SIDTABS##\
|
---|
134 | </DIV>\n\
|
---|
135 | ##TPLFOOTER##"
|
---|
136 | #define TPLSIDTABBIT "label=##LABEL##<BR>\n\
|
---|
137 | caid(##CAIDNUM##)=##CAIDS##<BR>\n\
|
---|
138 | provider(##PROVIDNUM##)=##PROVIDS##<BR>\n\
|
---|
139 | services(##SRVIDNUM##)=##SRVIDS##<BR><BR>\n"
|
---|
140 | #define TPLREADERS "##TPLHEADER##\
|
---|
141 | ##TPLMENU##\n\
|
---|
142 | <BR><BR><TABLE cellspacing=\"0\" cellpadding=\"10\">\n\
|
---|
143 | <TR><TH>Reader</TH><TH>Protocol</TH><TH>Action</TH></TR>\n\
|
---|
144 | ##READERLIST##\
|
---|
145 | </TABLE>\n\
|
---|
146 | ##TPLFOOTER##"
|
---|
147 | #define TPLREADERSBIT "\t<TR><TD>##READERNAME##</TD><TD>##CTYP##</TD><TD><A HREF=\"readerconfig.html?reader=##READERNAMEENC##\">Edit Settings</A> <A HREF=\"entitlements.html?reader=##READERNAME##\">Show Entitlements</A></TD></TR>\n"
|
---|
148 | #define TPLENTITLEMENTS "##TPLHEADER##\
|
---|
149 | ##TPLMENU##\n\
|
---|
150 | <BR><BR>Entitlements for ##READERNAME##<BR><BR>\r\n\n\
|
---|
151 | <DIV class=\"log\">\n\
|
---|
152 | ##LOGHISTORY##\
|
---|
153 | </DIV>\n\
|
---|
154 | ##TPLFOOTER##"
|
---|
155 | #define TPLREADERCONFIG "##TPLHEADER##\
|
---|
156 | ##TPLMENU##\n\
|
---|
157 | <BR><BR>\n\
|
---|
158 | ##MESSAGE##\
|
---|
159 | <form action=\"/readerconfig.html?action=execute\" method=\"get\"><input name=\"reader\" type=\"hidden\" value=\"##READERNAME##\">\n\
|
---|
160 | <TABLE cellspacing=\"0\">\n\
|
---|
161 | <TH> </TH><TH>Edit Reader ##READERNAME##</TH>\n\
|
---|
162 | <TR><TD>Device:</TD><TD><input name=\"device\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##DEVICE####R_PORT####L_PORT##\"></TD></TR>\n\
|
---|
163 | <TR><TD>Group:</TD><TD><input name=\"grp\" type=\"text\" size=\"10\" maxlength=\"10\" value=\"##GRP##\"></TD></TR>\n\
|
---|
164 | <TR><TD>Key:</TD><TD><input name=\"key\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##NCD_KEY##\"></TD></TR>\n\
|
---|
165 | <TR><TD>Pincode:</TD><TD><input name=\"pincode\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##PINCODE##\"></TD></TR>\n\
|
---|
166 | <TR><TD>Readnano:</TD><TD><input name=\"readnano\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##EMMFILE##\"></TD></TR>\n\
|
---|
167 | <TR><TD>Services:</TD><TD><TABLE cellspacing=\"0\" class=\"invisible\">\n\
|
---|
168 | ##SIDS##\
|
---|
169 | </TD></TR></TABLE>\n\
|
---|
170 | <TR><TD>Inactivitytimeout:</TD><TD><input name=\"inactivitytimeout\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##INACTIVITYTIMEOUT##\"></TD></TR>\n\
|
---|
171 | <TR><TD>Reconnecttimeout:</TD><TD><input name=\"reconnecttimeout\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##RECEIVETIMEOUT##\"></TD></TR>\n\
|
---|
172 | <TR><TD>Disableserverfilter:</TD><TD><input name=\"disableserverfilter\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##DISABLESERVERFILTER##\"></TD></TR>\n\
|
---|
173 | <TR><TD>Fallback:</TD><TD><input name=\"fallback\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"##FALLBACK##\"></TD></TR>\n\
|
---|
174 | <TR><TD>CAID:</TD><TD><input name=\"caid\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"##CAIDS##\"></TD></TR>\n\
|
---|
175 | <TR><TD>Boxid:</TD><TD><input name=\"boxid\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"##BOXID##\"></TD></TR>\n\
|
---|
176 | </TABLE>\n\
|
---|
177 | <input type=\"submit\" value=\"OK\"></form>\n\
|
---|
178 | <BR><BR>Saving not yet implemented - Nothing changes on click<BR><BR>\n\
|
---|
179 | ##TPLFOOTER##"
|
---|
180 | #define TPLREADERCONFIGSIDOKBIT "<TR><TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"##SIDLABEL##\" ##CHECKED##> ##SIDLABEL##</TD>"
|
---|
181 | #define TPLREADERCONFIGSIDNOBIT "<TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"!##SIDLABEL##\" ##CHECKED##> !##SIDLABEL##</TD></TR>"
|
---|
182 |
|
---|
183 | enum refreshtypes {REFR_ACCOUNTS, REFR_READERS, REFR_SERVER, REFR_ANTICASC};
|
---|
184 |
|
---|
185 | struct templatevars {
|
---|
186 | int varscnt;
|
---|
187 | int varsalloc;
|
---|
188 | int tmpcnt;
|
---|
189 | int tmpalloc;
|
---|
190 | char **names;
|
---|
191 | char **values;
|
---|
192 | char **tmp;
|
---|
193 | };
|
---|
194 |
|
---|
195 | struct uriparams {
|
---|
196 | int paramcount;
|
---|
197 | char *params[MAXGETPARAMS];
|
---|
198 | char *values[MAXGETPARAMS];
|
---|
199 | };
|
---|
200 |
|
---|
201 | static char hex2ascii[256][2];
|
---|
202 | static char noncekey[33];
|
---|
203 |
|
---|
204 |
|
---|
205 | char *tpl_addVar(struct templatevars *vars, int append, char *name, char *value);
|
---|
206 | char *tpl_addTmp(struct templatevars *vars, char *value);
|
---|
207 | char *tpl_printf(struct templatevars *vars, int append, char *varname, char *fmtstring, ...);
|
---|
208 | char *tpl_getVar(struct templatevars *vars, char *name);
|
---|
209 | struct templatevars *tpl_create();
|
---|
210 | void tpl_clear(struct templatevars *vars);
|
---|
211 | char *tpl_getUnparsedTpl(const char* name);
|
---|
212 | char *tpl_getTpl(struct templatevars *vars, const char* name);
|
---|
213 | char *parse_auth_value(char *value);
|
---|
214 | void calculate_nonce(char *result, int resultlen);
|
---|
215 | int check_auth(char *authstring, char *method, char *path, char *expectednonce);
|
---|
216 | void send_headers(FILE *f, int status, char *title, char *extra, char *mime);
|
---|
217 | void send_htmlhead(FILE *f, int refresh);
|
---|
218 | void send_css(FILE *f);
|
---|
219 | void send_footer(FILE *f);
|
---|
220 | void send_oscam_menu(FILE *f);
|
---|
221 | char *getParam(struct uriparams *params, char *name);
|
---|