if (empty($this->name)) {
return $this->email;
}
+
return '"' . addslashes($this->name) . '" <' . $this->email . '>';
}
) &&
($default_admin || $u->get('email', $ff->Pman['local_autoauth']))
) {
- $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize($default_admin ? $default_admin : $u);
+
+ $user = $default_admin ? $default_admin->toArray() : $u->toArray();
+
+ $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize((object) $user);
return true;
}
return md5(implode(',' , array($month, $this->email , $this->passwd, $this->id)));
}
- function checkPassword($val)
+
+ function checkTwoFactorAuthentication($val)
{
- if(!empty($this->oath_key)){
- return $this->checkTwoFactorAuthentication($val);
+ require_once 'System.php';
+
+ $oathtool = System::which('oathtool');
+
+ if (!$oathtool) {
+ return false;
}
+ $cmd = "{$oathtool} --totp --base32 {$this->oath_key}";
+
+ $password = exec($cmd);
+
+ return ($password == $val) ? true : false;
+ }
+
+ function checkPassword($val)
+ {
if (substr($this->passwd,0,1) == '$') {
if (function_exists('pasword_verify')) {
return password_verify($val, $this->passwd);
}
/*
- * Seems we never expose oath_key, so...
+ * Seems we never expose oath_key / passwd, so...
*/
- $this->selectAdd("
- CASE WHEN core_person.oath_key != '' THEN
- TRUE
- ELSE
- FALSE
- END AS has_oath_key
- ");
+
+ if($this->tableName() == 'core_person'){
+ $this->_extra_cols = array('length_passwd', 'length_oath_key');
+
+ $this->selectAdd("
+ LENGTH({$this->tableName()}.passwd) AS length_passwd,
+ LENGTH({$this->tableName()}.oath_key) AS length_oath_key
+ ");
+ }
}
function setFromRoo($ar, $roo)
{
- $this->setFrom($ar);
+ $this->setFrom($ar);
+
+ if(!empty($ar['_enable_oath_key'])){
+ $this->generateOathKey();
+ }
+
if (!empty($ar['passwd1'])) {
$this->setPassword($ar['passwd1']);
}
return "Duplicate Email found";
}
- if(!empty($ar['_enable_oath_key'])){
- $this->generateOathKey();
- }
-
return true;
}
/**
return true;
}
- function toRooSingleArray($au, $q)
- {
- $ret = $this->toArray();
-
- $core_person = DB_DataObject::factory('core_person');
- $core_person->selectAdd();
- $core_person->selectAdd("
- CASE WHEN core_person.oath_key != '' THEN
- TRUE
- ELSE
- FALSE
- END AS has_oath_key
- ");
- $core_person->get($this->id);
-
- $ret['has_oath_key'] = $core_person->oath_key;
-
- return $ret;
-
- }
-
function beforeUpdate($old, $q, $roo)
{
if(!empty($q['_generate_oath_key'])){
if(!empty($q['_to_qr_code'])){
$qrcode = $this->generateQRCode();
+
+ if(empty($qrcode)){
+ $roo->jerr('Fail to generate QR Code');
+ }
+
$roo->jdata($qrcode);
}
}
$uri = "otpauth://totp/{$issuer}:{$this->email}?secret={$this->oath_key}&issuer={$issuer}&algorithm=SHA1&digits=6&period=30";
- $base64 = base64_encode(file_get_contents("https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl={$uri}"));
+ require_once 'Image/QRCode.php';
- return "data:image/png;base64,{$base64}";
- }
-
- function checkTwoFactorAuthentication($val)
- {
- require_once 'System.php';
+ $qrcode = new Image_QRCode();
- $oathtool = System::which('oathtool');
-
- if (!$oathtool) {
- return false;
- }
+ $image = $qrcode->makeCode($uri, array(
+ 'output_type' => 'return'
+ ));
- $cmd = "{$oathtool} --totp --base32 {$this->oath_key}";
+ ob_start();
+ imagepng($image);
+ $base64 = base64_encode(ob_get_contents());
+ ob_end_clean();
- $password = exec($cmd);
-
- return ($password == $val) ? true : false;
+ return "data:image/png;base64,{$base64}";
}
}