* more work on netconf
[citadel.git] / webcit / netconf.c
1
2
3
4 #include <ctype.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <fcntl.h>
9 #include <signal.h>
10 #include <sys/types.h>
11 #include <sys/wait.h>
12 #include <sys/socket.h>
13 #include <sys/time.h>
14 #include <limits.h>
15 #include <netinet/in.h>
16 #include <netdb.h>
17 #include <string.h>
18 #include <pwd.h>
19 #include <errno.h>
20 #include <stdarg.h>
21 #include <pthread.h>
22 #include <signal.h>
23 #include "webcit.h"
24
25
26
27
28
29
30 struct sharelist {
31         struct sharelist *next;
32         char shname[SIZ];
33 };
34
35
36 void edit_node(void) {
37
38         if (strcmp(bstr("sc"), "OK")) {
39                 /* FIXME do something */
40         }
41
42         display_netconf();
43 }
44
45
46
47 void display_edit_node(void)
48 {
49         char buf[SIZ];
50         char node[SIZ];
51         char cnode[SIZ];
52         char csecret[SIZ];
53         char chost[SIZ];
54         char cport[SIZ];
55
56         strcpy(node, bstr("node"));
57
58         output_headers(1);
59         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
60         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
61         wprintf("<B>Edit node configuration for ");
62         escputs(node);
63         wprintf("</B>\n");
64         wprintf("</FONT></TD></TR></TABLE>\n");
65
66         serv_puts("CONF getsys|application/x-citadel-ignet-config");
67         serv_gets(buf);
68         if (buf[0] == '1') {
69                 while (serv_gets(buf), strcmp(buf, "000")) {
70                         extract(cnode, buf, 0);
71                         extract(csecret, buf, 1);
72                         extract(chost, buf, 2);
73                         extract(cport, buf, 3);
74
75                         if (!strcasecmp(node, cnode)) {
76                                 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_node\">\n");
77                                 wprintf("<CENTER><TABLE border=0>\n");
78                                 wprintf("<TR><TD>Node name</TD>");
79                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cnode);
80                                 wprintf("<TR><TD>Shared secret</TD>");
81                                 wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", csecret);
82                                 wprintf("<TR><TD>Host or IP</TD>");
83                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"32\" VALUE=\"%s\"></TD></TR>\n", chost);
84                                 wprintf("<TR><TD>Port</TD>");
85                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cport);
86                                 wprintf("</TABLE><BR>");
87                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
88                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
89                                 wprintf("</CENTER></FORM>\n");
90                         }
91
92                 }
93         }
94
95         else {          /* command error getting configuration */
96                 wprintf("%s<BR>\n", &buf[4]);
97         }
98
99         wDumpContent(1);
100 }
101
102
103
104 void display_netconf(void)
105 {
106         char buf[SIZ];
107         char node[SIZ];
108
109         output_headers(1);
110         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
111         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
112         wprintf("<B>Network configuration</B>\n");
113         wprintf("</FONT></TD></TR></TABLE>\n");
114
115         wprintf("<CENTER>");
116         wprintf("<A HREF=\"/display_add_node\">");
117         wprintf("Add a new node</A><BR>\n");
118         wprintf("</CENTER>");
119
120         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
121         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
122         wprintf("<B>Currently configured nodes</B>\n");
123         wprintf("</FONT></TD></TR></TABLE>\n");
124         serv_puts("CONF getsys|application/x-citadel-ignet-config");
125         serv_gets(buf);
126         if (buf[0] == '1') {
127                 wprintf("<CENTER><TABLE border=0>\n");
128                 while (serv_gets(buf), strcmp(buf, "000")) {
129                         extract(node, buf, 0);
130                         wprintf("<TR><TD><FONT SIZE=+1>");
131                         escputs(node);
132                         wprintf("</FONT></TD>");
133                         wprintf("<TD><A HREF=\"/display_edit_node&node=");
134                         urlescputs(node);
135                         wprintf("\">(Edit)</A></TD>");
136                         wprintf("<TD><A HREF=\"/display_confirm_delete_node&node=");
137                         urlescputs(node);
138                         wprintf("\">(Delete)</A></TD>");
139                         wprintf("</TR>\n");
140                 }
141                 wprintf("</TABLE></CENTER>\n");
142         }
143         wDumpContent(1);
144 }
145
146
147 void display_confirm_delete_node(void)
148 {
149         char node[SIZ];
150
151         output_headers(1);
152         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
153         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
154         wprintf("<B>Confirm delete</B>\n");
155         wprintf("</FONT></TD></TR></TABLE>\n");
156
157         strcpy(node, bstr("node"));
158         wprintf("<CENTER>Are you sure you want to delete <FONT SIZE=+1>");
159         escputs(node);
160         wprintf("</FONT>?<BR>\n");
161         wprintf("<A HREF=\"/delete_node&node=");
162         urlescputs(node);
163         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
164         wprintf("<A HREF=\"/display_netconf\">No</A><BR>\n");
165         wDumpContent(1);
166 }
167
168
169 void delete_node(void)
170 {
171         char node[SIZ];
172         char buf[SIZ];
173
174         strcpy(node, bstr("node"));
175         sprintf(buf, "NSET deletenode|%s", node);
176         serv_puts(buf);
177         serv_gets(buf);
178         if (buf[0] == '1') {
179                 output_headers(1);
180                 server_to_text();
181                 wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
182                 wDumpContent(1);
183         } else {
184                 display_error(&buf[4]);
185         }
186 }
187
188
189 void display_add_node(void)
190 {
191
192         output_headers(1);
193         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
194         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
195         wprintf("<B>Add a new node</B>\n");
196         wprintf("</FONT></TD></TR></TABLE>\n");
197
198         wprintf("<CENTER>");
199         wprintf("<FORM METHOD=\"POST\" ACTION=\"/add_node\">\n");
200
201         wprintf("Enter name of new node: ");
202         wprintf("<INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"64\"><BR>\n");
203
204         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Add\">");
205         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
206
207         wprintf("</FORM></CENTER>\n");
208         wDumpContent(1);
209 }
210
211
212
213 void add_node(void)
214 {
215         char node[SIZ];
216         char buf[SIZ];
217         char sc[SIZ];
218
219         strcpy(node, bstr("node"));
220         strcpy(sc, bstr("sc"));
221
222         if (!strcmp(sc, "Add")) {
223                 sprintf(buf, "NSET addnode|%s", node);
224                 serv_puts(buf);
225                 serv_gets(buf);
226                 if (buf[0] == '1') {
227                         output_headers(1);
228                         server_to_text();
229                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
230                         wDumpContent(1);
231                 } else {
232                         display_error(&buf[4]);
233                 }
234         }
235 }
236
237