diff --git a/src/Jobs/SamlSso.php b/src/Jobs/SamlSso.php index 3e8715f..e4ec467 100644 --- a/src/Jobs/SamlSso.php +++ b/src/Jobs/SamlSso.php @@ -56,7 +56,11 @@ public function __construct($guard = null) public function handle() { $deserializationContext = new DeserializationContext(); - $deserializationContext->getDocument()->loadXML(gzinflate(base64_decode(request('SAMLRequest')))); + $b64decode = base64_decode(request('SAMLRequest')); + $is_gzip = $this->isGzipped($b64decode); + $xml = $is_gzip ? gzinflate($b64decode) : $b64decode; + $deserializationContext->getDocument()->loadXML($xml); + $this->authn_request = new AuthnRequest(); $this->authn_request->deserialize($deserializationContext->getDocument()->firstChild, $deserializationContext); @@ -66,6 +70,16 @@ public function handle() return $this->response(); } + protected function isGzipped($in) { + if (mb_strpos($in , "\x1f" . "\x8b" . "\x08")===0) { + return true; + } else if (@gzinflate($in)!==false) { + return true; + } else { + return false; + } + } + public function response() { $this->response = (new Response())