User information window added #262

Merged
asmeron merged 6 commits from YanTheKaller/ubl-settings-usergroups:master into master 3 months ago

@ -17,5 +17,7 @@
</gresource>
<gresource prefix="/com/ublinux/csv">
<file>sync_parameters.csv</file>
<file>hash_list.csv</file>
<file>shell_list.csv</file>
</gresource>
</gresources>

@ -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
)

@ -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);

@ -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;i<shell_size;i++){
if (shells[i][0]!='!'){
if (shells[i][strlen(shells[i])-1]=='\n') shells[i][strlen(shells[i])-1]='\0';

@ -14,8 +14,8 @@ int yon_load_proceed(YON_CONFIG_TYPE type){
yon_config_load_config(type,config_get_command("global"),NULL);
}
if (type==YON_CONFIG_LOCAL){
yon_config_load_config(type,config_get_command("system"),NULL);
yon_config_load_config(YON_CONFIG_GLOBAL,config_get_global_only_parameters,NULL);
yon_config_load_config(type,config_get_command("system"),NULL);
yon_config_set_status(DEFAULTPASSWD_parameter,-2);
yon_config_set_status(DEFAULTROOTPASSWD_parameter,-2);
int size;
@ -1854,6 +1854,93 @@ void on_main_delete(GtkWidget *, main_window *widgets){
}
}
void on_user_info_print(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,"*.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);

@ -40,6 +40,9 @@
#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

@ -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")

@ -261,7 +261,7 @@
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Accept</property>
<property name="label" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2
<!-- Generated with glade 3.40.0
ubl-settings-usergroups -
Copyright (C) UBGroup
@ -121,6 +121,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.move-in-symbolic</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.important-symbolic</property>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name gboolean1 -->
@ -194,6 +199,34 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="margin-top">2</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="UpdateButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update users and groups</property>
<property name="image">image13</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button2">
<property name="visible">True</property>
@ -308,12 +341,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
</packing>
</child>
<child>
<object class="GtkButton" id="UpdateButton">
<object class="GtkButton" id="UserInfoButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update users and groups</property>
<property name="image">image13</property>
<property name="tooltip-text" translatable="yes">User information</property>
<property name="image">image6</property>
<style>
<class name="thin"/>
</style>

Loading…
Cancel
Save