[feat] password modification supported

This commit is contained in:
dijunkun
2025-06-20 17:50:04 +08:00
parent a31ca21ef4
commit 41c27139a0
7 changed files with 62 additions and 33 deletions

View File

@@ -174,10 +174,8 @@ int Render::LocalWindow() {
regenerate_password_ ? ICON_FA_SPINNER : ICON_FA_ARROWS_ROTATE,
ImVec2(22, 38))) {
regenerate_password_ = true;
password_inited_ = false;
regenerate_password_start_time_ = ImGui::GetTime();
LeaveConnection(peer_, client_id_);
is_create_connection_ = false;
}
if (ImGui::GetTime() - regenerate_password_start_time_ > 0.3f) {
regenerate_password_ = false;
@@ -259,8 +257,22 @@ int Render::LocalWindow() {
focus_on_input_widget_ = true;
} else {
show_reset_password_window_ = false;
memset(&password_saved_, 0, sizeof(password_saved_));
strncpy(password_saved_, new_password_,
sizeof(password_saved_) - 1);
password_saved_[sizeof(password_saved_) - 1] = '\0';
std::string client_id_with_password =
std::string(client_id_) + "@" + password_saved_;
strncpy(client_id_with_password_, client_id_with_password.c_str(),
sizeof(client_id_with_password_) - 1);
client_id_with_password_[sizeof(client_id_with_password_) - 1] =
'\0';
SaveSettingsIntoCacheFile();
LeaveConnection(peer_, client_id_);
is_create_connection_ = false;
DestroyPeer(&peer_);
focus_on_input_widget_ = true;
}
}

View File

