$tbl = empty($ff->Pman['authTable']) ? 'core_person' : $ff->Pman['authTable'];
$u = DB_DataObject::factory($tbl);
+ $s = DB_DataObject::factory('core_setting');
+ $require_oath_val = 1;
+ $require_oath = $s->lookup('core', 'two_factor_auth_required');
+ if(!empty($require_oath)) {
+ if($require_oath->val == 0) {
+ $require_oath_val = 0;
+ }
+ }
+
if (!$u->isAuth()) {
-
- $this->jok(array('id' => 0)); // not logged in..
+ $this->jok(array(
+ 'id' => 0
+ ));
exit;
}
+
//die("got here?");
$au = $u->getAuthUser();
}
if (!empty($_REQUEST['passwordRequest'])) { //|| (strpos($_REQUEST['username'], '@') < 1)) {
-
- return $this->passwordRequest($_REQUEST['passwordRequest']);
-
- }
-
+ return $this->passwordRequest($_REQUEST['passwordRequest']);
+ }
+
+ if (!empty($_REQUEST['ResetPassword'])) {
+ if (empty($_REQUEST['id']) ||
+ empty($_REQUEST['ts']) ||
+ empty($_REQUEST['key']) ||
+ empty($_REQUEST['password1']) ||
+ empty($_REQUEST['password2']) ||
+ ($_REQUEST['password1'] != $_REQUEST['password2'])
+ ) {
+ $this->jerr("Invalid request to reset password");
+ }
+
+ $this->resetPassword($_REQUEST['id'], $_REQUEST['ts'], $_REQUEST['key'], $_REQUEST['password1'] );
+ }
+
+
+ if (!empty($_REQUEST['_verifyCheckSum'])) {
+ if (empty($_REQUEST['id']) ||
+ empty($_REQUEST['ts']) ||
+ empty($_REQUEST['key'])
+
+ ) {
+ $this->jerr("Invalid request to reset password");
+ }
+
+ $this->verifyResetPassword($_REQUEST['id'], $_REQUEST['ts'], $_REQUEST['key']);
+ $this->jok("Checksum is ok");
+ }
+
+ // this is 'classic' change password...
if (!empty($_REQUEST['changePassword'])) {
return $this->changePassword($_REQUEST);
}
exit;
}
- if(!empty($u->oath_key) && !$u->checkTwoFactorAuthentication(trim($_REQUEST['oath_password'],"\x10"))){
+ if(
+ !empty($u->oath_key) &&
+ (
+ empty($_REQUEST['oath_password']) ||
+ !$u->checkTwoFactorAuthentication($_REQUEST['oath_password'])
+ )
+ ) {
$this->jerror('LOGIN-BAD', 'You typed the wrong Username or Password (3)');
exit;
}
// sort out sender.
$cm = DB_DataObject::factory('core_email');
if (!$cm->get('name', 'ADMIN_PASSWORD_RESET')) {
- $this->jerr("no template ADMIN_PASSWORD_RESET exists - please run importer ");
-
+ $this->jerr("no template Admin password reset (ADMIN_PASSWORD_RESET) exists - please run importer ");
}
+ if (!$cm->active) {
+ $this->jerr("template for Admin password reset has been disabled");
+ }
/*
$g = DB_DAtaObject::factory('Groups');
$this->bcc = $bcc;
$this->rcpts = $u->getEmailFrom();
- $ret = $cm->send($this);
- //$this->jerr(print_r($r->toData(),true));
-
- if (is_object($ret)) {
- $this->addEvent('SYSERR',false, $ret->getMessage());
- $this->jerr($ret->getMessage());
- }
+
+ $mailer = $cm->toMailer($this, false);
+ if (is_a($mailer,'PEAR_Error') ) {
+ $this->addEvent('SYSERR',false, $mailer->getMessage());
+ $this->jerr($mailer->getMessage());
+ }
+ $sent = $mailer->send();
+ if (is_a($sent,'PEAR_Error') ) {
+ $this->addEvent('SYSERR',false, $sent->getMessage());
+ $this->jerr($sent->getMessage());
+ }
+
$this->addEvent('PASSREQ',$u, $u->email);
$uu = clone($u);
$uu->no_reset_sent++;
}
- function changePassword($r)
- {
- $au = $this->getAuthUser();
+ function verifyResetPassword($id,$t, $key)
+ {
+ $au = $this->getAuthUser();
+ print_R($au);
if ($au) {
- $uu = clone($au);
- $au->setPassword($r['passwd1']);
- $au->update($uu);
- $this->addEvent("CHANGEPASS", $au);
- $this->jok($au);
- }
- // not logged in -> need to validate
- if (empty($r['passwordReset'])) {
- $this->jerr("invalid request");
- }
- // same code as reset pasword
-
- $bits = explode('/', $r['passwordReset']);
- //print_R($bits);
-
- $res= $this->resetPassword(@$bits[0],@$bits[1],@$bits[2]);
-
- if ($res !== false) {
- $this->jerr($res);
+ $this->jerr( "Already Logged in - no need to use Password Reset");
}
- // key is correct.. let's change password...
$u = DB_DataObject::factory('core_person');
-
//$u->company_id = $this->company->id;
- $u->whereAdd('LENGTH(passwd) > 1');
$u->active = 1;
- if (!$u->get($bits[0])) {
- $this->jerr("invalid id"); // should not happen!!!!
+ if (!$u->get($id) || !strlen($u->passwd)) {
+ $this->jerr("Password reset link is not valid (id)");
+ }
+
+ // validate key..
+ if ($key != $u->genPassKey($t)) {
+ $this->jerr("Password reset link is not valid (key)");
+ }
+
+ if ($t < strtotime("NOW - 1 DAY")) {
+ $this->jerr("Password reset link has expired");
}
+ return $u;
+
+
+
+ }
+
+
+ function resetPassword($id,$t, $key, $newpass )
+ {
+
+ $u = $this->verifyResetPassword($id,$t,$key);
+
+
$uu = clone($u);
- $u->setPassword($r['passwd1']);
+ $u->no_reset_sent = 0;
+ if ($newpass != false) {
+ $u->setPassword($newpass);
+ }
$u->update($uu);
- $u->login();
- $this->addEvent("CHANGEPASS", $u);
- $this->jok($u);
+ $this->addEvent("CHANGEPASS", $u);
+
+ $this->jok("Password has been Updated");
+ }
+
+
+ function changePassword($r)
+ {
+ $au = $this->getAuthUser();
+ if (!$au) {
+ $this->jerr("Password change attempted when not logged in");
+ }
+ $uu = clone($au);
+ $au->setPassword($r['passwd1']);
+ $au->update($uu);
+ $this->addEvent("CHANGEPASS", $au);
+ $this->jok($au);
+
}
function ip_checking()