コード例 #1
0
ファイル: player_auth.php プロジェクト: cls1991/ryzomcore
 * ryzom_api is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with ryzom_api.  If not, see <http://www.gnu.org/licenses/>.
 */
require_once 'ryzom_api.php';
$cid = ryzom_get_param('cid');
$name = ryzom_get_param('name');
$authserver = ryzom_get_param('authserver');
$authkey = ryzom_get_param('authkey');
if ($authserver) {
    if (ryzom_authenticate_with_serverkey($cid, $name, $authserver, $authkey)) {
        die('1');
    }
    die('0');
}
if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Ryzom') || ryzom_get_param('ig')) {
    echo 'ig';
    if (ryzom_authenticate_ingame($cid, $name, $authkey)) {
        echo 'ok';
        $user_infos = ryzom_user_get_info($cid);
        echo ryzom_get_user_id($cid, $name, $user_infos['creation_date']);
        die('1');
    }
    die('0');
} else {
    echo ryzom_authenticate_with_session($name, $cid, $error_message);
}
コード例 #2
0
ファイル: auth.php プロジェクト: cls1991/ryzomcore
function ryzom_app_authenticate(&$user, $ask_login = true, $welcome_message = '', $webprivs = true)
{
    $name = ryzom_get_param('name');
    $urluser = ryzom_get_param('user');
    // user serialization send by auth server
    $urlusercheksum = ryzom_get_param('checksum');
    // user serialization checksum
    $authkey = ryzom_get_param('authkey');
    // InGame authkey
    $lang = ryzom_get_param('lang');
    $cid = intval(ryzom_get_param('cid'));
    $is_auth_ingame = false;
    // we have to set the $user['lang'] even for anonymous user or we cannot display the test in the right langage
    if ($lang == '') {
        if (!isset($_SESSION['lang'])) {
            $l = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en';
            if ($l == 'fr' || $l == 'en' || $l == 'de' || $l == 'ru' || $l == 'es') {
                $lang = $l;
            } else {
                $lang = 'en';
            }
        } else {
            $lang = $_SESSION['lang'];
        }
    }
    if ($lang != 'fr' && $lang != 'en' && $lang != 'de' && $lang != 'ru' && $lang != 'es') {
        $lang = 'en';
    }
    $user['message'] = '';
    $user['lang'] = $lang;
    $user['groups'] = array();
    if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Ryzom') || ryzom_get_param('ig')) {
        $user['ig'] = true;
    } else {
        $user['ig'] = false;
    }
    if (isset($_SESSION['user'])) {
        if (ryzom_get_param('action') == 'logout') {
            unset($_SESSION['user']);
        } else {
            $_SESSION['user']['ig'] = $user['ig'];
            define('RYZOM_IG', $user['ig']);
            $user = $_SESSION['user'];
            return true;
        }
    }
    if ($urluser && $urlusercheksum) {
        // Check $authuser (used to test app from another server ingame)
        if (hash_hmac('sha1', $urluser, RYAPI_AUTH_KEY) == $urlusercheksum) {
            $ig = $user['ig'];
            $user = array_merge($user, unserialize(base64_decode($urluser)));
            $user['ig'] = $ig;
            if (!isset($user['groups'])) {
                $user['groups'] = array();
            }
            define('RYZOM_IG', $user['ig']);
            $_SESSION['user'] = $user;
            return true;
        }
    }
    if ($user['ig']) {
        // Ingame
        $shardid = ryzom_get_param('shardid');
        $error_message = '';
        if (ryzom_authenticate_ingame($shardid, $cid, $name, $authkey) || ryzom_authenticate_with_session($name, $cid, $error_message)) {
            $is_auth_ingame = true;
        }
    } else {
        // Outgame or bad ingame auth (external server) : Use session
        $error_message = '';
        if (!ryzom_authenticate_with_session($name, $cid, $error_message)) {
            define('RYZOM_IG', false);
            if ($ask_login) {
                if ($error_message) {
                    $c = '<h3>' . _t($error_message) . '</h3>';
                } else {
                    $c = '';
                }
                if (!$welcome_message) {
                    $welcome_message = '<span style="font-size:11pt; color: #AAAAFF">The application <strong style="color: #99FFFF">' . _t(APP_NAME) . '</strong> require authentication. Please enter your credentials</span>';
                }
                $c .= '<div style="text-align: center">' . $welcome_message . '</div><br />';
                if ($user['message']) {
                    $c .= '<div style="text-align: center"><strong style="color: #FF5555">' . _t($user['message']) . '</strong></div><br />';
                }
                $c .= ryzom_render_login_form($name, false);
                echo ryzom_app_render(_t('app_' . APP_NAME), $c);
                die;
            }
            return false;
        }
    }
    $_SESSION['lang'] = $lang;
    define('RYZOM_IG', $user['ig']);
    // get user informations
    $ig = $user['ig'];
    $user = ryzom_user_get_info($cid, $webprivs, RYAPI_USE_PLAYER_STATS);
    if (isset($user['creation_date'])) {
        $user['id'] = ryzom_get_user_id($cid, $user['char_name'], $user['creation_date'], $user);
    }
    $user['gender'] = ryzom_get_user_gender($user['id']);
    $user['ig'] = $ig;
    $user['lang'] = $_SESSION['lang'];
    if (!isset($user['groups'])) {
        $user['groups'] = array();
    }
    if ($is_auth_ingame && $user['last_played_date'] != '0') {
        $user['auth_ig'] = true;
    } else {
        $user['auth_ig'] = false;
    }
    if (!isset($_SESSION['translater_mode']) || ryzom_get_param('translate_this') == '0') {
        $_SESSION['translater_mode'] = false;
    }
    // Set/unset translation mode
    if (in_array('WTRS', $user['groups']) && ryzom_get_param('translate_this') == '1') {
        $_SESSION['translater_mode'] = true;
    }
    $user['translation_mode'] = $_SESSION['translater_mode'];
    //	$user['after_merge'] = $user['uid'] >= 671686;
    ryzom_unset_url_param('translate_this');
    if (isset($user['last_played_date'])) {
        $_SESSION['last_played_date'] = $user['last_played_date'];
    }
    // don't send this informations to external apps
    unset($user['last_played_date']);
    unset($user['creation_date']);
    return true;
}