From 378d8326bfb5b5713caf74c370dd14fd547f9c21 Mon Sep 17 00:00:00 2001 From: Florian Schaal <florian@schaal-24.de> Date: Tue, 02 Dec 2014 02:27:06 -0500 Subject: [PATCH] disallow spf, dkim, and dmarc-records when editing / creating a TXT record --- interface/web/dns/lib/lang/se_dns_txt.lng | 3 + interface/web/dns/lib/lang/el_dns_txt.lng | 3 + interface/web/dns/lib/lang/ru_dns_txt.lng | 3 + interface/web/dns/lib/lang/en_dns_txt.lng | 5 + interface/web/dns/lib/lang/ja_dns_txt.lng | 3 + interface/web/dns/lib/lang/bg_dns_txt.lng | 3 + interface/web/dns/lib/lang/ro_dns_txt.lng | 3 + interface/web/dns/lib/lang/es_dns_txt.lng | 3 + interface/web/dns/lib/lang/cz_dns_txt.lng | 4 + interface/web/dns/lib/lang/pl_dns_txt.lng | 3 + interface/web/dns/lib/lang/pt_dns_txt.lng | 3 + interface/web/dns/lib/lang/ar_dns_txt.lng | 29 +++++---- interface/web/dns/lib/lang/hu_dns_txt.lng | 3 + interface/web/dns/lib/lang/br_dns_txt.lng | 3 + interface/web/dns/lib/lang/nl_dns_txt.lng | 3 + interface/web/dns/lib/lang/de_dns_txt.lng | 3 + interface/web/dns/lib/lang/fr_dns_txt.lng | 3 + interface/web/dns/lib/lang/fi_dns_txt.lng | 3 + interface/web/dns/lib/lang/hr_dns_txt.lng | 5 + interface/web/dns/lib/lang/tr_dns_txt.lng | 3 + interface/web/dns/lib/lang/id_dns_txt.lng | 3 + interface/web/dns/lib/lang/it_dns_txt.lng | 3 + interface/web/dns/lib/lang/sk_dns_txt.lng | 3 + interface/web/dns/form/dns_txt.tform.php | 31 ++++++---- 24 files changed, 102 insertions(+), 29 deletions(-) diff --git a/interface/web/dns/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php index a4b7d40..6cfb345 100644 --- a/interface/web/dns/form/dns_txt.tform.php +++ b/interface/web/dns/form/dns_txt.tform.php @@ -105,24 +105,31 @@ 'data' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', - 'errmsg'=> 'data_error_empty'), + 'validators' => array ( + 0 => array ( + 'type' => 'NOTEMPTY', + 'errmsg'=> 'data_error_empty' + ), + 1 => array ( + 'type' => 'REGEX', + 'regex' => "/^((?!v=DKIM).)*$/s", + 'errmsg'=> 'invalid_type_dkim' + ), + 2 => array ( + 'type' => 'REGEX', + 'regex' => "/^((?!v=DMARC).)*$/s", + 'errmsg'=> 'invalid_type_dmarc'), + 3 => array ( + 'type' => 'REGEX', + 'regex' => "/^((?!v=spf).)*$/s", + 'errmsg'=> 'invalid_type_spf' + ), ), 'default' => '', 'value' => '', 'width' => '30', 'maxlength' => '255' ), - /* - 'aux' => array ( - 'datatype' => 'INTEGER', - 'formtype' => 'TEXT', - 'default' => '0', - 'value' => '', - 'width' => '10', - 'maxlength' => '10' - ), - */ 'ttl' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', diff --git a/interface/web/dns/lib/lang/ar_dns_txt.lng b/interface/web/dns/lib/lang/ar_dns_txt.lng index 31da6eb..658b0dd 100644 --- a/interface/web/dns/lib/lang/ar_dns_txt.lng +++ b/interface/web/dns/lib/lang/ar_dns_txt.lng @@ -1,16 +1,19 @@ <?php -$wb['server_id_txt'] = 'Server'; -$wb['zone_txt'] = 'Zone'; -$wb['name_txt'] = 'Hostname'; -$wb['type_txt'] = 'type'; -$wb['data_txt'] = 'Text'; -$wb['ttl_txt'] = 'TTL'; -$wb['active_txt'] = 'Active'; -$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.'; -$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.'; -$wb['name_error_empty'] = 'The hostname is empty.'; -$wb['name_error_regex'] = 'The hostname has the wrong format.'; -$wb['data_error_empty'] = 'Text empty'; -$wb['data_error_regex'] = 'Text format invalid'; +$wb["server_id_txt"] = 'Server'; +$wb["zone_txt"] = 'Zone'; +$wb["name_txt"] = 'Hostname'; +$wb["type_txt"] = 'type'; +$wb["data_txt"] = 'Text'; +$wb["ttl_txt"] = 'TTL'; +$wb["active_txt"] = 'Active'; +$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.'; +$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.'; +$wb["name_error_empty"] = 'The hostname is empty.'; +$wb["name_error_regex"] = 'The hostname has the wrong format.'; +$wb["data_error_empty"] = 'Text empty'; +$wb["data_error_regex"] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/bg_dns_txt.lng b/interface/web/dns/lib/lang/bg_dns_txt.lng index 0204296..9d3dd13 100644 --- a/interface/web/dns/lib/lang/bg_dns_txt.lng +++ b/interface/web/dns/lib/lang/bg_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text empty'; $wb['data_error_regex'] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/br_dns_txt.lng b/interface/web/dns/lib/lang/br_dns_txt.lng index 31f0a6d..64003f1 100644 --- a/interface/web/dns/lib/lang/br_dns_txt.lng +++ b/interface/web/dns/lib/lang/br_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Endereço IP em branco'; $wb['data_error_regex'] = 'Endereço IP formato inválido'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/cz_dns_txt.lng b/interface/web/dns/lib/lang/cz_dns_txt.lng index faf3181..bfaa34e 100644 --- a/interface/web/dns/lib/lang/cz_dns_txt.lng +++ b/interface/web/dns/lib/lang/cz_dns_txt.lng @@ -13,5 +13,7 @@ $wb['data_error_empty'] = 'Text je prázdný'; $wb['data_error_regex'] = 'Text má chybný formát'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> - diff --git a/interface/web/dns/lib/lang/de_dns_txt.lng b/interface/web/dns/lib/lang/de_dns_txt.lng index a40fb56..23f4f30 100644 --- a/interface/web/dns/lib/lang/de_dns_txt.lng +++ b/interface/web/dns/lib/lang/de_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text ist leer'; $wb['data_error_regex'] = 'Textformat ungültig'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM ist nicht zulässig. Bitte den DKIM-Button nutzen'; +$wb['invalid_type_dmarc'] = 'DMARC ist nicht zulässig. Bitte den DMARC-Button nutzen'; +$wb['invalid_type_spf'] = 'SPF ist nicht zulässig. Bitte den SPF-Button nutzen'; ?> diff --git a/interface/web/dns/lib/lang/el_dns_txt.lng b/interface/web/dns/lib/lang/el_dns_txt.lng index b2ea2d5..f0915d5 100644 --- a/interface/web/dns/lib/lang/el_dns_txt.lng +++ b/interface/web/dns/lib/lang/el_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Το κείμενο δεν έχει οριστεί'; $wb['data_error_regex'] = 'Κείμενο με μη έγκυρη μορφοποίηση'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/en_dns_txt.lng b/interface/web/dns/lib/lang/en_dns_txt.lng index b70b8b1..658b0dd 100644 --- a/interface/web/dns/lib/lang/en_dns_txt.lng +++ b/interface/web/dns/lib/lang/en_dns_txt.lng @@ -13,4 +13,7 @@ $wb["data_error_empty"] = 'Text empty'; $wb["data_error_regex"] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -?> \ No newline at end of file +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; +?> diff --git a/interface/web/dns/lib/lang/es_dns_txt.lng b/interface/web/dns/lib/lang/es_dns_txt.lng index 3855096..61fcf75 100644 --- a/interface/web/dns/lib/lang/es_dns_txt.lng +++ b/interface/web/dns/lib/lang/es_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Texto vacío.'; $wb['data_error_regex'] = 'Formato de texto no válido'; $wb['ttl_range_error'] = 'TTL mínimo es 60 segundos'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/fi_dns_txt.lng b/interface/web/dns/lib/lang/fi_dns_txt.lng index c321dcc..2060040 100755 --- a/interface/web/dns/lib/lang/fi_dns_txt.lng +++ b/interface/web/dns/lib/lang/fi_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Tekstikenttä on tyhjä'; $wb['data_error_regex'] = 'Tekstikenttä on vääränlainen'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/fr_dns_txt.lng b/interface/web/dns/lib/lang/fr_dns_txt.lng index 829c4fc..333dd30 100644 --- a/interface/web/dns/lib/lang/fr_dns_txt.lng +++ b/interface/web/dns/lib/lang/fr_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Le texte est vide'; $wb['data_error_regex'] = 'Le format du texte est invalide'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/hr_dns_txt.lng b/interface/web/dns/lib/lang/hr_dns_txt.lng index 88bb5e1..349f9f7 100644 --- a/interface/web/dns/lib/lang/hr_dns_txt.lng +++ b/interface/web/dns/lib/lang/hr_dns_txt.lng @@ -13,6 +13,7 @@ $wb['data_error_empty'] = 'TXT polje je prazno'; $wb['data_error_regex'] = 'Neispravan format TXT zapisa'; $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> - - diff --git a/interface/web/dns/lib/lang/hu_dns_txt.lng b/interface/web/dns/lib/lang/hu_dns_txt.lng index 97d5d29..67b57cd 100644 --- a/interface/web/dns/lib/lang/hu_dns_txt.lng +++ b/interface/web/dns/lib/lang/hu_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text empty'; $wb['data_error_regex'] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/id_dns_txt.lng b/interface/web/dns/lib/lang/id_dns_txt.lng index cf4660f..b6c2647 100644 --- a/interface/web/dns/lib/lang/id_dns_txt.lng +++ b/interface/web/dns/lib/lang/id_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Teks kosong'; $wb['data_error_regex'] = 'Format teks tidak valid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/it_dns_txt.lng b/interface/web/dns/lib/lang/it_dns_txt.lng index 31da6eb..ecbb521 100644 --- a/interface/web/dns/lib/lang/it_dns_txt.lng +++ b/interface/web/dns/lib/lang/it_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text empty'; $wb['data_error_regex'] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/ja_dns_txt.lng b/interface/web/dns/lib/lang/ja_dns_txt.lng index 6ef505c..a24217f 100644 --- a/interface/web/dns/lib/lang/ja_dns_txt.lng +++ b/interface/web/dns/lib/lang/ja_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'TXT を入力してください。'; $wb['data_error_regex'] = 'TXT の形式が不正です。'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/nl_dns_txt.lng b/interface/web/dns/lib/lang/nl_dns_txt.lng index b89d802..1787a09 100644 --- a/interface/web/dns/lib/lang/nl_dns_txt.lng +++ b/interface/web/dns/lib/lang/nl_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Tekst is niet ingvuld'; $wb['data_error_regex'] = 'Tekst formaat ongeldig'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/pl_dns_txt.lng b/interface/web/dns/lib/lang/pl_dns_txt.lng index 09214f7..fbe7a18 100644 --- a/interface/web/dns/lib/lang/pl_dns_txt.lng +++ b/interface/web/dns/lib/lang/pl_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Tekst jest pusty.'; $wb['data_error_regex'] = 'Tekst ma zły format.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/pt_dns_txt.lng b/interface/web/dns/lib/lang/pt_dns_txt.lng index dbc200d..78b5eaf 100644 --- a/interface/web/dns/lib/lang/pt_dns_txt.lng +++ b/interface/web/dns/lib/lang/pt_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Endereço-IP em branco'; $wb['data_error_regex'] = 'Endereço-IP formato inválido'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/ro_dns_txt.lng b/interface/web/dns/lib/lang/ro_dns_txt.lng index 4aba1a5..737f7e2 100644 --- a/interface/web/dns/lib/lang/ro_dns_txt.lng +++ b/interface/web/dns/lib/lang/ro_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text necompletat'; $wb['data_error_regex'] = 'Format text invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/ru_dns_txt.lng b/interface/web/dns/lib/lang/ru_dns_txt.lng index 5656b63..aecade3 100644 --- a/interface/web/dns/lib/lang/ru_dns_txt.lng +++ b/interface/web/dns/lib/lang/ru_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Текст пустой'; $wb['data_error_regex'] = 'Формат неправилен'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/se_dns_txt.lng b/interface/web/dns/lib/lang/se_dns_txt.lng index 31da6eb..ecbb521 100644 --- a/interface/web/dns/lib/lang/se_dns_txt.lng +++ b/interface/web/dns/lib/lang/se_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text empty'; $wb['data_error_regex'] = 'Text format invalid'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/sk_dns_txt.lng b/interface/web/dns/lib/lang/sk_dns_txt.lng index 6086b39..80686d9 100644 --- a/interface/web/dns/lib/lang/sk_dns_txt.lng +++ b/interface/web/dns/lib/lang/sk_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Text je prázdny'; $wb['data_error_regex'] = 'Text má zlý formát'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> diff --git a/interface/web/dns/lib/lang/tr_dns_txt.lng b/interface/web/dns/lib/lang/tr_dns_txt.lng index 48de6cd..372afe9 100644 --- a/interface/web/dns/lib/lang/tr_dns_txt.lng +++ b/interface/web/dns/lib/lang/tr_dns_txt.lng @@ -13,4 +13,7 @@ $wb['data_error_empty'] = 'Metin boş'; $wb['data_error_regex'] = 'Metin geçersiz formatta'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button'; +$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button'; +$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.'; ?> -- Gitblit v1.9.1