3 * Copyright (c) 1996-2012 by the citadel.org team
5 * This program is open source software. You can redistribute it and/or
6 * modify it under the terms of the GNU General Public License, version 3.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
15 #include "webserver.h"
18 * Display the OpenIDs associated with an account
20 void display_openids(void) {
25 output_headers(1, 1, 1, 0, 0, 0);
27 do_template("box_begin_1");
28 StrBufAppendBufPlain(WCC->WBuf, _("Manage Account/OpenID Associations"), -1, 0);
29 do_template("box_begin_2");
31 if (WCC->serv_info->serv_supports_openid) {
33 wc_printf("<table class=\"altern\">");
36 serv_getln(buf, sizeof buf);
38 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
40 wc_printf("<tr class=\"%s\">", (bg ? "even" : "odd"));
41 wc_printf("<td><img src=\"static/webcit_icons/openid-small.gif\"></td><td>");
43 wc_printf("</td><td>");
44 wc_printf("<a href=\"openid_detach?id_to_detach=");
46 wc_printf("\" onClick=\"return confirm('%s');\">", _("Do you really want to delete this OpenID?"));
47 wc_printf("%s</a>", _("(delete)"));
48 wc_printf("</td></tr>\n");
51 wc_printf("</table><br>\n");
53 wc_printf("<form method=\"POST\" action=\"openid_attach\">\n");
54 wc_printf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WCC->nonce);
55 wc_printf(_("Add an OpenID: "));
56 wc_printf("<input type=\"text\" name=\"openid_url\" class=\"openid_urlarea\" size=\"40\">\n");
57 wc_printf("<input type=\"submit\" name=\"attach_button\" value=\"%s\">" "</form></center>\n", _("Attach"));
61 wc_printf(_("%s does not permit authentication via OpenID."), ChrPtr(WCC->serv_info->serv_humannode));
64 do_template("box_end");
70 * Attempt to attach an OpenID to an existing, logged-in account
72 void openid_attach(void) {
75 if (havebstr("attach_button")) {
77 syslog(LOG_DEBUG, "Attempting to attach %s\n", bstr("openid_url"));
79 snprintf(buf, sizeof buf,
80 "OIDS %s|%s/finalize_openid_login?attach_existing=1|%s",
81 bstr("openid_url"), ChrPtr(site_prefix), ChrPtr(site_prefix)
85 serv_getln(buf, sizeof buf);
87 syslog(LOG_DEBUG, "OpenID server contacted; redirecting to %s\n", &buf[4]);
88 http_redirect(&buf[4]);
92 syslog(LOG_DEBUG, "OpenID attach failed: %s\n", &buf[4]);
96 /* If we get to this point then something failed. */
102 * Detach an OpenID from the currently logged-in account
104 void openid_detach(void) {
107 if (havebstr("id_to_detach")) {
108 serv_printf("OIDD %s", bstr("id_to_detach"));
110 StrBuf_ServGetln(Line);
111 GetServerStatusMsg(Line, NULL, 1, 2);
118 void InitModule_OPENID(void) {
119 WebcitAddUrlHandler(HKEY("display_openids"), "", 0, display_openids, 0);
120 WebcitAddUrlHandler(HKEY("openid_attach"), "", 0, openid_attach, 0);
121 WebcitAddUrlHandler(HKEY("openid_detach"), "", 0, openid_detach, 0);