re-enable oauth and basic auth; logging lint (#893)

This commit is contained in:
Michael Quigley
2025-03-05 11:26:00 -05:00
parent d851dc449b
commit 6221325d1e
4 changed files with 63 additions and 15 deletions

View File

@ -21,7 +21,7 @@
"version": "1.0.0", "version": "1.0.0",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@openziti/ziti-sdk-nodejs": "^0.19.0", "@openziti/ziti-sdk-nodejs": "^0.20.0",
"express": "^4.21.2" "express": "^4.21.2"
}, },
"devDependencies": { "devDependencies": {

View File

@ -7,11 +7,13 @@ import {
loadRoot, loadRoot,
PROXY_BACKEND_MODE, PROXY_BACKEND_MODE,
PUBLIC_SHARE_MODE, PUBLIC_SHARE_MODE,
setLogLevel,
ShareRequest ShareRequest
} from "@openziti/zrok"; } from "@openziti/zrok";
const httpServer = async () => { const httpServer = async () => {
let root = loadRoot(); let root = loadRoot();
setLogLevel(0);
await init(root) await init(root)
.catch((err: Error) => { .catch((err: Error) => {
console.log(err); console.log(err);

View File

@ -11,6 +11,7 @@ import {
listener, listener,
loadRoot, loadRoot,
PRIVATE_SHARE_MODE, PRIVATE_SHARE_MODE,
setLogLevel,
ShareRequest, ShareRequest,
TCP_TUNNEL_BACKEND_MODE, TCP_TUNNEL_BACKEND_MODE,
write write
@ -20,6 +21,7 @@ import readlineSync = require('readline-sync');
const copyto = async () => { const copyto = async () => {
let text = readlineSync.question("enter some text: "); let text = readlineSync.question("enter some text: ");
let root = loadRoot(); let root = loadRoot();
setLogLevel(0);
await init(root) await init(root)
.catch((err: Error) => { .catch((err: Error) => {
console.log(err); console.log(err);
@ -40,6 +42,7 @@ const copyto = async () => {
const pastefrom = async (shareToken: string) => { const pastefrom = async (shareToken: string) => {
let root = loadRoot(); let root = loadRoot();
setLogLevel(0);
await init(root).catch((err: Error) => { await init(root).catch((err: Error) => {
console.log(err); console.log(err);
return process.exit(1); return process.exit(1);

View File

@ -1,8 +1,9 @@
import {Root} from "./environment"; import {Root} from "./environment";
import { import {
AuthUser,
ShareApi, ShareApi,
ShareRequest as ApiShareRequest, ShareRequest as ApiShareRequest,
ShareRequestBackendModeEnum, ShareRequestBackendModeEnum, ShareRequestOauthProviderEnum,
ShareRequestShareModeEnum, ShareRequestShareModeEnum,
UnshareRequest UnshareRequest
} from "../api"; } from "../api";
@ -16,23 +17,32 @@ export const PROXY_BACKEND_MODE: BackendMode = "proxy";
export const TCP_TUNNEL_BACKEND_MODE: BackendMode = "tcpTunnel"; export const TCP_TUNNEL_BACKEND_MODE: BackendMode = "tcpTunnel";
export const UDP_TUNNEL_BACKEND_MODE: BackendMode = "udpTunnel"; export const UDP_TUNNEL_BACKEND_MODE: BackendMode = "udpTunnel";
export type AuthScheme = string;
export const AUTH_SCHEME_NONE = "none";
export const AUTH_SCHEME_BASIC = "basic";
export const AUTH_SCHEME_OAUTH = "oauth";
export type OauthProvider = string;
export const OAUTH_PROVIDER_GOOGLE = "google";
export const OAUTH_PROVIDER_GITHUB = "github";
export type PermissionMode = string; export type PermissionMode = string;
export const OPEN_PERMISSION_MODE = "open"; export const OPEN_PERMISSION_MODE = "open";
export const CLOSED_PERMISSION_MODE = "closed"; export const CLOSED_PERMISSION_MODE = "closed";
export class ShareRequest { export class ShareRequest {
reserved: boolean; reserved: boolean;
uniqueName: string|undefined; uniqueName: string | undefined;
backendMode: BackendMode; backendMode: BackendMode;
shareMode: ShareMode; shareMode: ShareMode;
target: string; target: string;
frontends: string[]|undefined; frontends: string[] | undefined;
basicAuth: string[]|undefined; basicAuth: string[] | undefined;
oauthProvider: string|undefined; oauthProvider: string | undefined;
oauthEmailAddressPatterns: string[]|undefined; oauthEmailAddressPatterns: string[] | undefined;
oauthAuthorizationCheckInterval: string|undefined; oauthAuthorizationCheckInterval: string | undefined;
permissionMode: PermissionMode; permissionMode: PermissionMode;
accessGrants: string[]|undefined; accessGrants: string[] | undefined;
constructor(shareMode: ShareMode, backendMode: BackendMode, target: string) { constructor(shareMode: ShareMode, backendMode: BackendMode, target: string) {
this.reserved = false; this.reserved = false;
@ -52,9 +62,9 @@ export class ShareRequest {
export class Share { export class Share {
shareToken: string; shareToken: string;
frontendEndpoints: string[]|undefined; frontendEndpoints: string[] | undefined;
constructor(shareToken: string, frontendEndpoints: string[]|undefined) { constructor(shareToken: string, frontendEndpoints: string[] | undefined) {
this.shareToken = shareToken; this.shareToken = shareToken;
this.frontendEndpoints = frontendEndpoints; this.frontendEndpoints = frontendEndpoints;
} }
@ -105,22 +115,44 @@ const toPrivateApiShareRequest = (root: Root, request: ShareRequest): ApiShareRe
shareMode: ShareRequestShareModeEnum.Private, shareMode: ShareRequestShareModeEnum.Private,
backendMode: toApiBackendMode(request.backendMode), backendMode: toApiBackendMode(request.backendMode),
backendProxyEndpoint: request.target, backendProxyEndpoint: request.target,
authScheme: "none", authScheme: AUTH_SCHEME_NONE,
permissionMode: CLOSED_PERMISSION_MODE,
}; };
} }
const toPublicApiShareRequest = (root: Root, request: ShareRequest): ApiShareRequest => { const toPublicApiShareRequest = (root: Root, request: ShareRequest): ApiShareRequest => {
return { let out: ApiShareRequest = {
envZId: root.environment?.zId, envZId: root.environment?.zId,
shareMode: ShareRequestShareModeEnum.Public, shareMode: ShareRequestShareModeEnum.Public,
frontendSelection: request.frontends, frontendSelection: request.frontends,
backendMode: toApiBackendMode(request.backendMode), backendMode: toApiBackendMode(request.backendMode),
backendProxyEndpoint: request.target, backendProxyEndpoint: request.target,
authScheme: "none", authScheme: AUTH_SCHEME_NONE,
}; };
if(request.oauthProvider !== undefined) {
out.authScheme = AUTH_SCHEME_OAUTH;
out.oauthProvider = toApiOauthProvider(request.oauthProvider);
out.oauthEmailDomains = request.oauthEmailAddressPatterns;
out.oauthAuthorizationCheckInterval = request.oauthAuthorizationCheckInterval;
} else if(request.basicAuth?.length! > 0) {
out.authScheme = AUTH_SCHEME_BASIC;
for(let pair in request.basicAuth) {
let tokens = pair.split(":");
if(tokens.length === 2) {
if(out.authUsers === undefined) {
out.authUsers = new Array<AuthUser>();
}
out.authUsers.push({username: tokens[0].trim(), password: tokens[1].trim()})
}
}
}
return out;
} }
const toApiBackendMode = (mode: BackendMode): ShareRequestBackendModeEnum|undefined => { const toApiBackendMode = (mode: BackendMode): ShareRequestBackendModeEnum | undefined => {
switch(mode) { switch(mode) {
case PROXY_BACKEND_MODE: case PROXY_BACKEND_MODE:
return ShareRequestBackendModeEnum.Proxy; return ShareRequestBackendModeEnum.Proxy;
@ -131,4 +163,15 @@ const toApiBackendMode = (mode: BackendMode): ShareRequestBackendModeEnum|undefi
default: default:
return undefined; return undefined;
} }
}
const toApiOauthProvider = (provider: OauthProvider): ShareRequestOauthProviderEnum | undefined => {
switch(provider) {
case OAUTH_PROVIDER_GITHUB:
return ShareRequestOauthProviderEnum.Github;
case OAUTH_PROVIDER_GOOGLE:
return ShareRequestOauthProviderEnum.Google;
default:
return undefined;
}
} }