Adjust pulling in config

This commit is contained in:
Owen 2025-08-12 16:47:59 -07:00
parent 880a123149
commit 3d8869066a
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
6 changed files with 26 additions and 32 deletions

View file

@ -16,6 +16,7 @@ import {
} from "@server/db"; } from "@server/db";
import { and, eq } from "drizzle-orm"; import { and, eq } from "drizzle-orm";
import axios from "axios"; import axios from "axios";
import config from "@server/lib/config";
export type ResourceWithAuth = { export type ResourceWithAuth = {
resource: Resource | null; resource: Resource | null;
@ -28,18 +29,15 @@ export type UserSessionWithUser = {
user: any; user: any;
}; };
const MODE = "remote";
const remoteEndpoint = "https://api.example.com";
/** /**
* Get resource by domain with pincode and password information * Get resource by domain with pincode and password information
*/ */
export async function getResourceByDomain( export async function getResourceByDomain(
domain: string domain: string
): Promise<ResourceWithAuth | null> { ): Promise<ResourceWithAuth | null> {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/resource/domain/${domain}`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/resource/domain/${domain}`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching resource by domain:", error); console.error("Error fetching resource by domain:", error);
@ -78,9 +76,9 @@ export async function getResourceByDomain(
export async function getUserSessionWithUser( export async function getUserSessionWithUser(
userSessionId: string userSessionId: string
): Promise<UserSessionWithUser | null> { ): Promise<UserSessionWithUser | null> {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/session/${userSessionId}`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/session/${userSessionId}`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching user session:", error); console.error("Error fetching user session:", error);
@ -108,9 +106,9 @@ export async function getUserSessionWithUser(
* Get user organization role * Get user organization role
*/ */
export async function getUserOrgRole(userId: string, orgId: string) { export async function getUserOrgRole(userId: string, orgId: string) {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/user/${userId}/org/${orgId}/role`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/user/${userId}/org/${orgId}/role`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching user org role:", error); console.error("Error fetching user org role:", error);
@ -136,9 +134,9 @@ export async function getUserOrgRole(userId: string, orgId: string) {
* Check if role has access to resource * Check if role has access to resource
*/ */
export async function getRoleResourceAccess(resourceId: number, roleId: number) { export async function getRoleResourceAccess(resourceId: number, roleId: number) {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/role/${roleId}/resource/${resourceId}/access`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/role/${roleId}/resource/${resourceId}/access`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching role resource access:", error); console.error("Error fetching role resource access:", error);
@ -164,9 +162,9 @@ export async function getRoleResourceAccess(resourceId: number, roleId: number)
* Check if user has direct access to resource * Check if user has direct access to resource
*/ */
export async function getUserResourceAccess(userId: string, resourceId: number) { export async function getUserResourceAccess(userId: string, resourceId: number) {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/user/${userId}/resource/${resourceId}/access`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/user/${userId}/resource/${resourceId}/access`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching user resource access:", error); console.error("Error fetching user resource access:", error);
@ -192,9 +190,9 @@ export async function getUserResourceAccess(userId: string, resourceId: number)
* Get resource rules for a given resource * Get resource rules for a given resource
*/ */
export async function getResourceRules(resourceId: number): Promise<ResourceRule[]> { export async function getResourceRules(resourceId: number): Promise<ResourceRule[]> {
if (MODE === "remote") { if (config.isHybridMode()) {
try { try {
const response = await axios.get(`${remoteEndpoint}/resource/${resourceId}/rules`); const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/resource/${resourceId}/rules`);
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error fetching resource rules:", error); console.error("Error fetching resource rules:", error);

View file

@ -56,6 +56,10 @@ export async function createHybridClientServer() {
await deletePeer(exitNode.exitNodeId, pubKey); await deletePeer(exitNode.exitNodeId, pubKey);
}); });
client.registerHandler("remote/traefik/reload", async (message) => {
await monitor.HandleTraefikConfig();
});
// Listen to connection events // Listen to connection events
client.on("connect", () => { client.on("connect", () => {
console.log("Connected to WebSocket server"); console.log("Connected to WebSocket server");

View file

@ -20,7 +20,7 @@ async function startServers() {
const nextServer = await createNextServer(); const nextServer = await createNextServer();
let hybridClientServer; let hybridClientServer;
if (config.getRawConfig().hybrid) { if (config.isHybridMode()) {
hybridClientServer = createHybridClientServer(); hybridClientServer = createHybridClientServer();
} }

View file

@ -147,6 +147,10 @@ export class Config {
return false; return false;
} }
public isHybridMode() {
return this.rawConfig?.hybrid;
}
public async checkSupporterKey() { public async checkSupporterKey() {
const [key] = await db.select().from(supporterKey).limit(1); const [key] = await db.select().from(supporterKey).limit(1);

View file

@ -17,19 +17,7 @@ export const proxyToRemote = async (
endpoint: string endpoint: string
): Promise<any> => { ): Promise<any> => {
try { try {
const remoteConfig = config.getRawConfig().hybrid; const remoteUrl = `${config.getRawConfig().hybrid?.endpoint?.replace(/\/$/, '')}/api/v1/${endpoint}`;
if (!remoteConfig?.endpoint) {
logger.error("Remote endpoint not configured in hybrid.endpoint config");
return next(
createHttpError(
HttpCode.INTERNAL_SERVER_ERROR,
"Remote endpoint not configured"
)
);
}
const remoteUrl = `${remoteConfig.endpoint.replace(/\/$/, '')}/api/v1/${endpoint}`;
logger.debug(`Proxying request to remote server: ${remoteUrl}`); logger.debug(`Proxying request to remote server: ${remoteUrl}`);

View file

@ -7,7 +7,7 @@ import * as auth from "@server/routers/auth";
import * as supporterKey from "@server/routers/supporterKey"; import * as supporterKey from "@server/routers/supporterKey";
import * as license from "@server/routers/license"; import * as license from "@server/routers/license";
import * as idp from "@server/routers/idp"; import * as idp from "@server/routers/idp";
import { proxyToRemote } from "@server/remoteProxy"; import { proxyToRemote } from "@server/lib/remoteProxy";
import config from "@server/lib/config"; import config from "@server/lib/config";
import HttpCode from "@server/types/HttpCode"; import HttpCode from "@server/types/HttpCode";
import { import {
@ -51,7 +51,7 @@ internalRouter.get("/idp/:idpId", idp.getIdp);
const gerbilRouter = Router(); const gerbilRouter = Router();
internalRouter.use("/gerbil", gerbilRouter); internalRouter.use("/gerbil", gerbilRouter);
if (config.getRawConfig().hybrid) { if (config.isHybridMode()) {
// Use proxy router to forward requests to remote cloud server // Use proxy router to forward requests to remote cloud server
// Proxy endpoints for each gerbil route // Proxy endpoints for each gerbil route
gerbilRouter.post("/get-config", (req, res, next) => gerbilRouter.post("/get-config", (req, res, next) =>
@ -83,7 +83,7 @@ internalRouter.use("/badger", badgerRouter);
badgerRouter.post("/verify-session", badger.verifyResourceSession); badgerRouter.post("/verify-session", badger.verifyResourceSession);
if (config.getRawConfig().hybrid) { if (config.isHybridMode()) {
badgerRouter.post("/exchange-session", (req, res, next) => badgerRouter.post("/exchange-session", (req, res, next) =>
proxyToRemote(req, res, next, "badger/exchange-session") proxyToRemote(req, res, next, "badger/exchange-session")
); );