* converted to autoconf and began port to Digital UNIX
[citadel.git] / webcit / auth.c
1 /*
2  * auth.c
3  *
4  * This file contains code which relates to authentication of users to Citadel.
5  *
6  * $Id$
7  */
8
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <stdio.h>
12 #include <ctype.h>
13 #include <string.h>
14 #include <errno.h>
15 #include "webcit.h"
16 #include "child.h"
17
18
19
20 /*
21  * Display the login screen
22  */
23 void display_login(void) {
24         char buf[256];
25
26         printf("HTTP/1.0 200 OK\n");
27         output_headers();
28
29         wprintf("<HTML><BODY>\n");
30         wprintf("<CENTER><TABLE border=0><TR><TD>\n");
31
32         /* FIX replace with the correct image */
33         wprintf("<IMG SRC=\"/static/velma.gif\">");
34         wprintf("</TD><TD><CENTER>\n");
35
36         serv_puts("MESG hello");
37         serv_gets(buf);
38         if (buf[0]=='1') fmout(NULL);
39
40         wprintf("</CENTER></TD></TR></TABLE></CENTER>\n");
41
42         wprintf("<HR>\n");
43         /* FIX add instructions here */
44         wprintf("<CENTER><FORM ACTION=\"/login\" METHOD=\"POST\">\n");
45         wprintf("<TABLE border><TR>\n");
46         wprintf("<TD>User Name:</TD>\n");
47         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"name\" MAXLENGTH=\"25\">\n");
48         wprintf("</TD></TR><TR>\n");
49         wprintf("<TD>Password:</TD>\n");
50         wprintf("<TD><INPUT TYPE=\"password\" NAME=\"pass\" MAXLENGTH=\"20\"></TD>\n");
51         wprintf("</TR></TABLE>\n");
52         wprintf("<INPUT type=\"submit\" NAME=\"action\" VALUE=\"Login\">\n");
53         wprintf("<INPUT type=\"submit\" NAME=\"action\" VALUE=\"New User\">\n");
54         wprintf("<INPUT type=\"submit\" NAME=\"action\" VALUE=\"Exit\">\n");
55         wprintf("</FORM></CENTER>\n");
56         wprintf("</BODY></HTML>\n");
57         wDumpContent();
58         }
59
60
61
62
63 /*
64  * This function needs to get called whenever a PASS or NEWU succeeds
65  */
66 void become_logged_in(char *user, char *pass, char *serv_response) {
67         logged_in = 1;
68         extract(wc_username, &serv_response[4], 0);
69         strcpy(wc_password, pass);
70         axlevel = extract_int(&serv_response[4], 1);
71         if (axlevel >=6) is_aide = 1;
72         }
73
74
75 void do_login(void) {
76         char buf[256];
77
78         if (!strcasecmp(bstr("action"), "Login")) {
79                 serv_printf("USER %s", bstr("name"));
80                 serv_gets(buf);
81                 if (buf[0]=='3') {
82                         serv_printf("PASS %s", bstr("pass"));
83                         serv_gets(buf);
84                         if (buf[0]=='2') {
85                                 become_logged_in(bstr("name"),
86                                         bstr("pass"), buf);
87                                 }
88                         }
89                 }
90
91         if (logged_in) {
92                 output_static("frameset.html");
93                 }
94         else {
95                 printf("HTTP/1.0 200 OK\n");
96                 output_headers();
97                 wprintf("<HTML><HEAD><TITLE>Nope</TITLE></HEAD><BODY>\n");
98                 wprintf("Your password was not accepted.\n");
99                 wprintf("<HR><A HREF=\"/\">Try again</A>\n");
100                 wprintf("</BODY></HTML>\n");
101                 wDumpContent();
102                 }
103
104         }
105
106 void do_welcome(void) {
107         printf("HTTP/1.0 200 OK\n");
108         output_headers();
109         wprintf("<HTML><BODY>\n");
110         wprintf("<CENTER><H1>");
111         escputs(wc_username);
112         wprintf("</H1>\n");
113         /* other stuff here */
114         wprintf("</BODY></HTML>\n");
115         wDumpContent();
116         }
117
118
119 void do_logout(void) {
120         char buf[256];
121
122         strcpy(wc_username, "");
123         strcpy(wc_password, "");
124         strcpy(wc_roomname, "");
125         strcpy(wc_host, "");
126         strcpy(wc_port, "");
127
128         printf("HTTP/1.0 200 OK\n");
129         output_headers();
130         printf("X-WebCit-Session: close\n");
131         
132         wprintf("<HTML><HEAD><TITLE>Goodbye</TITLE></HEAD><BODY><CENTER>\n");
133
134         serv_puts("MESG goodbye");
135         serv_gets(buf);
136
137         if (buf[0]=='1') fmout(NULL);
138         else wprintf("Goodbye\n");
139
140         wprintf("</CENTER></BODY></HTML>\n");
141         wDumpContent();
142         serv_puts("QUIT");
143         exit(0);
144         }