@@ -120,6 +127,7 @@
{$lang->default_value} |
{$lang->is_required} |
{$lang->cmd_search} |
+
{$lang->cmd_sort} |
|
@@ -138,6 +146,7 @@
{$val->default} |
YN |
YN |
+
YN |
diff --git a/modules/extravar/models/Value.php b/modules/extravar/models/Value.php
index d72a9b00e..5bf9d2dd3 100644
--- a/modules/extravar/models/Value.php
+++ b/modules/extravar/models/Value.php
@@ -36,6 +36,7 @@ class Value
public $is_disabled = 'N';
public $is_readonly = 'N';
public $search = 'N';
+ public $sort = 'N';
public $style = null;
/**
@@ -87,8 +88,9 @@ class Value
* @param string $parent_type
* @param string $is_strict
* @param string $options
+ * @param string $sort
*/
- function __construct(int $module_srl, int $idx, string $name, string $type = 'text', $default = null, $desc = '', $is_required = 'N', $search = 'N', $value = null, $eid = '', $parent_type = 'document', $is_strict = '', $options = null)
+ function __construct(int $module_srl, int $idx, string $name, string $type = 'text', $default = null, $desc = '', $is_required = 'N', $search = 'N', $value = null, $eid = '', $parent_type = 'document', $is_strict = '', $options = null, $sort = 'N')
{
if (!$idx)
{
@@ -108,6 +110,7 @@ class Value
$this->is_required = $is_required;
$this->is_strict = $is_strict;
$this->search = $search;
+ $this->sort = $sort;
}
/**
diff --git a/modules/extravar/models/ValueCollection.php b/modules/extravar/models/ValueCollection.php
index 0627fffcf..a3d0b3add 100644
--- a/modules/extravar/models/ValueCollection.php
+++ b/modules/extravar/models/ValueCollection.php
@@ -50,7 +50,7 @@ class ValueCollection
foreach ($keys as $val)
{
- $this->keys[$val->idx] = new Value($val->module_srl, $val->idx, $val->name, $val->type, $val->default, $val->desc, $val->is_required, $val->search, $val->value ?? null, $val->eid, $val->parent_type ?? 'document', $val->is_strict, $val->options);
+ $this->keys[$val->idx] = new Value($val->module_srl, $val->idx, $val->name, $val->type, $val->default, $val->desc, $val->is_required, $val->search, $val->value ?? null, $val->eid, $val->parent_type ?? 'document', $val->is_strict, $val->options, $val->sort ?? 'N');
}
}
diff --git a/modules/file/file.admin.controller.php b/modules/file/file.admin.controller.php
index 759658df2..1e5ae2e6d 100644
--- a/modules/file/file.admin.controller.php
+++ b/modules/file/file.admin.controller.php
@@ -92,6 +92,7 @@ class FileAdminController extends File
$config->image_quality_adjustment = max(50, min(100, intval(Context::get('image_quality_adjustment'))));
$config->image_autorotate = Context::get('image_autorotate') === 'Y' ? true : false;
$config->image_remove_exif_data = Context::get('image_remove_exif_data') === 'Y' ? true : false;
+ $config->image_always_reencode = Context::get('image_always_reencode') === 'Y' ? true : false;
// Video settings
$config->max_video_width = intval(Context::get('max_video_width')) ?: '';
@@ -389,6 +390,11 @@ class FileAdminController extends File
$result = FileHandler::createImageFile(FileHandler::getRealPath($file->uploaded_filename), $temp_filename, $width, $height, $format, 'fill', $quality);
if (!$result && !empty($config->magick_command))
{
+ $temp_dir = dirname($temp_filename);
+ if (!Rhymix\Framework\Storage::isDirectory($temp_dir))
+ {
+ Rhymix\Framework\Storage::createDirectory($temp_dir);
+ }
$command = vsprintf('%s %s -resize %dx%d -quality %d %s %s %s', [
\RX_WINDOWS ? escapeshellarg($config->magick_command) : $config->magick_command,
escapeshellarg(FileHandler::getRealPath($file->uploaded_filename)),
diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php
index c9ae4e628..cf1842a9e 100644
--- a/modules/file/file.controller.php
+++ b/modules/file/file.controller.php
@@ -1290,6 +1290,12 @@ class FileController extends File
}
}
+ // Check if this image should be reencoded anyway
+ if (isset($config->image_always_reencode) && $config->image_always_reencode)
+ {
+ $force = true;
+ }
+
// Convert image if adjusted
if ($adjusted['width'] !== $image_info['width'] ||
$adjusted['height'] !== $image_info['height'] ||
diff --git a/modules/file/lang/en.php b/modules/file/lang/en.php
index ffbcd5f54..64190e13f 100644
--- a/modules/file/lang/en.php
+++ b/modules/file/lang/en.php
@@ -107,6 +107,8 @@ $lang->image_autorotate = 'Fix Image Rotation';
$lang->about_image_autorotate = 'correct images that are rotated by mobile devices.';
$lang->image_remove_exif_data = 'Remove EXIF';
$lang->about_image_remove_exif_data = 'remove EXIF data including camera, GPS information, and more in image file for privacy. Even if this option is not used, EXIF data may be removed when the image is converted by other settings.';
+$lang->image_always_reencode = 'Always Reencode';
+$lang->about_image_always_reencode = 'Reencode images to a constant quality even if they do not meet one of the conditions above. This may help save disk space and traffic.';
$lang->image_autoconv_gif2mp4 = 'Convert GIF to MP4';
$lang->about_image_autoconv_gif2mp4 = 'convert animated GIF images into MP4 videos to save storage and bandwidth. This requires ffmpeg settings below. Videos may not play properly in older browsers.';
$lang->max_video_size = 'Limit Video Size';
diff --git a/modules/file/lang/ko.php b/modules/file/lang/ko.php
index b9f5ac7ae..3014e884c 100644
--- a/modules/file/lang/ko.php
+++ b/modules/file/lang/ko.php
@@ -107,6 +107,8 @@ $lang->image_autorotate = '이미지 회전 수정';
$lang->about_image_autorotate = '모바일 기기 등에서 잘못 회전된 이미지를 바로잡습니다.';
$lang->image_remove_exif_data = 'EXIF 제거';
$lang->about_image_remove_exif_data = '프라이버시를 위해 이미지 파일에서 카메라, GPS 정보 등이 포함되어 있는 EXIF 데이터를 삭제합니다. 이 옵션을 사용하지 않아도 다른 설정에 의해 이미지가 변환될 경우에도 EXIF 데이터가 삭제될 수 있습니다.';
+$lang->image_always_reencode = '무조건 재인코딩';
+$lang->about_image_always_reencode = '위에서 설정한 조건에 해당되지 않더라도 무조건 일정한 화질로 재인코딩하여 용량과 트래픽을 절약합니다.';
$lang->image_autoconv_gif2mp4 = 'GIF → MP4 변환';
$lang->about_image_autoconv_gif2mp4 = '움직이는 GIF 이미지를 MP4 동영상으로 변환하여 용량 및 트래픽을 절약합니다. 아래에서 ffmpeg 설정을 해야 하며, 구형 브라우저에서는 동영상이 재생되지 않을 수도 있습니다.';
$lang->max_video_size = '동영상 크기 제한';
diff --git a/modules/file/tpl/upload_config.html b/modules/file/tpl/upload_config.html
index d5ea25b61..d87571d0f 100644
--- a/modules/file/tpl/upload_config.html
+++ b/modules/file/tpl/upload_config.html
@@ -129,6 +129,20 @@
{$lang->msg_cannot_use_exif}
+
+
+
+
diff --git a/modules/member/member.class.php b/modules/member/member.class.php
index 32cf596b2..4f932bb53 100644
--- a/modules/member/member.class.php
+++ b/modules/member/member.class.php
@@ -296,11 +296,11 @@ class Member extends ModuleObject
// Add columns for IP address
if(!$oDB->isColumnExists("member", "ipaddress"))
{
- $oDB->addColumn("member", "ipaddress", "varchar", 120, null, false, 'regdate');
+ $oDB->addColumn("member", "ipaddress", "varchar", 60, null, false, 'regdate');
}
if(!$oDB->isColumnExists("member", "last_login_ipaddress"))
{
- $oDB->addColumn("member", "last_login_ipaddress", "varchar", 120, null, false, 'last_login');
+ $oDB->addColumn("member", "last_login_ipaddress", "varchar", 60, null, false, 'last_login');
}
if(!$oDB->isIndexExists("member","idx_ipaddress"))
{
diff --git a/modules/point/lang/en.php b/modules/point/lang/en.php
index efc87076e..92d8a959e 100644
--- a/modules/point/lang/en.php
+++ b/modules/point/lang/en.php
@@ -36,7 +36,7 @@ $lang->point_group_ratchet = 'Change on Point Reduction';
$lang->point_group_ratchet_yes = 'Maintain current group if point is reduced';
$lang->point_group_ratchet_no = 'Move to lower group if point is reduced';
$lang->about_point_link_group = 'If you specify level for a specific group, users are assigned into the group when they advance to the level by getting points.';
-$lang->about_module_point = 'You can set point for each module, and modules which don\'t have any value will use the default point. All points will be restored on acting reverse.';
+$lang->about_module_point = 'You can set points for each module, and modules which don\'t have any value will use the default point settings.';
$lang->point_signup = 'Sign Up';
$lang->point_insert_document = 'Writing a post';
$lang->point_delete_document = 'Deleting a post';
@@ -50,7 +50,7 @@ $lang->point_voter = 'Upvoting another person\'s post';
$lang->point_blamer = 'Downvoting another person\'s post';
$lang->point_voter_comment = 'Upvoting another person\'s comment';
$lang->point_blamer_comment = 'Downvoting another person\'s comment';
-$lang->point_download_file_author = 'Downloaded by others (without images)';
+$lang->point_download_file_author = 'Downloaded by others (without images)';
$lang->point_read_document_author = 'Read by others';
$lang->point_voted = 'One\'s post is upvoted';
$lang->point_blamed = 'One\'s post is downvoted';
diff --git a/modules/point/lang/es.php b/modules/point/lang/es.php
index 14300bab0..10226dadd 100644
--- a/modules/point/lang/es.php
+++ b/modules/point/lang/es.php
@@ -21,7 +21,7 @@ $lang->cmd_exp_calc = 'Calcular';
$lang->cmd_exp_reset = 'Restablecer';
$lang->point_link_group = 'Grupo de cambio de nivel';
$lang->about_point_link_group = 'Si especifica nivel para un grupo específico, a los usuarios se les asigna en el grupo cuando se adavnce al nivel por conseguir puntos.';
-$lang->about_module_point = 'Usted puede definir los puntos para cada módulo y los módulos que no tengan ningun valor usarán punto predefinido. Todos los puntos serán restituidos al actuar en forma contraria.';
+$lang->about_module_point = 'Usted puede definir los puntos para cada módulo y los módulos que no tengan ningun valor usarán punto predefinido.';
$lang->point_signup = 'Fecha del';
$lang->point_insert_document = 'Al escribir documento';
$lang->point_delete_document = 'Al borrar documento';
diff --git a/modules/point/lang/fr.php b/modules/point/lang/fr.php
index a16315b3b..0f8833b4c 100644
--- a/modules/point/lang/fr.php
+++ b/modules/point/lang/fr.php
@@ -20,7 +20,7 @@ $lang->cmd_point_recal = 'Restaurer le Point';
$lang->about_cmd_point_recal = 'Tous les points seront recalculés basé seulement sur les points des articles/commentaires/annexes/inscription. Après la restauration, Les membres gagneront le point d\'inscription seulement quand il fait de l\'activité dans le site Web. Utilisez cette fonction seulement quand l\'initialisation complète est necessaire comme le cas de transfert des données etc.';
$lang->point_link_group = 'Changement du Groupe lié à celui du Niveau';
$lang->about_point_link_group = 'Si vous designez un niveau à un groupe particulier, les utilisateur s sont assignés dans le groupe quand ils s\'avancent au groupe en gagnant des points.';
-$lang->about_module_point = 'Vous pouvez configurer les points pour chaque module. Le module qui n\'a pas de valeurs utilisera les points par défaut. Tous les points seront restaurés quand on fait de l\'action inverse.';
+$lang->about_module_point = 'Vous pouvez configurer les points pour chaque module. Le module qui n\'a pas de valeurs utilisera les points par défaut.';
$lang->point_signup = 'Inscription';
$lang->point_insert_document = 'Écrire';
$lang->point_delete_document = 'Supprimer';
diff --git a/modules/point/lang/ja.php b/modules/point/lang/ja.php
index 30d247080..6145f749b 100644
--- a/modules/point/lang/ja.php
+++ b/modules/point/lang/ja.php
@@ -26,7 +26,7 @@ $lang->point_link_group = 'グループ連動';
$lang->point_group_reset_and_add = '設定されたグループを初期化後に新規グループに付与';
$lang->point_group_add_only = '新規グループのみ付与';
$lang->about_point_link_group = 'グループにレベルを指定すると、該当レベルになったときにグループが変更されます。';
-$lang->about_module_point = 'モジュール別にポイントを指定することができますが、指定されていないモジュールには、デフォルトポイントが使用されます。すべてのポイントは、反対の行動の行った場合に元に戻ります。';
+$lang->about_module_point = 'モジュール別にポイントを指定することができますが、指定されていないモジュールには、デフォルトポイントが使用されます。';
$lang->point_signup = '加入';
$lang->point_insert_document = '書き込み作成';
$lang->point_delete_document = '書き込み削除';
diff --git a/modules/point/lang/ko.php b/modules/point/lang/ko.php
index 05344b676..929381c3e 100644
--- a/modules/point/lang/ko.php
+++ b/modules/point/lang/ko.php
@@ -36,7 +36,7 @@ $lang->point_group_ratchet = '포인트 감소 처리 방식';
$lang->point_group_ratchet_yes = '포인트가 감소하더라도 기존 그룹을 유지';
$lang->point_group_ratchet_no = '포인트가 감소하면 하위 그룹으로 이동';
$lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면, 회원의 포인트가 해당 레벨의 포인트에 도달할 때 그룹이 변경됩니다.';
-$lang->about_module_point = '모듈별 포인트를 지정할 수 있으며 지정되지 않은 모듈은 기본 포인트를 이용합니다. 모든 점수는 반대 행동을 하였을 경우 원상복구 됩니다.';
+$lang->about_module_point = '모듈별 포인트를 설정할 수 있습니다. 설정하지 않은 모듈은 기본 포인트 설정을 적용합니다.';
$lang->point_signup = '가입';
$lang->point_insert_document = '글 작성';
$lang->point_delete_document = '글 삭제';
diff --git a/modules/point/lang/ru.php b/modules/point/lang/ru.php
index 83b2aa2ae..d16148cdd 100644
--- a/modules/point/lang/ru.php
+++ b/modules/point/lang/ru.php
@@ -15,7 +15,7 @@ $lang->level_point = 'Уровень поинтов';
$lang->about_level_point = 'Уровень будет изменен, когда поинты достигают каждого уровня поинтов или падают ниже его';
$lang->disable_download = 'Запретить скачивание';
$lang->about_disable_download = 'Это запретит скачивание файлов, когда не хватает достаточного кол-ва поинтов. (За исключением файлов изображений)';
-$lang->about_module_point = 'Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов. Все поинты будут восстановлены при обратном действии.';
+$lang->about_module_point = 'Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов.';
$lang->point_signup = 'Присвоить';
$lang->point_insert_document = 'При написании';
$lang->point_delete_document = 'При удалении';
diff --git a/modules/point/lang/tr.php b/modules/point/lang/tr.php
index edcc6aedd..0f617f677 100644
--- a/modules/point/lang/tr.php
+++ b/modules/point/lang/tr.php
@@ -27,7 +27,7 @@ $lang->point_link_group = 'Seviyeye Göre Grup Değiştirme';
$lang->point_group_reset_and_add = 'Düzenlenmiş grupları sıfırla ve yeni gruplar ekle';
$lang->point_group_add_only = 'Sadece yeni gruplara';
$lang->about_point_link_group = 'Belirli bir grup için seviye belirliyorsanız, kullanıcılar gruba o seviyenin puanına eriştiklerinde atanacaklardır.';
-$lang->about_module_point = 'Her modül için puan ayarlayabilirsiniz. Hiçbir değer atanmayan modüller varsayılan puan sistemini kullanacaktır. Tersi hareket durumunda tüm puanlar iade edilecektir.';
+$lang->about_module_point = 'Her modül için puan ayarlayabilirsiniz. Hiçbir değer atanmayan modüller varsayılan puan sistemini kullanacaktır.';
$lang->point_signup = 'Kayıt Olmaya';
$lang->point_insert_document = 'Yazıya';
$lang->point_delete_document = 'Silmeye';
diff --git a/modules/point/lang/vi.php b/modules/point/lang/vi.php
index 5ecba3008..4e0536c5a 100644
--- a/modules/point/lang/vi.php
+++ b/modules/point/lang/vi.php
@@ -27,7 +27,7 @@ $lang->point_link_group = 'Chuyển nhóm với cấp độ';
$lang->point_group_reset_and_add = 'Điểm số để thăng cấp cho nhóm mới.';
$lang->point_group_add_only = 'Chỉ cấp cho nhóm mới';
$lang->about_point_link_group = 'Nếu bạn đặt cấp độ cho một nhóm đặc biệt nào đó, người sử dụng trong nhóm đó khi đạt đến số điểm giới hạn sẽ tự động được chuyển sang nhóm mới.';
-$lang->about_module_point = 'Bạn có thể đặt thang điểm riêng cho mỗi Module, Module nào không được đặt sẽ sử dụng sự thiết lập mặc định. Tất cả điểm sẽ khác khi sử dụng chức năng này.';
+$lang->about_module_point = 'Bạn có thể đặt thang điểm riêng cho mỗi Module, Module nào không được đặt sẽ sử dụng sự thiết lập mặc định.';
$lang->point_signup = 'Khi đăng kí';
$lang->point_insert_document = 'Khi gửi bài';
$lang->point_delete_document = 'Khi xóa bài';
diff --git a/modules/point/lang/zh-CN.php b/modules/point/lang/zh-CN.php
index ada98e17d..ffcf811ef 100644
--- a/modules/point/lang/zh-CN.php
+++ b/modules/point/lang/zh-CN.php
@@ -25,7 +25,7 @@ $lang->point_link_group = '用户组绑定';
$lang->point_group_reset_and_add = '初始化已有用户组重新设置';
$lang->point_group_add_only = '只应用到新用户组';
$lang->about_point_link_group = '即级别绑定用户组。当级别达到指定级别时,会员所属用户组将自动更新为与其相对应的用户组。';
-$lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。 所有积分在相反动作下恢复原始值。即:发表新帖后再删除得到的积分为0分。';
+$lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。';
$lang->point_signup = '注册';
$lang->point_insert_document = '发表新帖';
$lang->point_delete_document = '删除主题';
diff --git a/modules/point/lang/zh-TW.php b/modules/point/lang/zh-TW.php
index baec73b50..4409ba508 100644
--- a/modules/point/lang/zh-TW.php
+++ b/modules/point/lang/zh-TW.php
@@ -25,7 +25,7 @@ $lang->point_link_group = '自動升級';
$lang->point_group_reset_and_add = '重新調整與新增群組';
$lang->point_group_add_only = '只限新群組';
$lang->about_point_link_group = '即群組隨等級變化。當等級達到指定等級時,會員所屬群組將自動更新成相對應的群組。';
-$lang->about_module_point = '可以分別對各模組進行點數設置,沒有設置的模組將使用預設值。 所有動作在反向操作下將恢復原始值。即:發表主題後再刪除得到的點數為零。';
+$lang->about_module_point = '可以分別對各模組進行點數設置,沒有設置的模組將使用預設值。';
$lang->point_signup = '註冊';
$lang->point_insert_document = '發表主題';
$lang->point_delete_document = '刪除主題';
diff --git a/modules/widget/widget.model.php b/modules/widget/widget.model.php
index f9cd09d45..905c18e3e 100644
--- a/modules/widget/widget.model.php
+++ b/modules/widget/widget.model.php
@@ -58,10 +58,9 @@ class WidgetModel extends Widget
$widget = $searched_list[$i];
// Wanted information on the Widget
$widget_info = self::getWidgetInfo($widget);
-
- if(!$widget_info)
+ if (!$widget_info)
{
- $widget_info = new stdClass();
+ continue;
}
// get easyinstall remove url
@@ -101,8 +100,10 @@ class WidgetModel extends Widget
$widgetStyle = $searched_list[$i];
// Wanted information on the Widget
$widgetStyle_info = self::getWidgetStyleInfo($widgetStyle);
-
- $list[] = $widgetStyle_info;
+ if ($widgetStyle_info)
+ {
+ $list[] = $widgetStyle_info;
+ }
}
return $list;
}
diff --git a/tests/unit/framework/SecurityTest.php b/tests/unit/framework/SecurityTest.php
index f637ceb83..4246316be 100644
--- a/tests/unit/framework/SecurityTest.php
+++ b/tests/unit/framework/SecurityTest.php
@@ -106,10 +106,13 @@ class SecurityTest extends \Codeception\Test\Unit
{
$error_reporting = error_reporting(0);
+ config('security.check_csrf_token', true);
+
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['HTTP_REFERER'] = '';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
@@ -117,6 +120,7 @@ class SecurityTest extends \Codeception\Test\Unit
$_SERVER['HTTP_REFERER'] = '';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
@@ -124,27 +128,63 @@ class SecurityTest extends \Codeception\Test\Unit
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
- $_SERVER['HTTP_REFERER'] = 'http://www.rhymix.org/foo/bar';
- $_SERVER['HTTP_X_CSRF_TOKEN'] = '';
+ $_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+
$_SERVER['HTTP_X_CSRF_TOKEN'] = 'invalid value';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
- $_SERVER['HTTP_ORIGIN'] = 'http://www.rhymix.org';
- $_SERVER['HTTP_REFERER'] = 'http://www.foobar.com';
- $_SERVER['HTTP_X_CSRF_TOKEN'] = '';
- $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
- $_SERVER['HTTP_REFERER'] = '';
- $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
- $_SERVER['HTTP_ORIGIN'] = 'http://www.foobar.com';
+ $_SERVER['HTTP_X_CSRF_TOKEN'] = '0';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
+ config('security.check_csrf_token', false);
+ unset($_SERVER['HTTP_X_CSRF_TOKEN']);
+
+ $_SERVER['HTTP_REFERER'] = 'https://www.rhymix.org/foo/bar';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_ORIGIN'] = 'https://www.rhymix.org';
+ $_SERVER['HTTP_REFERER'] = 'https://www.foobar.com';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_ORIGIN'] = 'https://www.foobar.com';
+ $this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_SEC_FETCH_SITE'] = 'same-origin';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_SEC_FETCH_SITE'] = 'none';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_SEC_FETCH_SITE'] = 'invalid value';
+ $this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
+ unset($_SERVER['HTTP_SEC_FETCH_SITE']);
+
+ $_SERVER['HTTP_ORIGIN'] = '';
+ $_SERVER['HTTP_REFERER'] = '';
+ $this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
$_SERVER['HTTP_ORIGIN'] = 'null';
+ $_SERVER['HTTP_REFERER'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
- $_SERVER['HTTP_REFERER'] = '';
- $_SERVER['HTTP_X_CSRF_TOKEN'] = '';
- $this->assertTrue(Rhymix\Framework\Security::checkCSRF('http://www.rhymix.org/'));
+ $_SERVER['HTTP_ORIGIN'] = 'null';
+ $_SERVER['HTTP_REFERER'] = 'https://www.rhymix.org';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF());
+ $_SERVER['HTTP_ORIGIN'] = '';
+ $_SERVER['HTTP_REFERER'] = 'null';
+ $this->assertFalse(Rhymix\Framework\Security::checkCSRF());
+
+ $_SERVER['HTTP_ORIGIN'] = '';
+ $_SERVER['HTTP_REFERER'] = '';
+ $this->assertTrue(Rhymix\Framework\Security::checkCSRF('https://www.rhymix.org/'));
+
+ $_SERVER['HTTP_SEC_FETCH_SITE'] = 'cross-site';
+ $this->assertFalse(Rhymix\Framework\Security::checkCSRF('https://www.rhymix.org/'));
+
+ unset($_SERVER['HTTP_SEC_FETCH_SITE']);
error_reporting($error_reporting);
}
|