From 7848cef8ea2f1345c08200d9a817404b437c53a5 Mon Sep 17 00:00:00 2001 From: tbrehm Date: Fri, 13 Jun 2008 19:53:20 +0000 Subject: [PATCH] Added editor for the server config ini. --- .../web/admin/form/server_config.tform.php | 484 ++++++++++++++++++ .../web/admin/lib/lang/en_server_config.lng | 36 ++ .../admin/lib/lang/en_server_config_list.lng | 10 + interface/web/admin/lib/module.conf.php | 5 + .../web/admin/list/server_config.list.php | 60 +++ interface/web/admin/server_config_del.php | 51 ++ interface/web/admin/server_config_edit.php | 96 ++++ interface/web/admin/server_config_list.php | 53 ++ .../templates/server_config_fastcgi_edit.htm | 40 ++ .../templates/server_config_getmail_edit.htm | 16 + .../templates/server_config_jailkit_edit.htm | 24 + .../admin/templates/server_config_list.htm | 21 + .../templates/server_config_mail_edit.htm | 64 +++ .../templates/server_config_server_edit.htm | 32 ++ .../templates/server_config_web_edit.htm | 28 + 15 files changed, 1020 insertions(+) create mode 100644 interface/web/admin/form/server_config.tform.php create mode 100644 interface/web/admin/lib/lang/en_server_config.lng create mode 100644 interface/web/admin/lib/lang/en_server_config_list.lng create mode 100644 interface/web/admin/list/server_config.list.php create mode 100644 interface/web/admin/server_config_del.php create mode 100644 interface/web/admin/server_config_edit.php create mode 100644 interface/web/admin/server_config_list.php create mode 100644 interface/web/admin/templates/server_config_fastcgi_edit.htm create mode 100644 interface/web/admin/templates/server_config_getmail_edit.htm create mode 100644 interface/web/admin/templates/server_config_jailkit_edit.htm create mode 100644 interface/web/admin/templates/server_config_list.htm create mode 100644 interface/web/admin/templates/server_config_mail_edit.htm create mode 100644 interface/web/admin/templates/server_config_server_edit.htm create mode 100644 interface/web/admin/templates/server_config_web_edit.htm diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php new file mode 100644 index 0000000000..f3e2a5a581 --- /dev/null +++ b/interface/web/admin/form/server_config.tform.php @@ -0,0 +1,484 @@ + 0 id must match with id of current user +$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user +$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete + +$form["tabs"]['server'] = array ( + 'title' => "Server", + 'width' => 70, + 'template' => "templates/server_config_server_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'ip_address' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '192.168.0.100', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'ip_address_error_empty'), + ), + 'value' => '', + 'width' => '15', + 'maxlength' => '255' + ), + 'netmask' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '255.255.255.0', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'netmask_error_empty'), + ), + 'value' => '', + 'width' => '15', + 'maxlength' => '255' + ), + 'gateway' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '192.168.0.1', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'gateway_error_empty'), + ), + 'value' => '', + 'width' => '15', + 'maxlength' => '255' + ), + 'hostname' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => 'server1.example.com', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'hostname_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'nameservers' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '192.168.0.1,192.168.0.2', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'nameservers_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + +$form["tabs"]['mail'] = array ( + 'title' => "Mail", + 'width' => 60, + 'template' => "templates/server_config_mail_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'module' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => '', + 'value' => array('postfix_mysql' => 'postfix_mysql') + ), + 'maildir_path' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '/home/vmail/[domain]/[localpart]/', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'maildir_path_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'homedir_path' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '/home/vmail/', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'homedir_path_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'mailuser_uid' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '5000', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'mailuser_uid_error_empty'), + ), + 'value' => '', + 'width' => '10', + 'maxlength' => '255' + ), + 'mailuser_gid' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '5000', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'mailuser_gid_error_empty'), + ), + 'value' => '', + 'width' => '10', + 'maxlength' => '255' + ), + 'mailuser_name' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => 'vmail', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'mailuser_name_error_empty'), + ), + 'value' => '', + 'width' => '10', + 'maxlength' => '255' + ), + 'mailuser_group' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => 'vmail', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'mailuser_group_error_empty'), + ), + 'value' => '', + 'width' => '10', + 'maxlength' => '255' + ), + 'relayhost' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'relayhost_user' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'relayhost_password' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'mailbox_size_limit' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '0', + 'value' => '', + 'width' => '10', + 'maxlength' => '15' + ), + 'message_size_limit' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '0', + 'value' => '', + 'width' => '10', + 'maxlength' => '15' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + +$form["tabs"]['getmail'] = array ( + 'title' => "Getmail", + 'width' => 80, + 'template' => "templates/server_config_getmail_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'getmail_config_dir' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'getmail_config_dir_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + +$form["tabs"]['web'] = array ( + 'title' => "Web", + 'width' => 60, + 'template' => "templates/server_config_web_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'website_path' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'website_path_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'website_symlinks' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'website_symlinks_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'vhost_conf_dir' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'vhost_conf_dir_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'vhost_conf_enabled_dir' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'vhost_conf_enabled_dir_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + +$form["tabs"]['fastcgi'] = array ( + 'title' => "FastCGI", + 'width' => 80, + 'template' => "templates/server_config_fastcgi_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'fastcgi_starter_path' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_starter_path_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_starter_script' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_starter_script_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_alias' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_alias_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_phpini_path' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_phpini_path_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_children' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_children_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_max_requests' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_max_requests_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fastcgi_bin' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'fastcgi_bin_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + + +$form["tabs"]['jailkit'] = array ( + 'title' => "Jailkit", + 'width' => 80, + 'template' => "templates/server_config_jailkit_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'jailkit_chroot_home' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'jailkit_chroot_home_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'jailkit_chroot_app_sections' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'jailkit_chroot_app_sections_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '1000' + ), + 'jailkit_chroot_app_programs' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'jailkit_chroot_app_programs_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '1000' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + + + + + + + + + + + + + + + +?> \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng new file mode 100644 index 0000000000..5c046b84b2 --- /dev/null +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_server_config_list.lng b/interface/web/admin/lib/lang/en_server_config_list.lng new file mode 100644 index 0000000000..be6f14f2c9 --- /dev/null +++ b/interface/web/admin/lib/lang/en_server_config_list.lng @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php index b6d43846e2..8a787a4457 100644 --- a/interface/web/admin/lib/module.conf.php +++ b/interface/web/admin/lib/module.conf.php @@ -50,6 +50,11 @@ $items[] = array( 'title' => 'Add server', $items[] = array( 'title' => 'Edit server', 'target' => 'content', 'link' => 'admin/server_list.php'); + +$items[] = array( 'title' => 'Server Config', + 'target' => 'content', + 'link' => 'admin/server_config_list.php'); + /* $items[] = array( 'title' => 'Add Server IP', 'target' => 'content', diff --git a/interface/web/admin/list/server_config.list.php b/interface/web/admin/list/server_config.list.php new file mode 100644 index 0000000000..6fc289d407 --- /dev/null +++ b/interface/web/admin/list/server_config.list.php @@ -0,0 +1,60 @@ + "server_name", + 'datatype' => "VARCHAR", + 'formtype' => "TEXT", + 'op' => "like", + 'prefix' => "%", + 'suffix' => "%", + 'width' => "", + 'value' => ""); + + +?> \ No newline at end of file diff --git a/interface/web/admin/server_config_del.php b/interface/web/admin/server_config_del.php new file mode 100644 index 0000000000..67c0096af7 --- /dev/null +++ b/interface/web/admin/server_config_del.php @@ -0,0 +1,51 @@ +auth->check_module_permissions('admin'); + +$app->uses("tform_actions"); +$app->tform_actions->onDelete(); + +?> \ No newline at end of file diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php new file mode 100644 index 0000000000..052c9826c6 --- /dev/null +++ b/interface/web/admin/server_config_edit.php @@ -0,0 +1,96 @@ +auth->check_module_permissions('admin'); + +// Loading classes +$app->uses('tpl,tform,tform_actions'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + + function onShowEdit() { + global $app, $conf; + + if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges'); + + if($app->tform->errorMessage == '') { + $app->uses('ini_parser,getconf'); + + $section = $this->active_tab; + $server_id = $this->id; + + $this->dataRecord = $app->getconf->get_server_config($server_id,$section); + } + + $record = $app->tform->getHTML($this->dataRecord, $this->active_tab,'EDIT'); + + $record['id'] = $this->id; + $app->tpl->setVar($record); + } + + function onUpdateSave($sql) { + global $app; + + if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges'); + $app->uses('ini_parser,getconf'); + + $section = $app->tform->getCurrentTab(); + $server_id = $this->id; + + $server_config_array = $app->getconf->get_server_config($server_id); + $server_config_array[$section] = $app->tform->encode($this->dataRecord,$section); + $server_config_str = $app->ini_parser->get_ini_string($server_config_array); + + $sql = "UPDATE server SET config = '".$app->db->quote($server_config_str)."' WHERE server_id = ".$server_id; + $app->db->query($sql); + } + +} + +$app->tform_actions = new page_action; +$app->tform_actions->onLoad(); + + +?> \ No newline at end of file diff --git a/interface/web/admin/server_config_list.php b/interface/web/admin/server_config_list.php new file mode 100644 index 0000000000..5fc8ddb902 --- /dev/null +++ b/interface/web/admin/server_config_list.php @@ -0,0 +1,53 @@ +auth->check_module_permissions('admin'); + +$app->uses('listform_actions'); +//$app->listform_actions->SQLExtWhere = "wb = 'W'"; + +$app->listform_actions->onLoad(); + + +?> \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_fastcgi_edit.htm b/interface/web/admin/templates/server_config_fastcgi_edit.htm new file mode 100644 index 0000000000..ac972f4b5a --- /dev/null +++ b/interface/web/admin/templates/server_config_fastcgi_edit.htm @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='fastcgi_starter_path_txt'}:
{tmpl_var name='fastcgi_starter_script_txt'}:
{tmpl_var name='fastcgi_alias_txt'}:
{tmpl_var name='fastcgi_phpini_path_txt'}:
{tmpl_var name='fastcgi_children_txt'}:
{tmpl_var name='fastcgi_max_requests_txt'}:
{tmpl_var name='fastcgi_bin_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_getmail_edit.htm b/interface/web/admin/templates/server_config_getmail_edit.htm new file mode 100644 index 0000000000..d2b8abbc21 --- /dev/null +++ b/interface/web/admin/templates/server_config_getmail_edit.htm @@ -0,0 +1,16 @@ + + + + + + + + + + + + +
{tmpl_var name='getmail_config_dir_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_jailkit_edit.htm b/interface/web/admin/templates/server_config_jailkit_edit.htm new file mode 100644 index 0000000000..aae780c3ed --- /dev/null +++ b/interface/web/admin/templates/server_config_jailkit_edit.htm @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='jailkit_chroot_home_txt'}:
{tmpl_var name='jailkit_chroot_app_sections_txt'}:
{tmpl_var name='jailkit_chroot_app_programs_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_list.htm b/interface/web/admin/templates/server_config_list.htm new file mode 100644 index 0000000000..d87841000b --- /dev/null +++ b/interface/web/admin/templates/server_config_list.htm @@ -0,0 +1,21 @@ +

+ + + + + + + + + + + + + + + + + + + +
 
{tmpl_var name="server_name"}[{tmpl_var name='delete_txt'}]
\ No newline at end of file diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm new file mode 100644 index 0000000000..6d40ef3152 --- /dev/null +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='module_txt'}: + +
{tmpl_var name='maildir_path_txt'}:
{tmpl_var name='homedir_path_txt'}:
{tmpl_var name='mailuser_uid_txt'}:
{tmpl_var name='mailuser_gid_txt'}:
{tmpl_var name='mailuser_name_txt'}:
{tmpl_var name='mailuser_group_txt'}:
{tmpl_var name='relayhost_txt'}:
{tmpl_var name='relayhost_user_txt'}:
{tmpl_var name='relayhost_password_txt'}:
{tmpl_var name='mailbox_size_limit_txt'}:
{tmpl_var name='message_size_limit_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm new file mode 100644 index 0000000000..6200fbc6ca --- /dev/null +++ b/interface/web/admin/templates/server_config_server_edit.htm @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='ip_address_txt'}:
{tmpl_var name='netmask_txt'}:
{tmpl_var name='gateway_txt'}:
{tmpl_var name='hostname_txt'}:
{tmpl_var name='nameservers_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm new file mode 100644 index 0000000000..59ca5138b0 --- /dev/null +++ b/interface/web/admin/templates/server_config_web_edit.htm @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='website_path_txt'}:
{tmpl_var name='website_symlinks_txt'}:
{tmpl_var name='vhost_conf_dir_txt'}:
{tmpl_var name='vhost_conf_enabled_dir_txt'}:
  
 
  +
+
+ \ No newline at end of file -- GitLab