| 1094 |
1092 |
| 1095 jabber_iq_set_callback(iq, jabber_registration_result_cb, to); |
1093 jabber_iq_set_callback(iq, jabber_registration_result_cb, to); |
| 1096 jabber_iq_send(iq); |
1094 jabber_iq_send(iq); |
| 1097 } |
1095 } |
| 1098 |
1096 |
| |
1097 static const struct { |
| |
1098 const char *name; |
| |
1099 const char *label; |
| |
1100 } registration_fields[] = { |
| |
1101 { "email", N_("Email") }, |
| |
1102 { "nick", N_("Nickname") }, |
| |
1103 { "first", N_("First name") }, |
| |
1104 { "last", N_("Last name") }, |
| |
1105 { "address", N_("Address") }, |
| |
1106 { "city", N_("City") }, |
| |
1107 { "state", N_("State") }, |
| |
1108 { "zip", N_("Postal code") }, |
| |
1109 { "phone", N_("Phone") }, |
| |
1110 { "url", N_("URL") }, |
| |
1111 { "date", N_("Date") }, |
| |
1112 { NULL, NULL } |
| |
1113 }; |
| |
1114 |
| 1099 void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type, |
1115 void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type, |
| 1100 const char *id, xmlnode *query) |
1116 const char *id, xmlnode *query) |
| 1101 { |
1117 { |
| 1102 PurpleAccount *account = purple_connection_get_account(js->gc); |
1118 PurpleAccount *account = purple_connection_get_account(js->gc); |
| 1103 PurpleRequestFields *fields; |
1119 PurpleRequestFields *fields; |
| 1104 PurpleRequestFieldGroup *group; |
1120 PurpleRequestFieldGroup *group; |
| 1105 PurpleRequestField *field; |
1121 PurpleRequestField *field; |
| 1106 xmlnode *x, *y; |
1122 xmlnode *x, *y, *node; |
| 1107 char *instructions; |
1123 char *instructions; |
| 1108 JabberRegisterCBData *cbdata; |
1124 JabberRegisterCBData *cbdata; |
| 1109 gboolean registered = FALSE; |
1125 gboolean registered = FALSE; |
| |
1126 int i; |
| 1110 |
1127 |
| 1111 if (type != JABBER_IQ_RESULT) |
1128 if (type != JABBER_IQ_RESULT) |
| 1112 return; |
1129 return; |
| 1113 |
1130 |
| 1114 if (!from) |
1131 if (!from) |
| 1161 |
1178 |
| 1162 fields = purple_request_fields_new(); |
1179 fields = purple_request_fields_new(); |
| 1163 group = purple_request_field_group_new(NULL); |
1180 group = purple_request_field_group_new(NULL); |
| 1164 purple_request_fields_add_group(fields, group); |
1181 purple_request_fields_add_group(fields, group); |
| 1165 |
1182 |
| 1166 if(js->registration) |
1183 if((node = xmlnode_get_child(query, "username"))) { |
| 1167 field = purple_request_field_string_new("username", _("Username"), js->user->node, FALSE); |
1184 char *data = xmlnode_get_data(node); |
| 1168 else |
1185 if(js->registration) |
| 1169 field = purple_request_field_string_new("username", _("Username"), NULL, FALSE); |
1186 field = purple_request_field_string_new("username", _("Username"), data ? data : js->user->node, FALSE); |
| 1170 |
1187 else |
| 1171 purple_request_field_group_add_field(group, field); |
1188 field = purple_request_field_string_new("username", _("Username"), data, FALSE); |
| 1172 |
1189 |
| 1173 if(js->registration) |
1190 purple_request_field_group_add_field(group, field); |
| 1174 field = purple_request_field_string_new("password", _("Password"), |
1191 g_free(data); |
| 1175 purple_connection_get_password(js->gc), FALSE); |
1192 } |
| 1176 else |
1193 if((node = xmlnode_get_child(query, "password"))) { |
| 1177 field = purple_request_field_string_new("password", _("Password"), NULL, FALSE); |
1194 if(js->registration) |
| 1178 |
1195 field = purple_request_field_string_new("password", _("Password"), |
| 1179 purple_request_field_string_set_masked(field, TRUE); |
1196 purple_connection_get_password(js->gc), FALSE); |
| 1180 purple_request_field_group_add_field(group, field); |
1197 else { |
| 1181 |
1198 char *data = xmlnode_get_data(node); |
| 1182 if(xmlnode_get_child(query, "name")) { |
1199 field = purple_request_field_string_new("password", _("Password"), data, FALSE); |
| |
1200 g_free(data); |
| |
1201 } |
| |
1202 |
| |
1203 purple_request_field_string_set_masked(field, TRUE); |
| |
1204 purple_request_field_group_add_field(group, field); |
| |
1205 } |
| |
1206 |
| |
1207 if((node = xmlnode_get_child(query, "name"))) { |
| 1183 if(js->registration) |
1208 if(js->registration) |
| 1184 field = purple_request_field_string_new("name", _("Name"), |
1209 field = purple_request_field_string_new("name", _("Name"), |
| 1185 purple_account_get_alias(js->gc->account), FALSE); |
1210 purple_account_get_alias(js->gc->account), FALSE); |
| 1186 else |
1211 else { |
| 1187 field = purple_request_field_string_new("name", _("Name"), NULL, FALSE); |
1212 char *data = xmlnode_get_data(node); |
| |
1213 field = purple_request_field_string_new("name", _("Name"), data, FALSE); |
| |
1214 g_free(data); |
| |
1215 } |
| 1188 purple_request_field_group_add_field(group, field); |
1216 purple_request_field_group_add_field(group, field); |
| 1189 } |
1217 } |
| 1190 if(xmlnode_get_child(query, "email")) { |
1218 |
| 1191 field = purple_request_field_string_new("email", _("Email"), NULL, FALSE); |
1219 for (i = 0; registration_fields[i].name != NULL; ++i) { |
| 1192 purple_request_field_group_add_field(group, field); |
1220 if ((node = xmlnode_get_child(query, registration_fields[i].name))) { |
| 1193 } |
1221 char *data = xmlnode_get_data(node); |
| 1194 if(xmlnode_get_child(query, "nick")) { |
1222 field = purple_request_field_string_new(registration_fields[i].name, |
| 1195 field = purple_request_field_string_new("nick", _("Nickname"), NULL, FALSE); |
1223 _(registration_fields[i].label), |
| 1196 purple_request_field_group_add_field(group, field); |
1224 data, FALSE); |
| 1197 } |
1225 purple_request_field_group_add_field(group, field); |
| 1198 if(xmlnode_get_child(query, "first")) { |
1226 g_free(data); |
| 1199 field = purple_request_field_string_new("first", _("First name"), NULL, FALSE); |
1227 } |
| 1200 purple_request_field_group_add_field(group, field); |
1228 } |
| 1201 } |
1229 |
| 1202 if(xmlnode_get_child(query, "last")) { |
|
| 1203 field = purple_request_field_string_new("last", _("Last name"), NULL, FALSE); |
|
| 1204 purple_request_field_group_add_field(group, field); |
|
| 1205 } |
|
| 1206 if(xmlnode_get_child(query, "address")) { |
|
| 1207 field = purple_request_field_string_new("address", _("Address"), NULL, FALSE); |
|
| 1208 purple_request_field_group_add_field(group, field); |
|
| 1209 } |
|
| 1210 if(xmlnode_get_child(query, "city")) { |
|
| 1211 field = purple_request_field_string_new("city", _("City"), NULL, FALSE); |
|
| 1212 purple_request_field_group_add_field(group, field); |
|
| 1213 } |
|
| 1214 if(xmlnode_get_child(query, "state")) { |
|
| 1215 field = purple_request_field_string_new("state", _("State"), NULL, FALSE); |
|
| 1216 purple_request_field_group_add_field(group, field); |
|
| 1217 } |
|
| 1218 if(xmlnode_get_child(query, "zip")) { |
|
| 1219 field = purple_request_field_string_new("zip", _("Postal code"), NULL, FALSE); |
|
| 1220 purple_request_field_group_add_field(group, field); |
|
| 1221 } |
|
| 1222 if(xmlnode_get_child(query, "phone")) { |
|
| 1223 field = purple_request_field_string_new("phone", _("Phone"), NULL, FALSE); |
|
| 1224 purple_request_field_group_add_field(group, field); |
|
| 1225 } |
|
| 1226 if(xmlnode_get_child(query, "url")) { |
|
| 1227 field = purple_request_field_string_new("url", _("URL"), NULL, FALSE); |
|
| 1228 purple_request_field_group_add_field(group, field); |
|
| 1229 } |
|
| 1230 if(xmlnode_get_child(query, "date")) { |
|
| 1231 field = purple_request_field_string_new("date", _("Date"), NULL, FALSE); |
|
| 1232 purple_request_field_group_add_field(group, field); |
|
| 1233 } |
|
| 1234 if(registered) { |
1230 if(registered) { |
| 1235 field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE); |
1231 field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE); |
| 1236 purple_request_field_group_add_field(group, field); |
1232 purple_request_field_group_add_field(group, field); |
| 1237 } |
1233 } |
| 1238 |
1234 |