char cs_addr[64]; /* address logged in from */
/* The Internet type of thing */
+ char cs_principal_id[256]; /* User principal identity for XMPP, ActivityPub, etc. */
char cs_inet_email[128]; /* Return address of outbound Internet mail */
char cs_inet_other_emails[1024]; /* User's other valid Internet email addresses */
char cs_inet_fn[128]; /* Friendly-name of outbound Internet mail */
return;
}
- lem = CC->cs_inet_email;
+ lem = CC->cs_principal_id;
extract_token(x_user, argbuf, 0, '|', sizeof x_user);
extract_token(x_msg, argbuf, 1, '|', sizeof x_msg);
}
/* Generate the "full JID" of the client (user@host/resource) */
- snprintf(XMPP->client_jid, sizeof XMPP->client_jid, "%s/%s", CC->cs_inet_email, XMPP->iq_client_resource);
+ snprintf(XMPP->client_jid, sizeof XMPP->client_jid, "%s/%s", CC->cs_principal_id, XMPP->iq_client_resource);
/* Tell the client what its JID is */
cprintf("<iq type=\"result\" id=\"%s\">", xmlesc(xmlbuf, XMPP->iq_id, sizeof xmlbuf));
* Login hook for XMPP sessions
*/
void xmpp_login_hook(void) {
- xmpp_queue_event(XMPP_EVT_LOGIN, CC->cs_inet_email);
+ xmpp_queue_event(XMPP_EVT_LOGIN, CC->cs_principal_id);
}
* Logout hook for XMPP sessions
*/
void xmpp_logout_hook(void) {
- xmpp_queue_event(XMPP_EVT_LOGOUT, CC->cs_inet_email);
+ xmpp_queue_event(XMPP_EVT_LOGOUT, CC->cs_principal_id);
}
for (cptr = ContextList; cptr != NULL; cptr = cptr->next) {
if ( (cptr->logged_in)
&& (cptr->can_receive_im)
- && (!strcasecmp(cptr->cs_inet_email, message_to))
+ && (!strcasecmp(cptr->cs_principal_id, message_to))
) {
recp = cptr->user.fullname;
}
}
if (recp) {
- PerformXmsgHooks(CC->user.fullname, CC->cs_inet_email, recp, message_body);
+ PerformXmsgHooks(CC->user.fullname, CC->cs_principal_id, recp, message_body);
}
free(XMPP->message_body);
for (i=0; i<nContexts; i++) {
if (xmpp_is_visible(&cptr[i], CC)) {
- xmpp_indicate_presence(cptr[i].cs_inet_email);
+ xmpp_indicate_presence(cptr[i].cs_principal_id);
}
}
free(cptr);
/* Do an unsolicited roster update that deletes the contact. */
cprintf("<iq from=\"%s\" to=\"%s\" id=\"unbuddy_%x\" type=\"result\">",
- xmlesc(xmlbuf1, CC->cs_inet_email, sizeof xmlbuf1),
+ xmlesc(xmlbuf1, CC->cs_principal_id, sizeof xmlbuf1),
xmlesc(xmlbuf2, XMPP->client_jid, sizeof xmlbuf2),
++unsolicited_id
);
/* Count the visible sessions for this user */
for (i=0; i<nContexts; i++) {
- if ( (!strcasecmp(cptr[i].cs_inet_email, presence_jid))
+ if ( (!strcasecmp(cptr[i].cs_principal_id, presence_jid))
&& (xmpp_is_visible(&cptr[i], CC))
) {
++visible_sessions;
for (i=0; i<nContexts; i++) {
if (xmpp_is_visible(&cptr[i], CC)) {
if (mortuary) {
- char *buddy = strdup(cptr[i].cs_inet_email);
+ char *buddy = strdup(cptr[i].cs_principal_id);
Put(mortuary, buddy, strlen(buddy), buddy, NULL);
}
}
online_now = 0;
if (cptr) for (i=0; i<nContexts; i++) {
if (xmpp_is_visible(&cptr[i], CC)) {
- if (!strcasecmp(cptr[i].cs_inet_email, (char *)Value)) {
+ if (!strcasecmp(cptr[i].cs_principal_id, (char *)Value)) {
online_now = 1;
}
}
char xmlbuf2[256];
cprintf("<item jid=\"%s\" name=\"%s\" subscription=\"both\">",
- xmlesc(xmlbuf1, cptr->cs_inet_email, sizeof xmlbuf1),
+ xmlesc(xmlbuf1, cptr->cs_principal_id, sizeof xmlbuf1),
xmlesc(xmlbuf2, cptr->user.fullname, sizeof xmlbuf2)
);
cprintf("<group>%s</group>", xmlesc(xmlbuf1, CtdlGetConfigStr("c_humannode"), sizeof xmlbuf1));
AutoGenerateEmailAddressForUser(&CC->user);
}
+ /* Populate the user principal identity, which is consistent and never aliased */
+ strcpy(CC->cs_principal_id, "wowowowow");
+ makeuserkey(CC->cs_principal_id, CC->user.fullname, sizeof CC->user.fullname);
+ strcat(CC->cs_principal_id, "@");
+ strcat(CC->cs_principal_id, CtdlGetConfigStr("c_fqdn"));
+
/*
* Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record
*/