fix typo, correctly perform auth, and close remote when local disconnects
This commit is contained in:
parent
a8fd9eb96b
commit
3367cb929b
1 changed files with 15 additions and 4 deletions
19
src/main.ts
19
src/main.ts
|
@ -20,7 +20,7 @@ async function validateAuthEvent(event: Event, challenge: string): boolean {
|
||||||
if (event.kind !== 22242) return false;
|
if (event.kind !== 22242) return false;
|
||||||
const last30Seconds = Math.floor(Date.now() / 1000) - 30;
|
const last30Seconds = Math.floor(Date.now() / 1000) - 30;
|
||||||
if (event.created_at < last30Seconds) return false;
|
if (event.created_at < last30Seconds) return false;
|
||||||
const challengeTag = event.tags.find(tag => tag[0] === 'challange')?.[1];
|
const challengeTag = event.tags.find(tag => tag[0] === 'challenge')?.[1];
|
||||||
if (challengeTag !== challenge) return false;
|
if (challengeTag !== challenge) return false;
|
||||||
const file = Bun.file("./allowed-pubkeys.json");
|
const file = Bun.file("./allowed-pubkeys.json");
|
||||||
if (!await file.exists()) return true;
|
if (!await file.exists()) return true;
|
||||||
|
@ -60,20 +60,31 @@ export function main(mainRelayUrl: string) {
|
||||||
const [event] = data;
|
const [event] = data;
|
||||||
const valid = await validateAuthEvent(event, ws.data.authToken);
|
const valid = await validateAuthEvent(event, ws.data.authToken);
|
||||||
if (!valid) return sendMessage(ws, ['NOTICE', "Invalid auth event"]);
|
if (!valid) return sendMessage(ws, ['NOTICE', "Invalid auth event"]);
|
||||||
|
sendMessage(ws, ['OK', event.id, true, "successully authenticated. welcome"]);
|
||||||
ws.data.authenticated = true;
|
ws.data.authenticated = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return sendAuth(ws);
|
return sendAuth(ws);
|
||||||
|
} else if (ws.data.authenticated && command === "AUTH") {
|
||||||
|
const [event] = data;
|
||||||
|
return sendMessage(ws, ['OK', event.id, true, 'you were already authenticated'])
|
||||||
}
|
}
|
||||||
ws.data.remoteWs.send(msg);
|
ws.data.remoteWs.send(msg);
|
||||||
},
|
},
|
||||||
open(ws) {
|
open(ws) {
|
||||||
sendAuth(ws);
|
const remoteWs = new WebSocket(mainRelayUrl);
|
||||||
ws.data.remoteWs = new WebSocket(mainRelayUrl);
|
remoteWs.addEventListener("message", data => ws.send(data.data, true));
|
||||||
ws.data.remoteWs.onmessage = (data) => ws.send(data.data, true);
|
remoteWs.addEventListener("open", () => {
|
||||||
|
ws.data.remoteWs = remoteWs;
|
||||||
|
sendAuth(ws);
|
||||||
|
})
|
||||||
|
remoteWs.addEventListener("error", console.error)
|
||||||
},
|
},
|
||||||
perMessageDeflate: true,
|
perMessageDeflate: true,
|
||||||
perMessageDeflateCompressionLevel: 9
|
perMessageDeflateCompressionLevel: 9
|
||||||
|
close(ws) {
|
||||||
|
ws.data.remoteWs?.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
console.log('Server listening @', server.url.host)
|
console.log('Server listening @', server.url.host)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue