]> code.citadel.org Git - citadel.git/blob - webcit/useredit.c
* yep ... more user edit stuff
[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
92         char username[SIZ];
93         char password[SIZ];
94         unsigned int flags;
95         int timescalled;
96         int msgsposted;
97         int axlevel;
98         long usernum;
99         time_t lastcall;
100         int purgedays;
101
102         if (supplied_username != NULL) {
103                 strcpy(username, supplied_username);
104         }
105         else {
106                 strcpy(username, bstr("username") );
107         }
108
109         serv_printf("AGUP %s", username);
110         serv_gets(buf);
111         if (buf[0] != '2') {
112                 sprintf(error_message,
113                         "<IMG SRC=\"static/error.gif\" VALIGN=CENTER>"
114                         "%s<BR><BR>\n", &buf[4]);
115                 select_user_to_edit(error_message);
116                 return;
117         }
118
119         extract(username, &buf[4], 0);
120         extract(password, &buf[4], 1);
121         flags = extract_int(&buf[4], 2);
122         timescalled = extract_int(&buf[4], 3);
123         msgsposted = extract_int(&buf[4], 4);
124         axlevel = extract_int(&buf[4], 5);
125         usernum = extract_long(&buf[4], 6);
126         lastcall = extract_long(&buf[4], 7);
127         purgedays = extract_long(&buf[4], 8);
128
129         output_headers(3);      /* No room banner on this screen */
130         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
131         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"<B>"
132                 "Edit user account: ");
133         escputs(username);
134         wprintf("</B></FONT></TD></TR></TABLE>\n");
135
136         wprintf("<FORM METHOD=\"POST\" ACTION=\"/edituser\">\n");
137
138         wprintf("<CENTER><TABLE>");
139
140         wprintf("<TR><TD>Password</TD><TD>"
141                 "<INPUT TYPE=\"password\" NAME=\"password\" VALUE=\"");
142         escputs(password);
143         wprintf("\" MAXLENGTH=\"20\"></TD></TR>\n");
144
145         wprintf("<TR><TD>Flags (FIXME)</TD><TD>"
146                 "<INPUT TYPE=\"text\" NAME=\"flags\" VALUE=\"");
147         wprintf("%d", flags);
148         wprintf("\" MAXLENGTH=\"6\"></TD></TR>\n");
149
150         wprintf("<TR><TD>Times logged in</TD><TD>"
151                 "<INPUT TYPE=\"text\" NAME=\"timescalled\" VALUE=\"");
152         wprintf("%d", timescalled);
153         wprintf("\" MAXLENGTH=\"6\"></TD></TR>\n");
154
155         wprintf("<TR><TD>Messages posted</TD><TD>"
156                 "<INPUT TYPE=\"text\" NAME=\"msgsposted\" VALUE=\"");
157         wprintf("%d", msgsposted);
158         wprintf("\" MAXLENGTH=\"6\"></TD></TR>\n");
159
160         wprintf("<TR><TD>Access level (FIXME) </TD><TD>"
161                 "<INPUT TYPE=\"text\" NAME=\"axlevel\" VALUE=\"");
162         wprintf("%d", axlevel);
163         wprintf("\" MAXLENGTH=\"1\"></TD></TR>\n");
164
165         wprintf("<TR><TD>User ID number</TD><TD>"
166                 "<INPUT TYPE=\"text\" NAME=\"usernum\" VALUE=\"");
167         wprintf("%ld", usernum);
168         wprintf("\" MAXLENGTH=\"7\"></TD></TR>\n");
169
170         wprintf("<TR><TD>Date/time of last login</TD><TD>"
171                 "<INPUT TYPE=\"text\" NAME=\"lastcall\" VALUE=\"");
172         escputs(asctime(localtime(&lastcall)));
173         wprintf("\" MAXLENGTH=\"30\"></TD></TR>\n");
174
175         wprintf("<TR><TD>Purge days (FIXME) </TD><TD>"
176                 "<INPUT TYPE=\"text\" NAME=\"purgedays\" VALUE=\"");
177         wprintf("%d", purgedays);
178         wprintf("\" MAXLENGTH=\"5\"></TD></TR>\n");
179
180         wprintf("</TABLE>\n");
181
182         wprintf("<INPUT type=\"submit\" NAME=\"action\" VALUE=\"OK\">\n"
183                 "<INPUT type=\"submit\" NAME=\"action\" VALUE=\"Cancel\">\n"
184                 "</CENTER>\n");
185
186         wprintf("</FORM>\n");
187
188         wDumpContent(1);
189
190 }
191
192
193
194 void create_user(void) {
195         char buf[SIZ];
196         char error_message[SIZ];
197         char username[SIZ];
198
199         strcpy(username, bstr("username"));
200
201         serv_printf("CREU %s", username);
202         serv_gets(buf);
203
204         if (buf[0] == '2') {
205                 display_edituser(username);
206         }
207         else {
208                 sprintf(error_message,
209                         "<IMG SRC=\"static/error.gif\" VALIGN=CENTER>"
210                         "%s<BR><BR>\n", &buf[4]);
211                 select_user_to_edit(error_message);
212         }
213
214 }