+
+
+
{t('thank-you-for-your-purchase')}
+ {t('safe-to-close-page')}
+
+
+ )
+}
+
+export const getStaticProps: GetStaticProps = async ({ locale }) => {
+ return {
+ props: {
+ ...(await serverSideTranslations(locale, ['common'])),
+ },
+ }
+}
\ No newline at end of file
diff --git a/pages/purchase/index.tsx b/pages/purchase/index.tsx
new file mode 100644
index 00000000..5a415d0b
--- /dev/null
+++ b/pages/purchase/index.tsx
@@ -0,0 +1,97 @@
+import { GetStaticProps } from 'next'
+import { useTranslation } from 'next-i18next'
+import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
+import { NextSeo } from 'next-seo'
+import { useRouter } from 'next/router'
+import { ReactElement, useEffect, useState } from 'react'
+import { toast } from 'react-toastify'
+import ApplicationCollection from '../../src/components/application/Collection'
+import Main from '../../src/components/layout/Main'
+import Spinner from '../../src/components/Spinner'
+import { generateTokens } from '../../src/context/actions'
+import { APP_DETAILS } from '../../src/env'
+
+const PERMITTED_REDIRECTS = [/^http:\/\/localhost:\d+\/$/, /^http:\/\/127.0.0.1:\d+\/$/];
+
+export default function Purchase() {
+ const { t } = useTranslation();
+ const [waiting, setWaiting] = useState(false);
+ const [token, setToken] = useState('');
+ const [missingApps, setMissingApps] = useState([]);
+
+ const router = useRouter();
+
+ useEffect(() => {
+ if (!router.isReady) return;
+
+ let redirect = router.query.return.toString();
+ if (!PERMITTED_REDIRECTS.some(r => r.test(redirect))) {
+ toast.error(t('incorrect-redirect'));
+ return;
+ }
+
+ let refs = router.query.refs.toString().split(";");
+ /* We get refs in the form app/