Very nice Erick, looks really good.
This should be the last peace to the puzzle.
On Nov 30, 2011 9:09 AM, "Erick Romero" <[email protected]> wrote:

> **
> Hello everybody.
>
> The approach used by Nicolas to authenticate on APE is perfect valid (php
> to ape).
>
> Also I want to share the way I use to authenticate on it.  The approach is
> to have APE asks to "PHP" if the authentication is valid (ape to php).
> For my case, APE is a "piece" of my website and not the core of it. (for
> example a normal CMS + real-time chat)
>
>
>    1. The user enters to the website (php+apache+mysql) and enter its
>    user and password (i.e. login.php)
>    2. A hash is stored into a cookie when it is authenticated
>     3. The hash value is taken and send when APE connects (javascript at
>    client side)
>    4. The APE server gets that hash upon connections and makes a request
>    to a "localhost" script (i.e. connect hook)
>    5. A php script on "localhost" handles any mysql and/or logic related
>    to test if the authentication is valid and send the response to APE (i.e.
>    localhost/ape_auth.php?session_id=aaaaaa)
>    6. APE drops or accepts the incoming connection based on the
>    php-script response
>     7. You should want to make the php-script drops all request other
>    than those coming from "localhost"
>
>
>
> The code at  the *APE server side* looks like this (javascript)
>
>
> /**
>  * Hook connect method
>  * When an user is connecting, it must provide its valid session ID.
>  * If it is not a logged user, then does not accept the connection
>  *
>  * @param params    (object) The list of parameters sent by the client
>  * @param cmd         (object) Contains information about the client:
> */
> Ape.registerHookCmd("connect", function(params, cmd) {
>
>     if ( ! params || ! params.session_id) return 0;
>
>     var request = new Http('
> http://127.0.0.1/is_user_logged_in.php?session='  + params.session_id);
>
>     request.getContent(function(result) { //call the PHP file
>
>         if (result !== 0) {
>
>             var user = JSON.parse(result); //the JSON gotten could include
> user data (i.e. name, uid, email, etc)
>             cmd.user.code = user.code;
>             cmd.user.uid = user.uid;
>
>             cmd.sendResponse('userCode', {'code': user.code});
>             log('- ' + user.code + ' is connecting');
>
>             return 1;
>
>         } else {
>
>             log('USER_NOT_LOGGED_IN');
>             cmd.sendResponse('ERR', {'code': 1001, 'value': 'User not
> logged-in'});
>             return 0;
>
>         }
>     });
>
> });
>
>
>
> The code at the *APE client side* looks like this (javascript)
> Note: JS unserialize is a very helpful function  :-) ->
> http://phpjs.org/functions/unserialize:571
>
>
> var client = new APE.Client();
>
> //Intercept the onLoad event
> client.addEvent('load', function(cmd){
>     //get the session_id from the cookie
>     var ck = unserialize(Cookie.read('session_id'));
>     //Call the core start function to connect to APE Server
>     client.core.start({
>         'session_id': ck.session_id
>     });
> });
>
> client.load();
>
>
>
>
>
> On 11/30/2011 05:23 AM, Nicolas Guibert wrote:
>
> What I do is send a command to APE via PHP when the user is registered.
>
> The command sends a key to APE who stores it.
>
> Then, when the client tries to connect to APE, it sends the key with it,
> and APE checks it.
>
> The code below should help you:
>
>
> $cmd = array(array(
>           'cmd' => 'REGISTER_USER',
>           'params' => array(
>         'name' => "register_user",
>         'user_id' => $user_id,
>         'check_key' => $key,
>         'activation_key' => $activation_key
>            )
>     ));
>
>     // Attention this is synchronous, so it may freeze the server ??
>     $data=send_command_to_APE($cmd);
>
>     if ($data===FALSE OR $data=="")
>     {
>         //die("Server down!!");
>         header('location:server_down.php');
>         die(); // Otherwise, the next header location will take precedence.
>     }
>     else
>     {
>         if ($data[0]->raw=="ERR") // 005 NICK USED
>         {
>             // We can test
>             // $data[0]->data->code
>             // for "005"
>             // OR
>             // $data[0]->data->value
>             // for "NICK USED";
>             header('location:already_connected.php');
>             die();
>         }
>         else
>         {
>             //die("data:".$data[0]->data->value);//print_r($data));
>
>             // Something went wrong with the registration of the user on
> the HM server
>             if ($data[0]->data->value==0)
>             {
>                 header('location:server_down.php');
>                 die();
>             }
>
>             //die("data:".$data[0]->data->value);//print_r($data));
>             // Nothing, let's continue! Checks succeeded!
>         }
>         //die("ok");
>     }
>
>
>
> // Attention this is synchronous, so it may freeze the server ??
> function send_command_to_APE($cmd)
> {
>
>      $base="local.ape-project.org";
>      $port=":6969";
>
>     $APEserver = "http://ape.".$base.$port."/?";;
>
>     $context= stream_context_create(array(
>     'http' => array(
>         'timeout' => 5
>         )
>     )
>     );
>
>     $data =
> @file_get_contents($APEserver.rawurlencode(json_encode($cmd)),0, $context);
>
>     $data = json_decode($data);
>
>     return $data;
> }
>
>
>
>
>
>  2011/11/30 KhoaTA <[email protected]>
>
>> And one thing currently i have to have APE connect MySQL.
>>
>> That is authenticating user who connects to APE.
>> The process is:
>> - User connects to web server, web server will save sessionId in MySQL
>> & return sessionId to user.
>> - User then connects to APE along with sessionId, APE will check if
>> the submitted sessionId is equal to sessionId in MySQL.
>>
>> Currently i can't find another way for authentication. And APE is
>> having problem with MySQL now.
>> Thanks for your support.
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "APE Project" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/ape-project?hl=en
>> ---
>> APE Project (Ajax Push Engine)
>> Official website : http://www.ape-project.org/
>> Git Hub : http://github.com/APE-Project/
>>
>
> --
> You received this message because you are subscribed to the Google
> Groups "APE Project" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/ape-project?hl=en
> ---
> APE Project (Ajax Push Engine)
> Official website : http://www.ape-project.org/
> Git Hub : http://github.com/APE-Project/
>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "APE Project" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/ape-project?hl=en
> ---
> APE Project (Ajax Push Engine)
> Official website : http://www.ape-project.org/
> Git Hub : http://github.com/APE-Project/
>

-- 
You received this message because you are subscribed to the Google
Groups "APE Project" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/ape-project?hl=en
---
APE Project (Ajax Push Engine)
Official website : http://www.ape-project.org/
Git Hub : http://github.com/APE-Project/

Reply via email to