YOUNGHO LEE
YOUNGHO LEE

Reputation: 1

Error on the Notion Viewer page created with Cloudflare Workers

First of all, I can't speak English, so please understand that I used machine translation.

Cloudflare Workers was used to connect custom domains to the notion.

I purchased the xn--vj5bn0ab83a.com domain from GoDaddy and registered with Cloudflare.

I wrote the code below in Cloudflare Workers and it worked well until a few days ago.


const MY_DOMAIN = "xn--vj5bn0ab83a.com"
const START_PAGE = "https://205sla.notion.site/4243c0e2fe57449a96b198df25d74e34"
 
addEventListener('fetch', event => {
  event.respondWith(fetchAndApply(event.request))
})
 
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)
  let response
  if (url.pathname.startsWith("/app") && url.pathname.endsWith("js")) {
    response = await fetch(`https://www.notion.so${url.pathname}`)
    let body = await response.text()
    try {
      response = new Response(body.replace(/www.notion.so/g, MY_DOMAIN).replace(/notion.so/g, MY_DOMAIN), response)
      // response = new Response(response.body, response)
      response.headers.set('Content-Type', "application/x-javascript")
      console.log("get rewrite app.js")
    } catch (err) {
      console.log(err)
    }
 
  } else if ((url.pathname.startsWith("/api"))) {
    response = await fetch(`https://www.notion.so${url.pathname}`, {
      body: request.body, // must match 'Content-Type' header
      headers: {
        'content-type': 'application/json;charset=UTF-8',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
      },
      method: "POST", // *GET, POST, PUT, DELETE, etc.
    })
    response = new Response(response.body, response)
    response.headers.set('Access-Control-Allow-Origin', "*")
  } else if (url.pathname === `/`) {
        let pageUrlList = START_PAGE.split("/")
    let redrictUrl = `https://${MY_DOMAIN}/${pageUrlList[pageUrlList.length-1]}`
    return Response.redirect(redrictUrl, 301)
  } else {
    response = await fetch(`https://www.notion.so${url.pathname}${url.search}`, {
      body: request.body, // must match 'Content-Type' header
      headers: request.headers,
      method: request.method, // *GET, POST, PUT, DELETE, etc.
    })
  }
 
  return response
}

Recently, it is connected to the following screen. a problematic image

I wonder if Notion's policy has changed or is it a technical issue.

The address of the site in question is as follows. URL

I don't know if it's relevant, but I tried changing the "SSL/TLS" setting.

Related Git URL


Summary

  1. We have developed a feature to show the screen of "https://205sla.notion.site/4243c0e2fe57449a96b198df25d74e34" while maintaining the URL displayed when accessing the "xn--vj5bn0ab83a.com " domain.
  2. It used to work well, but for some reason it doesn't work well now.
  3. If there is a problem in the technical area, I want to know how to solve it.

Upvotes: 0

Views: 60

Answers (0)

Related Questions