app = $app; $firmendatenServerUrl = (String)$this->app->erp->Firmendaten('server_url'); if(!empty($firmendatenServerUrl)) { $this->server = $this->createServerByUrlAndPort($firmendatenServerUrl, $this->app->erp->Firmendaten('server_port')); return; } $this->server = ''; $isSecure = false; if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { $isSecure = true; } elseif ((isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') || (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on')) { $isSecure = true; } $REQUEST_PROTOCOL = $isSecure ? 'https' : 'http'; if(!empty($_SERVER['SCRIPT_URI'])) { $server = $_SERVER['SCRIPT_URI']; } elseif(!empty($_SERVER['SERVER_NAME'])) { if($_SERVER['SERVER_NAME'] === '_' && !empty($_SERVER['HTTP_HOST'])){ // Sonderfall für Nginx mit Servername "_" $server = $REQUEST_PROTOCOL.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; }else{ $server = $REQUEST_PROTOCOL.'://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI']; } }elseif(!empty($_SERVER['REQUEST_URI']) && !empty($_SERVER['SERVER_ADDR']) && !empty($_SERVER['SCRIPT_NAME']) && $_SERVER['SERVER_ADDR']!=='::1' && strpos($_SERVER['SERVER_SOFTWARE'],'nginx')===false ){ $server = (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR'] ? $REQUEST_PROTOCOL . '://' . $_SERVER['SERVER_ADDR'] . (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443 ? ':' . $_SERVER['SERVER_PORT'] : '') : '') . $_SERVER['SCRIPT_NAME']; }else{ $server = 'index.php'; $this->server = $server; } if($this->server === ''){ $servera = parse_url($server); if(!empty($servera['host']) && !empty($servera['scheme']) ){ $this->server = !empty($servera['scheme']) ? $servera['scheme'] . '://' : ''; if(!empty($servera['user'])) { $this->server .= $servera['user']; if(!empty($servera['pass'])) { $this->server .= ':'.$servera['pass']; } $this->server .= '@'; } $this->server .= $servera['host']; if(!empty($servera['port'])){ $this->server .= ':'.$servera['port']; } } } if(!empty($servera['path'])){ $this->server .= $servera['path']; } } /** * @param string $url * @param bool $intern */ public function execute($url, $intern = true) { $location = $this->getLocationUrl($url, $intern); header('Location: '.$location); $this->app->ExitXentral(); } /** * @param string $url * @param bool $intern * * @return string */ public function getLocationUrl($url, $intern = true) { if(stripos($url,'Location:') === 0) { $url = trim(substr($url,9)); } if($intern) { $posIndex = strpos($url,'index.php'); if($posIndex === false) { $url = 'index.php'; }elseif($posIndex > 0){ $url = substr($url, $posIndex); } $urla = parse_url($url); $urla['query'] = $this->prepareQuery($urla['query']); $url = $this->server.'?' .(!empty($urla['query'])?$urla['query']:'') .(!empty($urla['fragment'])?'#'.$urla['fragment']:''); return $url; } return $url; } /** * @param string $query * * @return string */ protected function prepareQuery($query) { $querya = explode('&', $query); foreach($querya as $k => $v) { $va = explode('=', $v); if($va[0] === 'msg') { $querya[$k] = $this->transformMsg($va); } } return implode('&', $querya); } /** * @param int $id * * @return string */ public function getMessage($id) { $msgKey = 'msg_'.$id; if(isset($_COOKIE[$msgKey])) { $message = $_COOKIE[$msgKey]; setcookie($msgKey,'',time()-86400); return $message; } return ''; } /** * @param array $query * * @return string */ protected function transformMsg(Array $query) { if($query[0] === 'msg') { if(isset($query[1])) { $id = mt_rand(); setcookie('msg_'.$id, (String)$query[1], time()+3600); return 'msgs='.$id; } return 'msgs='; } return ''; } /** * @return string */ public function getServer() { return $this->server; } /** * @param string $server * @param string $port * * @return string */ protected function createServerByUrlAndPort($server, $port) { if(empty($server)) { return ''; } $parsedUrl = parse_url($server); if(!empty($port)) { $port = ':'.$port; } $userpw = ''; if(!empty($parsedUrl['user'])) { if(!empty($parsedUrl['pass'])) { $userpw = $parsedUrl['user'].':'.$parsedUrl['pass'].'@'; } else { $userpw = $parsedUrl['user'].'@'; } } $path = ''; if(!empty($parsedUrl['path'])) { $path = $parsedUrl['path']; } if(substr($path,-1) !== '/' && substr($path,-9) !=='index.php') { $path .= '/'; } return $parsedUrl['scheme'].'://'.$userpw.$parsedUrl['host'].$port.$path; } }