here is the class that communicates with the InvisionAPI. It has been curated to avoid any sensitive info exposed
<?php
/**
* Here is the full class that communicates with the InvisionAPI
*
*/
class InvisionAPI {
private static $instance;
public static function getInstance() {
if (self::$instance == null) {
self::$instance = new InvisionAPI();
}
return self::$instance;
}
private $settings;
private $database;
private $session;
public function __construct() {
$this->refreshSession();
$this->session = \IPS\Session\Front::i();
$this->database = \IPS\Db::i();
$this->settings = \IPS\Settings::i();
}
/**
* Refreshes our IPS session, if we ever had one.
* Required if for some reason our session has timed out and we have yet to revisit the suite.
*/
public function refreshSession() {
$this->requireIPS();
\IPS\Session\Front::i();
}
public function isGuest($member) {
return $member->member_group_id == $this->settings->guest_group;
}
/**
* Returns the current logged in user
* This method is called when I access after login form, it always returns Guest!
* @return null
*/
public function getCachedMember() {
$this->refreshSession();
$member = \IPS\Member::loggedIn();
if ($this->isGuest($member)) {
return null;
}
return new InvisionMember($member);
}
public function loadMember($username) {
$member = \IPS\Member::load($username, 'name');
if ($this->isGuest($member)) {
return null;
}
return $member;
}
/**
* This returns true when user/pass is OK so I know it works!
*/
public function login($username, $password, $rememberMe = false) {
$member = $this->loadMember($username);
if ($member == null) {
return null;
}
if (!$this->verifyPassword($member, $password)) {
return false;
}
$this->setSession($member, $rememberMe);
return true;
}
public function logout() {
$member = $this->getCachedMember();
if ($member == null) {
return; // We are already logged out
}
session_destroy();
\IPS\Request::i()->clearLoginCookies();
$member->memberSync('onLogout', array(\IPS\Http\Url::internal('')));
}
/**
* Sets the user session after use has been verified.
* @param $member
* @param $rememberMe
*/
public function setSession($member, $rememberMe) {
$this->session->setMember($member);
$device = \IPS\Member\Device::loadOrCreate($member);
$member->last_visit = $member->last_activity;
$member->save();
$device->anonymous = false;
$device->updateAfterAuthentication($rememberMe, null);
$member->memberSync('onLogin');
$member->profileSync();
/**
* If I do a test here, it fails, I get guest!
* $member = \IPS\Member::loggedIn();
*/
}
public function verifyPassword($member, $password) {
return password_verify($password, $member->members_pass_hash) === true;
}
private function requireIPS() {
require_once FORUM_PATH . 'init.php';
}
}