diff --git a/packages/platform/src/rpc.ts b/packages/platform/src/rpc.ts index d278f92116..da39f36f11 100644 --- a/packages/platform/src/rpc.ts +++ b/packages/platform/src/rpc.ts @@ -29,7 +29,7 @@ export class Request
{
method: M
params: P
- constructor (method: M, ...params: P) {
+ constructor (method: M, params: P, id?: ReqId) {
this.method = method
this.params = params
}
diff --git a/server/server/src/__tests__/server.test.ts b/server/server/src/__tests__/server.test.ts
index 0dd1cfcd00..e92e06b138 100644
--- a/server/server/src/__tests__/server.test.ts
+++ b/server/server/src/__tests__/server.test.ts
@@ -14,12 +14,15 @@
// limitations under the License.
//
+import { Request, readResponse, serialize } from '@anticrm/platform'
import { start, _Token } from '../server'
import { encode } from 'jwt-simple'
import WebSocket from 'ws'
describe('server', () => {
- start(async () => ({}), 3333)
+ start(async () => ({
+ ping: () => {}
+ }), 3333)
function connect (): WebSocket {
const payload: _Token = {
@@ -36,4 +39,33 @@ describe('server', () => {
done()
})
})
+
+ it('should not connect to server without token', (done) => {
+ const conn = new WebSocket('ws://localhost:3333/xyz')
+ conn.on('error', () => {
+ console.log('error')
+ conn.close()
+ done()
+ })
+ })
+
+ it('should send many requests', (done) => {
+ const conn = connect()
+ const total = 10
+ // const start = Date.now()
+ conn.on('open', () => {
+ for (let i = 0; i < total; i++) {
+ conn.send(serialize(new Request('ping', [], i)))
+ }
+ })
+ let received = 0
+ conn.on('message', (msg: string) => {
+ readResponse(msg)
+ if (++received === total) {
+ // console.log('resp:', resp, ' Time: ', Date.now() - start)
+ conn.close()
+ done()
+ }
+ })
+ })
})
diff --git a/server/server/src/server.ts b/server/server/src/server.ts
index 86b555c31a..2dba9785d0 100644
--- a/server/server/src/server.ts
+++ b/server/server/src/server.ts
@@ -60,12 +60,12 @@ export function start (serviceFactory: () => Promise, port: number, host?:
const server = createServer()
server.on('upgrade', (request: IncomingMessage, socket, head: Buffer) => {
const token = request.url?.substring(1) // remove leading '/'
- if (token === undefined) {
+ try {
+ const payload = decode(token ?? '', 'secret', false)
+ wss.handleUpgrade(request, socket, head, ws => wss.emit('connection', ws, request, payload))
+ } catch (err) {
socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n')
socket.destroy()
- } else {
- const payload = decode(token, 'secret', false)
- wss.handleUpgrade(request, socket, head, ws => wss.emit('connection', ws, request, payload))
}
})