stephenou / fruitionsite

Build your website with Notion for free
https://fruitionsite.com
MIT License
1.59k stars 218 forks source link

Mismatch between origin and baseUrl (dev) #22

Open jhapriyank opened 4 years ago

jhapriyank commented 4 years ago

image / CONFIGURATION STARTS HERE /

/ Step 1: enter your domain name like fruitionsite.com / const MY_DOMAIN = 'www.matrimonylaws.com';

/*

/ Step 3: enter your page title and description for SEO purposes / const PAGE_TITLE = ''; const PAGE_DESCRIPTION = '';

/ Step 4: enter a Google Font name, you can choose from https://fonts.google.com / const GOOGLE_FONT = '';

/ Step 5: enter any custom scripts you'd like / const CUSTOM_SCRIPT = ``;

/ CONFIGURATION ENDS HERE /

const PAGE_TO_SLUG = {}; const slugs = []; const pages = []; Object.keys(SLUG_TO_PAGE).forEach(slug => { const page = SLUG_TO_PAGE[slug]; slugs.push(slug); pages.push(page); PAGE_TO_SLUG[page] = slug; });

addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); });

function generateSitemap() { let sitemap = ''; slugs.forEach( (slug) => (sitemap += 'https://' + MY_DOMAIN + '/' + slug + '') ); sitemap += ''; return sitemap; }

const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, HEAD, POST, PUT, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type', };

function handleOptions(request) { if (request.headers.get('Origin') !== null && request.headers.get('Access-Control-Request-Method') !== null && request.headers.get('Access-Control-Request-Headers') !== null) { // Handle CORS pre-flight request. return new Response(null, { headers: corsHeaders }); } else { // Handle standard OPTIONS request. return new Response(null, { headers: { 'Allow': 'GET, HEAD, POST, PUT, OPTIONS', } }); } }

async function fetchAndApply(request) { if (request.method === 'OPTIONS') { return handleOptions(request); } let url = new URL(request.url); if (url.pathname === '/robots.txt') { return new Response('Sitemap: https://' + MY_DOMAIN + '/sitemap.xml'); } if (url.pathname === '/sitemap.xml') { let response = new Response(generateSitemap()); response.headers.set('content-type', 'application/xml'); return response; } const notionUrl = 'https://www.notion.so' + url.pathname; let response; if (url.pathname.startsWith('/app') && url.pathname.endsWith('js')) { response = await fetch(notionUrl); let body = await response.text(); response = new Response(body.replace(/www.notion.so/g, MY_DOMAIN).replace(/notion.so/g, MY_DOMAIN), response); response.headers.set('Content-Type', 'application/x-javascript'); } else if ((url.pathname.startsWith('/api'))) { // Forward API response = await fetch(notionUrl, { body: request.body, headers: { 'content-type': 'application/json;charset=UTF-8', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36' }, method: 'POST', }); response = new Response(response.body, response); response.headers.set('Access-Control-Allow-Origin', '*'); } else if (slugs.indexOf(url.pathname.slice(1)) > -1) { const pageId = SLUG_TO_PAGE[url.pathname.slice(1)]; return Response.redirect('https://' + MY_DOMAIN + '/' + pageId, 301); } else { response = await fetch(notionUrl, { body: request.body, headers: request.headers, method: request.method, }); response = new Response(response.body, response); response.headers.delete('Content-Security-Policy'); response.headers.delete('X-Content-Security-Policy'); }

return appendJavascript(response, SLUG_TO_PAGE); }

class MetaRewriter { element(element) { if (PAGE_TITLE !== '') { if (element.getAttribute('property') === 'og:title' || element.getAttribute('name') === 'twitter:title') { element.setAttribute('content', PAGE_TITLE); } if (element.tagName === 'title') { element.setInnerContent(PAGE_TITLE); } } if (PAGE_DESCRIPTION !== '') { if (element.getAttribute('name') === 'description' || element.getAttribute('property') === 'og:description' || element.getAttribute('name') === 'twitter:description') { element.setAttribute('content', PAGE_DESCRIPTION); } } if (element.getAttribute('property') === 'og:url' || element.getAttribute('name') === 'twitter:url') { element.setAttribute('content', MY_DOMAIN); } if (element.getAttribute('name') === 'apple-itunes-app') { element.remove(); } } }

class HeadRewriter { element(element) { if (GOOGLE_FONT !== '') { element.append(`

`, { html: true }); } element.append(``, { html: true }) } } class BodyRewriter { constructor(SLUG_TO_PAGE) { this.SLUG_TO_PAGE = SLUG_TO_PAGE; } element(element) { element.append(`
Powered by Fruition
${CUSTOM_SCRIPT}`, { html: true }); } } async function appendJavascript(res, SLUG_TO_PAGE) { return new HTMLRewriter() .on('title', new MetaRewriter()) .on('meta', new MetaRewriter()) .on('head', new HeadRewriter()) .on('body', new BodyRewriter(SLUG_TO_PAGE)) .transform(res); }
toobluescientist commented 4 years ago

I have the same issue. How do you fix it?

GeorgyDesign commented 3 years ago

Same issue. Doesn't work. I hope someone can help with it.

thecharlieblake commented 3 years ago

Same issue here. Would love to know a fix.

tanys123 commented 3 years ago

There should be no problem with the code if you directly copy and paste from the generator. You should instead make sure the route to worker is setup correctly. Don't preview in the worker, visit the URL directly it should works.

Using below setup should work if you have subdomain *yourdomain.com/*

joshsabol46 commented 2 years ago

+1 same issue

gouravsood commented 2 years ago

+1 same issue even after following the steps correctly (adding code to worker, adding route)

gouravsood commented 2 years ago

@stephenou

It seems like recent Notion update about public Notion link share have ruined the JS logic (somehow) which is deployed on worker.

Pls check this link! https://www.notion.so/blog/personalize-public-pages

kkarakk commented 2 years ago

As @tanys123 said the solution was setting the route correctly for the workers. i ended up using *blog.yourdomain.com/* This doesn't seem to work for www.blog.yourdomain.com but does route blog.yourdomain.com requests correctly so i'm missing something but it does work šŸ¤· attached Cloudflare screenshot for reference

Screen Shot 2022-09-20 at 00 07 23