Rename hybrid to managed

This commit is contained in:
Owen 2025-08-21 14:17:38 -07:00
parent 5ff5660db3
commit 60d8831399
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
17 changed files with 39 additions and 39 deletions

View file

@ -5,7 +5,7 @@ gerbil:
start_port: 51820 start_port: 51820
base_endpoint: "{{.DashboardDomain}}" base_endpoint: "{{.DashboardDomain}}"
{{if .HybridMode}} {{if .HybridMode}}
hybrid: managed:
id: "{{.HybridId}}" id: "{{.HybridId}}"
secret: "{{.HybridSecret}}" secret: "{{.HybridSecret}}"

View file

@ -623,5 +623,5 @@ func checkIsPangolinInstalledWithHybrid() bool {
} }
// Check for hybrid section // Check for hybrid section
return bytes.Contains(content, []byte("hybrid:")) return bytes.Contains(content, []byte("managed:"))
} }

View file

@ -65,9 +65,9 @@ export async function validateResourceSessionToken(
token: string, token: string,
resourceId: number resourceId: number
): Promise<ResourceSessionValidationResult> { ): Promise<ResourceSessionValidationResult> {
if (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.post(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/resource/${resourceId}/session/validate`, { const response = await axios.post(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/resource/${resourceId}/session/validate`, {
token: token token: token
}, await tokenManager.getAuthHeader()); }, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;

View file

@ -37,9 +37,9 @@ export type UserSessionWithUser = {
export async function getResourceByDomain( export async function getResourceByDomain(
domain: string domain: string
): Promise<ResourceWithAuth | null> { ): Promise<ResourceWithAuth | null> {
if (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/resource/domain/${domain}`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/resource/domain/${domain}`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {
@ -89,9 +89,9 @@ export async function getResourceByDomain(
export async function getUserSessionWithUser( export async function getUserSessionWithUser(
userSessionId: string userSessionId: string
): Promise<UserSessionWithUser | null> { ): Promise<UserSessionWithUser | null> {
if (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/session/${userSessionId}`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/session/${userSessionId}`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {
@ -130,9 +130,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 (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/user/${userId}/org/${orgId}/role`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/user/${userId}/org/${orgId}/role`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {
@ -169,9 +169,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 (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/role/${roleId}/resource/${resourceId}/access`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/role/${roleId}/resource/${resourceId}/access`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {
@ -208,9 +208,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 (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/user/${userId}/resource/${resourceId}/access`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/user/${userId}/resource/${resourceId}/access`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {
@ -247,9 +247,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 (config.isHybridMode()) { if (config.isManagedMode()) {
try { try {
const response = await axios.get(`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/resource/${resourceId}/rules`, await tokenManager.getAuthHeader()); const response = await axios.get(`${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/resource/${resourceId}/rules`, await tokenManager.getAuthHeader());
return response.data.data; return response.data.data;
} catch (error) { } catch (error) {
if (axios.isAxiosError(error)) { if (axios.isAxiosError(error)) {

View file

@ -6,7 +6,7 @@ import logger from "@server/logger";
import SMTPTransport from "nodemailer/lib/smtp-transport"; import SMTPTransport from "nodemailer/lib/smtp-transport";
function createEmailClient() { function createEmailClient() {
if (config.isHybridMode()) { if (config.isManagedMode()) {
// LETS NOT WORRY ABOUT EMAILS IN HYBRID // LETS NOT WORRY ABOUT EMAILS IN HYBRID
return; return;
} }

View file

@ -23,7 +23,7 @@ export async function createHybridClientServer() {
// Create client // Create client
const client = createWebSocketClient( const client = createWebSocketClient(
token, token,
config.getRawConfig().hybrid!.endpoint!, config.getRawConfig().managed!.endpoint!,
{ {
reconnectInterval: 5000, reconnectInterval: 5000,
pingInterval: 30000, pingInterval: 30000,

View file

@ -27,7 +27,7 @@ async function startServers() {
let hybridClientServer; let hybridClientServer;
let nextServer; let nextServer;
if (config.isHybridMode()) { if (config.isManagedMode()) {
hybridClientServer = await createHybridClientServer(); hybridClientServer = await createHybridClientServer();
} else { } else {
nextServer = await createNextServer(); nextServer = await createNextServer();

View file

@ -96,8 +96,8 @@ export class Config {
if (!this.rawConfig) { if (!this.rawConfig) {
throw new Error("Config not loaded. Call load() first."); throw new Error("Config not loaded. Call load() first.");
} }
if (this.rawConfig.hybrid) { if (this.rawConfig.managed) {
// LETS NOT WORRY ABOUT THE SERVER SECRET WHEN HYBRID // LETS NOT WORRY ABOUT THE SERVER SECRET WHEN MANAGED
return; return;
} }
license.setServerSecret(this.rawConfig.server.secret!); license.setServerSecret(this.rawConfig.server.secret!);
@ -149,8 +149,8 @@ export class Config {
return false; return false;
} }
public isHybridMode() { public isManagedMode() {
return typeof this.rawConfig?.hybrid === "object"; return typeof this.rawConfig?.managed === "object";
} }
public async checkSupporterKey() { public async checkSupporterKey() {

View file

@ -39,7 +39,7 @@ export const configSchema = z
anonymous_usage: true anonymous_usage: true
} }
}), }),
hybrid: z managed: z
.object({ .object({
name: z.string().optional(), name: z.string().optional(),
id: z.string().optional(), id: z.string().optional(),
@ -306,7 +306,7 @@ export const configSchema = z
return true; return true;
} }
// If hybrid is defined, domains are not required // If hybrid is defined, domains are not required
if (data.hybrid) { if (data.managed) {
return true; return true;
} }
if (keys.length === 0) { if (keys.length === 0) {
@ -321,7 +321,7 @@ export const configSchema = z
.refine( .refine(
(data) => { (data) => {
// If hybrid is defined, server secret is not required // If hybrid is defined, server secret is not required
if (data.hybrid) { if (data.managed) {
return true; return true;
} }
// If hybrid is not defined, server secret must be defined // If hybrid is not defined, server secret must be defined
@ -334,7 +334,7 @@ export const configSchema = z
.refine( .refine(
(data) => { (data) => {
// If hybrid is defined, dashboard_url is not required // If hybrid is defined, dashboard_url is not required
if (data.hybrid) { if (data.managed) {
return true; return true;
} }
// If hybrid is not defined, dashboard_url must be defined // If hybrid is not defined, dashboard_url must be defined

View file

@ -24,7 +24,7 @@ export async function getValidCertificatesForDomainsHybrid(domains: Set<string>)
try { try {
const response = await axios.get( const response = await axios.get(
`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/certificates/domains`, `${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/certificates/domains`,
{ {
params: { params: {
domains: domainArray domains: domainArray

View file

@ -18,7 +18,7 @@ export const proxyToRemote = async (
endpoint: string endpoint: string
): Promise<any> => { ): Promise<any> => {
try { try {
const remoteUrl = `${config.getRawConfig().hybrid?.endpoint?.replace(/\/$/, '')}/api/v1/${endpoint}`; const remoteUrl = `${config.getRawConfig().managed?.endpoint?.replace(/\/$/, '')}/api/v1/${endpoint}`;
logger.debug(`Proxying request to remote server: ${remoteUrl}`); logger.debug(`Proxying request to remote server: ${remoteUrl}`);

View file

@ -174,7 +174,7 @@ export class TokenManager {
this.isRefreshing = true; this.isRefreshing = true;
try { try {
const hybridConfig = config.getRawConfig().hybrid; const hybridConfig = config.getRawConfig().managed;
if ( if (
!hybridConfig?.id || !hybridConfig?.id ||

View file

@ -281,7 +281,7 @@ export class TraefikConfigManager {
if (this.shouldFetchCertificates(domains)) { if (this.shouldFetchCertificates(domains)) {
// Get valid certificates for active domains // Get valid certificates for active domains
if (config.isHybridMode()) { if (config.isManagedMode()) {
validCertificates = validCertificates =
await getValidCertificatesForDomainsHybrid(domains); await getValidCertificatesForDomainsHybrid(domains);
} else { } else {
@ -383,9 +383,9 @@ export class TraefikConfigManager {
} | null> { } | null> {
let traefikConfig; let traefikConfig;
try { try {
if (config.isHybridMode()) { if (config.isManagedMode()) {
const resp = await axios.get( const resp = await axios.get(
`${config.getRawConfig().hybrid?.endpoint}/api/v1/hybrid/traefik-config`, `${config.getRawConfig().managed?.endpoint}/api/v1/hybrid/traefik-config`,
await tokenManager.getAuthHeader() await tokenManager.getAuthHeader()
); );

View file

@ -192,8 +192,8 @@ export async function verifyResourceSession(
} }
let endpoint: string; let endpoint: string;
if (config.isHybridMode()) { if (config.isManagedMode()) {
endpoint = config.getRawConfig().hybrid?.redirect_endpoint || config.getRawConfig().hybrid?.endpoint || ""; endpoint = config.getRawConfig().managed?.redirect_endpoint || config.getRawConfig().managed?.endpoint || "";
} else { } else {
endpoint = config.getRawConfig().app.dashboard_url!; endpoint = config.getRawConfig().app.dashboard_url!;
} }

View file

@ -104,7 +104,7 @@ export async function getConfig(
} }
// STOP HERE IN HYBRID MODE // STOP HERE IN HYBRID MODE
if (config.isHybridMode()) { if (config.isManagedMode()) {
req.body = { req.body = {
...req.body, ...req.body,
endpoint: exitNode[0].endpoint, endpoint: exitNode[0].endpoint,

View file

@ -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.isHybridMode()) { if (config.isManagedMode()) {
// 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("/receive-bandwidth", (req, res, next) => gerbilRouter.post("/receive-bandwidth", (req, res, next) =>
@ -90,7 +90,7 @@ internalRouter.use("/badger", badgerRouter);
badgerRouter.post("/verify-session", badger.verifyResourceSession); badgerRouter.post("/verify-session", badger.verifyResourceSession);
if (config.isHybridMode()) { if (config.isManagedMode()) {
badgerRouter.post("/exchange-session", (req, res, next) => badgerRouter.post("/exchange-session", (req, res, next) =>
proxyToRemote(req, res, next, "hybrid/badger/exchange-session") proxyToRemote(req, res, next, "hybrid/badger/exchange-session")
); );

View file

@ -23,7 +23,7 @@ function generateId(length: number): string {
} }
export async function ensureSetupToken() { export async function ensureSetupToken() {
if (config.isHybridMode()) { if (config.isManagedMode()) {
// LETS NOT WORRY ABOUT THE SERVER SECRET WHEN HYBRID // LETS NOT WORRY ABOUT THE SERVER SECRET WHEN HYBRID
return; return;
} }