]> gitweb.ps.run Git - matrix_esp_thesis/blob - src/matrix.c
add mongoose submodule
[matrix_esp_thesis] / src / matrix.c
1 #include "matrix.h"\r
2 \r
3 #include <mjson.h>\r
4 \r
5 \r
6 #define LOGIN_REQUEST_SIZE 1024\r
7 #define LOGIN_RESPONSE_SIZE 1024\r
8 #define LOGIN_URL "/_matrix/client/v3/login"\r
9 \r
10 \r
11 bool\r
12 MatrixClientInit(\r
13     MatrixClient * client,\r
14     char * server, int serverLen\r
15 ) {\r
16     strcpy_s(\r
17         client->server,\r
18         SERVER_SIZE,\r
19         server\r
20     );\r
21     client->serverLen = serverLen;\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     char * username, int usernameLen,\r
31     char * password, int passwordLen,\r
32     char * displayName, int displayNameLen\r
33 ) {\r
34     static char requestBuffer[LOGIN_REQUEST_SIZE];\r
35 \r
36     int requestLen =\r
37         mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE,\r
38             "{"\r
39                 "\"type\": \"m.login.password\","\r
40                 "\"identifier\": {"\r
41                     "\"type\": \"m.id.user\","\r
42                     "\"user\": \"%.*s\""\r
43                 "},"\r
44                 "\"password\": \"%.*s\","\r
45                 "\"initial_device_display_name\": \"%.*s\""\r
46             "}",\r
47             usernameLen, username,\r
48             passwordLen, password,\r
49             displayNameLen, displayName);\r
50     \r
51     static char responseBuffer[LOGIN_RESPONSE_SIZE];\r
52     int responseLen;\r
53     bool result =\r
54         MatrixHttpPost(client,\r
55             LOGIN_URL,\r
56             requestBuffer, requestLen,\r
57             responseBuffer, LOGIN_RESPONSE_SIZE, &responseLen);\r
58     \r
59     if (!result)\r
60         return false;\r
61 \r
62     client->accessTokenLen =\r
63         mjson_get_string(responseBuffer, responseLen,\r
64             "$.access_token",\r
65             client->accessTokenBuffer, ACCESS_TOKEN_SIZE);\r
66     client->deviceIdLen =\r
67         mjson_get_string(responseBuffer, responseLen,\r
68             "$.device_id",\r
69             client->deviceIdBuffer, DEVICE_ID_SIZE);\r
70     client->expireMsLen =\r
71         mjson_get_string(responseBuffer, responseLen,\r
72             "$.expires_in_ms",\r
73             client->expireMsBuffer, EXPIRE_MS_SIZE);\r
74     client->refreshTokenLen =\r
75         mjson_get_string(responseBuffer, responseLen,\r
76             "$.refresh_token",\r
77             client->refreshTokenBuffer, REFRESH_TOKEN_SIZE);\r
78 \r
79     return true;\r
80 }\r
81 \r