Files
2025-12-19 00:26:08 -08:00

1100 lines
34 KiB
PHP

<?php
/*
+---------------------------------------------------------------------------
| Invision Power Board
| ========================================
| by Matthew Mecham
| (c) 2006 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| INVISION POWER BOARD IS NOT FREE SOFTWARE!
| http://www.invisionboard.com
+---------------------------------------------------------------------------
| > $Id$
| > $Revision: 102 $
| > $Date: 2005-12-22 10:14:15 +0000 (Thu, 22 Dec 2005) $
+---------------------------------------------------------------------------
|
| > IPB XML-RPC: SERVER FUNCTIONS
| > Script written by Matt Mecham
| > Date started: Monday 25th June 2007 (19:36)
|
+---------------------------------------------------------------------------
*/
class API_Server
{
/**
* Defines the service for WSDL
* @access Private
* @var array
*/
var $__dispatch_map = array();
/**
* IPS Global Class
* @access Private
* @var object
*/
var $ipsclass;
/**
* IPS API SERVER Class
* @access Private
* @var object
*/
var $class_api_server;
/**
* API_Server::API_Server()
*
* CONSTRUCTOR
*
* @return void
**/
function API_Server( $ipsclass )
{
//-----------------------------------------
// Set IPS CLASS
//-----------------------------------------
$this->ipsclass =& $ipsclass;
//-----------------------------------------
// Load allowed methods and build dispatch
// list
//-----------------------------------------
require_once( ROOT_PATH . 'interface/board/modules/ipb/methods.php' );
if ( is_array( $ALLOWED_METHODS ) and count( $ALLOWED_METHODS ) )
{
foreach( $ALLOWED_METHODS as $_method => $_data )
{
$this->__dispatch_map[ $_method ] = $_data;
}
}
}
/**
* API_Server::fetchStats()
*
* Returns details about the board
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchOnlineUsers( $api_key, $api_module, $sep_character=',' )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchOnlineUsers' ) !== FALSE )
{
$cut_off = $this->ipsclass->vars['au_cutoff'] * 60;
$time = time() - $cut_off;
$rows = array();
$ar_time = time();
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, member_id, member_name, login_type, running_time, member_group',
'from' => 'sessions',
'where' => "running_time > $time" ) );
$this->ipsclass->DB->simple_exec();
//-----------------------------------------
// FETCH...
//-----------------------------------------
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$rows[ $r['running_time'].'.'.$r['id'] ] = $r;
}
krsort( $rows );
//-----------------------------------------
// Is this a root admin in disguise?
// Is that kinda like a diamond in the rough?
//-----------------------------------------
$our_mgroups = array();
if ( isset($this->ipsclass->member['mgroup_others']) AND $this->ipsclass->member['mgroup_others'] )
{
$our_mgroups = explode( ",", $this->ipsclass->clean_perm_string( $this->ipsclass->member['mgroup_others'] ) );
}
$our_mgroups[] = $this->ipsclass->member['mgroup'];
//-----------------------------------------
// cache all printed members so we
// don't double print them
//-----------------------------------------
$cached = array();
foreach ( $rows as $result )
{
$last_date = $this->ipsclass->get_time( $result['running_time'] );
//-----------------------------------------
// Bot?
//-----------------------------------------
if ( strstr( $result['id'], '_session' ) )
{
//-----------------------------------------
// Seen bot of this type yet?
//-----------------------------------------
$botname = preg_replace( '/^(.+?)=/', "\\1", $result['id'] );
if ( ! $cached[ $result['member_name'] ] )
{
if ( $this->ipsclass->vars['spider_anon'] )
{
if ( in_array( $this->ipsclass->vars['admin_group'], $our_mgroups ) )
{
$active['member_names'] .= "{$result['member_name']}*{$sep_character} \n";
}
}
else
{
$active['member_names'] .= "{$result['member_name']}{$sep_character} \n";
}
$cached[ $result['member_name'] ] = 1;
}
else
{
//-----------------------------------------
// Yup, count others as guest
//-----------------------------------------
$active['guest_count']++;
}
}
//-----------------------------------------
// Guest?
//-----------------------------------------
else if ( ! $result['member_id'] )
{
$active['guest_count']++;
}
//-----------------------------------------
// Member?
//-----------------------------------------
else
{
if ( empty( $cached[ $result['member_id'] ] ) )
{
$cached[ $result['member_id'] ] = 1;
$result['member_name'] = $this->ipsclass->make_name_formatted( $result['member_name'], $result['member_group'] );
if ($result['login_type'])
{
if ( (in_array( $this->ipsclass->vars['admin_group'], $our_mgroups )) and ($this->ipsclass->vars['disable_admin_anon'] != 1) )
{
$active['member_names'] .= "<a href='{$this->ipsclass->base_url}showuser={$result['member_id']}' title='$last_date'>{$result['member_name']}</a>*{$sep_character} \n";
$active['anon_count']++;
}
else
{
$active['anon_count']++;
}
}
else
{
$active['member_count']++;
$active['member_names'] .= "<a href='{$this->ipsclass->base_url}showuser={$result['member_id']}' title='$last_date'>{$result['member_name']}</a>{$sep_character} \n";
}
}
}
}
$active['member_names'] = preg_replace( "/".preg_quote($sep_character)."$/", "", trim($active['member_names']) );
$active['total_count'] = $active['member_count'] + $active['guest_count'] + $active['anon_count'];
//-----------------------------------------
// Return info
//-----------------------------------------
$this->class_api_server->api_send_reply( $active );
exit();
}
}
/**
* API_Server::fetchStats()
*
* Returns details about the board
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchStats( $api_key, $api_module )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchStats' ) !== FALSE )
{
if ( ! is_array( $this->ipsclass->cache['stats'] ) )
{
$this->ipsclass->cache['stats'] = array();
$this->ipsclass->update_cache( array( 'name' => 'stats', 'array' => 1, 'deletefirst' => 1 ) );
}
$stats =& $this->ipsclass->cache['stats'];
$most_time = $this->ipsclass->get_date( $stats['most_date'], 'LONG' );
$most_count = $this->ipsclass->do_number_format( $stats['most_count'] );
$total_posts = $stats['total_topics'] + $stats['total_replies'];
$total_posts = $this->ipsclass->do_number_format($total_posts);
$mem_count = $this->ipsclass->do_number_format($stats['mem_count']);
$mem_last_id = $stats['last_mem_id'];
$mem_last_name = $stats['last_mem_name'];
//-----------------------------------------
// Return info
//-----------------------------------------
$this->class_api_server->api_send_reply( array( 'users_most_online' => $most_count,
'users_most_date_formatted' => $most_time,
'users_most_data_unix' => $stats['most_date'],
'total_posts' => $total_posts,
'total_members' => $mem_count,
'last_member_id' => $mem_last_id,
'last_member_name' => $mem_last_name ) );
exit();
}
}
/**
* API_Server::helloBoard()
*
* Returns details about the board
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function helloBoard( $api_key, $api_module )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'helloBoard' ) !== FALSE )
{
//-----------------------------------------
// Upgrade history?
//-----------------------------------------
$latest_version = array( 'upgrade_version_id' => NULL );
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'upgrade_history', 'order' => 'upgrade_version_id DESC', 'limit' => array(1) ) );
$this->ipsclass->DB->simple_exec();
while( $r = $this->ipsclass->DB->fetch_row() )
{
$latest_version = $r;
}
//-----------------------------------------
// Return info
//-----------------------------------------
$this->class_api_server->api_send_reply( array( 'board_name' => $this->ipsclass->vars['board_name'],
'upload_url' => $this->ipsclass->vars['upload_url'],
'ipb_img_url' => $this->ipsclass->vars['ipb_img_url'],
'board_human_version' => $latest_version['upgrade_version_human'],
'board_long_version' => ( isset($latest_version['upgrade_notes']) AND $latest_version['upgrade_notes'] ) ? $latest_version['upgrade_notes'] : $this->ipsclass->vn_full ) );
exit();
}
}
/**
* API_Server::postTopic()
*
* Returns a member
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function postTopic( $api_key, $api_module, $member_field, $member_key, $forum_id, $topic_title, $topic_description, $post_content )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$member_field = $this->ipsclass->parse_clean_value( $member_field );
$member_key = $this->ipsclass->parse_clean_value( $member_key );
$topic_title = $this->ipsclass->parse_clean_value( $topic_title );
$topic_description = $this->ipsclass->parse_clean_value( $topic_description );
$forum_id = intval( $forum_id );
$UNCLEANED_post_content = $post_content;
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'postTopic' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_topics_and_posts' );
//-----------------------------------------
// Member field...
//-----------------------------------------
switch( $member_field )
{
case 'email':
case 'emailaddress':
case 'email_address':
$this->api->set_author_by_email( $this->ipsclass->clean_email( strtolower( $member_key ) ) );
break;
case 'id':
$this->api->set_author_by_id( intval( $member_key ) );
break;
case 'name':
case 'username':
case 'loginname':
$this->api->set_author_by_name( $member_key );
break;
case 'displayname':
case 'members_display_name':
$this->api->set_author_by_display_name( $member_key );
break;
}
//-----------------------------------------
// Got a member?
//-----------------------------------------
if ( ! $this->api->author['id'] )
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail',
'faultCode' => '10',
'faultString' => "IP.Board could not locate a member using $member_key / $member_field" ) );
}
//-----------------------------------------
// Try setting the topic...
//-----------------------------------------
$this->api->set_forum_id( $forum_id );
if ( ! $this->api->forum['id'] )
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail',
'faultCode' => '11',
'faultString' => "IP.Board could not locate a forum using ID $topic_id" ) );
}
//-----------------------------------------
// Try setting the post, topic and desc...
//-----------------------------------------
$this->api->set_post_content( $UNCLEANED_post_content );
$this->api->set_topic_title( $topic_title );
$this->api->set_topic_description( $topic_description );
//-----------------------------------------
// Ok, do it!
//-----------------------------------------
if ( $this->api->create_new_topic() !== FALSE )
{
$this->class_api_server->api_send_reply( array( 'result' => 'success',
'topic_id' => $this->api->topic['tid'] ) );
}
else
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail' ) );
}
exit();
}
}
/**
* API_Server::postReply()
*
* Returns a member
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function postReply( $api_key, $api_module, $member_field, $member_key, $topic_id, $post_content )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$member_field = $this->ipsclass->parse_clean_value( $member_field );
$member_key = $this->ipsclass->parse_clean_value( $member_key );
$topic_id = intval( $topic_id );
$UNCLEANED_post_content = $post_content;
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'postReply' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_topics_and_posts' );
//-----------------------------------------
// Member field...
//-----------------------------------------
switch( $member_field )
{
case 'email':
case 'emailaddress':
case 'email_address':
$this->api->set_author_by_email( $this->ipsclass->clean_email( strtolower( $member_key ) ) );
break;
case 'id':
$this->api->set_author_by_id( intval( $member_key ) );
break;
case 'name':
case 'username':
case 'loginname':
$this->api->set_author_by_name( $member_key );
break;
case 'displayname':
case 'members_display_name':
$this->api->set_author_by_display_name( $member_key );
break;
}
//-----------------------------------------
// Got a member?
//-----------------------------------------
if ( ! $this->api->author['id'] )
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail',
'faultCode' => '10',
'faultString' => "IP.Board could not locate a member using $member_key / $member_field" ) );
}
//-----------------------------------------
// Try setting the topic...
//-----------------------------------------
$this->api->set_topic_id( $topic_id );
if ( ! $this->api->topic['tid'] )
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail',
'faultCode' => '11',
'faultString' => "IP.Board could not locate a topic using ID $topic_id" ) );
}
//-----------------------------------------
// Try setting the post content...
//-----------------------------------------
$this->api->set_post_content( $UNCLEANED_post_content );
//-----------------------------------------
// Ok, do it!
//-----------------------------------------
if ( $this->api->create_new_reply() !== FALSE )
{
$this->class_api_server->api_send_reply( array( 'result' => 'success' ) );
}
else
{
$this->class_api_server->api_send_reply( array( 'result' => 'fail' ) );
}
exit();
}
}
/**
* API_Server::fetchMember()
*
* Returns a member
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchMember( $api_key, $api_module, $search_type, $search_string )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$search_type = $this->ipsclass->parse_clean_value( $search_type );
$search_string = $this->ipsclass->parse_clean_value( $search_string );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchMember' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_member' );
//-----------------------------------------
// Fetch forum list
//-----------------------------------------
$member = $this->api->get_member( $search_type, $search_string );
if ( ! $member['id'] )
{
$member = array( 'id' => 0 );
}
//-----------------------------------------
// Return the data
//-----------------------------------------
$this->class_api_server->api_send_reply( $member );
exit();
}
}
/**
* API_Server::checkMemberExists()
*
* Returns topics
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function checkMemberExists( $api_key, $api_module, $search_type, $search_string )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$search_type = $this->ipsclass->parse_clean_value( $search_type );
$search_string = $this->ipsclass->parse_clean_value( $search_string );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'checkMemberExists' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_member' );
//-----------------------------------------
// Fetch forum list
//-----------------------------------------
$check = $this->api->check_for_member( $search_type, $search_string );
$_check = ( $check === TRUE ) ? 'true' : 'false';
//-----------------------------------------
// Return the data
//-----------------------------------------
$this->class_api_server->api_send_reply( array( 'memberExists' => $_check ) );
exit();
}
}
/**
* API_Server::fetchForumsOptionList()
*
* Returns topics
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchForumsOptionList( $api_key, $api_module, $selected_forum_ids, $view_as_guest )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$selected_forum_ids = ( $selected_forum_ids ) ? explode( ',', $this->ipsclass->parse_clean_value( $selected_forum_ids ) ) : null;
$view_as_guest = intval( $view_as_guest );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchForumsOptionList' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_forums' );
//-----------------------------------------
// Fetch forum list
//-----------------------------------------
$list = $this->api->return_forum_jump_option_list( $selected_forum_ids, $view_as_guest );
//-----------------------------------------
// Return the data
//-----------------------------------------
$this->class_api_server->api_send_reply( array( 'forumList' => $list ) );
exit();
}
}
/**
* API_Server::fetchForums()
*
* Returns topics
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchForums( $api_key, $api_module, $forum_ids, $view_as_guest )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$forum_ids = ( $forum_ids ) ? explode( ',', $this->ipsclass->parse_clean_value( $forum_ids ) ) : null;
$view_as_guest = intval( $view_as_guest );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchForums' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_forums' );
//-----------------------------------------
// Fetch forum list
//-----------------------------------------
$forums = $this->api->return_forum_data( $forum_ids, $view_as_guest );
//-----------------------------------------
// Return the data
//-----------------------------------------
$this->class_api_server->api_send_reply( $forums );
exit();
}
}
/**
* API_Server::fetchTopics()
*
* Returns topics
*
* @param string $auth_key Authentication Key
* @param string $api_module Module
* @return xml
**/
function fetchTopics( $api_key, $api_module, $forum_ids, $order_field, $order_by, $offset, $limit, $view_as_guest )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$api_key = $this->ipsclass->txt_md5_clean( $api_key );
$api_module = $this->ipsclass->parse_clean_value( $api_module );
$forum_ids = $this->ipsclass->parse_clean_value( $forum_ids );
$order_field = $this->ipsclass->parse_clean_value( $order_field );
$order_by = ( strtolower( $order_by ) == 'asc' ) ? 'asc' : 'desc';
$offset = intval( $offset );
$limit = intval( $limit );
$view_as_guest = intval( $view_as_guest );
//-----------------------------------------
// Authenticate
//-----------------------------------------
if ( $this->__authenticate( $api_key, $api_module, 'fetchTopics' ) !== FALSE )
{
//-----------------------------------------
// Add log
//-----------------------------------------
if ( $this->ipsclass->vars['xmlrpc_log_type'] != 'failed' )
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 1 ) );
}
//-----------------------------------------
// Get API classes
//-----------------------------------------
$this->__load_api_classes( 'api_topic_view' );
//-----------------------------------------
// Fetch topic list
//-----------------------------------------
$this->api->topic_list_config['order_field'] = $order_field;
$this->api->topic_list_config['order_by'] = $order_by;
$this->api->topic_list_config['forums'] = $forum_ids;
$this->api->topic_list_config['offset'] = $offset;
$this->api->topic_list_config['limit'] = $limit;
$topics = $this->api->return_topic_list_data( $view_as_guest );
//-----------------------------------------
// Return the data
//-----------------------------------------
$this->class_api_server->api_send_reply( $topics );
exit();
}
}
/**
* API_Server::__create_user_session()
*
* Has to return at least the member ID, member log in key and session ID
*
*
* @param array $member Array of member information
* @return array $session Session information
**/
function __create_user_session( $member )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$update = array();
//-----------------------------------------
// Generate a new log in key
//-----------------------------------------
if ( $this->ipsclass->vars['login_change_key'] OR ! $member['member_login_key'] )
{
$update['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key();
}
//-----------------------------------------
// Set our privacy status
//-----------------------------------------
$update['login_anonymous'] = '0&1';
//-----------------------------------------
// Update member?
//-----------------------------------------
if ( is_array( $update ) and count( $update ) )
{
$this->ipsclass->DB->do_update( 'members', $update, 'id=' . $member['id'] );
}
//-----------------------------------------
// Still here? Create a new session
//-----------------------------------------
require_once( ROOT_PATH . 'sources/classes/class_session.php' );
$session = new session();
$session->ipsclass =& $this->ipsclass;
$session->time_now = time();
$session->member = $member;
$session->create_member_session();
$session->member['_session_id'] = $session->session_id;
return $session->member;
}
/**
* API_Server::__create_user_account()
*
* Routine to create a local user account
*
*
* @param string $email_address Email address of user logged in
* @param string $md5_once_password The plain text password, hashed once
* @param string $ip_address IP Address of registree
* @param string $unix_join_date The member's join date in unix format
* @param string $timezone The member's timezone
* @param string $dst_autocorrect The member's DST autocorrect settings
* @return array $member Newly created member array
**/
function __create_user_account( $email_address='', $md5_once_password, $ip_address, $unix_join_date, $timezone=0, $dst_autocorrect=0 )
{
//-----------------------------------------
// Check to make sure there's not already
// a member registered.
//-----------------------------------------
$member = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',
'from' => 'members',
'where' => "email='" . $this->ipsclass->DB->add_slashes( $email_address ) . "'" ) );
if ( $member['id'] )
{
return $member;
}
//-----------------------------------------
// INIT
//-----------------------------------------
$unix_join_date = $unix_join_date ? $unix_join_date : time();
$ip_address = $ip_address ? $ip_address : $this->ipsclass->ip_address;
//-----------------------------------------
// Grab module..
//-----------------------------------------
require( ROOT_PATH . "sources/loginauth/login_core.php" );
$login_core = new login_core();
$login_core->ipsclass = $this->ipsclass;
//-----------------------------------------
// Create member
//-----------------------------------------
$member = $login_core->_create_local_member( $email_address, $md5_once_password, $email_address, $unix_join_date, $ip_address );
return $member;
}
/**
* API_Server::__authenticate()
*
* Checks to see if the request is allowed
*
* @param string $api_key Authenticate Key
* @param string $api_module Module
* @param string $api_function Function
* @return string Error message, if any
**/
function __authenticate( $api_key, $api_module, $api_function )
{
//-----------------------------------------
// Check
//-----------------------------------------
if ( $this->api_user['api_user_id'] )
{
$this->api_user['_permissions'] = unserialize( stripslashes( $this->api_user['api_user_perms'] ) );
if ( $this->api_user['_permissions'][ $api_module ][ $api_function ] == 1 )
{
return TRUE;
}
else
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 0 ) );
$this->class_api_server->api_send_reply( array( 'faultCode' => '200',
'faultString' => "API Key {$api_key} does not have permission for {$api_module}/{$api_function}" ) );
return FALSE;
}
}
else
{
$this->ipsclass->DB->do_insert( 'api_log', array( 'api_log_key' => $api_key,
'api_log_ip' => $_SERVER['REMOTE_ADDR'],
'api_log_date' => time(),
'api_log_query' => $this->class_api_server->raw_request,
'api_log_allowed' => 0 ) );
$this->class_api_server->api_send_reply( array( 'faultCode' => '100',
'faultString' => "API Key {$api_key} does not have permission for {$api_module}/{$api_function}" ) );
return FALSE;
}
}
/**
* API_Server::__load_api_classes()
*
* Loads the API system classes
*
* @param string $api_class The name of the API class to load
* @access Private
* @return void
**/
function __load_api_classes( $api_class )
{
require_once( ROOT_PATH . "sources/api/api_core.php" );
require_once( ROOT_PATH . "sources/api/" . $api_class . '.php' );
$this->api = new $api_class;
$this->api->ipsclass =& $this->ipsclass;
$this->api->path_to_ipb = ROOT_PATH;
$this->api->api_init();
}
}
?>