Feat: Natively support NETIFY environment variables and improve MongoDB detection based on URI presence

This commit is contained in:
ypratama committed 2026-08-28 16:43:00 +07:00
1 parent eedaa588b5
commit 2be8b08074
8 files changed
+16 -16

No files matched your search

+1 -1
View File
@@ -70,7 +70,7 @@ async function populateAppCache(BASE_URL, token, siteUuid) {
// Core DPI fetch for app-details // Core DPI fetch for app-details
async function fetchFromDpiApi(label, agentUuid, timeRange, token, siteUuid) { async function fetchFromDpiApi(label, agentUuid, timeRange, token, siteUuid) {
const BASE_URL = process.env.BACKONE_INFORMATICS_BASE_URL || 'https://api0.dev.backone.cloud/api/v1'; const BASE_URL = process.env.BACKONE_INFORMATICS_BASE_URL || process.env.NETIFY_INFORMATICS_BASE_URL || 'https://api0.dev.backone.cloud/api/v1';
const headers = { 'x-api-key': token, 'Accept': 'application/json', 'x-net-site': siteUuid }; const headers = { 'x-api-key': token, 'Accept': 'application/json', 'x-net-site': siteUuid };
const TIMEOUT_MS = 12000; const TIMEOUT_MS = 12000;
+3 -3
View File
@@ -20,8 +20,8 @@ module.exports = async function appDetailsHandler(req, res, helpers) {
const label = String(req.query.label ?? ''); const label = String(req.query.label ?? '');
if (!label) return res.status(400).json({ ok: false, message: 'label required' }); if (!label) return res.status(400).json({ ok: false, message: 'label required' });
const token = process.env.BACKONE_DPI_API_KEY || process.env.BACKONE_TOKEN; const token = process.env.BACKONE_DPI_API_KEY || process.env.NETIFY_API_KEY || process.env.BACKONE_TOKEN || process.env.NETIFY_TOKEN;
const SITE_UUID = process.env.BACKONE_SITE_UUID; const SITE_UUID = process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID;
// Respect timeRange from request // Respect timeRange from request
const timeFilter = getTimeFilter(req); const timeFilter = getTimeFilter(req);
@@ -39,7 +39,7 @@ module.exports = async function appDetailsHandler(req, res, helpers) {
if (deviceApps.length > 0) { if (deviceApps.length > 0) {
// Pre-load application lookup to resolve default domains // Pre-load application lookup to resolve default domains
const BASE_URL = process.env.BACKONE_INFORMATICS_BASE_URL || 'https://api0.dev.backone.cloud/api/v1'; const BASE_URL = process.env.BACKONE_INFORMATICS_BASE_URL || process.env.NETIFY_INFORMATICS_BASE_URL || 'https://api0.dev.backone.cloud/api/v1';
if (token && SITE_UUID) { if (token && SITE_UUID) {
await populateAppCache(BASE_URL, token, SITE_UUID).catch(e => console.warn('[AppDetails] Cache error:', e.message)); await populateAppCache(BASE_URL, token, SITE_UUID).catch(e => console.warn('[AppDetails] Cache error:', e.message));
} }
+1 -1
View File
@@ -17,7 +17,7 @@ async function seedAuth() {
password_hash: hash, password_hash: hash,
account_name: 'BackOne Administrator', account_name: 'BackOne Administrator',
role: 'SUPER_ADMIN', role: 'SUPER_ADMIN',
site_uuid: process.env.BACKONE_SITE_UUID || null, site_uuid: process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID || null,
agent_uuid: null, agent_uuid: null,
}); });
console.log('[Auth] ✓ Default SUPER_ADMIN created: admin / admin'); console.log('[Auth] ✓ Default SUPER_ADMIN created: admin / admin');
+2 -2
View File
@@ -57,8 +57,8 @@ async function handleCreateExternalUser(req, res) {
const siteUuid = (role === 'EXECUTIVE' || role === 'COMPANY_ADMIN') const siteUuid = (role === 'EXECUTIVE' || role === 'COMPANY_ADMIN')
? null ? null
: req.adminUser.role === 'SUPER_ADMIN' : req.adminUser.role === 'SUPER_ADMIN'
? (req.body.site_uuid || process.env.BACKONE_SITE_UUID || null) ? (req.body.site_uuid || process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID)
: req.adminUser.site_uuid; : (req.body.site_uuid || null);
const createdBy = req.adminUser.role === 'SUPER_ADMIN' const createdBy = req.adminUser.role === 'SUPER_ADMIN'
? (req.body.created_by || req.adminUser.username) ? (req.body.created_by || req.adminUser.username)
+1 -1
View File
@@ -23,7 +23,7 @@ async function resolveSiteUuidForAgent(agentUuid, fallbackSiteUuid, adminUser, b
if (!siteUuid) { if (!siteUuid) {
siteUuid = adminUser.role === 'SUPER_ADMIN' siteUuid = adminUser.role === 'SUPER_ADMIN'
? (bodySiteUuid || process.env.BACKONE_SITE_UUID || fallbackSiteUuid || null) ? (bodySiteUuid || process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID)
: adminUser.site_uuid; : adminUser.site_uuid;
} }
+1 -1
View File
@@ -54,7 +54,7 @@ router.post('/agent-locations', async (req, res) => {
siteUuid = summaryDoc.site_uuid; siteUuid = summaryDoc.site_uuid;
} else { } else {
// Fallback or use standard env site_uuid // Fallback or use standard env site_uuid
siteUuid = process.env.BACKONE_SITE_UUID || '6681452d_9cae_4ff4_8ae8_0d504774265e'; siteUuid = process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID || '6681452d_9cae_4ff4_8ae8_0d504774265e';
} }
} }
+3 -3
View File
@@ -34,8 +34,8 @@ export async function getAgents(clientSiteUuid?: string): Promise<Agent[]> {
SITE_UUID = user.site_uuid; SITE_UUID = user.site_uuid;
} }
// All agent data comes from MongoDB agent_registry (single source of truth) // All agent data comes from MongoDB agent_registry if MONGODB_URI is provided or API key is sk_db_
if (API_KEY && API_KEY.startsWith("sk_db_")) { if (process.env.MONGODB_URI || (API_KEY && API_KEY.startsWith("sk_db_"))) {
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/backone_dpi'; const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/backone_dpi';
try { try {
@@ -79,7 +79,7 @@ export async function getAgents(clientSiteUuid?: string): Promise<Agent[]> {
export async function getAgent(agentId: string): Promise<Agent | null> { export async function getAgent(agentId: string): Promise<Agent | null> {
try { try {
const API_KEY = getApiKey(); const API_KEY = getApiKey();
if (API_KEY && API_KEY.startsWith("sk_db_")) { if (process.env.MONGODB_URI || (API_KEY && API_KEY.startsWith("sk_db_"))) {
const agents = await getAgents(); const agents = await getAgents();
return agents.find(a => a.uuid === agentId || String(a.id) === agentId) || null; return agents.find(a => a.uuid === agentId || String(a.id) === agentId) || null;
} }
+4 -4
View File
@@ -1,11 +1,11 @@
import { revalidatePath } from "next/cache"; import { revalidatePath } from "next/cache";
export const BASE_URL = process.env.BACKONE_BASE_URL || process.env.BACKONE_INFORMATICS_BASE_URL || "http://127.0.0.1:3011"; export const BASE_URL = process.env.BACKONE_BASE_URL || process.env.NETIFY_BASE_URL || process.env.BACKONE_INFORMATICS_BASE_URL || process.env.NETIFY_INFORMATICS_BASE_URL || "http://127.0.0.1:3011";
export const API_URL = `${BASE_URL}/assets/agents`; export const API_URL = `${BASE_URL}/assets/agents`;
export const getApiKey = () => process.env.BACKONE_API_KEY || process.env.BACKONE_DPI_API_KEY; export const getApiKey = () => process.env.BACKONE_API_KEY || process.env.NETIFY_API_KEY || process.env.BACKONE_DPI_API_KEY || process.env.NETIFY_DPI_API_KEY;
export const getJwtToken = () => process.env.BACKONE_JWT_TOKEN || process.env.BACKONE_TOKEN; export const getJwtToken = () => process.env.BACKONE_JWT_TOKEN || process.env.NETIFY_JWT_TOKEN || process.env.BACKONE_TOKEN || process.env.NETIFY_TOKEN;
export const getSiteUuid = () => process.env.BACKONE_SITE_UUID; export const getSiteUuid = () => process.env.BACKONE_SITE_UUID || process.env.NETIFY_SITE_UUID;
export interface Agent { export interface Agent {
id: number; id: number;