Code Monkey home page Code Monkey logo

Comments (7)

sk91 avatar sk91 commented on May 22, 2024 1

Sorry, @mkozjak it does not seems so. What am I missing?

here is a test code:

var WebSocket = require('rpc-websockets').Client
var WebSocketServer = require('rpc-websockets').Server

const initServer = ()=>{
    var server = new WebSocketServer({
        port: 8080,
        host: 'localhost'
      })
      
      // register an RPC method
      server.register('sum', function(params) {
        console.log('XXX', 'public method call', 'sum', params)
        return params[0] + params[1]
      })
      
      // ...and maybe a protected one also
      server.register('account', function() {
        console.log('XXX', 'protected method call', 'account')
        return ['confi1', 'confi2']
      }).protected()

      server.setAuth(()=>true);
      

      return server;
}

const initClient = async ()=>{
    var ws = new WebSocket('ws://localhost:8080');
    return new Promise((resolve, reject)=>{
        ws.on('open', ()=>{
            resolve(ws);
        });
        ws.on('error', error=>reject(error));
    });
}

const main = async ()=>{
    try {
    const server = initServer();
    console.log('XXX', 'server initialized');

    const ws1 = await initClient();
    console.log('XXX', 'client1 initialized');

    const ws2 = await initClient();
    console.log('XXX', 'client2 initialized');

    try {
        const result =  await ws1.call('account');
        console.log('XXX', 'client 1', 'call for account before login succesfull', result);
    } catch(error){
        console.log('XXX', 'client 1', 'call for account before login failed', error);
    }

    try {
        const result =  await ws2.call('account');
        console.log('XXX', 'client 2', 'call for account before login succesfull', result);
    } catch(error){
        console.log('XXX', 'client 2', 'call for account before login failed', error);
    }

    await ws1.login({'username': 'confi1', 'password':'foobar'});


    try {
        const result =  await ws1.call('account');
        console.log('XXX', 'client 1', 'call for account after client 1 login succesfull', result);
    } catch(error){
        console.log('XXX', 'client 1', 'call for account after client 1 login failed', error);
    }

    try {
        const result =  await ws2.call('account');
        console.log('XXX', 'client 2', 'call for account after client 1 login succesfull', result);
    } catch(error){
        console.log('XXX', 'client 2', 'call for account after client 1 login failed', error);
    }
    
    }
    catch(error){
        console.log('global error occurred', error);
    }
}

main();

and here is the output:

XX server initialized
XXX client1 initialized
XXX client2 initialized
XXX client 1 call for account before login failed { code: -32605, message: 'Method forbidden' }
XXX client 2 call for account before login failed { code: -32605, message: 'Method forbidden' }
XXX protected method call account
XXX client 1 call for account after client 1 login succesfull [ 'confi1', 'confi2' ]
XXX protected method call account
XXX client 2 call for account after client 1 login succesfull [ 'confi1', 'confi2' ]

from rpc-websockets.

sk91 avatar sk91 commented on May 22, 2024 1

@mkozjak, researching now a solution to create a mobile <-> desktop communication over LAN.
This library seems like a good one to go with.

If we decide on it, I will do the fix, it seems simple enough

from rpc-websockets.

mkozjak avatar mkozjak commented on May 22, 2024 1

@sk91: Okay, also feel free to provide a PR to add your company to the list of users if you see fit: https://github.com/elpheria/rpc-websockets#users

from rpc-websockets.

dsagal avatar dsagal commented on May 22, 2024 1

This issue means that login/setAuth cannot be used at the moment. They should be removed from documentation until there is a way to use them.

from rpc-websockets.

mkozjak avatar mkozjak commented on May 22, 2024 1

@dsagal - the bugfix is available in v5.2.2.

from rpc-websockets.

mkozjak avatar mkozjak commented on May 22, 2024

No, only that specific client is authenticated.

from rpc-websockets.

mkozjak avatar mkozjak commented on May 22, 2024

@sk91: You're definitely correct, good catch!

We store clients in this.namespaces[ns].clients so maybe we could find some place to store the authenticated info there? Would you like to provide a PR to fix this bug? Thanks in advance!

from rpc-websockets.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.