Compare commits
5 Commits
v0.1.0-dev
...
v0.1.0-dev
Author | SHA1 | Date |
---|---|---|
semantic-release-bot | a5bd7fd001 | |
Derrick Hammer | 6fa0d49ce1 | |
Derrick Hammer | 97e083fb21 | |
Derrick Hammer | b1f476b504 | |
Derrick Hammer | 8d9af2a4c3 |
|
@ -1,3 +1,5 @@
|
|||
# [0.1.0-develop.2](https://git.lumeweb.com/LumeWeb/hosted-kernel/compare/v0.1.0-develop.1...v0.1.0-develop.2) (2023-07-21)
|
||||
|
||||
# [0.1.0-develop.1](https://git.lumeweb.com/LumeWeb/hosted-kernel/compare/v0.0.1...v0.1.0-develop.1) (2023-07-21)
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@lumeweb/hosted-kernel",
|
||||
"version": "0.1.0-develop.1",
|
||||
"version": "0.1.0-develop.2",
|
||||
"type": "module",
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
|
@ -16,7 +16,8 @@
|
|||
"@lumeweb/presetter-kernel-module-preset": "^0.1.0-develop.43"
|
||||
},
|
||||
"dependencies": {
|
||||
"@lumeweb/libweb": "^0.2.0-develop.26",
|
||||
"@lumeweb/libweb": "0.2.0-develop.27",
|
||||
"@noble/ciphers": "^0.1.4",
|
||||
"binconv": "^0.2.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { boot } from "./kernel.js";
|
||||
import { handleIncomingMessage } from "./messages.js";
|
||||
|
||||
document.title = "Hosted Lume Kernel";
|
||||
let header = document.createElement("h1");
|
||||
|
@ -6,4 +7,6 @@ header.textContent =
|
|||
"Something went wrong! You should not be visiting this page, this page should only be accessed via an invisible iframe.";
|
||||
document.body.appendChild(header);
|
||||
|
||||
window.addEventListener("message", handleIncomingMessage);
|
||||
|
||||
boot();
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
import exchangeCommunicationKeys from "./messages/exchangeCommunicationKeys.js";
|
||||
import setLoginKey from "./messages/setLoginKey.js";
|
||||
|
||||
const kernelMessageHandlers = {
|
||||
exchangeCommunicationKeys,
|
||||
setLoginKey,
|
||||
};
|
||||
|
||||
export async function handleIncomingMessage(event: MessageEvent) {
|
||||
if (event.source === null) {
|
||||
return;
|
||||
}
|
||||
if (event.source === window) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!("nonce" in event.data)) {
|
||||
(event.source as WindowProxy).postMessage(
|
||||
{
|
||||
nonce: "N/A",
|
||||
method: "response",
|
||||
err: "message sent to kernel with no nonce",
|
||||
},
|
||||
event.origin,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!("method" in event.data)) {
|
||||
(event.source as WindowProxy).postMessage(
|
||||
{
|
||||
nonce: event.data.nonce,
|
||||
method: "response",
|
||||
err: "message sent to kernel with no method",
|
||||
},
|
||||
event.origin,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.data.method in kernelMessageHandlers) {
|
||||
let response;
|
||||
|
||||
try {
|
||||
response = await kernelMessageHandlers[event.data.method](
|
||||
event.data.data,
|
||||
);
|
||||
} catch (e: any) {
|
||||
response = { err: (e as Error).message };
|
||||
}
|
||||
|
||||
(event.source as WindowProxy).postMessage(
|
||||
{
|
||||
nonce: event.data.nonce,
|
||||
data: response,
|
||||
},
|
||||
event.origin,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (["moduleCall", "response"].includes(event.data.method)) {
|
||||
return;
|
||||
}
|
||||
|
||||
(event.source as WindowProxy).postMessage(
|
||||
{
|
||||
nonce: event.data.nonce,
|
||||
method: "response",
|
||||
err:
|
||||
"unrecognized method (user may need to log in): " + event.data.method,
|
||||
},
|
||||
event.origin,
|
||||
);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
import { bytesToHex, hexToBytes } from "@lumeweb/libweb";
|
||||
import {
|
||||
getCommunicationPubKey,
|
||||
setFrontendCommunicationPubkey,
|
||||
} from "../vars.js";
|
||||
import { log } from "../util.js";
|
||||
|
||||
export default function (data: any) {
|
||||
setFrontendCommunicationPubkey(hexToBytes(data));
|
||||
|
||||
return bytesToHex(getCommunicationPubKey());
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
import { secretbox } from "@noble/ciphers/salsa";
|
||||
import { x25519 } from "@noble/curves/ed25519";
|
||||
import {
|
||||
getCommunicationKey,
|
||||
getFrontendCommunicationPubkey,
|
||||
setLoginComplete,
|
||||
} from "../vars.js";
|
||||
import { saveUserKey } from "../storage.js";
|
||||
import { hexToBytes } from "@lumeweb/libweb";
|
||||
|
||||
export default function (data: any) {
|
||||
const box = secretbox(
|
||||
x25519.getSharedSecret(
|
||||
getCommunicationKey(),
|
||||
getFrontendCommunicationPubkey(),
|
||||
),
|
||||
hexToBytes(data.nonce),
|
||||
);
|
||||
const decryptedData = box.open(hexToBytes(data.data));
|
||||
|
||||
setLoginComplete(false);
|
||||
|
||||
saveUserKey(decryptedData);
|
||||
|
||||
return true;
|
||||
}
|
Loading…
Reference in New Issue