X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fopenid%2Fserv_openid_rp.c;h=57dfb10f3cca969ff6f32af691b9143028146be8;hb=f0491df5188aee78202cda403da47db91f1ee685;hp=d51d9c0c77de410d2634232db44eafd77554a30e;hpb=db760faa3330dd82a78f414b75c72361b66d5187;p=citadel.git diff --git a/citadel/modules/openid/serv_openid_rp.c b/citadel/modules/openid/serv_openid_rp.c index d51d9c0c7..57dfb10f3 100644 --- a/citadel/modules/openid/serv_openid_rp.c +++ b/citadel/modules/openid/serv_openid_rp.c @@ -683,10 +683,7 @@ int parse_xrds_document(StrBuf *ReplyBuf) { struct xrds xrds; int return_value = 0; - syslog(LOG_DEBUG, - " --- XRDS DOCUMENT BEGIN --- \n%s\n --- XRDS DOCUMENT END ---", - ChrPtr(ReplyBuf) - ); + /* syslog(LOG_DEBUG, "XRDS document:\n%s\n", ChrPtr(ReplyBuf)); */ memset(&xrds, 0, sizeof (struct xrds)); xrds.selected_service_priority = INT_MAX; @@ -918,7 +915,8 @@ void cmd_oids(char *argbuf) { RedirectUrl = NewStrBufDup(oiddata->op_url); - StrBufAppendBufPlain(RedirectUrl, HKEY("?openid.ns=http:%2F%2Fspecs.openid.net%2Fauth%2F2.0"), 0); + StrBufAppendBufPlain(RedirectUrl, HKEY("?openid.ns="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://specs.openid.net/auth/2.0"); StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.mode=checkid_setup"), 0); @@ -928,16 +926,31 @@ void cmd_oids(char *argbuf) { StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.identity="), 0); StrBufUrlescAppend(RedirectUrl, oiddata->claimed_id, NULL); + /* Attribute Exchange */ + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ns.ax="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://openid.net/srv/ax/1.0"); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.mode=fetch_request"), 0); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.required=firstname,lastname,friendly,nickname"), 0); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.firstname="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/first"); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.lastname="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/last"); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.friendly="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/friendly"); + + StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.nickname="), 0); + StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/nickname"); + + /* return_to completes the round trip */ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.return_to="), 0); StrBufUrlescAppend(RedirectUrl, return_to, NULL); -/* - We probably have to do something here to set up Simple Registration - StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.sreg.optional="), 0); - StrBufUrlescAppend(RedirectUrl, NULL, "nickname,email,fullname,postcode,country,dob,gender"); -*/ - - syslog(LOG_DEBUG, "\033[36m%s\033[0m", ChrPtr(RedirectUrl)); + syslog(LOG_DEBUG, "OpenID: redirecting client to %s", ChrPtr(RedirectUrl)); cprintf("%d %s\n", CIT_OK, ChrPtr(RedirectUrl)); } @@ -957,6 +970,8 @@ void cmd_oidf(char *argbuf) { char thiskey[1024]; char thisdata[1024]; HashList *keys = NULL; + const char *Key; + void *Value; ctdl_openid *oiddata = (ctdl_openid *) CC->openid_data; if (oiddata == NULL) { @@ -980,7 +995,6 @@ void cmd_oidf(char *argbuf) { len = sizeof(thiskey) - 1; } extract_token(thisdata, buf, 1, '|', sizeof thisdata); - syslog(LOG_DEBUG, "%s: ["SIZE_T_FMT"] %s", thiskey, strlen(thisdata), thisdata); Put(keys, thiskey, len, strdup(thisdata), NULL); } @@ -1027,19 +1041,19 @@ void cmd_oidf(char *argbuf) { CURLFORM_END ); -/* - -FIXME put the rest of this crap in here - - if (GetHash(keys, k_keyname, strlen(k_keyname), (void *) &k_value)) { - snprintf(k_o_keyname, sizeof k_o_keyname, "openid.%s", k_keyname); - curl_formadd(&formpost, &lastptr, - CURLFORM_COPYNAME, k_o_keyname, - CURLFORM_COPYCONTENTS, k_value, - CURLFORM_END); - syslog(LOG_DEBUG, "%25s : %s", k_o_keyname, k_value); - } -*/ + HashPos *HashPos = GetNewHashPos(keys, 0); + while (GetNextHashPos(keys, HashPos, &len, &Key, &Value) != 0) { + syslog(LOG_DEBUG, "%s = %s", Key, (char *)Value); + if (strcasecmp(Key, "mode")) { + char k_o_keyname[1024]; + snprintf(k_o_keyname, sizeof k_o_keyname, "openid.%s", (const char *)Key); + curl_formadd(&formpost, &lastptr, + CURLFORM_COPYNAME, k_o_keyname, + CURLFORM_COPYCONTENTS, (char *)Value, + CURLFORM_END + ); + } + } curl = ctdl_openid_curl_easy_init(errmsg); curl_easy_setopt(curl, CURLOPT_URL, ChrPtr(oiddata->op_url)); @@ -1055,14 +1069,13 @@ FIXME put the rest of this crap in here curl_easy_cleanup(curl); curl_formfree(formpost); - /* syslog(LOG_DEBUG, "\033[36m --- VALIDATION REPLY ---\n%s\033[0m", ChrPtr(ReplyBuf)); */ - + /* syslog(LOG_DEBUG, "Validation reply: \n%s", ChrPtr(ReplyBuf)); */ if (cbmstrcasestr(ChrPtr(ReplyBuf), "is_valid:true") == NULL) { oiddata->verified = 0; } FreeStrBuf(&ReplyBuf); - syslog(LOG_DEBUG, "Authentication %s.", (oiddata->verified ? "succeeded" : "failed") ); + syslog(LOG_DEBUG, "OpenID authentication %s", (oiddata->verified ? "succeeded" : "failed") ); /* Respond to the client */ @@ -1128,7 +1141,7 @@ FIXME put the rest of this crap in here else { cprintf("\n"); } - syslog(LOG_DEBUG, "The desired Simple Registration name is already taken."); + syslog(LOG_DEBUG, "The desired display name is already taken."); } } }