const { Client } = require("../Client.js"); const { CLIENT_UPDATE_PROP } = require("../IPC.js"); let {addService, addListener} = require("../WebSocket.js"); addService(({ client, message, end, next })=>{ let {type,to,value,name} = message; switch(type) { case "auth/pair-system":{ if(value == 'everybody') { client.requiredPair = true; end({status:"success"}); client.sync('requiredPair'); } if(value == 'disable') { client.requiredPair = false; end({status:"success"}); client.sync('requiredPair'); //CLIENT_UPDATE_PROP(client.id, 'requiredPair', client.requiredPair); } break; } case "my/socketid":{ end(client.id); break; } case 'auth/public':{ client.requiredPair = false; client.sync('requiredPair'); return end({ value: 'success', mode: 'public' }) } case 'auth/private':{ client.requiredPair = true; client.sync('requiredPair'); return end({ value: 'success', mode: 'private' }) } case 'request/pair':{ if(Client.clients.has(to)){ return end({ status: 'fail', message: 'CLIENT-NOT-FOUND' }) }; let pairclient = Client.clients.get(to); if(pairclient.pairs.has(client.id)) { return end({ status: 'success', message: 'ALREADY-PAIRED' }) } if(client.pairs.add(to)) { return end({ status: 'fail', message: 'ALREADY-REQUESTED' }) }; end({ status: 'success', message: 'REQUESTED' }) client.peerRequest(pairclient); break; } case 'accept/pair':{ if(Client.clients.has(to)){ return end({ status: 'fail', message: 'CLIENT-NOT-FOUND' }) }; let pairclient = Client.clients.get(to); if(pairclient.pairs.has(client.id)) { return end({ status: 'success', message: 'ALREADY-PAIRED' }) } if(!client.pairs.has(to)) { return end({ status: 'fail', message: 'NOT-REQUESTED-PAIR' }) } client.acceptPeerRequest(pairclient); break; } case 'reject/pair':{ if(Client.clients.has(to)){ return end({ status: 'fail', message: 'CLIENT-NOT-FOUND' }) }; let pairclient = Client.clients.get(to); if(pairclient.pairs.has(client.id)) { return end({ status: 'success', message: 'ALREADY-PAIRED' }) } if(!client.pairs.has(to)) { return end({ status: 'fail', message: 'NOT-REQUESTED-PAIR' }) } client.rejectPeerRequest(pairclient); break; } case 'pair/list':{ end({ type:'pair/list', value: pairList }) break; } case 'is/reachable':{ if(Client.clients.has(to)) { let otherPeer = Client.clients.get(to); if(otherPeer.requiredPair && !otherPeer.pairs.has(to)) { end(false); }else{ end(true); } }else{ end(false); } break; } // case 'auth/check':{ // let auth = client.store.has('user'); // return end({ // value: auth // }) // } // case 'auth/login':{ // if(username == '*' && password == '*') // { // return end({ // status: 'success' // }) // }else{ // return end({ // status: 'fail' // }) // } // } // case 'auth/logout':{ // let auth = client.store.has('user'); // if(auth) // { // client.store.delete('user'); // return end({ // status: 'success' // }) // }else{ // return end({ // status: 'fail' // }) // } // } case 'auth/info':{ client.info.set(name, value); let clients = client.getSucureClients(); for (const [,spair] of clients.pairs) { spair.send([{ from: client.id, name, value },"pair/info"]); }; for (const [,spair] of clients.roompairs) { spair.send([{ from: client.id, name, value },"pair/info"]); }; process.send({ type: 'AUTH/INFO', uuid: client.id, name, value }); return end({ status: 'success' }); } case 'peer/info':{ if(client.isSecure(message.peer)) { let info = {}; client.info.forEach((value, name) => info[name] = value); return end({ status: "success", info }); }else{ return end({ status: "fail", message: "unaccessible user" }); } } default:{ next(); } } }); process.on('message',({type, uuid, value, name}) => { switch(type) { case "AUTH/INFO":{ let client = Client.clients.get(uuid); if(client) { client.info.set(name, value); } break; } } })