Added basic orchestration script, apply defaults before checking for missing fields

master
Brady McDonough 2 years ago
parent 35221b979e
commit 8f49c8815d

3
.gitignore vendored

@ -3,3 +3,6 @@
.\#* .\#*
.projectile .projectile
TAGS TAGS
composer.lock
vendor/

@ -0,0 +1,47 @@
#!/bin/bash
function tidy {
rm -vf {./,tests/,src/{./,AntiCSRF/,Clock/,Hash/,Request/,Required/,RFC/,Session/,URI/,Workflow/}}*~
rm -vf {./,tests/,src/{./,AntiCSRF/,Clock/,Hash/,Request/,Required/,RFC/,Session/,URI/,Workflow/}}#*#
}
function clean {
if [[ ! -d "vendor/" ]]; then
echo "No vendor/ folder to remove."
else
echo "Removing ./vendor/ ..."
rm -rf "vendor/"
echo "Done"
fi
rm -fv "composer.lock"
}
function update {
composer update
composer dumpautoload -v
}
if [[ $# -ne 1 ]]; then
echo "This script requires a verb."
echo "VERBS:"
echo " update - Update dependencies with composer"
echo " test - If no vendor/ folder Update, then run phpunit tests."
echo " clean - Remove all buildfiles and editor artifacts."
echo " tidy - Remove all editor artifacts."
fi
cmd=$1
if [[ $cmd == "update" ]]; then
update
elif [[ $cmd == "test" ]]; then
if [[ ! -d "vendor/" ]]; then
update
fi
./vendor/bin/phpunit --testdox tests
elif [[ $cmd == "tidy" ]]; then
tidy
elif [[ $cmd == "clean" ]]; then
tidy && clean
else
echo "Unrecognized verb: ${cmd}"
fi

@ -55,11 +55,6 @@ class Otpauth
{ return \array_key_exists('secret', $que);}, { return \array_key_exists('secret', $que);},
$parsedUri['query'] . "has no secret key."], $parsedUri['query'] . "has no secret key."],
]; ];
$parsedQuery = [];
\parse_str($parsedUri['query'], $parsedQuery);
$runCheck($queryChecks, $parsedQuery);
$labelChecks = [ $labelChecks = [
[ function($lab) [ function($lab)
{ return \count($lab) === 2;}, { return \count($lab) === 2;},
@ -69,6 +64,9 @@ class Otpauth
$label = \explode(":", $parsedUri['path']); $label = \explode(":", $parsedUri['path']);
$runCheck($labelChecks, $label); $runCheck($labelChecks, $label);
$parsedQuery = [];
\parse_str($parsedUri['query'], $parsedQuery);
$queryDefaults = [ $queryDefaults = [
"algorithm" => "SHA1", "algorithm" => "SHA1",
"period" => "30", "period" => "30",
@ -76,6 +74,7 @@ class Otpauth
"issuer" => \rawurldecode(\ltrim($label[0], "/")), "issuer" => \rawurldecode(\ltrim($label[0], "/")),
]; ];
$parsedQuery = \array_merge($queryDefaults, $parsedQuery); $parsedQuery = \array_merge($queryDefaults, $parsedQuery);
$runCheck($queryChecks, $parsedQuery);
$convertFields = function(array $conversion, array &$target) { $convertFields = function(array $conversion, array &$target) {
foreach ($conversion as $k => $v) foreach ($conversion as $k => $v)

@ -7,7 +7,7 @@ use BradyMcD\TAATP\URI\Otpauth;
/** @SuppressWarnings(PHPMD.StaticAccess)*/ /** @SuppressWarnings(PHPMD.StaticAccess)*/
final class URITest extends TestCase final class URITest extends TestCase
{ {
public function testExampleURI(): void public function testPreservesAllUriFields(): void
{ {
// Sourced from Google's otpauth URI specification // Sourced from Google's otpauth URI specification
// https://github.com/google/google-authenticator/wiki/Key-Uri-Format // https://github.com/google/google-authenticator/wiki/Key-Uri-Format
@ -48,9 +48,9 @@ final class URITest extends TestCase
$this->assertEqualsCanonicalizing($parsedOtpQuery, $parsedTestQuery); $this->assertEqualsCanonicalizing($parsedOtpQuery, $parsedTestQuery);
} }
public function testIncompleteURI(): void public function testCanFallbackToDefaults(): void
{ {
$string = 'otpauth://totp/Example:john.doe@email.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=Example'; $string = 'otpauth://totp/Example:john.doe@email.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ';
$queryComponents = [ "secret" => "HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ", $queryComponents = [ "secret" => "HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ",
"issuer" => "Example", "issuer" => "Example",
"algorithm" => "SHA1", "algorithm" => "SHA1",
@ -65,6 +65,7 @@ final class URITest extends TestCase
$this->assertSame($provisioningUri->algorithm, $queryComponents['algorithm']); $this->assertSame($provisioningUri->algorithm, $queryComponents['algorithm']);
$this->assertSame($provisioningUri->digits, $queryComponents['digits']); $this->assertSame($provisioningUri->digits, $queryComponents['digits']);
$this->assertSame($provisioningUri->period, $queryComponents['period']); $this->assertSame($provisioningUri->period, $queryComponents['period']);
$this->assertSame($provisioningUri->issuer, $queryComponents['issuer']);
} }
} }

Loading…
Cancel
Save