Move main down + Use Encryption keygen
This commit is contained in:
parent
3a35dadf3d
commit
c2d0114aec
2 changed files with 76 additions and 71 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit 833de44d81c7a79bb1327cd829116c1cce3861f6
|
Subproject commit b055b4a6630b06f3fc243dedac2951dc361b72f4
|
145
src/main.cpp
145
src/main.cpp
|
@ -6,6 +6,7 @@
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <memorystore.h>
|
||||||
|
|
||||||
#define PREFIX_DIRECTORY "./matrix-storage"
|
#define PREFIX_DIRECTORY "./matrix-storage"
|
||||||
#define TOKEN_FILENAME "token"
|
#define TOKEN_FILENAME "token"
|
||||||
|
@ -23,75 +24,7 @@ class Store : public Matrix::Store {
|
||||||
};
|
};
|
||||||
std::string ask_for_pass();
|
std::string ask_for_pass();
|
||||||
PrintConsole* bottom = new PrintConsole;
|
PrintConsole* bottom = new PrintConsole;
|
||||||
int main() {
|
|
||||||
fsInit();
|
|
||||||
gfxInitDefault();
|
|
||||||
consoleInit(GFX_BOTTOM, bottom);
|
|
||||||
uint8_t major, minor, patch;
|
|
||||||
olm_get_library_version(&major, &minor, &patch);
|
|
||||||
std::cout << "Using olm " << major << "." << minor << "." << patch << std::endl;
|
|
||||||
std::filesystem::create_directories(PREFIX_DIRECTORY);
|
|
||||||
chdir(PREFIX_DIRECTORY);
|
|
||||||
Matrix::Client* client = nullptr;
|
|
||||||
while (aptMainLoop()) {
|
|
||||||
gspWaitForVBlank();
|
|
||||||
hidScanInput();
|
|
||||||
u32 kDown = hidKeysDown();
|
|
||||||
|
|
||||||
if (kDown & KEY_START) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (kDown & KEY_SELECT) {
|
|
||||||
std::ifstream stream{TOKEN_FILENAME, std::fstream::in};
|
|
||||||
if(!stream.is_open()){
|
|
||||||
// File dosn't exist, log in
|
|
||||||
client = new Matrix::Client("https://matrix.timoreo.fr", "", nullptr); // &s
|
|
||||||
|
|
||||||
if (client->login("timoreo-3ds", ask_for_pass(), DEVICE_ID)) {
|
|
||||||
// logged in
|
|
||||||
puts("Logged in !!");
|
|
||||||
std::ofstream ostr{TOKEN_FILENAME, std::fstream::out};
|
|
||||||
ostr << client->getToken() << std::endl;
|
|
||||||
ostr.close();
|
|
||||||
} else {
|
|
||||||
// wrong endpoint or combo
|
|
||||||
puts("Wrong combo !");
|
|
||||||
goto wrong;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
std::string line;
|
|
||||||
std::getline(stream, line);
|
|
||||||
client = new Matrix::Client("https://matrix.timoreo.fr", line, nullptr); // &s
|
|
||||||
stream.close();
|
|
||||||
}
|
|
||||||
auto userid = client->getUserId();
|
|
||||||
if(userid.empty()){
|
|
||||||
puts("Userid is empty ! Wrong token ?");
|
|
||||||
goto wrong;
|
|
||||||
}
|
|
||||||
// Load encryption here
|
|
||||||
|
|
||||||
client->setRoomInfoCallback([](std::string roomId, Matrix::RoomInfo info){
|
|
||||||
consoleSelect(bottom);
|
|
||||||
printf("Joined room %s named %s\n", roomId.c_str(), info.name.c_str());
|
|
||||||
});
|
|
||||||
client->setEventCallback([](std::string roomId, json_t* event){
|
|
||||||
consoleSelect(bottom);
|
|
||||||
printf("Event in room %s\n", roomId.c_str());
|
|
||||||
printf("%s\n", json_dumps(event, JSON_ENSURE_ASCII));
|
|
||||||
});
|
|
||||||
client->startSyncLoop();
|
|
||||||
}
|
|
||||||
wrong:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
if(client != nullptr){
|
|
||||||
client->stopSyncLoop();
|
|
||||||
// DO NOT LOGOUT, KEEP ENCRYPTION KEYS
|
|
||||||
}
|
|
||||||
gfxExit();
|
|
||||||
fsExit();
|
|
||||||
}
|
|
||||||
std::string ask_for_pass() {
|
std::string ask_for_pass() {
|
||||||
SwkbdState swkbd;
|
SwkbdState swkbd;
|
||||||
swkbdInit(&swkbd, SWKBD_TYPE_WESTERN, 1, -1);
|
swkbdInit(&swkbd, SWKBD_TYPE_WESTERN, 1, -1);
|
||||||
|
@ -190,7 +123,7 @@ json_t* get_fallback_keys(Matrix::Client& client, OlmAccount* acc) {
|
||||||
return fallback_keys;
|
return fallback_keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
json_t* get_unpublished_otk(Matrix::Client client, OlmAccount* acc) {
|
json_t* get_unpublished_otk(Matrix::Client& client, OlmAccount* acc) {
|
||||||
json_t * otk_keys = json_object();
|
json_t * otk_keys = json_object();
|
||||||
// Extract keys
|
// Extract keys
|
||||||
size_t acclen = olm_account_one_time_keys_length(acc);
|
size_t acclen = olm_account_one_time_keys_length(acc);
|
||||||
|
@ -226,7 +159,7 @@ void save_keys(OlmAccount* acc) {
|
||||||
free(m);
|
free(m);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
OlmAccount* load_account(Matrix::Client client){
|
OlmAccount* load_account(Matrix::Client& client){
|
||||||
auto* acc = static_cast<OlmAccount*>(malloc(olm_account_size()));
|
auto* acc = static_cast<OlmAccount*>(malloc(olm_account_size()));
|
||||||
olm_account(acc);
|
olm_account(acc);
|
||||||
std::filebuf filestorage;
|
std::filebuf filestorage;
|
||||||
|
@ -282,4 +215,76 @@ OlmAccount* load_account(Matrix::Client client){
|
||||||
olm_unpickle_account(acc, nullptr, 0, data, overhead + fsize);
|
olm_unpickle_account(acc, nullptr, 0, data, overhead + fsize);
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
fsInit();
|
||||||
|
gfxInitDefault();
|
||||||
|
consoleInit(GFX_BOTTOM, bottom);
|
||||||
|
uint8_t major, minor, patch;
|
||||||
|
olm_get_library_version(&major, &minor, &patch);
|
||||||
|
std::cout << "Using olm " << major << "." << minor << "." << patch << std::endl;
|
||||||
|
std::filesystem::create_directories(PREFIX_DIRECTORY);
|
||||||
|
chdir(PREFIX_DIRECTORY);
|
||||||
|
Matrix::MemoryStore store = Matrix::MemoryStore();
|
||||||
|
Matrix::Client client("https://matrix.timoreo.fr", "", &store);
|
||||||
|
OlmAccount* acc;
|
||||||
|
while (aptMainLoop()) {
|
||||||
|
gspWaitForVBlank();
|
||||||
|
hidScanInput();
|
||||||
|
u32 kDown = hidKeysDown();
|
||||||
|
|
||||||
|
if (kDown & KEY_START) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (kDown & KEY_SELECT) {
|
||||||
|
std::ifstream stream{TOKEN_FILENAME, std::fstream::in};
|
||||||
|
if(!stream.is_open()){
|
||||||
|
// File dosn't exist, log in
|
||||||
|
|
||||||
|
if (client.login("timoreo-3ds", ask_for_pass(), DEVICE_ID)) {
|
||||||
|
// logged in
|
||||||
|
puts("Logged in !!");
|
||||||
|
std::ofstream ostr{TOKEN_FILENAME, std::fstream::out};
|
||||||
|
ostr << client.getToken() << std::endl;
|
||||||
|
ostr.close();
|
||||||
|
} else {
|
||||||
|
// wrong endpoint or combo
|
||||||
|
puts("Wrong combo !");
|
||||||
|
goto wrong;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
std::string line;
|
||||||
|
std::getline(stream, line);
|
||||||
|
client = Matrix::Client("https://matrix.timoreo.fr", line, nullptr); // &s
|
||||||
|
stream.close();
|
||||||
|
}
|
||||||
|
auto userid = client.getUserId();
|
||||||
|
if(userid.empty()){
|
||||||
|
puts("Userid is empty ! Wrong token ?");
|
||||||
|
goto wrong;
|
||||||
|
}
|
||||||
|
std::cout << "Logged in as " << userid << std::endl;
|
||||||
|
// Load encryption here
|
||||||
|
acc = load_account(client);
|
||||||
|
client.setRoomInfoCallback([](std::string roomId, Matrix::RoomInfo info){
|
||||||
|
consoleSelect(bottom);
|
||||||
|
printf("Joined room %s named %s\n", roomId.c_str(), info.name.c_str());
|
||||||
|
});
|
||||||
|
client.setEventCallback([](std::string roomId, json_t* event){
|
||||||
|
consoleSelect(bottom);
|
||||||
|
printf("Event in room %s\n", roomId.c_str());
|
||||||
|
printf("%s\n", json_dumps(event, JSON_ENSURE_ASCII));
|
||||||
|
});
|
||||||
|
client.startSyncLoop();
|
||||||
|
}
|
||||||
|
wrong:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
client.stopSyncLoop();
|
||||||
|
// DO NOT LOGOUT, KEEP ENCRYPTION KEYS
|
||||||
|
free(acc);
|
||||||
|
gfxExit();
|
||||||
|
fsExit();
|
||||||
}
|
}
|
Loading…
Reference in a new issue