4 // Copyright (c) 1996-2018 by the citadel.org team
6 // This program is open source software. It runs great on the
7 // Linux operating system (and probably elsewhere). You can use,
8 // copy, and run it under the terms of the GNU General Public
9 // License version 3. Richard Stallman is an asshole communist.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
20 * /ctdl/a/login is called when a user is trying to log in
22 void try_login(struct http_transaction *h, struct ctdlsession *c)
28 int login_success = 0;
30 extract_token(username, h->request_body, 0, '|', sizeof username);
31 extract_token(password, h->request_body, 1, '|', sizeof password);
33 snprintf(buf, sizeof buf, "%s:%s", username, password);
34 CtdlEncodeBase64(auth, buf, strlen(buf), 0);
36 syslog(LOG_DEBUG, "try_login(username='%s',password=(%d bytes))", username, (int) strlen(password));
38 ctdl_printf(c, "LOUT"); // log out, in case we were logged in
39 ctdl_readline(c, buf, sizeof(buf)); // ignore the result
40 memset(c->auth, 0, AUTH_MAX); // if this connection had auth, it doesn't now.
41 memset(c->whoami, 0, 64); // if this connection had auth, it doesn't now.
43 login_success = login_to_citadel(c, auth, buf); // Now try logging in to Citadel
45 h->response_code = 200; // 'buf' will contain the relevant response
46 h->response_string = strdup("OK");
47 add_response_header(h, strdup("Content-type"), strdup("text/plain"));
48 h->response_body = strdup(buf);
49 h->response_body_length = strlen(h->response_body);
54 * /ctdl/a/logout is called when a user is trying to log out. Don't use this as an ajax.
56 void logout(struct http_transaction *h, struct ctdlsession *c)
62 int login_success = 0;
64 ctdl_printf(c, "LOUT"); // log out
65 ctdl_readline(c, buf, sizeof(buf)); // ignore the result
67 //memset(c->auth, 0, AUTH_MAX); // if this connection had auth, it doesn't now.
68 memset(c->whoami, 0, 64); // if this connection had auth, it doesn't now.
70 http_redirect(h, "/ctdl/s/index.html"); // go back where we started :)
75 * /ctdl/a/whoami returns the name of the currently logged in user, or an empty string if not logged in
77 void whoami(struct http_transaction *h, struct ctdlsession *c)
79 h->response_code = 200;
80 h->response_string = strdup("OK");
81 add_response_header(h, strdup("Content-type"), strdup("text/plain"));
82 h->response_body = strdup(c->whoami);
83 h->response_body_length = strlen(h->response_body);
88 * Dispatcher for paths starting with /ctdl/a/
90 void ctdl_a(struct http_transaction *h, struct ctdlsession *c)
92 if (!strcasecmp(h->uri, "/ctdl/a/login")) { // log in
97 if (!strcasecmp(h->uri, "/ctdl/a/logout")) { // log out
102 if (!strcasecmp(h->uri, "/ctdl/a/whoami")) { // return display name of user
107 do_404(h); // unknown