* removed handlers from webcit.h if possible
[citadel.git] / webcit / netconf.c
1 /* 
2  * $Id$
3  */
4 /**
5  * \defgroup NetShareConf Functions which handle network and sharing configuration.
6  *
7  * \ingroup CitadelConfig
8  */
9 /*@{*/
10 #include "webcit.h"
11
12 void display_netconf(void);
13
14 /**
15  * \brief edit a network node
16  */
17 void edit_node(void) {
18         char buf[SIZ];
19         char node[SIZ];
20         char cnode[SIZ];
21         FILE *fp;
22
23         if (havebstr("ok_button")) {
24                 strcpy(node, bstr("node") );
25                 fp = tmpfile();
26                 if (fp != NULL) {
27                         serv_puts("CONF getsys|application/x-citadel-ignet-config");
28                         serv_getln(buf, sizeof buf);
29                         if (buf[0] == '1') {
30                                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
31                                         extract_token(cnode, buf, 0, '|', sizeof cnode);
32                                         if (strcasecmp(node, cnode)) {
33                                                 fprintf(fp, "%s\n", buf);
34                                         }
35                                 }
36                         rewind(fp);
37                 }
38
39                 serv_puts("CONF putsys|application/x-citadel-ignet-config");
40                 serv_getln(buf, sizeof buf);
41                 if (buf[0] == '4') {
42                         if (fp != NULL) {
43                                 while (fgets(buf, sizeof buf, fp) != NULL) {
44                                         buf[strlen(buf)-1] = 0;
45                                         if (buf[0] != 0) {
46                                                 serv_puts(buf);
47                                         }
48                                 }
49                                 fclose(fp);
50                         }
51                         serv_printf("%s|%s|%s|%s", 
52                                 bstr("node"),
53                                 bstr("secret"),
54                                 bstr("host"),
55                                 bstr("port") );
56                         }
57                         serv_puts("000");
58                 }
59         }
60
61         display_netconf();
62 }
63
64
65 /**
66  * \brief add a node
67  */
68 void display_add_node(void)
69 {
70         output_headers(1, 1, 2, 0, 0, 0);
71         wprintf("<div id=\"banner\">\n");
72         wprintf("<h1>");
73         wprintf(_("Add a new node"));
74         wprintf("</h1>");
75         wprintf("</div>\n");
76
77         wprintf("<div id=\"content\" class=\"service\">\n");
78
79         wprintf("<FORM METHOD=\"POST\" action=\"edit_node\">\n");
80         wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
81         wprintf("<CENTER><TABLE border=0>\n");
82         wprintf("<TR><TD>%s</TD>", _("Node name"));
83         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"16\"></TD></TR>\n");
84         wprintf("<TR><TD>%s</TD>", _("Shared secret"));
85         wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"16\"></TD></TR>\n");
86         wprintf("<TR><TD>%s</TD>", _("Host or IP address"));
87         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"64\"></TD></TR>\n");
88         wprintf("<TR><TD>%s</TD>", _("Port number"));
89         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" VALUE=\"504\" MAXLENGTH=\"8\"></TD></TR>\n");
90         wprintf("</TABLE><br />");
91         wprintf("<INPUT TYPE=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">", _("Add node"));
92         wprintf("&nbsp;");
93         wprintf("<INPUT TYPE=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">", _("Cancel"));
94         wprintf("</CENTER></FORM>\n");
95
96         wDumpContent(1);
97 }
98
99 /**
100  * \brief modify an existing node
101  */
102 void display_edit_node(void)
103 {
104         char buf[512];
105         char node[256];
106         char cnode[256];
107         char csecret[256];
108         char chost[256];
109         char cport[256];
110
111         strcpy(node, bstr("node"));
112
113         output_headers(1, 1, 2, 0, 0, 0);
114         wprintf("<div id=\"banner\">\n");
115         wprintf("<h1>");
116         wprintf(_("Edit node configuration for "));
117         escputs(node);
118         wprintf("</h1>");
119         wprintf("</div>\n");
120
121         wprintf("<div id=\"content\" class=\"service\">\n");
122
123         serv_puts("CONF getsys|application/x-citadel-ignet-config");
124         serv_getln(buf, sizeof buf);
125         if (buf[0] == '1') {
126                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
127                         extract_token(cnode, buf, 0, '|', sizeof cnode);
128                         extract_token(csecret, buf, 1, '|', sizeof csecret);
129                         extract_token(chost, buf, 2, '|', sizeof chost);
130                         extract_token(cport, buf, 3, '|', sizeof cport);
131
132                         if (!strcasecmp(node, cnode)) {
133                                 wprintf("<FORM METHOD=\"POST\" action=\"edit_node\">\n");
134                                 wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
135                                 wprintf("<CENTER><TABLE border=0>\n");
136                                 wprintf("<TR><TD>");
137                                 wprintf(_("Node name"));
138                                 wprintf("</TD>");
139                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"16\" VALUE=\"%s\"></TD></TR>\n", cnode);
140                                 wprintf("<TR><TD>");
141                                 wprintf(_("Shared secret"));
142                                 wprintf("</TD>");
143                                 wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"16\" VALUE=\"%s\"></TD></TR>\n", csecret);
144                                 wprintf("<TR><TD>");
145                                 wprintf(_("Host or IP address"));
146                                 wprintf("</TD>");
147                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"64\" VALUE=\"%s\"></TD></TR>\n", chost);
148                                 wprintf("<TR><TD>");
149                                 wprintf(_("Port number"));
150                                 wprintf("</TD>");
151                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cport);
152                                 wprintf("</TABLE><br />");
153                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">",
154                                         _("Save changes"));
155                                 wprintf("&nbsp;");
156                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">",
157                                         _("Cancel"));
158                                 wprintf("</CENTER></FORM>\n");
159                         }
160
161                 }
162         }
163
164         else {          /** command error getting configuration */
165                 wprintf("%s<br />\n", &buf[4]);
166         }
167
168         wDumpContent(1);
169 }
170
171
172 /**
173  * \brief display all configured nodes
174  */
175 void display_netconf(void)
176 {
177         char buf[SIZ];
178         char node[SIZ];
179
180         output_headers(1, 1, 2, 0, 0, 0);
181         wprintf("<div id=\"banner\">\n");
182         wprintf("<h1>");
183         wprintf(_("Network configuration"));
184         wprintf("</h1>");
185         wprintf("</div>\n");
186
187         wprintf("<div id=\"content\" class=\"service\">\n");
188
189         wprintf("<CENTER>");
190         wprintf("<a href=\"display_add_node\">");
191         wprintf(_("Add a new node"));
192         wprintf("</A><br />\n");
193         wprintf("</CENTER>");
194
195         wprintf("<TABLE class=\"netconf_banner\"><TR><TD>");
196         wprintf("<SPAN CLASS=\"titlebar\">");
197         wprintf(_("Currently configured nodes"));
198         wprintf("</SPAN>\n");
199         wprintf("</TD></TR></TABLE>\n");
200         serv_puts("CONF getsys|application/x-citadel-ignet-config");
201         serv_getln(buf, sizeof buf);
202         if (buf[0] == '1') {
203                 wprintf("<CENTER><TABLE border=0>\n");
204                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
205                         extract_token(node, buf, 0, '|', sizeof node);
206                         wprintf("<TR><TD><FONT SIZE=+1>");
207                         escputs(node);
208                         wprintf("</FONT></TD>");
209                         wprintf("<TD><a href=\"display_edit_node&node=");
210                         urlescputs(node);
211                         wprintf("\">");
212                         wprintf(_("(Edit)"));
213                         wprintf("</A></TD>");
214                         wprintf("<TD><a href=\"display_confirm_delete_node&node=");
215                         urlescputs(node);
216                         wprintf("\">");
217                         wprintf(_("(Delete)"));
218                         wprintf("</A></TD>");
219                         wprintf("</TR>\n");
220                 }
221                 wprintf("</TABLE></CENTER>\n");
222         }
223         wDumpContent(1);
224 }
225
226 /**
227  * \brief display the dialog to verify the deletion
228  */
229 void display_confirm_delete_node(void)
230 {
231         char node[SIZ];
232
233         output_headers(1, 1, 2, 0, 0, 0);
234         wprintf("<div id=\"banner\">\n");
235         wprintf("<h1>");
236         wprintf(_("Confirm delete"));
237         wprintf("</h1>");
238         wprintf("</div>\n");
239
240         wprintf("<div id=\"content\" class=\"service\" >\n");
241
242         strcpy(node, bstr("node"));
243         wprintf("<CENTER>");
244         wprintf(_("Are you sure you want to delete "));
245         wprintf("<FONT SIZE=+1>");
246         escputs(node);
247         wprintf("</FONT>?<br />\n");
248         wprintf("<a href=\"delete_node&node=");
249         urlescputs(node);
250         wprintf("\">");
251         wprintf(_("Yes"));
252         wprintf("</A>&nbsp;&nbsp;&nbsp;");
253         wprintf("<a href=\"display_netconf\">");
254         wprintf(_("No"));
255         wprintf("</A><br />\n");
256         wDumpContent(1);
257 }
258
259 /**
260  * \brief actually delete the node
261  */
262 void delete_node(void)
263 {
264         char buf[SIZ];
265         char node[SIZ];
266         char cnode[SIZ];
267         FILE *fp;
268
269         strcpy(node, bstr("node") );
270         fp = tmpfile();
271         if (fp != NULL) {
272                 serv_puts("CONF getsys|application/x-citadel-ignet-config");
273                 serv_getln(buf, sizeof buf);
274                 if (buf[0] == '1') {
275                         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
276                                 extract_token(cnode, buf, 0, '|', sizeof cnode);
277                                 if (strcasecmp(node, cnode)) {
278                                         fprintf(fp, "%s\n", buf);
279                                 }
280                         }
281                 }
282                 rewind(fp);
283
284                 serv_puts("CONF putsys|application/x-citadel-ignet-config");
285                 serv_getln(buf, sizeof buf);
286                 if (buf[0] == '4') {
287                         while (fgets(buf, sizeof buf, fp) != NULL) {
288                                 buf[strlen(buf)-1] = 0;
289                                 serv_puts(buf);
290                         }
291                         serv_puts("000");
292                 }
293                 fclose(fp);
294         }
295
296         display_netconf();
297 }
298
299 void 
300 InitModule_NETCONF
301 (void)
302 {
303         WebcitAddUrlHandler(HKEY("display_edit_node"), display_edit_node, 0);
304
305         WebcitAddUrlHandler(HKEY("edit_node"), edit_node, 0);
306         WebcitAddUrlHandler(HKEY("display_netconf"), display_netconf, 0);
307         WebcitAddUrlHandler(HKEY("display_confirm_delete_node"), display_confirm_delete_node, 0);
308         WebcitAddUrlHandler(HKEY("delete_node"), delete_node, 0);
309         WebcitAddUrlHandler(HKEY("display_add_node"), display_add_node, 0);
310 }
311 /*@}*/