diff --git a/gresource.xml b/gresource.xml
index 89c2c70..3408746 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -17,5 +17,7 @@
sync_parameters.csv
+ hash_list.csv
+ shell_list.csv
\ No newline at end of file
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 2ad27d2..e0daa2d 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -40,6 +40,8 @@ set(DEPENDFILES
../ubl-settings-usergroups-confirmation.glade
../ubl-settings-usergroups-system-deletion-confirmation.glade
../sync_parameters.csv
+ ../csv/hash_list.csv
+ ../csv/shell_list.csv
../gresource.xml
../ubl-settings-usergroups.css
)
diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c
index e7d7d33..370ba94 100644
--- a/source/ubl-settings-usergroups-settings.c
+++ b/source/ubl-settings-usergroups-settings.c
@@ -630,7 +630,7 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
}
}
int hash_size=0;
- config_str hash_algos = yon_file_open(hash_list_path,&hash_size);
+ config_str hash_algos = yon_resource_open_file(hash_list_path,&hash_size);
if (main_config.hash_default_id==-1){
int size;
config_str ret = yon_config_load(get_default_hash_command,&size);
diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c
index 6039b74..f2548b3 100644
--- a/source/ubl-settings-usergroups-user.c
+++ b/source/ubl-settings-usergroups-user.c
@@ -167,7 +167,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
on_UID_update(NULL,window);
int shell_size=0;
- config_str shells = yon_file_open(shell_list_path,&shell_size);
+ config_str shells = yon_resource_open_file(shell_list_path,&shell_size);
for (int i=1;iWindow),GTK_WINDOW(window->Window),SAVE_USER_INFO_LABEL,icon_path,"filechooser_window");
+ GtkFileFilter *filter = gtk_file_filter_new();
+ gtk_file_filter_add_pattern(filter,"*.pdf");
+ gtk_file_filter_set_name(filter,"PDF");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter);
+ if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){
+ char *path = dialog->last_success_selection;
+ char *command = user_info_pdf_command(window->target_user,path);
+ yon_launch(command);
+ free(command);
+ free(dialog);
+ }
+}
+
+void on_user_info_save(GtkWidget *,yon_user_info_window *window){
+ filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SAVE);
+ yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window),SAVE_USER_INFO_LABEL,icon_path,"filechooser_window");
+ GtkFileFilter *filter = gtk_file_filter_new();
+ gtk_file_filter_add_pattern(filter,"*.txt");
+ gtk_file_filter_set_name(filter,"TXT");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter);
+ if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){
+ char *path = dialog->last_success_selection;
+ char *command = user_info_txt_command(window->target_user,path);
+ yon_launch(command);
+ free(command);
+ free(dialog);
+ }
+}
+
+yon_user_info_window *yon_user_info_window_new(){
+ yon_user_info_window *window = new(yon_user_info_window);
+ GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_debug);
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->Terminal = yon_gtk_builder_get_widget(builder,"DebuggerTerminal");
+ window->HeaderImage = yon_gtk_builder_get_widget(builder,"HeaderImage");
+ window->PrintButton = gtk_button_new_from_icon_name(icon_path_print,GTK_ICON_SIZE_BUTTON);
+ window->SaveButton = gtk_button_new_from_icon_name(icon_path_save,GTK_ICON_SIZE_BUTTON);
+ window->target_user = NULL;
+
+ g_signal_connect(G_OBJECT(window->PrintButton),"clicked",G_CALLBACK(on_user_info_print),window);
+ g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_user_info_save),window);
+
+ gtk_image_set_from_icon_name(GTK_IMAGE(window->HeaderImage),icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_tooltip_markup(window->PrintButton,PRINT_TOOLTIP_LABEL);
+ gtk_widget_set_tooltip_markup(window->SaveButton,SAVE_LABEL);
+ GtkWidget *titlebar = gtk_window_get_titlebar(GTK_WINDOW(window->Window));
+ gtk_header_bar_pack_end(GTK_HEADER_BAR(titlebar),window->SaveButton);
+ gtk_header_bar_pack_end(GTK_HEADER_BAR(titlebar),window->PrintButton);
+ gtk_widget_show(window->PrintButton);
+ gtk_widget_show(window->SaveButton);
+ return window;
+}
+
+void on_user_info(GtkWidget *,main_window *widgets){
+ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
+ char *target_user = NULL;
+ GtkTreeIter iter;
+ GtkTreeModel *model = NULL;
+ switch (page){
+ case 1:
+ case 3:{
+ return;
+ } break;
+ case 0:{
+ if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){
+ return;
+ }
+ } break;
+ case 2:{
+ if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
+ return;
+ }
+ }
+ }
+ gtk_tree_model_get(model,&iter,2,&target_user,-1);
+ char *command = user_info_command(target_user);
+ // yon_terminal_window_launch(GTK_WINDOW(widgets->Window),command,yon_char_get_localised_from_lib(SUCCESS_LABEL),yon_char_get_localised_from_lib(FAIL_LABEL));
+ yon_user_info_window *window = yon_user_info_window_new();
+ window->target_user = target_user;
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),USER_INFO_LABEL,icon_path,"user_info_window");
+ yon_terminal_integrated_start(window->Terminal,command);
+ gtk_widget_show(window->Window);
+}
+
void on_config_update(GtkWidget *, main_window *widgets){
if (main_config.load_mode==YON_CONFIG_GLOBAL){
on_config_global_load(NULL,widgets);
@@ -2103,6 +2190,7 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi
gtk_widget_show(widgets->AddButton);
gtk_widget_show(widgets->EditButton);
gtk_widget_show(widgets->DeleteButton);
+ gtk_widget_show(widgets->UserInfoButton);
gtk_widget_hide(widgets->UserAddToConfigButton);
GtkTreeModel *model = GTK_TREE_MODEL(widgets->UsersList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){
@@ -2117,6 +2205,7 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi
gtk_widget_show(widgets->EditButton);
gtk_widget_show(widgets->DeleteButton);
gtk_widget_hide(widgets->UserAddToConfigButton);
+ gtk_widget_hide(widgets->UserInfoButton);
GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){
gtk_widget_set_sensitive(widgets->EditButton,1);
@@ -2128,6 +2217,7 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi
} else if (num==2){
gtk_widget_hide(widgets->AddButton);
gtk_widget_hide(widgets->EditButton);
+ gtk_widget_show(widgets->UserInfoButton);
gtk_widget_show(widgets->UserAddToConfigButton);
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
@@ -2142,6 +2232,7 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi
gtk_widget_hide(widgets->AddButton);
gtk_widget_hide(widgets->EditButton);
gtk_widget_show(widgets->UserAddToConfigButton);
+ gtk_widget_hide(widgets->UserInfoButton);
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
gtk_widget_set_sensitive(widgets->UserAddToConfigButton,1);
@@ -2213,6 +2304,7 @@ main_window *yon_main_window_complete(main_window *widgets){
widgets->EditButton=yon_gtk_builder_get_widget(builder,"EditButton");
widgets->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton");
widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton");
+ widgets->UserInfoButton=yon_gtk_builder_get_widget(builder,"UserInfoButton");
widgets->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree");
widgets->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
@@ -2247,6 +2339,7 @@ main_window *yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->button2),"clicked",G_CALLBACK(on_ubl_settings_usergroups_additional_settings_open),widgets);
g_signal_connect(G_OBJECT(widgets->UserAddToConfigButton),"clicked",G_CALLBACK(on_user_sync_with_config),widgets);
g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_config_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserInfoButton),"clicked",G_CALLBACK(on_user_info),widgets);
g_signal_connect(G_OBJECT(widgets->SavingSettingsButton),"clicked",G_CALLBACK(on_saving_settings_open),widgets);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets);
g_signal_connect(G_OBJECT(widgets->UsersTree),"cursor-changed",G_CALLBACK(on_selection_changed),widgets);
diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h
index fedaf42..b93b8c4 100644
--- a/source/ubl-settings-usergroups.h
+++ b/source/ubl-settings-usergroups.h
@@ -39,6 +39,9 @@
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubl-settings-usergroups"
#define sync_parameters_path "resource:///com/ublinux/csv/sync_parameters.csv"
+
+#define icon_path_print "com.ublinux.libublsettingsui-gtk3.print-symbolic"
+#define icon_path_save "com.ublinux.libublsettingsui-gtk3.save-symbolic"
#define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-usergroups"
@@ -73,8 +76,8 @@
#define default_home_initiator_path "/etc/default/useradd"
#define user_shadow_command "cat /etc/shadow"
-#define hash_list_path "/usr/share/ubl-settings-usergroups/csv/hash_list.csv"
-#define shell_list_path "/usr/share/ubl-settings-usergroups/csv/shell_list.csv"
+#define hash_list_path "resource:///com/ublinux/csv/hash_list.csv"
+#define shell_list_path "resource:///com/ublinux/csv/shell_list.csv"
#define USERADD(user) yon_char_unite("USERADD[",user,"]",NULL)
#define GROUPADD(group) yon_char_unite("GROUPADD[",group,"]",NULL)
@@ -98,6 +101,10 @@
#define password_hash_get_command(passwd) yon_char_append("mkpasswd2 ",passwd)
+#define user_info_command(target) yon_char_append("echo ",target)
+#define user_info_pdf_command(target,path) yon_char_unite("echo ",target,path,NULL)
+#define user_info_txt_command(target,path) yon_char_unite("echo ",target,path,NULL)
+
#define config_get_command(source) yon_char_unite("ubconfig --source ",source," get users DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC",NULL),yon_char_unite("ubconfig --source ",source," get [system] SYSTEMBOOT_STATEMODE",NULL),yon_char_unite("ubconfig --source ",source," get [save] SAVE_ROOTCOPY_CHANGES",NULL)
#define config_get_default_command "ubconfig --source default get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM"
@@ -210,6 +217,7 @@ typedef struct {
GtkWidget *EditButton;
GtkWidget *DeleteButton;
GtkWidget *UpdateButton;
+ GtkWidget *UserInfoButton;
GtkWidget *UsersTree;
GtkWidget *GroupsTree;
GtkWidget *MainNotebook;
@@ -357,6 +365,16 @@ typedef struct{
GtkWidget *NoEncriptionCheck;
} ubl_settings_usergroups_password_window;
+typedef struct {
+ GtkWidget *Window;
+ GtkWidget *Terminal;
+ GtkWidget *HeaderImage;
+ GtkWidget *PrintButton;
+ GtkWidget *SaveButton;
+
+ char *target_user;
+} yon_user_info_window;
+
typedef struct{
GtkListStore *liststore1;
GtkListStore *liststore2;
@@ -595,4 +613,8 @@ gboolean on_encrypt_update(dictionary *dict);
void *yon_passwords_encrypt(dictionary *dict);
gboolean on_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets);
void on_filter_changed(GtkWidget *self, main_window *widgets);
+void on_user_info(GtkWidget *,main_window *widgets);
+yon_user_info_window *yon_user_info_window_new();
+void on_user_info_save(GtkWidget *,yon_user_info_window *window);
+void on_user_info_print(GtkWidget *,yon_user_info_window *window);
#endif
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 6a4c463..58b7ca2 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -28,6 +28,9 @@
#define EXTRA_OPTIONS_USER_LABEL _("Extra options:")
#define CANCEL_LABEL _("Cancel")
#define OK_LABEL _("Ok")
+#define PRINT_TOOLTIP_LABEL _("Print")
+#define USER_INFO_LABEL _("User information")
+#define SAVE_USER_INFO_LABEL _("Save user information")
#define BLOCK_LABEL _("Block")
#define MAIN_GROUP_LABEL _("Main\ngroup")
diff --git a/ubl-settings-usergroups-password.glade b/ubl-settings-usergroups-password.glade
index 7e38555..50bce69 100644
--- a/ubl-settings-usergroups-password.glade
+++ b/ubl-settings-usergroups-password.glade
@@ -261,7 +261,7 @@