const fetchUser = useMemo( () => async () => {
try {
- const token = localStorage.getItem( 'token' );
- if (token) {
const response = await AuthService.getCurrentUser();
setUser( response.user );
- }
} catch (error) {
+ console.error(error);
enqueueSnackbar( `Error fetching user: ${ error.message }`, { variant:'error' } );
}
}, [enqueueSnackbar] );
try {
const response = await AuthService.login( email, password );
if (response.success) {
- localStorage.setItem( 'token', response.token );
+ localStorage.setItem( 'user', btoa( JSON.stringify( response.user ) ) );
setUser( response.user );
navigate( '/' );
return true;
const logout = () => {
localStorage.removeItem( 'token' );
+ localStorage.removeItem( 'user' );
setUser( null );
navigate( '/login' );
};
import { Route, Routes } from 'react-router-dom';
-import { Login, NotFound, Dashboard, Git, VPN, Docker } from './views';
+import { Dashboard, Docker, Git, Login, NotFound, VPN } from './views';
import { VPNProvider } from './components/';
import MessagesView from './views/Messages/MessagesView';
import MessageFormView from './views/Messages/MessageFormView';
import MediaView from './views/Media/MediaView';
import MediaFormView from './views/Media/MediaFormView';
import PostsView from './views/Posts/PostsView';
-import PostFormView from './views/Posts/PostFormView';
import { useContext } from 'react';
import { AuthContext } from './components/AuthContext';
export default function AppRoutes() {
const { user } = useContext( AuthContext );
const privateRoutes = [
- <Route path="/git" element={ <Git /> } />,
- <Route path="/vpn" element={ <VPNProvider><VPN/></VPNProvider> } />,
- <Route path="/docker" element={ <Docker /> } />,
- <Route path="/messages" element={<MessagesView />} />,
- <Route path="/messages/new" element={<MessageFormView />} />,
- <Route path="/messages/group/:group_id" element={<ChatView />} />,
- <Route path="/messages/recipient/:recipient_id" element={<ChatView />} />,
- <Route path="/message-groups" element={<MessageGroupsView />} />,
- <Route path="/message-groups/new" element={<MessageGroupFormView />} />,
- <Route path="/message-groups/:group_id/members" element={<MessageGroupMembersView />} />,
- <Route path="/message-groups/:group_id/members/new" element={<MessageGroupMemberFormView />} />,
- <Route path="/media" element={<MediaView />} />,
- <Route path="/media/new" element={<MediaFormView />} />,
- <Route path="/posts" element={<PostsView />} />,
- <Route path="/posts/new" element={<PostFormView />} />,
- <Route path="*" element={ <NotFound /> } />,
- <Route path="/" element={ <Dashboard /> } />
- ]
+ <Route path="/git" element={ <Git/> }/>,
+ <Route path="/vpn" element={ <VPNProvider><VPN/></VPNProvider> }/>,
+ <Route path="/docker" element={ <Docker/> }/>,
+ <Route path="/messages" element={ <MessagesView/> }/>,
+ <Route path="/messages/new" element={ <MessageFormView/> }/>,
+ <Route path="/messages/group/:group_id" element={ <ChatView/> }/>,
+ <Route path="/messages/recipient/:recipient_id" element={ <ChatView/> }/>,
+ <Route path="/message-groups" element={ <MessageGroupsView/> }/>,
+ <Route path="/message-groups/new" element={ <MessageGroupFormView/> }/>,
+ <Route path="/message-groups/:group_id/members" element={ <MessageGroupMembersView/> }/>,
+ <Route path="/message-groups/:group_id/members/new" element={ <MessageGroupMemberFormView/> }/>,
+ <Route path="/media" element={ <MediaView/> }/>,
+ <Route path="/media/new" element={ <MediaFormView/> }/>,
+ <Route path="/posts" element={ <PostsView/> }/>,
+ <Route path="*" element={ <NotFound/> }/>,
+ <Route path="/" element={ <Dashboard/> }/>
+ ];
return (
<Routes>
- <Route path="/login" element={ <Login /> } />
+ <Route path="/login" element={ <Login/> }/>
{ user?.id && privateRoutes }
</Routes>
);
const base = 'docker/';
const DockerConfig = {
index: base,
- start: `${base}start-container`,
- stop: `${base}stop-container`,
- images: `${base}images`,
- containers: `${base}containers`,
- down: `${base}compose-down`,
+ start: `${ base }start-container`,
+ stop: `${ base }stop-container`,
+ images: `${ base }images`,
+ containers: `${ base }containers`,
+ down: `${ base }compose-down`,
};
export default DockerConfig;
\ No newline at end of file
import { base_url } from '../../../globals';
import DockerConfig from './DockerConfig';
+axios.defaults.withCredentials = true;
+
class DockerService {
fetchContainers = ( { all = true } ) => {
return new Promise( async ( resolve, reject ) => {
try {
let containersUrl = new URL( `${ base_url }${ DockerConfig.containers }` );
- containersUrl.searchParams.append('all', all ? "true" : "false" );
+ containersUrl.searchParams.append( 'all', all ? 'true' : 'false' );
const response = await axios.get( containersUrl.toString() );
resolve( response.data.containers ); // Resolve the promise with the data
- } catch (error) {
+ } catch ( error ) {
reject( `Error fetching containers: ${ error.message }` ); // Reject the promise with an error message
}
} );
try {
const response = await axios.get( `${ base_url }${ DockerConfig.images }` );
resolve( response.data.images ); // Resolve the promise with the data
- } catch (error) {
+ } catch ( error ) {
console.error( error );
reject( `Error fetching images: ${ error.message }` ); // Reject the promise with an error message
}
} );
};
- containerAction = async (action, id, fetchContainers) => {
+ containerAction = async ( action, id, fetchContainers ) => {
return new Promise( async ( resolve, reject ) => {
try {
const response = await axios.post( `${ base_url }docker/${ action }-container`, {
- containerId:id,
+ containerId: id,
} );
fetchContainers();
- resolve(response.data.message);
- } catch (error) {
- reject(`Error: ${ error.response?.data?.error || `Failed to ${ action } container` }`);
+ resolve( response.data.message );
+ } catch ( error ) {
+ reject( `Error: ${ error.response?.data?.error || `Failed to ${ action } container` }` );
}
- })
+ } );
};
- composeDown = async (composeFile, fetchContainers ) => {
+ composeDown = async ( composeFile, fetchContainers ) => {
return new Promise( async ( resolve, reject ) => {
try {
- const response = await axios.post(`${base_url}${DockerConfig.down}`, {
+ const response = await axios.post( `${ base_url }${ DockerConfig.down }`, {
composeFile,
- });
- resolve(response.data.message);
+ } );
+ resolve( response.data.message );
fetchContainers();
- } catch (error) {
- reject(`Error: ${error.response?.data?.error || 'Failed to stop compose services'}`);
+ } catch ( error ) {
+ reject( `Error: ${ error.response?.data?.error || 'Failed to stop compose services' }` );
}
- });
+ } );
};
}
let base = 'git/';
const GitConfig = {
index: base,
- createRepo: `${base}create-repo`,
- deleteRepo: `${base}`,
- cloneRepo: `${base}clone-repo`,
+ createRepo: `${ base }create-repo`,
+ deleteRepo: `${ base }`,
+ cloneRepo: `${ base }clone-repo`,
};
export default GitConfig;
\ No newline at end of file
import { base_url } from '../../../globals';
import GitConfig from './GitConfig';
+axios.defaults.withCredentials = true;
+
class GitService {
- fetchRepos = async ( token ) => {
+ fetchRepos = async () => {
return new Promise( async ( resolve, reject ) => {
try {
- const response = await axios.get(`${base_url}${GitConfig.index}`, { headers: { Authorization: `Bearer ${token}` } });
- resolve(response.data.repos);
- } catch (error) {
- reject(error.response?.data?.message || error.message);
+ const response = await axios.get( `${ base_url }${ GitConfig.index }` );
+ resolve( response.data.repos );
+ } catch ( error ) {
+ reject( error.response?.data?.message || error.message );
}
- })
+ } );
};
/**
* @param {Function} fetchRepos
* @returns {Promise<string>}
*/
- createRepo = (data, fetchRepos) => {
+ createRepo = ( data, fetchRepos ) => {
return new Promise( async ( resolve, reject ) => {
const { repoName, repoType, repoUser } = data;
try {
- const response = await axios.post(`${base_url}${GitConfig.createRepo}`, {
+ const response = await axios.post( `${ base_url }${ GitConfig.createRepo }`, {
name: repoName,
type: repoType,
user: repoUser,
- });
- resolve(response.data.message);
+ } );
+ resolve( response.data.message );
fetchRepos();
- } catch (error) {
- reject(`Error: ${error.response?.data?.error || 'Failed to create repository'}`);
+ } catch ( error ) {
+ reject( `Error: ${ error.response?.data?.error || 'Failed to create repository' }` );
}
- });
+ } );
};
- deleteRepo = (name, fetchRepos) => {
+ deleteRepo = ( name, fetchRepos ) => {
return new Promise( async ( resolve ) => {
try {
- const response = await axios.delete(`${base_url}${GitConfig.deleteRepo}${name}`);
- resolve(response.data.message);
+ const response = await axios.delete( `${ base_url }${ GitConfig.deleteRepo }${ name }` );
+ resolve( response.data.message );
fetchRepos();
- } catch (error) {
- resolve(`Error: ${error.response?.data?.error || 'Failed to delete repository'}`);
+ } catch ( error ) {
+ resolve( `Error: ${ error.response?.data?.error || 'Failed to delete repository' }` );
}
- });
+ } );
};
- cloneRepo = (data) => {
+ cloneRepo = ( data ) => {
return new Promise( async ( resolve, reject ) => {
- const {deployRepoName, deployPath, deployUser } = data;
- try {
- const response = await axios.put(`${base_url}${GitConfig.cloneRepo}`, {
- repoName: deployRepoName,
- deployPath,
- user: deployUser,
- });
- resolve(response.data.message);
- } catch (error) {
- reject(`Error: ${error.response?.data?.error || 'Failed to clone repository'}`);
- }
- });
+ const { deployRepoName, deployPath, deployUser } = data;
+ try {
+ const response = await axios.put( `${ base_url }${ GitConfig.cloneRepo }`, {
+ repoName: deployRepoName,
+ deployPath,
+ user: deployUser,
+ } );
+ resolve( response.data.message );
+ } catch ( error ) {
+ reject( `Error: ${ error.response?.data?.error || 'Failed to clone repository' }` );
+ }
+ } );
};
}
const base = 'vpn/';
const VPNConfig = {
- create: `${base}create-client/`,
- delete: `${base}revoke-client/`,
- index: `${base}clients/`,
- availableClients: `${base}available-clients/`,
- getStatus: `${base}status/`,
- disconnect: `${base}disconnect/`,
- stop: `${base}stop/`,
- start: `${base}start/`,
- restart: `${base}restart/`
+ create: `${ base }create-client/`,
+ delete: `${ base }revoke-client/`,
+ index: `${ base }clients/`,
+ availableClients: `${ base }available-clients/`,
+ getStatus: `${ base }status/`,
+ disconnect: `${ base }disconnect/`,
+ stop: `${ base }stop/`,
+ start: `${ base }start/`,
+ restart: `${ base }restart/`
};
export default VPNConfig;
\ No newline at end of file
+// noinspection JSUnusedGlobalSymbols
+
import axios from 'axios';
import { base_url } from '../../../globals';
import VPNConfig from './VPNConfig';
+axios.defaults.withCredentials = true;
+
class VPNService {
fetchClients = () => {
return new Promise( async ( resolve ) => {
try {
const response = await axios.get( `${ base_url }${ VPNConfig.index }` );
resolve( response.data.clients );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to fetch clients' }` );
}
} );
try {
const response = await axios.get( `${ base_url }${ VPNConfig.availableClients }` );
resolve( response.data.clients );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to fetch available clients' }` );
}
} );
try {
const response = await axios.post( `${ base_url }${ VPNConfig.create }`, {
clientName,
- staticIp:useStaticIp ? staticIp : undefined,
+ staticIp: useStaticIp ? staticIp : undefined,
} );
fetchClients();
- if (response.data.ovpn) {
+ if ( response.data.ovpn ) {
const element = document.createElement( 'a' );
- const file = new Blob( [response.data.ovpn], { type:'text/plain' } );
+ const file = new Blob( [ response.data.ovpn ], { type: 'text/plain' } );
element.href = URL.createObjectURL( file );
element.download = `${ clientName }.ovpn`;
document.body.appendChild( element );
document.body.removeChild( element );
}
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to create client' }` );
}
} );
const { revokeClientName } = data;
try {
const response = await axios.put( `${ base_url }${ VPNConfig.delete }`, {
- clientName:revokeClientName,
+ clientName: revokeClientName,
} );
fetchClients();
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to revoke client' }` );
}
} );
try {
const response = await axios.get( `${ base_url }${ VPNConfig.getStatus }` );
resolve( response.data );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to fetch server status' }` );
}
} );
try {
const response = await axios.put( `${ base_url }${ VPNConfig.disconnect }`, data );
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to disconnect' }` );
}
} );
stop = () => {
return new Promise( async ( resolve ) => {
try {
- const response = await axios.put( `${ base_url }${ VPNConfig.stop }` );
+ const response = await axios.put( `${ base_url }${ VPNConfig.stop }`, null );
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to stop' }` );
}
} );
start = () => {
return new Promise( async ( resolve ) => {
try {
- const response = await axios.put( `${ base_url }${ VPNConfig.start }` );
+ const response = await axios.put( `${ base_url }${ VPNConfig.start }`, null );
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to start' }` );
}
} );
restart = () => {
return new Promise( async ( resolve ) => {
try {
- const response = await axios.put( `${ base_url }${ VPNConfig.restart }` );
+ const response = await axios.put( `${ base_url }${ VPNConfig.restart }`, null );
resolve( response.data.message );
- } catch (error) {
+ } catch ( error ) {
resolve( `Error: ${ error.response?.data?.error || 'Failed to restart' }` );
}
} );
};
-
}
+/** @namespace data.ovpn */
+
const instance = new VPNService();
export default instance;
\ No newline at end of file
import axios from 'axios';
-const BASE_URL = 'https://api.phasecustomsoft.com';
-
-const getAuthHeaders = () => ({
- headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
-});
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const AuthService = {
- async login(email, password) {
- const response = await axios.post(`${BASE_URL}/auth/authenticate`, { email, password });
+ async login( email, password ) {
+ const response = await axios.post( `${ base_url }auth/authenticate`, { email, password } );
return response.data;
},
async getCurrentUser() {
- const response = await axios.get(`${BASE_URL}/user/1`, getAuthHeaders());
+ const response = await axios.get( `${ base_url }user/current` );
return { user: response.data };
},
};
\ No newline at end of file
import axios from 'axios';
-const { base_url } = require('../../globals');
-
-const getAuthHeaders = () => ({
- headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
-});
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const MediaService = {
- async getMedia(params = {}) {
- return await axios.get(`${base_url}media`, { ...getAuthHeaders(), params });
- },
- async getMediaByFilePath(file_path) {
- return await axios.get(`${base_url}media/file_path/${file_path}`, getAuthHeaders());
- },
- async getMediaById(id) {
- return await axios.get(`${base_url}media/${id}`, getAuthHeaders());
- },
- async createMedia(data) {
- return await axios.post(`${base_url}media/create`, data, getAuthHeaders());
- },
- async updateMedia(id, data) {
- return await axios.put(`${base_url}media/${id}`, data, getAuthHeaders());
- },
- async softDeleteMedia(id, data) {
- return await axios.put(`${base_url}media/${id}/soft_delete`, data, getAuthHeaders());
- },
+ async getMedia( params = {} ) {
+ return await axios.get( `${ base_url }media`, { params } );
+ },
+ async getMediaByFilePath( file_path ) {
+ return await axios.get( `${ base_url }media/file_path/${ file_path }` );
+ },
+ async getMediaById( id ) {
+ return await axios.get( `${ base_url }media/${ id }` );
+ },
+ async createMedia( data ) {
+ return await axios.post( `${ base_url }media/create`, data );
+ },
+ async updateMedia( id, data ) {
+ return await axios.put( `${ base_url }media/${ id }`, data );
+ },
+ async softDeleteMedia( id, data ) {
+ return await axios.put( `${ base_url }media/${ id }/soft_delete`, data );
+ },
};
\ No newline at end of file
import axios from 'axios';
-const { base_url } = require('../../globals');
-
-const getAuthHeaders = () => ({
- headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
-});
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const MessageGroupMembersService = {
- async getMembersByGroupId(group_id, params = {}) {
- return await axios.get(`${base_url}message_group_members/group/${group_id}`, { ...getAuthHeaders(), params });
+ async getMembersByGroupId( group_id, params = {} ) {
+ return await axios.get( `${ base_url }message_group_members/group/${ group_id }`, { params } );
},
- async getMemberByIds(group_id, user_id) {
- return await axios.get(`${base_url}message_group_members/ids/${group_id}/${user_id}`, getAuthHeaders());
+ async getMemberByIds( group_id, user_id ) {
+ return await axios.get( `${ base_url }message_group_members/ids/${ group_id }/${ user_id }` );
},
- async addMember(data) {
- return await axios.post(`${base_url}message_group_members/add`, data, getAuthHeaders());
+ async addMember( data ) {
+ return await axios.post( `${ base_url }message_group_members/add`, data );
},
- async removeMember(data) {
- return await axios.delete(`${base_url}message_group_members/remove`, { ...getAuthHeaders(), data });
+ async removeMember( data ) {
+ return await axios.delete( `${ base_url }message_group_members/remove`, { data } );
},
};
\ No newline at end of file
import axios from 'axios';
-const { base_url } = require('../../globals');
-
-const getAuthHeaders = () => ({
- headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
-});
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const MessageGroupService = {
- async getMessageGroups(params = {}) {
- return await axios.get(`${base_url}message_group`, { ...getAuthHeaders(), params });
+ async getMessageGroups( params = {} ) {
+ return await axios.get( `${ base_url }message_group`, { params } );
},
- async getMessageGroup(id) {
- return await axios.get(`${base_url}message_group/${id}`, getAuthHeaders());
+ async getMessageGroup( id ) {
+ return await axios.get( `${ base_url }message_group/${ id }` );
},
- async createMessageGroup(data) {
- return await axios.post(`${base_url}message_group/create`, data, getAuthHeaders());
+ async createMessageGroup( data ) {
+ return await axios.post( `${ base_url }message_group/create`, data );
},
- async updateMessageGroup(id, data) {
- return await axios.put(`${base_url}message_group/${id}`, data, getAuthHeaders());
+ async updateMessageGroup( id, data ) {
+ return await axios.put( `${ base_url }message_group/${ id }`, data );
},
};
\ No newline at end of file
import axios from 'axios';
-const { base_url } = require('../../globals');
-
-const getAuthHeaders = () => ({
- headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
-});
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const MessageService = {
- async getMessages(params = {}) {
- return await axios.get(`${base_url}message`, { ...getAuthHeaders(), params });
+ async getMessages( params = {} ) {
+ return await axios.get( `${ base_url }message`, { params } );
},
- async getMessagesByGroupId(group_id, params = {}) {
- return await axios.get(`${base_url}message/group/${group_id}`, { ...getAuthHeaders(), params });
+ async getMessagesByGroupId( group_id, params = {} ) {
+ return await axios.get( `${ base_url }message/group/${ group_id }`, { params } );
},
- async getMessagesByRecipientId(recipient_id, params = {}) {
- return await axios.get(`${base_url}message/recipient/${recipient_id}`, { ...getAuthHeaders(), params });
+ async getMessagesByRecipientId( recipient_id, params = {} ) {
+ return await axios.get( `${ base_url }message/recipient/${ recipient_id }`, { params } );
},
- async getMessage(id) {
- return await axios.get(`${base_url}message/${id}`, getAuthHeaders());
+ async getMessage( id ) {
+ return await axios.get( `${ base_url }message/${ id }` );
},
- async createMessage(data) {
- return await axios.post(`${base_url}message/create`, data, getAuthHeaders());
+ async createMessage( data ) {
+ return await axios.post( `${ base_url }message/create`, data );
},
- async markMessageAsRead(id) {
- return await axios.put(`${base_url}message/${id}/mark_as_read`, {}, getAuthHeaders());
+ async markMessageAsRead( id ) {
+ return await axios.put( `${ base_url }message/${ id }/mark_as_read` );
},
};
\ No newline at end of file
import axios from 'axios';
-const { base_url } = require('../../globals');
-
+axios.defaults.withCredentials = true;
+const { base_url } = require( '../../globals' );
export const PostService = {
- async getPosts() {
- let url = new URL( `${ base_url }post` );
- console.log(url.toString());
- return await axios.get(url.toString());
+ async getPosts( params = {} ) {
+ return await axios.get( `${ base_url }post`, { params } );
},
- async getPostByTitle(title) {
- return await axios.get(`${base_url}post/title/${title}`);
+ async getPostByTitle( title ) {
+ return await axios.get( `${ base_url }post/title/${ title }` );
},
- async getPost(id) {
- return await axios.get(`${base_url}post/${id}`);
+ async getPost( id ) {
+ return await axios.get( `${ base_url }post/${ id }` );
},
- async createPost(data) {
- return await axios.post(`${base_url}post/create`, data);
+ async createPost( data ) {
+ return await axios.post( `${ base_url }post/create`, data );
},
- async updatePost(id, data) {
- return await axios.put(`${base_url}post/${id}`, data);
+ async updatePost( id, data ) {
+ return await axios.put( `${ base_url }post/${ id }`, data );
},
- async softDeletePost(id, data) {
- return await axios.put(`${base_url}post/${id}/soft_delete`, data);
+ async softDeletePost( id, data ) {
+ return await axios.put( `${ base_url }post/${ id }/soft_delete`, data );
},
};
\ No newline at end of file