[Cs-webapplibs-commits] SF.net SVN: cs-webapplibs:[113] trunk/0.3/cs_authToken.class.php
Status: Beta
Brought to you by:
crazedsanity
|
From: <cra...@us...> - 2009-08-19 19:25:00
|
Revision: 113
http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=113&view=rev
Author: crazedsanity
Date: 2009-08-19 19:24:52 +0000 (Wed, 19 Aug 2009)
Log Message:
-----------
Headers, use get_token_data() in authenticate_token().
/cs_authToken.class.php:
* ADDED HEADERS:
-- __constructor()
-- load_table()
-- create_hash_string()
-- create_token()
-- update_token_uses()
-- destroy_token()
-- authenticate_token()
-- get_token_data()
* authenticate_token():
-- call get_token_data()
-- do extra checking on the return value that was previously in SQL.
* get_token_data():
-- updated to only show records that haven't expired.
-- extra checking for if it returns boolean false.
Modified Paths:
--------------
trunk/0.3/cs_authToken.class.php
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php 2009-08-19 19:01:21 UTC (rev 112)
+++ trunk/0.3/cs_authToken.class.php 2009-08-19 19:24:52 UTC (rev 113)
@@ -28,6 +28,9 @@
private $seq = 'cswal_auth_token_table_auth_token_id_seq';
//=========================================================================
+ /**
+ * The CONSTRUCTOR. Sets internal properties & such.
+ */
public function __construct(cs_phpDB $db) {
if($db->is_connected()) {
@@ -44,6 +47,9 @@
//=========================================================================
+ /**
+ * Load table into the database...
+ */
public function load_table() {
$file = dirname(__FILE__) .'/setup/authtoken_schema.'. $this->db->get_dbtype() .'.sql';
@@ -64,6 +70,17 @@
//=========================================================================
+ /**
+ * Standardized method of creating a hash from a string.
+ *
+ * @param $tokenId (int) matches auth_token_id column....
+ * @param $uid (int) matches uid column...
+ * @param $checksum (str) This is the value that can be used by the
+ * calling code to see if the given uid matches
+ * this data (i.e. using an email address/username).
+ * @param $stringToHash (str) Data used to help create a hash, usually
+ * something very unique.
+ */
protected function create_hash_string($tokenId, $uid, $checksum, $stringToHash=NULL) {
return(md5($tokenId ."_". $uid ."_". $checksum ."_". $stringToHash));
}//end create_hash_string()
@@ -72,6 +89,20 @@
//=========================================================================
+ /**
+ * Build a token record in the database that can be authenticated against later.
+ *
+ * @param $uid (int) matches uid column...
+ * @param $checksum (str) matches checksum column...
+ * @param $stringToHash (str) unique value to help build hash from.
+ * @param $lifetime (str,optional) string (interval) representing how
+ * long the token should last.
+ * @param $maxUses (int,optional) Number of times it can be authenticated
+ * against before being removed.
+ *
+ * @return (array) PASS: contains id & hash for the token.
+ * @return (exception) FAIL: exception contains error details.
+ */
public function create_token($uid, $checksum, $stringToHash, $lifetime=null, $maxUses=null) {
$insertData = array(
@@ -112,6 +143,15 @@
//=========================================================================
+ /**
+ * Update the number of times the given token has been used (even if the
+ * maximum uses hasn't been set).
+ *
+ * @param $tokenId (int) auth_token_id to look up.
+ *
+ * @return (int) PASS: updated this many records (should always be 1)
+ * @return (exception) FAIL: exception denotes problem
+ */
protected function update_token_uses($tokenId) {
try {
@@ -129,6 +169,14 @@
//=========================================================================
+ /**
+ * Deletes the given token ID from the database.
+ *
+ * @param $tokenId (int) auth_token_id to delete
+ *
+ * @return (int) PASS: this many were deleted (should always be 1)
+ * @return (exception) FAIL: exception contains error details
+ */
protected function destroy_token($tokenId) {
try {
$sql = "DELETE FROM ". $this->table ." WHERE auth_token_id=". $tokenId;
@@ -162,22 +210,23 @@
* if($tokenUid == $realUid) {
* //token is truly authentic
* }
+ *
+ * @param $tokenId (int) auth_token_id to check against
+ * @param $checksum (str) required 'checksum' value.
+ * @param $hash (str) required 'token' value.
*/
public function authenticate_token($tokenId, $checksum, $hash) {
$authTokenRes = null;
if(is_numeric($tokenId) && strlen($checksum) && strlen($hash) == 32) {
- $sql = "SELECT * FROM ". $this->table ." WHERE auth_token_id=". $tokenId
- ." AND (creation + duration)::date >= CURRENT_DATE";
-
try {
- $data = $this->db->run_query($sql, 'auth_token_id');
+ $data = $this->get_token_data($tokenId);
if(count($data) == 1 && isset($data[$tokenId]) && is_array($data[$tokenId])) {
$data = $data[$tokenId];
- if($data['token'] == $hash && $data['checksum'] == $checksum) {
+ if($data['token'] == $hash && $data['checksum']) {
$methodCall = 'update_token_uses';
if(is_numeric($data['max_uses'])) {
@@ -220,15 +269,34 @@
//=========================================================================
+
//=========================================================================
+ /**
+ * Retrieve data for the given ID.
+ *
+ * @param $tokenId (int) auth_token_id to look up.
+ *
+ * @return (array) PASS: contains data about the given ID
+ * @return (exception) FAIL: exception contains error details.
+ */
protected function get_token_data($tokenId) {
try {
- $data = $this->db->run_query("SELECT * FROM ". $this->table ." WHERE auth_token_id=". $tokenId);
+ $data = $this->db->run_query("SELECT * FROM ". $this->table ." WHERE auth_token_id=". $tokenId
+ ." AND (creation + duration)::date >= CURRENT_DATE", 'auth_token_id');
+ if(is_array($data) && count($data) == 1) {
+ $tokenData = $data;
+ }
+ elseif($data === false) {
+ $tokenData = false;
+ }
+ else {
+ throw new exception("too many records returned (". count($data) .")");
+ }
}
catch(exception $e) {
throw new exception(__METHOD__ .": failed to retrieve tokenId (". $tokenId .")::: ". $e->getMessage());
}
- return($data);
+ return($tokenData);
}//end get_token_data();
//=========================================================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|