* All OS-level includes are now included from webcit.h instead of from
[citadel.git] / webcit / netconf.c
1 /* 
2  * $Id$
3  *
4  * Functions which handle network and sharing configuration.
5  *
6  */
7
8 #include "webcit.h"
9
10 void edit_node(void) {
11         char buf[SIZ];
12         char node[SIZ];
13         char cnode[SIZ];
14         FILE *fp;
15
16         if (!strcmp(bstr("sc"), "OK")) {
17                 strcpy(node, bstr("node") );
18                 fp = tmpfile();
19                 if (fp != NULL) {
20                         serv_puts("CONF getsys|application/x-citadel-ignet-config");
21                         serv_getln(buf, sizeof buf);
22                         if (buf[0] == '1') {
23                                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
24                                         extract_token(cnode, buf, 0, '|', sizeof cnode);
25                                         if (strcasecmp(node, cnode)) {
26                                                 fprintf(fp, "%s\n", buf);
27                                         }
28                                 }
29                         fprintf(fp, "%s|%s|%s|%s\n", 
30                                 bstr("node"),
31                                 bstr("secret"),
32                                 bstr("host"),
33                                 bstr("port") );
34                         }
35                         rewind(fp);
36
37                         serv_puts("CONF putsys|application/x-citadel-ignet-config");
38                         serv_getln(buf, sizeof buf);
39                         if (buf[0] == '4') {
40                                 while (fgets(buf, sizeof buf, fp) != NULL) {
41                                         buf[strlen(buf)-1] = 0;
42                                         serv_puts(buf);
43                                 }
44                                 serv_puts("000");
45                         }
46                         fclose(fp);
47                 }
48         }
49
50         display_netconf();
51 }
52
53
54
55 void display_add_node(void)
56 {
57         output_headers(1, 1, 2, 0, 0, 0, 0);
58         wprintf("<div id=\"banner\">\n");
59         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
60         wprintf("<SPAN CLASS=\"titlebar\">Add new node</SPAN>");
61         wprintf("</TD></TR></TABLE>\n");
62         wprintf("</div>\n<div id=\"content\">\n");
63
64         wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_node\">\n");
65         wprintf("<CENTER><TABLE border=0>\n");
66         wprintf("<TR><TD>Node name</TD>");
67         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"16\"></TD></TR>\n");
68         wprintf("<TR><TD>Shared secret</TD>");
69         wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"16\"></TD></TR>\n");
70         wprintf("<TR><TD>Host or IP</TD>");
71         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"64\"></TD></TR>\n");
72         wprintf("<TR><TD>Port</TD>");
73         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\"></TD></TR>\n");
74         wprintf("</TABLE><br />");
75         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
76         wprintf("&nbsp;");
77         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
78         wprintf("</CENTER></FORM>\n");
79
80         wDumpContent(1);
81 }
82
83 void display_edit_node(void)
84 {
85         char buf[SIZ];
86         char node[SIZ];
87         char cnode[SIZ];
88         char csecret[SIZ];
89         char chost[SIZ];
90         char cport[SIZ];
91
92         strcpy(node, bstr("node"));
93
94         output_headers(1, 1, 2, 0, 0, 0, 0);
95         wprintf("<div id=\"banner\">\n");
96         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
97         wprintf("<SPAN CLASS=\"titlebar\">Edit node configuration for ");
98         escputs(node);
99         wprintf("</SPAN>\n");
100         wprintf("</TD></TR></TABLE>\n");
101         wprintf("</div>\n<div id=\"content\">\n");
102
103         serv_puts("CONF getsys|application/x-citadel-ignet-config");
104         serv_getln(buf, sizeof buf);
105         if (buf[0] == '1') {
106                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
107                         extract_token(cnode, buf, 0, '|', sizeof cnode);
108                         extract_token(csecret, buf, 1, '|', sizeof csecret);
109                         extract_token(chost, buf, 2, '|', sizeof chost);
110                         extract_token(cport, buf, 3, '|', sizeof cport);
111
112                         if (!strcasecmp(node, cnode)) {
113                                 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_node\">\n");
114                                 wprintf("<CENTER><TABLE border=0>\n");
115                                 wprintf("<TR><TD>Node name</TD>");
116                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"16\" VALUE=\"%s\"></TD></TR>\n", cnode);
117                                 wprintf("<TR><TD>Shared secret</TD>");
118                                 wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"16\" VALUE=\"%s\"></TD></TR>\n", csecret);
119                                 wprintf("<TR><TD>Host or IP</TD>");
120                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"64\" VALUE=\"%s\"></TD></TR>\n", chost);
121                                 wprintf("<TR><TD>Port</TD>");
122                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cport);
123                                 wprintf("</TABLE><br />");
124                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
125                                 wprintf("&nbsp;");
126                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
127                                 wprintf("</CENTER></FORM>\n");
128                         }
129
130                 }
131         }
132
133         else {          /* command error getting configuration */
134                 wprintf("%s<br />\n", &buf[4]);
135         }
136
137         wDumpContent(1);
138 }
139
140
141
142 void display_netconf(void)
143 {
144         char buf[SIZ];
145         char node[SIZ];
146
147         output_headers(1, 1, 2, 0, 0, 0, 0);
148         wprintf("<div id=\"banner\">\n");
149         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
150         wprintf("<SPAN CLASS=\"titlebar\">Network configuration</SPAN>\n");
151         wprintf("</TD></TR></TABLE>\n");
152         wprintf("</div>\n<div id=\"content\">\n");
153
154         wprintf("<CENTER>");
155         wprintf("<A HREF=\"/display_add_node\">");
156         wprintf("Add a new node</A><br />\n");
157         wprintf("</CENTER>");
158
159         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
160         wprintf("<SPAN CLASS=\"titlebar\">Currently configured nodes</SPAN>\n");
161         wprintf("</TD></TR></TABLE>\n");
162         serv_puts("CONF getsys|application/x-citadel-ignet-config");
163         serv_getln(buf, sizeof buf);
164         if (buf[0] == '1') {
165                 wprintf("<CENTER><TABLE border=0>\n");
166                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
167                         extract_token(node, buf, 0, '|', sizeof node);
168                         wprintf("<TR><TD><FONT SIZE=+1>");
169                         escputs(node);
170                         wprintf("</FONT></TD>");
171                         wprintf("<TD><A HREF=\"/display_edit_node&node=");
172                         urlescputs(node);
173                         wprintf("\">(Edit)</A></TD>");
174                         wprintf("<TD><A HREF=\"/display_confirm_delete_node&node=");
175                         urlescputs(node);
176                         wprintf("\">(Delete)</A></TD>");
177                         wprintf("</TR>\n");
178                 }
179                 wprintf("</TABLE></CENTER>\n");
180         }
181         wDumpContent(1);
182 }
183
184
185 void display_confirm_delete_node(void)
186 {
187         char node[SIZ];
188
189         output_headers(1, 1, 2, 0, 0, 0, 0);
190         wprintf("<div id=\"banner\">\n");
191         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
192         wprintf("<SPAN CLASS=\"titlebar\">Confirm delete</SPAN>\n");
193         wprintf("</TD></TR></TABLE>\n");
194         wprintf("</div>\n<div id=\"content\">\n");
195
196         strcpy(node, bstr("node"));
197         wprintf("<CENTER>Are you sure you want to delete <FONT SIZE=+1>");
198         escputs(node);
199         wprintf("</FONT>?<br />\n");
200         wprintf("<A HREF=\"/delete_node&node=");
201         urlescputs(node);
202         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
203         wprintf("<A HREF=\"/display_netconf\">No</A><br />\n");
204         wDumpContent(1);
205 }
206
207
208 void delete_node(void)
209 {
210         char buf[SIZ];
211         char node[SIZ];
212         char cnode[SIZ];
213         FILE *fp;
214
215         strcpy(node, bstr("node") );
216         fp = tmpfile();
217         if (fp != NULL) {
218                 serv_puts("CONF getsys|application/x-citadel-ignet-config");
219                 serv_getln(buf, sizeof buf);
220                 if (buf[0] == '1') {
221                         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
222                                 extract_token(cnode, buf, 0, '|', sizeof cnode);
223                                 if (strcasecmp(node, cnode)) {
224                                         fprintf(fp, "%s\n", buf);
225                                 }
226                         }
227                 }
228                 rewind(fp);
229
230                 serv_puts("CONF putsys|application/x-citadel-ignet-config");
231                 serv_getln(buf, sizeof buf);
232                 if (buf[0] == '4') {
233                         while (fgets(buf, sizeof buf, fp) != NULL) {
234                                 buf[strlen(buf)-1] = 0;
235                                 serv_puts(buf);
236                         }
237                         serv_puts("000");
238                 }
239                 fclose(fp);
240         }
241
242         display_netconf();
243 }
244
245
246 void add_node(void)
247 {
248         char node[SIZ];
249         char buf[SIZ];
250         char sc[SIZ];
251
252         strcpy(node, bstr("node"));
253         strcpy(sc, bstr("sc"));
254
255         if (!strcmp(sc, "Add")) {
256                 sprintf(buf, "NSET addnode|%s", node);
257                 serv_puts(buf);
258                 serv_getln(buf, sizeof buf);
259                 if (buf[0] == '1') {
260                         output_headers(1, 1, 0, 0, 0, 0, 0);
261                         server_to_text();
262                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
263                         wDumpContent(1);
264                 } else {
265                         strcpy(WC->ImportantMessage, &buf[4]);
266                         display_netconf();
267                 }
268         }
269 }
270
271