]> gitweb.ps.run Git - matrix_esp_thesis/blob - src/matrix.c
790f0f572e77e446cbe56f86b64cb338ad378d44
[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     char * server, int serverLen)\r
16 {\r
17     strcpy_s(\r
18         client->server,\r
19         SERVER_SIZE,\r
20         server\r
21     );\r
22     client->serverLen = serverLen;\r
23 \r
24     return true;\r
25 }\r
26 \r
27 // https://spec.matrix.org/v1.6/client-server-api/#post_matrixclientv3login\r
28 bool\r
29 MatrixClientLoginPassword(\r
30     MatrixClient * client,\r
31     char * username, int usernameLen,\r
32     char * password, int passwordLen,\r
33     char * displayName, int displayNameLen)\r
34 {\r
35     static char requestBuffer[LOGIN_REQUEST_SIZE];\r
36 \r
37     int requestLen =\r
38         mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE,\r
39             "{"\r
40                 "\"type\": \"m.login.password\","\r
41                 "\"identifier\": {"\r
42                     "\"type\": \"m.id.user\","\r
43                     "\"user\": \"%.*s\""\r
44                 "},"\r
45                 "\"password\": \"%.*s\","\r
46                 "\"initial_device_display_name\": \"%.*s\""\r
47             "}",\r
48             usernameLen, username,\r
49             passwordLen, password,\r
50             displayNameLen, displayName);\r
51     \r
52     static char responseBuffer[LOGIN_RESPONSE_SIZE];\r
53     int responseLen;\r
54     bool result =\r
55         MatrixHttpPost(client,\r
56             LOGIN_URL,\r
57             requestBuffer, requestLen,\r
58             responseBuffer, LOGIN_RESPONSE_SIZE, &responseLen);\r
59     \r
60     if (!result)\r
61         return false;\r
62 \r
63     client->accessTokenLen =\r
64         mjson_get_string(responseBuffer, responseLen,\r
65             "$.access_token",\r
66             client->accessTokenBuffer, ACCESS_TOKEN_SIZE);\r
67     client->deviceIdLen =\r
68         mjson_get_string(responseBuffer, responseLen,\r
69             "$.device_id",\r
70             client->deviceIdBuffer, DEVICE_ID_SIZE);\r
71     client->expireMsLen =\r
72         mjson_get_string(responseBuffer, responseLen,\r
73             "$.expires_in_ms",\r
74             client->expireMsBuffer, EXPIRE_MS_SIZE);\r
75     client->refreshTokenLen =\r
76         mjson_get_string(responseBuffer, responseLen,\r
77             "$.refresh_token",\r
78             client->refreshTokenBuffer, REFRESH_TOKEN_SIZE);\r
79 \r
80     return true;\r
81 }\r
82 \r