{
$this->initErrorHandling();
- $this->ip_checking();
-
//DB_DataObject::DebugLevel(1);
if (!empty($_REQUEST['logout'])) {
return $this->logout();
//DB_Dataobject::debugLevel(5);
$this->sendAuthUserDetails();
exit;
-
+ }
+
+ if(!empty($_REQUEST['check_owner_company'])) {
+ $core_company = DB_DataObject::factory('core_company');
+ $core_company->comptype = 'OWNER';
+ $this->jok($core_company->count());
}
// might be an idea to disable this?!?
$this->switchPublicUser($_REQUEST['loginPublic']);
}
-
$this->jerr("INVALID REQUEST");
exit;
}
function logout()
{
$ff = class_exists('HTML_FlexyFramework2') ? HTML_FlexyFramework2::get() : HTML_FlexyFramework::get();
- //DB_DAtaObject::debugLevel(1);
+
+ //DB_DAtaObject::debugLevel(1);
$u = $this->getAuthUser();
//print_r($u);
if ($u) {
$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();
}
-
function switchUser($id)
{
$tbl = empty($ff->Pman['authTable']) ? 'core_person' : $ff->Pman['authTable'];
$au = $u->getAuthUser();
-
// first check they have perms to do this..
if (!$au|| ($au->company()->comptype != 'OWNER') || !$this->hasPerm('Core.Person', 'E')) {
$this->jerr("User switching not permitted");
}
-
-
+
$u = DB_DataObject::factory($tbl);
$u->get($id);
if (!$u->active()) {
}
$u->login();
// we might need this later..
- $this->addEvent("SWITCH USER", false, $au->name . ' TO ' . $u->name);
+ $this->addEvent("SWITCH-USER", false, $au->name . ' TO ' . $u->name);
$this->jok("SWITCH");
}
function post($v)
{
//DB_DataObject::debugLevel(1);
+
if (!empty($_REQUEST['getAuthUser'])) {
$this->sendAuthUserDetails();
exit;
}
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'])
+ ) {
+ $this->jerr("Invalid request to reset password");
+ }
+ $this->resetPassword()
+ }
+
+ // this is 'classic' change password...
if (!empty($_REQUEST['changePassword'])) {
return $this->changePassword($_REQUEST);
}
$u = DB_DataObject::factory($tbl);
-
-
+ $ip = $this->ip_lookup();
// ratelimit
- if (!empty($_SERVER['REMOTE_ADDR'])) {
+ if (!empty($ip)) {
//DB_DataObject::DebugLevel(1);
$e = DB_DataObject::Factory('Events');
$e->action = 'LOGIN-BAD';
- $e->ipaddr = $_SERVER['REMOTE_ADDR'];
+ $e->ipaddr = $ip;
$e->whereAdd('event_when > NOW() - INTERVAL 10 MINUTE');
if ($e->count() > 5) {
$this->jerror('LOGIN-RATE', "Login failures are rate limited - please try later");
}
if(!empty($u->oath_key) && empty($_REQUEST['oath_password'])){
- $this->jerror('LOGIN-BAD','Your account require Two-Factor Authentication');
+ $this->jerror('LOGIN-BAD','Your account requires Two-Factor Authentication');
}
// check if config allows non-owner passwords.
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;
}
+ $this->ip_checking();
+
$u->login();
// we might need this later..
$this->addEvent("LOGIN", false, session_id());
$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());
+
+ $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($ret->getMessage());
}
+
$this->addEvent('PASSREQ',$u, $u->email);
$uu = clone($u);
$uu->no_reset_sent++;
}
+
+ function resetPassword($id,$t, $key)
+ {
+
+ $au = $this->getAuthUser();
+ if ($au) {
+ return "Already Logged in - no need to use Password Reset";
+ }
+
+ $u = DB_DataObject::factory('core_person');
+ //$u->company_id = $this->company->id;
+ $u->active = 1;
+ if (!$u->get($id) || !strlen($u->passwd)) {
+ return "invalid id";
+ }
+
+ // validate key..
+ if ($key != $u->genPassKey($t)) {
+ return "invalid key";
+ }
+ $uu = clone($u);
+ $u->no_reset_sent = 0;
+ $u->update($uu);
+
+ if ($t < strtotime("NOW - 1 DAY")) {
+ return "expired";
+ }
+ $this->showNewPass = implode("/", array($id,$t,$key));
+ return false;
+ }
+
+
function changePassword($r)
{
$au = $this->getAuthUser();
$core_ip_access = DB_DataObject::factory('core_ip_access');
- if(!$core_ip_access->get('ip', $ip)){
+ if(!DB_DataObject::factory('core_ip_access')->count()){ // first ip we always mark it as approved..
+
+ $core_ip_access = DB_DataObject::factory('core_ip_access');
+
+ $core_ip_access->setFrom(array(
+ 'ip' => $ip,
+ 'created_dt' => $core_ip_access->sqlValue("NOW()"),
+ 'authorized_key' => md5(openssl_random_pseudo_bytes(16)),
+ 'status' => 1,
+ 'email' => (empty($_REQUEST['username'])) ? '' : $_REQUEST['username'],
+ 'user_agent' => (empty($_SERVER['HTTP_USER_AGENT'])) ? '' : $_SERVER['HTTP_USER_AGENT']
+ ));
+
+ $core_ip_access->insert();
+
return;
}
+ $core_ip_access = DB_DataObject::factory('core_ip_access');
+ if(!$core_ip_access->get('ip', $ip)){ // new ip
+
+ $core_ip_access->setFrom(array(
+ 'ip' => $ip,
+ 'created_dt' => $core_ip_access->sqlValue("NOW()"),
+ 'authorized_key' => md5(openssl_random_pseudo_bytes(16)),
+ 'status' => 0,
+ 'email' => (empty($_REQUEST['username'])) ? '' : $_REQUEST['username'],
+ 'user_agent' => (empty($_SERVER['HTTP_USER_AGENT'])) ? '' : $_SERVER['HTTP_USER_AGENT']
+ ));
+
+ $core_ip_access->insert();
+
+ $core_ip_access->sendXMPP();
+
+ $this->jerr('NEW-IP-ADDRESS', array('ip' => $ip));
+
+ return;
+ }
+
+ if(empty($core_ip_access->status)){
+ $this->jerr('PENDING-IP-ADDRESS', array('ip' => $ip));
+ }
+ if($core_ip_access->status == -1){
+ $this->jerr('BLOCKED-IP-ADDRESS', array('ip' => $ip));
+ return;
+ }
+
+ if($core_ip_access->status == -2 && strtotime($core_ip_access->expire_dt) < strtotime('NOW')){
+ $this->jerr('BLOCKED-IP-ADDRESS', array('ip' => $ip));
+ return;
+ }
+
+ return;
}
function ip_lookup()
return $_SERVER['REMOTE_ADDR'];
}
-
-
}