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