mirror of
https://github.com/openziti/zrok.git
synced 2025-06-20 17:58:50 +02:00
await dial permissions (#893)
This commit is contained in:
parent
14ffc57e3d
commit
6b18cd787b
@ -20,11 +20,60 @@ export const listener = (shr: Share,
|
|||||||
ziti.listen(shr.shareToken, 0, listenCallback, listenClientCallback, clientConnectCallback, clientDataCallback);
|
ziti.listen(shr.shareToken, 0, listenCallback, listenClientCallback, clientConnectCallback, clientDataCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const dialer = (acc: Access, connectCallback: any, dataCallback: any): ziti.dialer => {
|
export const dialer = async (acc: Access, connectCallback: any, dataCallback: any): ziti.dialer => {
|
||||||
ziti.ziti_services_refresh();
|
ziti.ziti_services_refresh();
|
||||||
|
await awaitDialPermissions(acc.shareToken);
|
||||||
ziti.dial(acc.shareToken, false, connectCallback, dataCallback);
|
ziti.dial(acc.shareToken, false, connectCallback, dataCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const write = (conn: any, buf: any, writeCallback: any = () => {}) => {
|
export const write = (conn: any, buf: any, writeCallback: any = () => {}) => {
|
||||||
ziti.write(conn, buf, writeCallback);
|
ziti.write(conn, buf, writeCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum ServicePermissions {
|
||||||
|
None = 0,
|
||||||
|
Bind = 2,
|
||||||
|
Dial = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ServiceStatus {
|
||||||
|
status: number | undefined;
|
||||||
|
permissions: ServicePermissions | undefined;
|
||||||
|
|
||||||
|
constructor(status: number | undefined, permissions: ServicePermissions | undefined) {
|
||||||
|
this.status = status;
|
||||||
|
this.permissions = permissions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const awaitDialPermissions = async (shareToken: string) => {
|
||||||
|
let serviceStatus: ServiceStatus;
|
||||||
|
const startTime = process.hrtime();
|
||||||
|
return new Promise((resolve: (value: any) => void, reject: (reason?: any) => void) => {
|
||||||
|
(async function waitForPermission() {
|
||||||
|
serviceStatus = await serviceAvailable(shareToken);
|
||||||
|
if(serviceStatus.status !== 0) {
|
||||||
|
throw new Error("shareToken '" + shareToken + "' not present in network");
|
||||||
|
}
|
||||||
|
if(serviceStatus.permissions !== ServicePermissions.Dial) {
|
||||||
|
const now = process.hrtime(startTime);
|
||||||
|
const elapsedTimeInMs = now[0] * 1000 + now[1] / 1000000;
|
||||||
|
if(elapsedTimeInMs > 30 * 1000) {
|
||||||
|
return reject("timeout waiting for shareToken '" + shareToken + "' to acquire dial permissions");
|
||||||
|
}
|
||||||
|
setTimeout(waitForPermission, 100);
|
||||||
|
} else {
|
||||||
|
return resolve(0);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const serviceAvailable = async (serviceName: string): Promise<ServiceStatus> => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
ziti.ziti_service_available(serviceName, (status: any) => {
|
||||||
|
const serviceStatus = new ServiceStatus(status.status, status.permissions);
|
||||||
|
resolve(serviceStatus);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user