Jit working for sites

This commit is contained in:
Owen
2026-03-04 17:46:58 -08:00
parent c73a39f797
commit 1bfff630bf
4 changed files with 110 additions and 8 deletions

View File

@@ -76,7 +76,7 @@ const processMessage = async (
clientId, clientId,
message.type, // Pass message type for granular limiting message.type, // Pass message type for granular limiting
100, // max requests per window 100, // max requests per window
20, // max requests per message type per window 100, // max requests per message type per window
60 * 1000 // window in milliseconds 60 * 1000 // window in milliseconds
); );
if (rateLimitResult.isLimited) { if (rateLimitResult.isLimited) {

View File

@@ -1,4 +1,6 @@
import { import {
clientSiteResourcesAssociationsCache,
clientSitesAssociationsCache,
db, db,
exitNodes, exitNodes,
Site, Site,
@@ -40,7 +42,7 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async (
return; return;
} }
const { siteId, resourceId } = message.data; const { siteId, resourceId, chainId } = message.data;
let site: Site | null = null; let site: Site | null = null;
if (siteId) { if (siteId) {
@@ -71,6 +73,19 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async (
if (!resources || resources.length === 0) { if (!resources || resources.length === 0) {
logger.error(`handleOlmServerPeerAddMessage: Resource not found`); logger.error(`handleOlmServerPeerAddMessage: Resource not found`);
// cancel the request from the olm side to not keep doing this
await sendToClient(
olm.olmId,
{
type: "olm/wg/peer/chain/cancel",
data: {
chainId
}
},
{ incrementConfigVersion: false }
).catch((error) => {
logger.warn(`Error sending message:`, error);
});
return; return;
} }
@@ -81,7 +96,46 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async (
); );
return; return;
} }
const siteIdFromResource = resources[0].siteId;
const resource = resources[0];
const currentResourceAssociationCaches = await db
.select()
.from(clientSiteResourcesAssociationsCache)
.where(
and(
eq(
clientSiteResourcesAssociationsCache.siteResourceId,
resource.siteResourceId
),
eq(
clientSiteResourcesAssociationsCache.clientId,
client.clientId
)
)
);
if (currentResourceAssociationCaches.length === 0) {
logger.error(
`handleOlmServerPeerAddMessage: Client ${client.clientId} does not have access to resource ${resource.siteResourceId}`
);
// cancel the request from the olm side to not keep doing this
await sendToClient(
olm.olmId,
{
type: "olm/wg/peer/chain/cancel",
data: {
chainId
}
},
{ incrementConfigVersion: false }
).catch((error) => {
logger.warn(`Error sending message:`, error);
});
return;
}
const siteIdFromResource = resource.siteId;
// get the site // get the site
const [siteRes] = await db const [siteRes] = await db
@@ -103,10 +157,54 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async (
return; return;
} }
// check if the client can access this site using the cache
const currentSiteAssociationCaches = await db
.select()
.from(clientSitesAssociationsCache)
.where(
and(
eq(clientSitesAssociationsCache.clientId, client.clientId),
eq(clientSitesAssociationsCache.siteId, site.siteId)
)
);
if (currentSiteAssociationCaches.length === 0) {
logger.error(
`handleOlmServerPeerAddMessage: Client ${client.clientId} does not have access to site ${site.siteId}`
);
// cancel the request from the olm side to not keep doing this
await sendToClient(
olm.olmId,
{
type: "olm/wg/peer/chain/cancel",
data: {
chainId
}
},
{ incrementConfigVersion: false }
).catch((error) => {
logger.warn(`Error sending message:`, error);
});
return;
}
if (!site.exitNodeId) { if (!site.exitNodeId) {
logger.error( logger.error(
`handleOlmServerPeerAddMessage: Site with ID ${site.siteId} has no exit node` `handleOlmServerPeerAddMessage: Site with ID ${site.siteId} has no exit node`
); );
// cancel the request from the olm side to not keep doing this
await sendToClient(
olm.olmId,
{
type: "olm/wg/peer/chain/cancel",
data: {
chainId
}
},
{ incrementConfigVersion: false }
).catch((error) => {
logger.warn(`Error sending message:`, error);
});
return; return;
} }
@@ -135,7 +233,8 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async (
endpoint: exitNode.endpoint endpoint: exitNode.endpoint
} }
}, },
olm.olmId olm.olmId,
chainId
); );
return; return;

View File

@@ -54,7 +54,7 @@ export const handleOlmServerPeerAddMessage: MessageHandler = async (
return; return;
} }
const { siteId } = message.data; const { siteId, chainId } = message.data;
// get the site // get the site
const [site] = await db const [site] = await db
@@ -179,7 +179,8 @@ export const handleOlmServerPeerAddMessage: MessageHandler = async (
), ),
aliases: generateAliasConfig( aliases: generateAliasConfig(
allSiteResources.map(({ siteResources }) => siteResources) allSiteResources.map(({ siteResources }) => siteResources)
) ),
chainId: chainId,
} }
}, },
broadcast: false, broadcast: false,

View File

@@ -149,7 +149,8 @@ export async function initPeerAddHandshake(
endpoint: string; endpoint: string;
}; };
}, },
olmId?: string olmId?: string,
chainId?: string,
) { ) {
if (!olmId) { if (!olmId) {
const [olm] = await db const [olm] = await db
@@ -173,7 +174,8 @@ export async function initPeerAddHandshake(
publicKey: peer.exitNode.publicKey, publicKey: peer.exitNode.publicKey,
relayPort: config.getRawConfig().gerbil.clients_start_port, relayPort: config.getRawConfig().gerbil.clients_start_port,
endpoint: peer.exitNode.endpoint endpoint: peer.exitNode.endpoint
} },
chainId,
} }
}, },
{ incrementConfigVersion: true } { incrementConfigVersion: true }