- // loop over keys\r
- \r
- int koff, klen, voff, vlen, vtype, off;\r
- for (off = 0; (off = mjson_next(s, slen, off, &koff, &klen,\r
- &voff, &vlen, &vtype)) != 0; ) {\r
- const char * key = s + koff;\r
- const char * val = s + voff;\r
-\r
- // set device id, "key" is the JSON key\r
- MatrixDevice d;\r
- strncpy(d.deviceId, key, klen);\r
-\r
- // look for device key in value\r
- char deviceKeyQuery[JSON_QUERY_SIZE];\r
- snprintf(deviceKeyQuery, JSON_QUERY_SIZE,\r
- "$.keys.curve25519:%.*s", klen, key);\r
- mjson_get_string(val, vlen,\r
- deviceKeyQuery, d.deviceKey, DEVICE_KEY_SIZE);\r
-\r
- // add device\r
- if (client->numDevices < NUM_DEVICES)\r
- {\r
+ // query for retrieving device keys for user id\r
+ static char query[JSON_QUERY_SIZE];\r
+ snprintf(query, JSON_QUERY_SIZE,\r
+ "$.device_keys.%s", userIdEscaped);\r
+ \r
+ const char * s;\r
+ int slen;\r
+ mjson_find(responseBuffer, strlen(responseBuffer),\r
+ query, &s, &slen);\r
+ \r
+ // loop over keys\r
+ \r
+ int koff, klen, voff, vlen, vtype, off = 0;\r
+ for (off = 0; (off = mjson_next(s, slen, off, &koff, &klen,\r
+ &voff, &vlen, &vtype)) != 0; ) {\r
+ const char * key = s + koff;\r
+ const char * val = s + voff;\r
+\r
+ // set device id, "key" is the JSON key\r
+ MatrixDevice d;\r
+ snprintf(d.deviceId, DEVICE_ID_SIZE,\r
+ "%.*s", klen-2, key+1);\r
+\r
+ // look for device key in value\r
+ static char deviceKeyQuery[JSON_QUERY_SIZE];\r
+ snprintf(deviceKeyQuery, JSON_QUERY_SIZE,\r
+ "$.keys.curve25519:%s", d.deviceId);\r
+ mjson_get_string(val, vlen,\r
+ deviceKeyQuery, d.deviceKey, DEVICE_KEY_SIZE);\r
+\r
+ // look for signing key in value\r
+ static char signingKeyQuery[JSON_QUERY_SIZE];\r
+ snprintf(signingKeyQuery, JSON_QUERY_SIZE,\r
+ "$.keys.ed25519:%s", d.deviceId);\r
+ mjson_get_string(val, vlen,\r
+ signingKeyQuery, d.signingKey, SIGNING_KEY_SIZE);\r
+\r
+ // add device\r
+ if (client->numDevices < NUM_DEVICES)\r
+ {\r
+ bool foundDevice = false;\r
+ for (int i = 0; i < client->numDevices; i++)\r
+ if (strcmp(client->devices[i].deviceId, d.deviceId) == 0)\r
+ foundDevice = true;\r
+\r
+ if (! foundDevice) {\r
+ printf("new device: %s %s %s\n", d.deviceId, d.deviceKey, d.signingKey);\r