Files
OpenVPN-Monitoring-Simple/APP_UI/src/composables/useApi.js

75 lines
2.2 KiB
JavaScript
Raw Normal View History

2026-01-28 22:37:47 +03:00
import axios from 'axios';
import { useAppConfig } from './useAppConfig';
// Singleton instances
const apiClient = axios.create();
const profilesApiClient = axios.create();
// Helper to get base URLs
const getBaseUrl = (config) => config?.api_base_url || 'http://localhost:5001/api/v1';
const getProfilesBaseUrl = (config) => config?.profiles_api_base_url || 'http://localhost:8000';
// Add interceptors to handle Auth and Dynamic Base URLs
const setupInterceptors = (instance, getBase) => {
instance.interceptors.request.use((reqConfig) => {
const { config } = useAppConfig();
reqConfig.baseURL = getBase(config.value);
const token = localStorage.getItem('ovpmon_token');
if (token) {
reqConfig.headers.Authorization = `Bearer ${token}`;
}
return reqConfig;
});
instance.interceptors.response.use(
response => response,
error => {
if (error.response && error.response.status === 401) {
localStorage.removeItem('ovpmon_token');
localStorage.removeItem('ovpmon_user');
// Redirecting using window.location for absolute refresh
if (window.location.pathname !== '/login') {
window.location.href = '/login';
}
}
return Promise.reject(error);
}
);
};
setupInterceptors(apiClient, getBaseUrl);
setupInterceptors(profilesApiClient, getProfilesBaseUrl);
export function useApi() {
const fetchStats = async () => {
const res = await apiClient.get('/stats');
return res.data;
};
const fetchClientHistory = async (clientId, range) => {
const res = await apiClient.get(`/stats/${clientId}`, { params: { range } });
return res.data;
};
const fetchAnalytics = async (range) => {
const res = await apiClient.get('/analytics', { params: { range } });
return res.data;
};
const fetchCertificates = async () => {
2026-02-07 15:11:33 +03:00
const res = await profilesApiClient.get('/profiles');
2026-01-28 22:37:47 +03:00
return res.data;
};
2026-02-07 15:11:33 +03:00
2026-01-28 22:37:47 +03:00
return {
apiClient,
profilesApiClient,
fetchStats,
fetchClientHistory,
fetchAnalytics,
fetchCertificates
};
}