<?php
declare(strict_types=1);
use ParagonIE\HPKPBuilder\HPKPBuilder;
use PHPUnit\Framework\TestCase;
class BasicTest extends TestCase
{
protected function getHPKPObject($reportURI)
{
$hashes = [
'1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=',
'1VilPkeVqirlPifk5scbzcTTbMT2clp-Zkyv9VFFasE',
'd558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1',
"\xd5\x58\xa5\x3e\x47\x95\xaa\x2a\xe5\x3e\x27\xe4\xe6\xc7\x1b\xcd".
"\xc4\xd3\x6c\xc4\xf6\x72\x5a\x7e\x66\x4c\xaf\xf5\x51\x45\x6a\xc1"
];
$hpkp = new HPKPBuilder();
foreach ($hashes as $h) {
$hpkp->addHash($h);
}
$hpkp->reportOnly(true)
->reportUri($reportURI)
->includeSubdomains(true);
return $hpkp;
}
/**
* @covers HPKPBuilder::addHash
* @covers HPKPBuilder::coerceBase64
* @covers HPKPBuilder::includeSubdomains
* @covers HPKPBuilder::reportOnly
* @covers HPKPBuilder::reportUri
*/
public function testHeaderOutput()
{
$reportURI = 'https://f038192cab4afafaacee34d22ed2e1dd.report-uri.io/r/default/hpkp/reportOnly';
$hpkp = $this->getHPKPObject($reportURI);
$this->assertSame(
"Public-Key-Pins-Report-Only: " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"max-age=5184000; includeSubDomains; " .
"report-uri=\"" . $reportURI . "\""
,
$hpkp->getHeader()
);
$hpkp->reportOnly(false);
$this->assertSame(
"Public-Key-Pins: " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"max-age=5184000; includeSubDomains; " .
"report-uri=\"" . $reportURI . "\""
,
$hpkp->getHeader()
);
$hpkp->reportOnly(true)
->reportUri('');
$this->assertSame(
"Public-Key-Pins: " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"max-age=5184000; includeSubDomains"
,
$hpkp->getHeader()
);
$hpkp->includeSubdomains(false);
$this->assertSame(
"Public-Key-Pins: " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"pin-sha256=\"1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\"; " .
"max-age=5184000"
,
$hpkp->getHeader()
);
}
/**
* @covers HPKPBuilder::fromFile
* @covers HPKPBuilder::getJSON
*/
public function testLoadSave()
{
$reportURI = 'https://f038192cab4afafaacee34d22ed2e1dd.report-uri.io/r/default/hpkp/reportOnly';
$hpkp = $this->getHPKPObject($reportURI);
$saved = $hpkp->getJSON();
if (@\file_put_contents(__DIR__. '/testing.json', $saved) === false) {
$this->markTestSkipped('Could not save JSON file');
}
$hpkp2 = HPKPBuilder::fromFile(__DIR__. '/testing.json');
$this->assertSame(
$hpkp->getHeader(),
$hpkp2->getHeader()
);
\unlink(__DIR__ . '/testing.json');
}
}
|