mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-22 18:29:19 +02:00
Adjust pulling in config
This commit is contained in:
parent
880a123149
commit
3d8869066a
6 changed files with 26 additions and 32 deletions
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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}`);
|
||||||
|
|
||||||
|
|
|
@ -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")
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue