1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-24 15:23:11 +02:00

Add support for $config->noHTTPS. When boolean true, it cancels any HTTPS requirements set per-template, simplifying cases where you copy a production site to dev site that may not have the same HTTPS capabilities. So for that case, the dev site would want to have $config->noHTTPS=true; in /site/config.php

This commit is contained in:
Ryan Cramer
2018-04-19 10:49:58 -04:00
parent a6bd85f6b2
commit 16c20439f1
4 changed files with 51 additions and 16 deletions

View File

@@ -95,6 +95,7 @@
* @property array $adminThumbOptions Admin thumbnail image options #pw-group-images * @property array $adminThumbOptions Admin thumbnail image options #pw-group-images
* @property array $httpHosts HTTP hosts For added security, specify the host names ProcessWire should recognize. #pw-group-HTTP-and-input * @property array $httpHosts HTTP hosts For added security, specify the host names ProcessWire should recognize. #pw-group-HTTP-and-input
* @property int $maxPageNum Maximum number of recognized paginations #pw-group-URLs * @property int $maxPageNum Maximum number of recognized paginations #pw-group-URLs
* @property bool $noHTTPS When boolean true, pages requiring HTTPS will not enforce it (useful for dev environments).
* *
* @property string $dbHost Database host #pw-group-database * @property string $dbHost Database host #pw-group-database
* @property string $dbName Database name #pw-group-database * @property string $dbName Database name #pw-group-database
@@ -402,5 +403,22 @@ class Config extends WireData {
return $this; return $this;
} }
/**
* Return true if current PHP version is equal to or newer than the given version
*
* ~~~~~
* if($config->phpVersion('7.0.0')) {
* // PHP version is 7.x
* }
* ~~~~~
*
* @param string|null $minVersion
* @return bool
*
*/
public function phpVersion($minVersion) {
return version_compare(PHP_VERSION, $minVersion) >= 0;
}
} }

View File

@@ -2834,15 +2834,23 @@ class Page extends WireData implements \Countable, WireMatchable {
* *
*/ */
public function httpUrl($options = array()) { public function httpUrl($options = array()) {
if(!$this->template) return ''; $template = $this->template;
switch($this->template->https) { if(!$template) return '';
/** @var Config $config */
$config = $this->wire('config');
$mode = $template->https;
if($mode > 0 && $config->noHTTPS) $mode = 0;
switch($mode) {
case -1: $protocol = 'http'; break; case -1: $protocol = 'http'; break;
case 1: $protocol = 'https'; break; case 1: $protocol = 'https'; break;
default: $protocol = $this->wire('config')->https ? 'https' : 'http'; default: $protocol = $config->https ? 'https' : 'http';
} }
if(is_array($options)) unset($options['http']); if(is_array($options)) {
else if(is_bool($options)) $options = array(); unset($options['http']);
return "$protocol://" . $this->wire('config')->httpHost . $this->url($options); } else if(is_bool($options)) {
$options = array();
}
return "$protocol://" . $config->httpHost . $this->url($options);
} }
/** /**
@@ -2866,13 +2874,16 @@ class Page extends WireData implements \Countable, WireMatchable {
* *
*/ */
public function editUrl($options = array()) { public function editUrl($options = array()) {
/** @var Config $config */
$config = $this->wire('config');
/** @var Template $adminTemplate */
$adminTemplate = $this->wire('templates')->get('admin'); $adminTemplate = $this->wire('templates')->get('admin');
$https = $adminTemplate && ($adminTemplate->https > 0); $https = $adminTemplate && ($adminTemplate->https > 0) && !$config->noHTTPS;
$url = ($https && !$this->wire('config')->https) ? 'https://' . $this->wire('config')->httpHost : ''; $url = ($https && !$config->https) ? 'https://' . $config->httpHost : '';
$url .= $this->wire('config')->urls->admin . "page/edit/?id=$this->id"; $url .= $config->urls->admin . "page/edit/?id=$this->id";
if($options === true || (is_array($options) && !empty($options['http']))) { if($options === true || (is_array($options) && !empty($options['http']))) {
if(strpos($url, '://') === false) { if(strpos($url, '://') === false) {
$url = ($https ? 'https://' : 'http://') . $this->wire('config')->httpHost . $url; $url = ($https ? 'https://' : 'http://') . $config->httpHost . $url;
} }
} }
$append = $this->wire('session')->getFor($this, 'appendEditUrl'); $append = $this->wire('session')->getFor($this, 'appendEditUrl');
@@ -3356,9 +3367,14 @@ class Page extends WireData implements \Countable, WireMatchable {
if(is_null($status)) $status = $this->status; if(is_null($status)) $status = $this->status;
if($value === false) return $status; if($value === false) return $status;
$names = array(); $names = array();
$remainder = $status;
foreach(self::$statuses as $name => $value) { foreach(self::$statuses as $name => $value) {
if($status & $value) $names[$value] = $name; if($status & $value) {
$names[$value] = $name;
$remainder = $remainder & ~$value;
}
} }
if($remainder > 1) $names[$remainder] = "unknown-$remainder";
return $names; return $names;
} }

View File

@@ -164,7 +164,7 @@ class PageFrontEdit extends WireData implements Module {
if($config->ajax && $input->post('action') == 'PageFrontEditSave') { if($config->ajax && $input->post('action') == 'PageFrontEditSave') {
// skip, this is handled by another hook // skip, this is handled by another hook
} else if($this->wire('templates')->get('admin')->https == 1 && !$config->https && $page->template->https != -1) { } else if($this->wire('templates')->get('admin')->https == 1 && !$config->https && !$config->noHTTPS && $page->template->https != -1) {
// hooks allowed, but we need the same scheme as admin // hooks allowed, but we need the same scheme as admin
$url = $input->httpUrl(true); $url = $input->httpUrl(true);
if(strpos($url, 'http://') === 0) { if(strpos($url, 'http://') === 0) {

View File

@@ -677,11 +677,12 @@ class ProcessPageView extends Process {
* *
*/ */
protected function checkProtocol($page) { protected function checkProtocol($page) {
$requireHTTPS = $page->template->https; /** @var Config $config */
if($requireHTTPS == 0) return; // neither HTTP or HTTPS required
$config = $this->wire('config'); $config = $this->wire('config');
$requireHTTPS = $page->template->https;
if($requireHTTPS == 0 || $config->noHTTPS) return; // neither HTTP or HTTPS required
$isHTTPS = $config->https; $isHTTPS = $config->https;
$scheme = ''; $scheme = '';