Ok,
Not a go partially ,
Ape.registerHookCmd("connect", function(params, cmd) {
if (!$defined(params) || !$defined(params.name)) return 0;
if (userlist.has(params.name.toLowerCase())) return ["007",
"NICK_USED"];
if (params.name.length > 9 || params.name.test('[^a-zA-Z0-9]', 'i'))
return ["006", "BAD_NICK"];
//if(isbanned(cmd.ip))return 0;
//Ape.log(isbanned(cmd.ip));
var request = new Http('http://someplace/sql/banned_ips.php');
request.set('method', 'POST');
request.writeData('password', 'pass');
request.writeData('ip', cmd.ip);
request.getContent(function(result){
if(result != ""){
cmd.sendResponse('ERR', {'code': 1001, 'value':'User BANNED'});
return 0;
}else{
cmd.user.setProperty('name', params.name);
cmd.user.setProperty('ip', cmd.ip);
return 1;
}
}).bind(this);
/*cmd.user.setProperty('name', params.name);
cmd.user.setProperty('ip', cmd.ip);
return 1;*/
});
it let me go to the page and wont show up the login form again, gives
me javascript errors..
if I dont use bin(this) then it goes fine to the page with no
javascript properties.. so bin(this) is doing and helping return
something, but doesnt really work well.
On Jan 23, 11:45 am, Erick Romero <[email protected]> wrote:
> Thanks Pablo.
> Technically you are right hence getContent is another function that is
> out of the scope of hook-connect.
>
> The "trick" is to send the next command inside such function when the
> result is "false" or "zero".
> Well, it works fine for me. Also http gets the content sent by the php
> output with not issues. (I am using latest github APED compiled by myself)
>
> cmd.sendResponse('ERR', {'code': 1001, 'value': 'User does not
> logged in'});
>
> Utan, about "non-defined-variables", try to bind getContent to the hook
> function.
> I am using mootools on the server. I am copying my code below so you get
> an idea.
>
> If this does not help you, then I have not more ideas ;-)
>
> var Users = new Class({
>
> initialize: function() {
> Ape.registerHookCmd('connect', this.on_connect.bind(this));
> },
>
> on_connect: function(params, cmd) {
>
> if ( ! params || ! params.session_id) return 0;
>
> var request = new Http(local_urls.IS_USER_LOGGED +
> params.session_id);
>
> request.getContent(function(result) { //call the PHP file
>
> if (result == 0) {
> *cmd.sendResponse('ERR', {'code': 1001, 'value':
> error_codes._1001});*
> log('USER_NOT_LOGGED_IN');
> return 0;
> }
>
> else {
>
> var data_user = JSON.parse(result);
>
> //set private properties
> cmd.user.code = data_user.code;
> cmd.user.uid = data_user.uid;
>
> //send to user its identification code
> cmd.sendResponse('userCode', {'code': data_user.code});
> return 1;
> }
>
> }*.bind(this));*
> }
> });
>
> var global_users;
> Ape.addEvent('init', function(){
> global_users = new Users();
> });
>
> On 01/23/2012 01:12 PM, Pablo Tejada wrote:
>
>
>
>
>
>
>
> > Erik,
>
> > Returning 0 inside the getContent callback does not returns it to the
> > parent function which is the hook. The problem is in the Http class
> > itself.
>
> > I skim through the Http.js file and quickly spotted a fix but I'm
> > currently mobile so I don't know if I'll be able do anything. If I'm
> > able to do the edits that I think could solve this I will share the
> > file with you guys in an attachment.
>
> > On Jan 23, 2012 2:02 PM, "Erick Romero" <[email protected]
> > <mailto:[email protected]>> wrote:
>
> > > No sure if I understand what you mean.
> > > I am understanding that your problem is on the server side. If you have
> > > troubles into the client-side you should add more information.
>
> > > By the way, is the flow-logic entering into the if (result == '')?
> > > If it is the case, then the hook is returning zero and the code should
> > > stop there (returning zero into the hook-connect server makes
> > > client-users to be dropped)
>
> > > If the flow-logic is not entering into the "if" quoted above, in that
> > > case make the PHP-file outputs ZERO when there are not match instead of
> > > a empty char and change the IF to if (result === 0)
>
> > > On 01/23/2012 12:44 PM, utan wrote:
> > > > Hi,
>
> > > > I 've tried your suggestion too I get this nickname.js:40:TypeError:
> > > > user.getProperty("name") is undefined
> > > > and the code runs after the else, but when logged in, the
> > > > user.properties is undefined.. so somehow it stops the code but the
> > > > wrong way..
> > > > My brain is about to explode.. ROLF
>
> > > > On Jan 23, 10:25 am, Erick Romero <[email protected]
> > <mailto:[email protected]>> wrote:
> > > >> What about this:
>
> > > >> Ape.registerHookCmd("connect", function(params, cmd) {
>
> > > >> if ( ! params || ! params.session_id) return 0;
>
> > > >> var request = new Http("your_php_file");
> > > >> request.getContent(function(result) { //call the PHP file
>
> > > >> if (result == '') { //YOUR PHP is sending an EMPTY when
> > > >> there are not match (as you wrote)
>
> > > >> cmd.sendResponse('ERR', {'code': 1001, 'value': 'User
> > > >> BANNED'});
> > > >> return 0;
>
> > > >> } else {
>
> > > >> cmd.user.setProperty('name', params.name
> > <http://params.name>);
> > > >> cmd.user.setProperty('ip', cmd.ip);
> > > >> return 1;
>
> > > >> }
> > > >> });
>
> > > >> });
>
> > > >> On 01/23/2012 11:34 AM, utan wrote:
>
> > > >>> Ok, moved the function code to the hook , now I have the code like
> > > >>> this:
> > > >>> code before to call the php file
> > > >>> request.getContent(function (result){
> > > >>> if(result){
> > > >>> return 0;
> > > >>> }
> > > >>> else{
> > > >>> cmd.user.setProperty('name', params.name
> > <http://params.name>);
> > > >>> cmd.user.setProperty('ip', cmd.ip);
> > > >>> }
> > > >>> });
> > > >>> but still the code runs after the return 0 , then the page opens but
> > > >>> with error user.properites are undefined..
> > > >>> and server side gets me this: TypeError: user.getProperty("name") is
> > > >>> undefined
> > > >>> since I am not working with a function when returning the code
> > doesnt
> > > >>> stop..
> > > >>> any thoughts?
> > > >>> On Jan 23, 9:08 am, Erick Romero <[email protected]
> > <mailto:[email protected]>> wrote:
> > > >>>> Try the following:
> > > >>>> Remove "return 1" from connect hook. As you said, the code will
> > be ran
> > > >>>> before you get the php response; so no matter if it is banned
> > you are
> > > >>>> returning 1 (true).
> > > >>>> I would delete is_banned function and move that logic into
> > connect hook,
> > > >>>> making a IF to return 0 or 1 for the connect hook based on the
> > php-response.
> > > >>>> Also you may move the logic user-setProperty into the if (the
> > side that
> > > >>>> returns 1)
> > > >>>> On 01/23/2012 10:44 AM, utan wrote:
> > > >>>>> Thanks for your help,
> > > >>>>> I end up doing all the work at php side, send the ip with http and
> > > >>>>> then checking it at php level return either true or false and work
> > > >>>>> with it.
> > > >>>>> There is a problem , in the moment the http does its job the other
> > > >>>>> code had run and even if true it doesn't return because I think
> > > >>>>> because anonymous function or because it doesn't have a
> > response yet
> > > >>>>> from php server side..
> > > >>>>> which then tests as false and keep running the code.. this is
> > what I
> > > >>>>> am doing..
> > > >>>>> I have a function in name.js,
> > > >>>>> function isbanned(ip){
> > > >>>>> var request = new Http('http://anyplace/sql/banned_ips.php'
> > <http://anyplace/sql/banned_ips.php%27>);
> > > >>>>> request.set('method', 'POST');
> > > >>>>> request.writeData('password', 'any');
> > > >>>>> request.writeData('ip', ip);
> > > >>>>> request.getContent(function (result){
> > > >>>>> Ape.log(ip);
> > > >>>>> return result;
> > > >>>>> });
> > > >>>>> }
> > > >>>>> and
> > > >>>>> Ape.registerHookCmd("connect", function(params, cmd) {
> > > >>>>> if (!$defined(params) || !$defined(params.name
> > <http://params.name>)) return 0;
> > > >>>>> if (userlist.has(params.name.toLowerCase())) return ["007",
> > > >>>>> "NICK_USED"];
> > > >>>>> if (params.name.length > 9 ||
> > params.name.test('[^a-zA-Z0-9]', 'i'))
> > > >>>>> return ["006", "BAD_NICK"];
> > > >>>>> if(isbanned(cmd.ip))return 0;// if true would return 0 and
> > the code
> > > >>>>> should stop
> > > >>>>> cmd.user.setProperty('name', params.name <http://params.name>);
> > > >>>>> cmd.user.setProperty('ip', cmd.ip);
> > > >>>>> return 1;
> > > >>>>> });
> > > >>>>> If I put the code directly in Ape.registerHookCmd I have the same
> > > >>>>> result, doesnt matter if is true or false the code continued
> > to the
> > > >>>>> next code , but if I test putting a return 1 before
> > > >>>>> request.getContent the code stops and do what I want..
> > > >>>>> maybe I still dont know much but why is this? if I do with
> > json you
> > > >>>>> think I will have better luck?
> > > >>>>> On Jan 23, 6:24 am, Erick Romero <[email protected]
> > <mailto:[email protected]>> wrote:
> > > >>>>>> You should add JSON to the server.
> > > >>>>>> I made it in this way:
> > > >>>>>> 1. Download the JSON file from the below link.
> > > >>>>>> 2. Add the file inside the server under "framework" directory
> > > >>>>>> 3. Modify "main.ape.js" in the server and add the line
> > > >>>>>> "include("framework/JSON.js");"
> > > >>>>>> 3. That's all.
> > > >>>>>>http://www.json.org/js.html
> > > >>>>>> github:https://github.com/douglascrockford/JSON-js
> > > >>>>>> Now in php you do
> > > >>>>>> var data = array('name'=>'naruto', 'age'=>'15' );
> > > >>>>>> /echo json_encode(/data);
> > > >>>>>> And in the server:
> > > >>>>>> /
> > > >>>>>> var request = new Http(URL);
> > > >>>>>> request.getContent(function(result) { //call the PHP file
> > > >>>>>> if ( ! result) {
> > > >>>>>> cmd.sendResponse('ERR', {'code': 1001, 'value':
> > > >>>>>> 'error_codes._1001'});
> > > >>>>>> Ape.log('USER_NOT_LOGGED_IN');
> > > >>>>>> return 0;
> > > >>>>>> }
> > > >>>>>> var data_user = JSON.parse(result)
> > > >>>>>> Ape.log(data_user.name <http://data_user.name>);
> > > >>>>>> // Ape.log(data_user.age
> > > >>>>>> return 1;
> > > >>>>>> //}/
> > > >>>>>> On 01/22/2012 08:04 PM, utan wrote:
> > > >>>>>>> Hi,
> > > >>>>>>> Sorry to highjack this tread, I've done the same I get the
> > response
> > > >>>>>>> from the php db array json encoded , but when I try to use
> > it in the
> > > >>>>>>> serverside of Ape and try something like this:
> > > >>>>>>> request.getContent(function (result){
> > > >>>>>>> Ape.log(result.ID);
> > > >>>>>>> });
> > > >>>>>>> where result has the json from the test.php, if I try to
> > access say
> > > >>>>>>> result.ID I get JavaScript : undefined , how can I access it
> > properly,
> > > >>>>>>> tried JSON.decode(); but is not a function and I think core
> > doesnt
> > > >>>>>>> have loaded..
> > > >>>>>>> need to convert it to
>
> ...
>
> read more »
--
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/