$val) { $str = str_replace('{'.$key.'}', $val, $str); } return $str; } /** * @param string $haystack * @param string $needle * @return bool */ public static function startsWith(string $haystack, string $needle) { $length = strlen($needle); return (substr($haystack, 0, $length) === $needle); } /** * @param string $haystack * @param string $needle * @return bool */ public static function endsWith(string $haystack, string $needle) { $length = strlen($needle); return ($length === 0) || (substr($haystack, -$length) === $needle); } /** * @param string $filter * @param string[] $exclusions * @param string $name * @return bool */ public static function isRepoFilterMatch(string $filter, array $exclusions, string $name) { foreach ($exclusions as $ex) { if (strtolower($ex) === strtolower($name)) return false; } $f0 = explode('/', $filter); $f1 = explode('/', $name); if (count($f0) !== 2) return false; if (count($f1) !== 2) return false; if ($f0[0] !== $f1[0] && $f0[0] !== '*') return false; if ($f0[1] !== $f1[1] && $f0[1] !== '*') return false; return true; } /** * @param ILogger $logger * @param string $url * @param string $authtoken * @return array|mixed */ public static function getJSONWithTokenAuth($logger, $url, $authtoken) { return Utils::getJSON($logger, $url, 'Authorization: token ' . $authtoken); } /** * @param ILogger $logger * @param string $url * @param string $usr * @param string $pass * @return array|mixed */ public static function getJSONWithTokenBasicAuth($logger, $url, $usr, $pass) { return Utils::getJSON($logger, $url, 'Authorization: Basic ' . base64_encode($usr.':'.$pass)); } /** * @param ILogger $logger * @param string $url * @param string $header * @return array|mixed */ private static function getJSON($logger, $url, $header) { //$logger->proclog("[@] " . $url); if (array_key_exists('HTTP_USER_AGENT', $_SERVER)) { $options = [ 'http' => [ 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'header' => $header, ], 'https' => [ 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'header' => $header, ], ]; } else { $options = [ 'http' => [ 'user_agent' => 'ExtendedGitGraph_for_mikescher.com', 'header' => $header, 'ignore_errors' => true, ], 'https' => [ 'user_agent' => 'ExtendedGitGraph_for_mikescher.com', 'header' => $header, 'ignore_errors' => true, ], ]; } $context = stream_context_create($options); $response = @file_get_contents($url, false, $context); if ($response === false) { $logger->proclog("Error recieving json: '" . $url . "'"); $logger->proclog(print_r(error_get_last(), true)); throw new EGGException("Error recieving json: '" . $url . "'"); } return json_decode($response); } /** * @return string */ public static function sqlnow() { return gmdate("Y-m-d H:i:s"); } /** * @param int $n0 * @param array $dbdata * @return int */ public static function array_value_max(int $n0, array $dbdata): int { foreach ($dbdata as $_ => $val) $n0 = max($n0, $val); return $n0; } public static function urlCombine(string... $elements) { $r = $elements[0]; $skip = true; foreach ($elements as $e) { if ($skip) { $skip=false; continue; } if (Utils::endsWith($r, '/')) $r = substr($r, 0, strlen($r)-1); if (Utils::startsWith($e, '/')) $e = substr($e, 1); $r = $r . '/' . $e; } return $r; } }