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