37 #include <glib/gi18n.h> 39 #include <glib/gprintf.h> 50 #if SODIUM_VERSION_INT >= 90200 52 #define GET_OBJ(object_name) gtk_builder_get_object(remmina_unlock_dialog->builder, object_name) 61 timer = g_timer_new();
62 REMMINA_DEBUG(
"Validity timer for Remmina password started");
70 REMMINA_DEBUG(
"Validity timer for Remmina password reset");
77 g_timer_destroy(
timer);
86 gchar *unlock_password;
87 const gchar *entry_passwd;
91 entry_passwd = gtk_entry_get_text(remmina_unlock_dialog->
entry_unlock);
96 REMMINA_DEBUG(
"Password verified");
98 remmina_unlock_dialog->
retval = TRUE;
100 REMMINA_WARNING (
"The password is wrong. Reset it by editing the remmina.pref file by hand");
102 remmina_unlock_dialog->
retval = FALSE;
104 gtk_dialog_response(remmina_unlock_dialog->
dialog, GTK_RESPONSE_ACCEPT);
109 TRACE_CALL(__func__);
110 gtk_dialog_response(remmina_unlock_dialog->
dialog, GTK_RESPONSE_CANCEL);
115 TRACE_CALL(__func__);
117 gdouble unlock_timeout;
118 gdouble elapsed = 0.0;
119 gboolean lock = FALSE;
132 elapsed = g_timer_elapsed(
timer, NULL);
138 REMMINA_DEBUG (
"unlock_timeout = %f", unlock_timeout);
139 REMMINA_DEBUG (
"elapsed = %f", elapsed);
140 REMMINA_DEBUG (
"INT unlock_timeout = %d", (
int)unlock_timeout);
141 REMMINA_DEBUG (
"INT elapsed = %d", (
int)elapsed);
143 if ((elapsed) && ((
int)unlock_timeout - elapsed) <= 0) {
150 REMMINA_DEBUG(
"Based on settings and current status, the unlocking dialog is set to %d",
unlocked);
153 REMMINA_DEBUG (
"No need to request a password");
159 remmina_unlock_dialog->
retval = FALSE;
162 remmina_unlock_dialog->
dialog = GTK_DIALOG(gtk_builder_get_object(remmina_unlock_dialog->
builder,
"RemminaUnlockDialog"));
164 gtk_window_set_transient_for(GTK_WINDOW(remmina_unlock_dialog->
dialog), parent);
166 remmina_unlock_dialog->
entry_unlock = GTK_ENTRY(GET_OBJ(
"entry_unlock"));
167 gtk_entry_set_activates_default(GTK_ENTRY(remmina_unlock_dialog->
entry_unlock), TRUE);
168 remmina_unlock_dialog->
button_unlock = GTK_BUTTON(GET_OBJ(
"button_unlock"));
169 gtk_widget_set_can_default(GTK_WIDGET(remmina_unlock_dialog->
button_unlock), TRUE);
170 gtk_widget_grab_default(GTK_WIDGET(remmina_unlock_dialog->
button_unlock));
173 g_signal_connect(remmina_unlock_dialog->
button_unlock,
"clicked",
175 g_signal_connect(remmina_unlock_dialog->button_unlock_cancel,
"clicked",
177 g_signal_connect (remmina_unlock_dialog->dialog,
"close",
181 gtk_builder_connect_signals(remmina_unlock_dialog->builder, NULL);
183 g_object_set_data_full (G_OBJECT(remmina_unlock_dialog->dialog),
"builder", remmina_unlock_dialog->builder, g_object_unref);
185 gchar *unlock_password = NULL;
188 if ((unlock_password == NULL) || (g_strcmp0(unlock_password,
"") == 0)) {
189 if (
remmina_passwd (GTK_WINDOW(remmina_unlock_dialog->dialog), &unlock_password)) {
192 remmina_unlock_dialog->retval = TRUE;
194 remmina_unlock_dialog->retval = FALSE;
198 int result = GTK_RESPONSE_NONE;
199 if (g_strcmp0(unlock_password,
"") != 0) {
200 result = gtk_dialog_run (GTK_DIALOG (remmina_unlock_dialog->dialog));
202 remmina_unlock_dialog->retval = lock;
206 case GTK_RESPONSE_ACCEPT:
207 if (!remmina_unlock_dialog->retval)
208 REMMINA_DEBUG (
"Wrong password");
210 REMMINA_DEBUG (
"Correct password. Unlocking…");
213 REMMINA_DEBUG (
"retval: %d", remmina_unlock_dialog->retval);
217 remmina_unlock_dialog->retval = FALSE;
219 REMMINA_DEBUG (
"Password not requested. Return value: %d", remmina_unlock_dialog->retval);
223 rc = remmina_unlock_dialog->retval;
225 g_free(unlock_password), unlock_password = NULL;
226 gtk_widget_destroy(GTK_WIDGET(remmina_unlock_dialog->dialog));
227 remmina_unlock_dialog->dialog = NULL;
static void remmina_unlock_cancel_clicked(GtkButton *btn, gpointer user_data)
GtkButton * button_unlock
gboolean remmina_passwd(GtkWindow *parent, gchar **unlock_password)
void remmina_pref_set_value(const gchar *key, const gchar *value)
gchar * remmina_pref_get_value(const gchar *key)
gint remmina_sodium_pwhash_str_verify(const char *key, const char *pass)
GtkButton * button_unlock_cancel
static void remmina_unlock_unlock_clicked(GtkButton *btn, gpointer user_data)
static RemminaUnlockDialog * remmina_unlock_dialog
static void remmina_unlock_timer_reset(gpointer user_data)
GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)
static void remmina_unlock_timer_init()
void remmina_unlock_timer_destroy()
gint remmina_unlock_new(GtkWindow *parent)