diff --git a/.env.sample b/.env.sample index d13c0e5..3413f7c 100644 --- a/.env.sample +++ b/.env.sample @@ -20,4 +20,5 @@ EMAIL_SERVER= # Stripe settings (You don't need these, it's for the cloud instance payments) STRIPE_SECRET_KEY= PRICE_ID= +TRIAL_PERIOD_DAYS= NEXT_PUBLIC_STRIPE_BILLING_PORTAL_URL= \ No newline at end of file diff --git a/components/Modal/User/ProfileSettings.tsx b/components/Modal/User/ProfileSettings.tsx index 2a705db..0365a78 100644 --- a/components/Modal/User/ProfileSettings.tsx +++ b/components/Modal/User/ProfileSettings.tsx @@ -3,7 +3,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faClose } from "@fortawesome/free-solid-svg-icons"; import useAccountStore from "@/store/account"; import { AccountSettings } from "@/types/global"; -import { useSession } from "next-auth/react"; +import { signOut, useSession } from "next-auth/react"; import { resizeImage } from "@/lib/client/resizeImage"; import { faPenToSquare } from "@fortawesome/free-regular-svg-icons"; import SubmitButton from "../../SubmitButton"; @@ -93,6 +93,8 @@ export default function ProfileSettings({ name: user.name, }); + signOut(); + if (response.ok) { setUser({ ...user, newPassword: undefined }); toggleSettingsModal(); diff --git a/layouts/MainLayout.tsx b/layouts/MainLayout.tsx index 6bcc600..de0dea9 100644 --- a/layouts/MainLayout.tsx +++ b/layouts/MainLayout.tsx @@ -1,11 +1,12 @@ import Navbar from "@/components/Navbar"; import Sidebar from "@/components/Sidebar"; -import { ReactNode } from "react"; +import { ReactNode, useEffect } from "react"; import { useSession } from "next-auth/react"; import Loader from "../components/Loader"; import useRedirect from "@/hooks/useRedirect"; import { useRouter } from "next/router"; import ModalManagement from "@/components/ModalManagement"; +import useModalStore from "@/store/modals"; interface Props { children: ReactNode; @@ -17,6 +18,14 @@ export default function MainLayout({ children }: Props) { const redirect = useRedirect(); const routeExists = router.route === "/_error" ? false : true; + const { modal } = useModalStore(); + + useEffect(() => { + modal + ? (document.body.style.overflow = "hidden") + : (document.body.style.overflow = "auto"); + }, [modal]); + if (status === "authenticated" && !redirect && routeExists) return ( <> diff --git a/lib/api/checkSubscription.ts b/lib/api/checkSubscription.ts index 4734566..67f001c 100644 --- a/lib/api/checkSubscription.ts +++ b/lib/api/checkSubscription.ts @@ -19,7 +19,10 @@ export default async function checkSubscription( const isSubscriber = listByEmail.data.some((customer, i) => { const hasValidSubscription = customer.subscriptions?.data.some( (subscription) => { - const secondsInTwoWeeks = 1209600; + const TRIAL_PERIOD_DAYS = process.env.TRIAL_PERIOD_DAYS; + const secondsInTwoWeeks = TRIAL_PERIOD_DAYS + ? Number(TRIAL_PERIOD_DAYS) * 86400 + : 1209600; subscriptionCanceledAt = subscription.canceled_at; diff --git a/lib/api/paymentCheckout.ts b/lib/api/paymentCheckout.ts index 5cda18d..63dac04 100644 --- a/lib/api/paymentCheckout.ts +++ b/lib/api/paymentCheckout.ts @@ -49,6 +49,7 @@ export default async function paymentCheckout( // ); // } + const TRIAL_PERIOD_DAYS = process.env.TRIAL_PERIOD_DAYS; const session = await stripe.checkout.sessions.create({ customer: isExistingCostomer ? isExistingCostomer : undefined, line_items: [ @@ -65,7 +66,7 @@ export default async function paymentCheckout( enabled: true, }, subscription_data: { - trial_period_days: 14, + trial_period_days: TRIAL_PERIOD_DAYS ? Number(TRIAL_PERIOD_DAYS) : 14, }, }); diff --git a/lib/api/updateCustomerEmail.ts b/lib/api/updateCustomerEmail.ts index 0254d88..07af401 100644 --- a/lib/api/updateCustomerEmail.ts +++ b/lib/api/updateCustomerEmail.ts @@ -18,7 +18,10 @@ export default async function updateCustomerEmail( const customer = listByEmail.data.find((customer, i) => { const hasValidSubscription = customer.subscriptions?.data.some( (subscription) => { - const secondsInTwoWeeks = 1209600; + const TRIAL_PERIOD_DAYS = process.env.TRIAL_PERIOD_DAYS; + const secondsInTwoWeeks = TRIAL_PERIOD_DAYS + ? Number(TRIAL_PERIOD_DAYS) * 86400 + : 1209600; const isNotCanceledOrHasTime = !( subscription.canceled_at && diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts index 1aa4ca2..6777e1d 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/pages/api/auth/[...nextauth].ts @@ -93,9 +93,10 @@ export const authOptions: AuthOptions = { const STRIPE_SECRET_KEY = process.env.STRIPE_SECRET_KEY; const PRICE_ID = process.env.PRICE_ID; - console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa", token); - - const secondsInTwoWeeks = 1209600; + const TRIAL_PERIOD_DAYS = process.env.TRIAL_PERIOD_DAYS; + const secondsInTwoWeeks = TRIAL_PERIOD_DAYS + ? Number(TRIAL_PERIOD_DAYS) * 86400 + : 1209600; const subscriptionIsTimesUp = token.subscriptionCanceledAt && new Date() > @@ -104,7 +105,11 @@ export const authOptions: AuthOptions = { 1000 ); - if (STRIPE_SECRET_KEY && PRICE_ID && (trigger || subscriptionIsTimesUp)) { + if ( + STRIPE_SECRET_KEY && + PRICE_ID && + (trigger || subscriptionIsTimesUp || !token.isSubscriber) + ) { console.log("EXECUTED!!!"); const subscription = await checkSubscription( STRIPE_SECRET_KEY, diff --git a/pages/register.tsx b/pages/register.tsx index 84a0844..2edada5 100644 --- a/pages/register.tsx +++ b/pages/register.tsx @@ -77,11 +77,7 @@ export default function Register() { if (response.ok) { if (form.email) await sendConfirmation(); - toast.success( - emailEnabled - ? "User Created! Please check you email." - : "User Created!" - ); + toast.success("User Created!"); } else { toast.error(data.response); } diff --git a/types/enviornment.d.ts b/types/enviornment.d.ts index 522221f..0f32eb7 100644 --- a/types/enviornment.d.ts +++ b/types/enviornment.d.ts @@ -20,6 +20,7 @@ declare global { STRIPE_SECRET_KEY?: string; PRICE_ID?: string; NEXT_PUBLIC_STRIPE_BILLING_PORTAL_URL?: string; + TRIAL_PERIOD_DAYS?: string; } } }