diff --git a/.gitignore b/.gitignore index f95818a..c57f1ab 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ lib*.a matrix-send .scripts windows_bs +auth_file diff --git a/src/test.cpp b/src/test.cpp index ae6f233..3745559 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -55,18 +55,54 @@ void keyboard_fn(matrix::roomcxn cxn, std::atomic_bool& should_quit){ } } +matrix::auth_data read_auth_file(const char* filename){ + raii::filerd fp(filename, "r"); + if(!fp){ + return {}; + } + raii::rjp_ptr root(rjp_parse(fp.read(fp.length()))); + if(!root.get()) + return {}; + + raii::rjp_string user = rjp_search_member(root.get(), "user", 0).value; + raii::rjp_string pass = rjp_search_member(root.get(), "pass", 0).value; + raii::rjp_string server = rjp_search_member(root.get(), "server", 0).value; + raii::rjp_string token = rjp_search_member(root.get(), "token", 0).value; + raii::rjp_string agent = rjp_search_member(root.get(), "useragent", 0).value; + + return matrix::auth_data{user, pass, server, agent, token}; +} +void write_to_auth_file(const char* filename, const matrix::auth_data& auth){ + raii::rjp_ptr root(rjp_init_json_as(rjp_object())); + if(!root.get()) + return; + + rjp_add_member(root.get(), "user", 4, rjp_string_copy(auth.name)); + rjp_add_member(root.get(), "pass", 4, rjp_string_copy(auth.pass)); + rjp_add_member(root.get(), "server", 6, rjp_string_copy(auth.homeserver)); + rjp_add_member(root.get(), "token", 5, rjp_string_copy(auth.access_token)); + rjp_add_member(root.get(), "useragent", 9, rjp_string_copy(auth.useragent)); + raii::rjp_string output; + output.reset(rjp_to_json(root.get())); + + raii::filerd fp(filename, "w"); + if(!fp) + return; + fp.write(output); +} + int main(){ - const char* username = "username"; - const char* password = "password"; - const char* useragent = "rexy712s test bot"; - const char* homeserver = "matrix.org"; - matrix::auth_data auth{username, password, homeserver, useragent}; + matrix::auth_data auth = read_auth_file("auth_file"); matrix::session ses(auth); if(!ses.valid()){ fprintf(stderr, "Failed to init matrix session!\n"); return 1; } + if(!auth.access_token){ + auth.access_token = ses.access_token(); + write_to_auth_file("auth_file", auth); + } fprintf(stderr, "Succ\n"); std::atomic_bool should_quit = false;