]> gitweb.ps.run Git - matrix_esp_thesis/blob - src/matrix.c
dont need length variables everywhere (i think)
[matrix_esp_thesis] / src / matrix.c
1 #include "matrix.h"\r
2 \r
3 #include <stdio.h>\r
4 #include <mjson.h>\r
5 \r
6 \r
7 #define LOGIN_REQUEST_SIZE 1024\r
8 #define LOGIN_RESPONSE_SIZE 1024\r
9 #define LOGIN_URL "/_matrix/client/v3/login"\r
10 \r
11 \r
12 bool\r
13 MatrixClientInit(\r
14     MatrixClient * client,\r
15     const char * server)\r
16 {\r
17     strcpy_s(\r
18         client->server,\r
19         SERVER_SIZE,\r
20         server\r
21     );\r
22 \r
23     return true;\r
24 }\r
25 \r
26 // https://spec.matrix.org/v1.6/client-server-api/#post_matrixclientv3login\r
27 bool\r
28 MatrixClientLoginPassword(\r
29     MatrixClient * client,\r
30     const char * username,\r
31     const char * password,\r
32     const char * displayName)\r
33 {\r
34     static char requestBuffer[LOGIN_REQUEST_SIZE];\r
35 \r
36     mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE,\r
37         "{"\r
38             "\"type\": \"m.login.password\","\r
39             "\"identifier\": {"\r
40                 "\"type\": \"m.id.user\","\r
41                 "\"user\": \"%s\""\r
42             "},"\r
43             "\"password\": \"%s\","\r
44             "\"initial_device_display_name\": \"%s\""\r
45         "}",\r
46         username,\r
47         password,\r
48         displayName);\r
49     \r
50     static char responseBuffer[LOGIN_RESPONSE_SIZE];\r
51     bool result =\r
52         MatrixHttpPost(client,\r
53             LOGIN_URL,\r
54             requestBuffer,\r
55             responseBuffer, LOGIN_RESPONSE_SIZE);\r
56     \r
57     int responseLen = strlen(responseBuffer);\r
58     \r
59     if (!result)\r
60         return false;\r
61 \r
62     mjson_get_string(responseBuffer, responseLen,\r
63         "$.access_token",\r
64         client->accessTokenBuffer, ACCESS_TOKEN_SIZE);\r
65     mjson_get_string(responseBuffer, responseLen,\r
66         "$.device_id",\r
67         client->deviceIdBuffer, DEVICE_ID_SIZE);\r
68     mjson_get_string(responseBuffer, responseLen,\r
69         "$.expires_in_ms",\r
70         client->expireMsBuffer, EXPIRE_MS_SIZE);\r
71     mjson_get_string(responseBuffer, responseLen,\r
72         "$.refresh_token",\r
73         client->refreshTokenBuffer, REFRESH_TOKEN_SIZE);\r
74 \r
75     return true;\r
76 }\r
77 \r