diff --git a/src/apicalls/api-fetcher.tsx b/src/apicalls/api-fetcher.tsx index 9debca7..7d216d7 100644 --- a/src/apicalls/api-fetcher.tsx +++ b/src/apicalls/api-fetcher.tsx @@ -1,12 +1,18 @@ "use server"; -import { redirect } from "next/navigation"; - const defaultHeaders = { accept: "application/json", "Content-type": "application/json", }; +const DefaultResponse = { + completed: false, + error: "Hata tipi belirtilmedi", + message: "Hata oluştu, lütfen tekrar deneyin", + status: "500", + data: {}, +}; + interface HeadersObject { cache: string; method: string; @@ -14,6 +20,26 @@ interface HeadersObject { body?: string; } +const prepareResponse = async (response: any) => { + try { + const responseJson = await response.json(); + const statusResponse = response?.status; + const errorResponse = responseJson?.error || responseJson?.Error; + const messageResponse = (responseJson?.message || "").toString(); + const completeResponse = responseJson?.completed; + const preparedResponse = { + completed: completeResponse, + message: messageResponse, + status: statusResponse, + error: errorResponse || "", + ...responseJson, + }; + + return preparedResponse; + } catch (error) {} + return DefaultResponse; +}; + const fetchData = async ( endpoint: string, payload: any, @@ -31,18 +57,11 @@ const fetchData = async ( body: JSON.stringify(payload), }; } - try { const response = await fetch(endpoint, headersObject); - if (response.status === 200) { - return response; - } else if (response.status === 401) { - return { status: 401 }; - } else { - return { status: response.status }; - } + return await prepareResponse(response); } catch (error) {} - return { status: 500 }; + return DefaultResponse; }; const fetchDataWithToken = async ( @@ -68,15 +87,9 @@ const fetchDataWithToken = async ( } try { const response = await fetch(endpoint, headersObject); - if (response.status === 200) { - return response; - } else if (response.status === 401) { - redirect("/login/email"); - } else { - return { status: response.status }; - } + return await prepareResponse(response); } catch (error) {} - return { status: 500 }; + return DefaultResponse; }; export { fetchData, fetchDataWithToken }; diff --git a/src/apicalls/cookies/token.tsx b/src/apicalls/cookies/token.tsx index 4f59e02..34728b3 100644 --- a/src/apicalls/cookies/token.tsx +++ b/src/apicalls/cookies/token.tsx @@ -1,7 +1,7 @@ "use server"; import { fetchDataWithToken } from "../api-fetcher"; import { cookies } from "next/headers"; -import { baseUrl, tokenSecret } from "../basics"; +import { baseUrl, cookieObject, tokenSecret } from "@/apicalls/basics"; import NextCrypto from "next-crypto"; const checkToken = `${baseUrl}/authentication/valid`; @@ -20,6 +20,7 @@ async function check_access_token_is_valid() { "GET", false ); + console.log("response", response?.status); return response?.status === 200 ? true : false; } diff --git a/src/apicalls/login/login.tsx b/src/apicalls/login/login.tsx index 5f22159..71da6ed 100644 --- a/src/apicalls/login/login.tsx +++ b/src/apicalls/login/login.tsx @@ -1,7 +1,7 @@ "use server"; import { fetchData, fetchDataWithToken } from "../api-fetcher"; import { cookies } from "next/headers"; -import { baseUrl, cookieObject, tokenSecret } from "../basics"; +import { baseUrl, cookieObject, tokenSecret } from "@/apicalls/basics"; import NextCrypto from "next-crypto"; const loginEndpoint = `${baseUrl}/authentication/login`; @@ -29,7 +29,6 @@ async function login_via_access_keys(payload: LoginViaAccessKeys) { const cookieStore = await cookies(); const nextCrypto = new NextCrypto(tokenSecret); - let responseData: any = {}; const tokenResponse: any = await fetchData( loginEndpoint, { @@ -42,15 +41,14 @@ async function login_via_access_keys(payload: LoginViaAccessKeys) { false ); if (tokenResponse.status === 200) { - responseData = await tokenResponse?.json(); - const accessToken = await nextCrypto.encrypt(responseData.access_token); + const accessToken = await nextCrypto.encrypt(tokenResponse.access_token); const accessObject = await nextCrypto.encrypt( - JSON.stringify(responseData.access_object) + JSON.stringify(tokenResponse.access_object) ); const userProfile = await nextCrypto.encrypt( - JSON.stringify(responseData.user) + JSON.stringify(tokenResponse.user) ); - const refreshToken = await nextCrypto.encrypt(responseData.refresh_token); + const refreshToken = await nextCrypto.encrypt(tokenResponse.refresh_token); // const userType = await nextCrypto.encrypt(responseData.user_type); // cookieStore.set({ @@ -82,11 +80,10 @@ async function login_via_access_keys(payload: LoginViaAccessKeys) { // ...cookieObject, // }); } - return responseData; + return tokenResponse; } async function login_select_employee(payload: LoginSelectEmployee) { - let responseData = null; const cookieStore = await cookies(); const nextCrypto = new NextCrypto(tokenSecret); @@ -99,8 +96,8 @@ async function login_select_employee(payload: LoginSelectEmployee) { "POST", false ); + const responseData = selectResponse?.data; if (selectResponse.status === 200) { - responseData = await selectResponse?.json(); const usersSelection = await nextCrypto.encrypt( JSON.stringify({ company_uu_id: payload.company_uu_id, @@ -117,7 +114,6 @@ async function login_select_employee(payload: LoginSelectEmployee) { } async function login_select_occupant(payload: LoginSelectOccupant) { - let responseData = null; const cookieStore = await cookies(); const nextCrypto = new NextCrypto(tokenSecret); const selectResponse: any = await fetchDataWithToken( @@ -131,7 +127,6 @@ async function login_select_occupant(payload: LoginSelectOccupant) { false ); if (selectResponse.status === 200) { - responseData = await selectResponse?.json(); const usersSelection = await nextCrypto.encrypt( JSON.stringify({ company_uu_id: { @@ -147,7 +142,7 @@ async function login_select_occupant(payload: LoginSelectOccupant) { ...cookieObject, }); } - return responseData; + return selectResponse; } export { login_via_access_keys, login_select_employee, login_select_occupant }; diff --git a/src/apicalls/login/logout.tsx b/src/apicalls/login/logout.tsx new file mode 100644 index 0000000..eb8001d --- /dev/null +++ b/src/apicalls/login/logout.tsx @@ -0,0 +1,57 @@ +"use server"; +import { fetchDataWithToken } from "../api-fetcher"; +import { cookies } from "next/headers"; +import { baseUrl } from "@/apicalls/basics"; + +const logOutEndpoint = `${baseUrl}/authentication/logout`; +const logOutAllEndpoint = `${baseUrl}/authentication/disconnect`; + +interface LoginOutUser { + token: string; + domain: string; +} + +async function logout_active_session(payload: LoginOutUser) { + const cookieStore = await cookies(); + cookieStore.delete("accessToken"); + cookieStore.delete("accessObject"); + cookieStore.delete("userProfile"); + cookieStore.delete("userSelection"); + + const tokenResponse: any = await fetchDataWithToken( + logOutEndpoint, + payload.token, + { + domain: payload.domain, + }, + "POST", + false + ); + if (tokenResponse.status === 200) { + return true; + } + return false; +} + +async function logout_all_sessions(payload: LoginOutUser) { + const cookieStore = await cookies(); + cookieStore.delete("accessToken"); + cookieStore.delete("accessObject"); + cookieStore.delete("userProfile"); + cookieStore.delete("userSelection"); + const tokenResponse: any = await fetchDataWithToken( + logOutAllEndpoint, + payload.token, + { + domain: payload.domain, + }, + "POST", + false + ); + if (tokenResponse.status === 200) { + return true; + } + return false; +} + +export { logout_active_session, logout_all_sessions }; diff --git a/src/apicalls/login/password.tsx b/src/apicalls/login/password.tsx new file mode 100644 index 0000000..fd6ac4d --- /dev/null +++ b/src/apicalls/login/password.tsx @@ -0,0 +1,48 @@ +"use server"; +import { fetchData, fetchDataWithToken } from "../api-fetcher"; +import { baseUrl } from "@/apicalls/basics"; + +const createPasswordEndpoint = `${baseUrl}/authentication/create_password`; +const changePasswordEndpoint = `${baseUrl}/authentication/change_password`; + +interface createPasswordViaToken { + token: string; + password: string; + rePassword: string; +} + +interface changePasswordViaToken { + accessToken: string; + oldPassword: string; + newPassword: string; +} + +async function create_password_via_token(payload: createPasswordViaToken) { + const createPasswordResponse: any = await fetchData( + createPasswordEndpoint, + { + password_token: payload.token, + password: payload.password, + re_password: payload.rePassword, + }, + "POST", + false + ); + return createPasswordResponse; +} + +async function change_password_via_token(payload: changePasswordViaToken) { + const changePasswordResponse: any = await fetchDataWithToken( + changePasswordEndpoint, + payload.accessToken, + { + old_password: payload.oldPassword, + new_password: payload.newPassword, + }, + "POST", + false + ); + return changePasswordResponse; +} + +export { create_password_via_token, change_password_via_token }; diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx new file mode 100644 index 0000000..1cfb420 --- /dev/null +++ b/src/app/dashboard/page.tsx @@ -0,0 +1,24 @@ +"use server"; +import React from "react"; +import { redirect } from "next/navigation"; +import { + check_access_token_is_valid, + retrieve_access_token, +} from "@/apicalls/cookies/token"; +import DashboardPage from "@/components/Dashboards/DashboardPage"; + +const Dashboard: React.FC = async () => { + const accessToken = (await retrieve_access_token()) || ""; + const token_is_valid = await check_access_token_is_valid(); + if (!token_is_valid) { + redirect("/login/email"); + } + + return ( +
- Üye değilmisiniz?{" "} - - Üye olmak için tıklayın - -
-Welcome to the dashboard!
+Lorem ipsum dolor sit amet, consectetur adipiscing elit suspendisse. @@ -230,9 +220,6 @@ const LoginWithEmail: React.FC = () => {