@@ -165,7 +165,9 @@ int Render::ConnectTo(const std::string &remote_id, const char *password,
sizeof(props->remote_password_) - 1);
props->remote_password_[sizeof(props->remote_password_) - 1] = '\0';
}
ret = JoinConnection(props->peer_, remote_id.c_str(), password);
std::string remote_id_with_pwd = remote_id + "@" + password;
ret = JoinConnection(props->peer_, remote_id_with_pwd.c_str());
if (0 == ret) {
props->rejoin_ = false;
} else {

View File

@@ -177,10 +177,10 @@ int Render::SaveSettingsIntoCacheFile() {
return -1;
}
memset(&cd_cache_.client_id, 0, sizeof(cd_cache_.client_id));
memcpy(cd_cache_.client_id, client_id_, sizeof(client_id_));
memset(&cd_cache_.password, 0, sizeof(cd_cache_.password));
memcpy(cd_cache_.password, password_saved_, sizeof(password_saved_));
memset(&cd_cache_.client_id_with_password, 0,
sizeof(cd_cache_.client_id_with_password));
memcpy(cd_cache_.client_id_with_password, client_id_with_password_,
sizeof(client_id_with_password_));
memcpy(&cd_cache_.language, &language_button_value_,
sizeof(language_button_value_));
memcpy(&cd_cache_.video_quality, &video_quality_button_value_,
@@ -246,11 +246,28 @@ int Render::LoadSettingsFromCacheFile() {
cd_cache_file.close();
cd_cache_mutex_.unlock();
memset(&client_id_, 0, sizeof(client_id_));
memcpy(client_id_, cd_cache_.client_id, sizeof(client_id_));
memcpy(password_saved_, cd_cache_.password, sizeof(password_saved_));
if (0 != strcmp(password_saved_, "") && 7 == sizeof(password_saved_)) {
password_inited_ = true;
memset(&client_id_with_password_, 0, sizeof(client_id_with_password_));
memcpy(client_id_with_password_, cd_cache_.client_id_with_password,
sizeof(client_id_with_password_));
if (strchr(client_id_with_password_, '@') != nullptr) {
std::string id, password;
const char* at_pos = strchr(client_id_with_password_, '@');
if (at_pos == nullptr) {
id = client_id_with_password_;
password.clear();
} else {
id.assign(client_id_with_password_, at_pos - client_id_with_password_);
password = at_pos + 1;
}
memset(&client_id_, 0, sizeof(client_id_));
strncpy(client_id_, id.c_str(), sizeof(client_id_) - 1);
client_id_[sizeof(client_id_) - 1] = '\0';
memset(&password_saved_, 0, sizeof(password_saved_));
strncpy(password_saved_, password.c_str(), sizeof(password_saved_) - 1);
password_saved_[sizeof(password_saved_) - 1] = '\0';
}
memcpy(aes128_key_, cd_cache_.key, sizeof(cd_cache_.key));
@@ -461,7 +478,7 @@ int Render::CreateConnectionPeer() {
params_.on_connection_status = OnConnectionStatusCb;
params_.net_status_report = NetStatusReport;
params_.user_id = client_id_;
params_.user_id = client_id_with_password_;
params_.user_data = this;
peer_ = CreatePeer(&params_);
@@ -937,6 +954,10 @@ void Render::InitializeMainWindow() {
void Render::MainLoop() {
while (!exit_) {
if (!peer_) {
CreateConnectionPeer();
}
UpdateLabels();
ProcessSdlEvent();
HandleRecentConnections();
@@ -949,13 +970,6 @@ void Render::MainLoop() {
UpdateInteractions();
if (SignalStatus::SignalConnected == signal_status_ &&
!is_create_connection_ && password_inited_) {
LOG_INFO("Connected with signal server, create p2p connection");
is_create_connection_ =
CreateConnection(peer_, client_id_, password_saved_) ? false : true;
}
if (need_to_send_host_info_) {
RemoteAction remote_action;
remote_action.i.display_num = display_info_list_.size();

View File

@@ -236,8 +236,7 @@ class Render {
private:
struct CDCache {
char client_id[10];
char password[7];
char client_id_with_password[17];
int language;
int video_quality;
int video_encode_format;
@@ -364,11 +363,9 @@ class Render {
bool password_validating_ = false;
uint32_t password_validating_time_ = 0;
bool show_settings_window_ = false;
bool is_create_connection_ = false;
bool rejoin_ = false;
bool local_id_copied_ = false;
bool show_password_ = true;
bool password_inited_ = false;
bool regenerate_password_ = false;
bool show_about_window_ = false;
bool show_connection_status_window_ = false;
@@ -407,6 +404,7 @@ class Render {
uint64_t last_frame_time_;
char client_id_[10] = "";
char client_id_display_[12] = "";
char client_id_with_password_[17] = "";
char password_saved_[7] = "";
int language_button_value_ = 0;
int video_quality_button_value_ = 0;

View File

@@ -474,7 +474,7 @@ void Render::NetStatusReport(const char *client_id, size_t client_id_size,
return;
}
if (strchr(client_id, '@') != nullptr) {
if (strchr(client_id, '@') != nullptr && strchr(user_id, '-') == nullptr) {
std::string id, password;
const char *at_pos = strchr(client_id, '@');
if (at_pos == nullptr) {
@@ -485,8 +485,6 @@ void Render::NetStatusReport(const char *client_id, size_t client_id_size,
password = at_pos + 1;
}
LOG_ERROR("{}:{}", id, password);
memset(&render->client_id_, 0, sizeof(render->client_id_));
strncpy(render->client_id_, id.c_str(), sizeof(render->client_id_) - 1);
render->client_id_[sizeof(render->client_id_) - 1] = '\0';
@@ -495,12 +493,18 @@ void Render::NetStatusReport(const char *client_id, size_t client_id_size,
strncpy(render->password_saved_, password.c_str(),
sizeof(render->password_saved_) - 1);
render->password_saved_[sizeof(render->password_saved_) - 1] = '\0';
LOG_INFO("Use client id [{}] and save id into cache file", client_id);
memset(&render->client_id_with_password_, 0,
sizeof(render->client_id_with_password_));
strncpy(render->client_id_with_password_, id.c_str(),
sizeof(render->client_id_with_password_) - 1);
render->client_id_with_password_[sizeof(render->client_id_with_password_) -
1] = '\0';
LOG_INFO("Use client id [{}] and save id into cache file", id);
render->SaveSettingsIntoCacheFile();
}
LOG_ERROR("{}", user_id);
std::string remote_id(user_id, user_id_size);
if (render->client_properties_.find(remote_id) ==
render->client_properties_.end()) {

View File

@@ -237,7 +237,6 @@ int Render::SettingWindow() {
if (!stream_window_inited_) {
LOG_INFO("Recreate peer instance");
DestroyPeer(&peer_);
is_create_connection_ = false;
CreateConnectionPeer();
}
}