]> code.citadel.org Git - citadel.git/blob - webcit/useredit.c
* Remove "Page another user" link from main menu
[citadel.git] / webcit / useredit.c
1 /*
2  * Administrative screen to add/change/delete user accounts
3  *
4  */
5
6
7 #include <ctype.h>
8 #include <stdlib.h>
9 #include <unistd.h>
10 #include <stdio.h>
11 #include <fcntl.h>
12 #include <signal.h>
13 #include <sys/types.h>
14 #include <sys/wait.h>
15 #include <sys/socket.h>
16 #include <sys/time.h>
17 #include <limits.h>
18 #include <netinet/in.h>
19 #include <netdb.h>
20 #include <string.h>
21 #include <pwd.h>
22 #include <errno.h>
23 #include <stdarg.h>
24 #include <pthread.h>
25 #include <signal.h>
26 #include "webcit.h"
27
28
29
30
31
32 void select_user_to_edit(char *message)
33 {
34         char buf[SIZ];
35         char username[SIZ];
36
37         output_headers(3);      /* No room banner on this screen */
38
39         if (message != NULL) wprintf(message);
40
41         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
42         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"<B>"
43                 "Add/change/delete user accounts"
44                 "</B></FONT></TD></TR></TABLE>\n");
45
46         wprintf("<TABLE border=0 CELLSPACING=10><TR VALIGN=TOP>"
47                 "<TD>To edit an existing user account, select the user "
48                 "name from the list and click 'Edit'.<BR><BR>");
49         
50         wprintf("<CENTER><FORM METHOD=\"POST\" ACTION=\"/display_edituser\">\n");
51         wprintf("<SELECT NAME=\"username\" SIZE=10>\n");
52         serv_puts("LIST");
53         serv_gets(buf);
54         if (buf[0] == '1') {
55                 while (serv_gets(buf), strcmp(buf, "000")) {
56                         extract(username, buf, 0);
57                         wprintf("<OPTION>");
58                         escputs(username);
59                         wprintf("\n");
60                 }
61         }
62         wprintf("</SELECT><BR>\n");
63
64         wprintf("<input type=submit name=sc value=\"Edit\">");
65         wprintf("</FORM></CENTER>\n");
66
67         wprintf("</TD><TD>"
68                 "To create a new user account, enter the desired "
69                 "user name in the box below and click 'Create'.<BR><BR>");
70
71         wprintf("<CENTER><FORM METHOD=\"POST\" ACTION=\"/create_user\">\n");
72         wprintf("New user: ");
73         wprintf("<input type=text name=username><BR>\n"
74                 "<input type=submit value=\"Create\">"
75                 "</FORM></CENTER>\n");
76
77         wprintf("</TD></TR></TABLE>\n");
78
79         wDumpContent(1);
80 }
81
82
83
84 /*
85  * Edit a user.  If supplied_username is null, look in the "username"
86  * web variable for the name of the user to edit.
87  */
88 void display_edituser(char *supplied_username) {
89         char buf[SIZ];
90         char error_message[SIZ];
91         time_t now;
92
93         char username[SIZ];
94         char password[SIZ];
95         unsigned int flags;
96         int timescalled;
97         int msgsposted;
98         int axlevel;
99         long usernum;
100         time_t lastcall;
101         int purgedays;
102         int i;
103
104         if (supplied_username != NULL) {
105                 strcpy(username, supplied_username);
106         }
107         else {
108                 strcpy(username, bstr("username") );
109         }
110
111         serv_printf("AGUP %s", username);
112         serv_gets(buf);
113         if (buf[0] != '2') {
114                 sprintf(error_message,
115                         "<IMG SRC=\"static/error.gif\" VALIGN=CENTER>"
116                         "%s<BR><BR>\n", &buf[4]);
117                 select_user_to_edit(error_message);
118                 return;
119         }
120
121         extract(username, &buf[4], 0);
122         extract(password, &buf[4], 1);
123         flags = extract_int(&buf[4], 2);
124         timescalled = extract_int(&buf[4], 3);
125         msgsposted = extract_int(&buf[4], 4);
126         axlevel = extract_int(&buf[4], 5);
127         usernum = extract_long(&buf[4], 6);
128         lastcall = extract_long(&buf[4], 7);
129         purgedays = extract_long(&buf[4], 8);
130
131         output_headers(3);      /* No room banner on this screen */
132         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
133         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"<B>"
134                 "Edit user account: ");
135         escputs(username);
136         wprintf("</B></FONT></TD></TR></TABLE>\n");
137
138         wprintf("<FORM METHOD=\"POST\" ACTION=\"/edituser\">\n"
139                 "<INPUT TYPE=\"hidden\" NAME=\"username\" VALUE=\"");
140         escputs(username);
141         wprintf("\">\n");
142
143         wprintf("<INPUT TYPE=\"hidden\" NAME=\"flags\" VALUE=\"%d\">\n", flags);
144
145         wprintf("<CENTER><TABLE>");
146
147         wprintf("<TR><TD>Password</TD><TD>"
148                 "<INPUT TYPE=\"password\" NAME=\"password\" VALUE=\"");
149         escputs(password);
150         wprintf("\" MAXLENGTH=\"20\"></TD></TR>\n");
151
152         wprintf("<TR><TD>Times logged in</TD><TD>"
153                 "<INPUT TYPE=\"text\" NAME=\"timescalled\" VALUE=\"");
154         wprintf("%d", timescalled);
155         wprintf("\" MAXLENGTH=\"6\"></TD></TR>\n");
156
157         wprintf("<TR><TD>Messages posted</TD><TD>"
158                 "<INPUT TYPE=\"text\" NAME=\"msgsposted\" VALUE=\"");
159         wprintf("%d", msgsposted);
160         wprintf("\" MAXLENGTH=\"6\"></TD></TR>\n");
161
162         wprintf("<TR><TD>Access level</TD><TD>"
163                 "<SELECT NAME=\"axlevel\">\n");
164         for (i=0; i<7; ++i) {
165                 wprintf("<OPTION ");
166                 if (axlevel == i) {
167                         wprintf("SELECTED ");
168                 }
169                 wprintf("VALUE=\"%d\">%d - %s</OPTION>\n",
170                         i, i, axdefs[i]);
171         }
172         wprintf("</SELECT></TD></TR>\n");
173
174         wprintf("<TR><TD>User ID number</TD><TD>"
175                 "<INPUT TYPE=\"text\" NAME=\"usernum\" VALUE=\"");
176         wprintf("%ld", usernum);
177         wprintf("\" MAXLENGTH=\"7\"></TD></TR>\n");
178
179         now = time(NULL);
180         wprintf("<TR><TD>Date/time of last login</TD><TD>"
181                 "<SELECT NAME=\"lastcall\">\n");
182
183         wprintf("<OPTION SELECTED VALUE=\"%ld\">", lastcall);
184         escputs(asctime(localtime(&lastcall)));
185         wprintf("</OPTION>\n");
186
187         wprintf("<OPTION VALUE=\"%ld\">", now);
188         escputs(asctime(localtime(&now)));
189         wprintf("</OPTION>\n");
190
191         wprintf("</SELECT></TD></TR>");
192
193         wprintf("<TR><TD>Auto-purge after days</TD><TD>"
194                 "<INPUT TYPE=\"text\" NAME=\"purgedays\" VALUE=\"");
195         wprintf("%d", purgedays);
196         wprintf("\" MAXLENGTH=\"5\"></TD></TR>\n");
197
198         wprintf("</TABLE>\n");
199
200         wprintf("<INPUT type=\"submit\" NAME=\"action\" VALUE=\"OK\">\n"
201                 "<INPUT type=\"submit\" NAME=\"action\" VALUE=\"Cancel\">\n"
202                 "<BR><BR></FORM>\n");
203
204         wprintf("<A HREF=\"/dotgoto&room=%010ld.My%%20Citadel%%20Config\">",
205                 usernum);
206         wprintf("Click here to access the configuration room for ");
207         escputs(username);
208         wprintf("</A><BR>\n"
209                 "(Contact information, Internet e-mail addresses, etc.)<BR>"
210                 "</CENTER>\n");
211
212         wDumpContent(1);
213
214 }
215
216
217
218 void edituser(void) {
219         char message[SIZ];
220         char buf[SIZ];
221
222         if (strcasecmp(bstr("action"), "OK")) {
223                 strcpy(message, "Edit user cancelled.");
224         }
225
226         else {
227
228                 serv_printf("ASUP %s|%s|%s|%s|%s|%s|%s|%s|%s|",
229                         bstr("username"),
230                         bstr("password"),
231                         bstr("flags"),
232                         bstr("timescalled"),
233                         bstr("msgsposted"),
234                         bstr("axlevel"),
235                         bstr("usernum"),
236                         bstr("lastcall"),
237                         bstr("purgedays")
238                 );
239                 serv_gets(buf);
240                 if (buf[0] != '2') {
241                         sprintf(message,
242                                 "<IMG SRC=\"static/error.gif\" VALIGN=CENTER>"
243                                 "%s<BR><BR>\n", &buf[4]);
244                 }
245                 else {
246                         strcpy(message, "");
247                 }
248         }
249
250         select_user_to_edit(message);
251 }
252
253
254
255
256 void create_user(void) {
257         char buf[SIZ];
258         char error_message[SIZ];
259         char username[SIZ];
260
261         strcpy(username, bstr("username"));
262
263         serv_printf("CREU %s", username);
264         serv_gets(buf);
265
266         if (buf[0] == '2') {
267                 display_edituser(username);
268         }
269         else {
270                 sprintf(error_message,
271                         "<IMG SRC=\"static/error.gif\" VALIGN=CENTER>"
272                         "%s<BR><BR>\n", &buf[4]);
273                 select_user_to_edit(error_message);
274         }
275
276 }
277