From 08bcb2d016d684539e10a0628a5674544b2596b5 Mon Sep 17 00:00:00 2001 From: paulr Date: Mon, 15 Nov 2010 09:55:20 +1100 Subject: [PATCH] unit tests and base code --- doco/db.sqlite | Bin 0 -> 4096 bytes doco/readme.txt | 3 +- lib/lib.php | 153 +++++++++++++++++++++++++++++++++++++++++++++++ unittests/createkey.php | 17 +++++ unittests/createurl.php | 16 +++++ 5 files changed, 188 insertions(+), 1 deletions(-) create mode 100644 doco/db.sqlite create mode 100644 unittests/createkey.php create mode 100644 unittests/createurl.php diff --git a/doco/db.sqlite b/doco/db.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..52503f24d9349f2c7bd4b3f58183fd2d75cc4461 GIT binary patch literal 4096 zcmeH`K}*9h6vvZhI4O88yFDtx%61Suda+87V%Kdo1?y#0jWE`AZ0Qajw@sD&^_HvkABOAg&CA8UfX*5vQYGbs@(LFAd7 z%8#-CPGECM+D@l~x7TI%lJjyg!~yT;R2&izl8HllzR2A8n!pGPMls3r)tAu znaie_2)q5 u{{Axn6;`-40Jc~4rfhm+hJYc^Kmw-!8+hsF$cDft0n`8HDHsCHC9ngUdxc#9 literal 0 HcmV?d00001 diff --git a/doco/readme.txt b/doco/readme.txt index d26656d..1ab3a1e 100644 --- a/doco/readme.txt +++ b/doco/readme.txt @@ -5,7 +5,8 @@ GA4PHP means Google Authenticator for PHP. The purpose of this "library" is to provde a convienient and hopefully simple way of provisioning and authenticating users -using the Google Authenticator mechanism +using the Google Authenticator mechanism. For now this lib +will only support GA's hotp methods. Why? diff --git a/lib/lib.php b/lib/lib.php index dc10d56..883ccb9 100644 --- a/lib/lib.php +++ b/lib/lib.php @@ -1,4 +1,157 @@ dbConnector = new PDO("sqlite:$file"); + } catch(PDOException $exep) { + $this->errorText = $exep->getMessage(); + $this->dbConnector = false; + } + } else { + setupDB(); + } + + $this->dbFile = $file; + } + + // creates the database (tables); + function setupDB() { + try { + $this->$dbConnector = new PDO("sqlite:$file"); + } catch(PDOException $exep) { + $this->errorText = $exep->getMessage(); + $this->dbConnector = false; + } + + // here we create some tables and stuff + } + + // creates "user" in the database and returns a url for + // the phone. If user already exists, this returns false + // if any error occurs, this returns false + function setupUser($username) { + $key = _createBase32Key(); + } + + // Replcate "user" in the database... All this really + // does is to replace the key for the user. Returns false + // if the user doesnt exist of the key is poop + function replaceUser($username) { + + } + + // sets the key for a user - this is assuming you dont want + // to use one created by the application. returns false + // if the key is invalid or the user doesn't exist. + function setUserKey($username, $key) { + + } + + // self explanitory? + function deleteUser($username) { + + } + + // user has input their user name and some code, authenticate + // it + function authenticateUser($username, $code) { + + } + + // this function allows a user to resync their key. If too + // many codes are called, we only check up to 20 codes in the future + // so if the user is at 21, they'll always fail. + function resyncCode($username, $code1, $code2) { + + } + + // gets the error text associated with the last error + function getErrorText() { + return $this->errorText; + } + + // create a url compatibile with google authenticator. + function createURL($user, $key) { + $url = "otpauth://hotp/$user?secret=$key"; + return $url; + } + + // creeates a base 32 key (random) + function createBase32Key() { + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; + $key = ""; + for($i=0; $i<16; $i++) { + $offset = rand(0,strlen($alphabet)-1); + //echo "$i off is $offset\n"; + $key .= $alphabet[$offset]; + } + + return $key; + } + + + function helperb322hex($b32) { + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; + $out = ""; + $dous = ""; + + for($i = 0; $i < strlen($b32); $i++) { + $in = strrpos($alphabet, $b32[$i]); + $b = str_pad(base_convert($in, 10, 2), 5, "0", STR_PAD_LEFT); + $out .= $b; + $dous .= $b."."; + } + + $ar = str_split($out,20); + + //echo "$dous, $b\n"; + + //print_r($ar); + $out2 = ""; + foreach($ar as $val) { + $rv = str_pad(base_convert($val, 2, 16), 5, "0", STR_PAD_LEFT); + //echo "rv: $rv from $val\n"; + $out2 .= $rv; + + } + //echo "$out2\n"; + + return $out2; + } + + function helperhex2b32($hex) { + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; + + $ar = str_split($hex, 5); + + $out = ""; + foreach($ar as $var) { + $bc = base_convert($var, 16, 2); + $bin = str_pad($bc, 20, "0", STR_PAD_LEFT); + $out .= $bin; + //echo "$bc was, $var is, $bin are\n"; + } + + $out2 = ""; + $ar2 = str_split($out, 5); + foreach($ar2 as $var2) { + $bc = base_convert($var2, 2, 10); + $out2 .= $alphabet[$bc]; + } + + return $out2; + } + + + // some private data bits. + private $errorText; + private $dbFile; + private $dbConnector; +} ?> \ No newline at end of file diff --git a/unittests/createkey.php b/unittests/createkey.php new file mode 100644 index 0000000..251132e --- /dev/null +++ b/unittests/createkey.php @@ -0,0 +1,17 @@ +createBase32Key(); + if($oldkey == $key) { + echo "Two identical keys created"; + } + $old = $key; +} + +echo "Last key: $key\n"; +?> \ No newline at end of file diff --git a/unittests/createurl.php b/unittests/createurl.php new file mode 100644 index 0000000..7d3d4ca --- /dev/null +++ b/unittests/createurl.php @@ -0,0 +1,16 @@ +createBase32Key(); + +$url = $ga->createURL("someuser", $key); + +system("qrencode -s 6 -o /tmp/file.unittest $url"); +system("eog /tmp/file.unittest"); +unlink("/tmp/file.unittest"); +?> -- 1.7.0.4