diff --git a/README.md b/README.md index ef81a92e..eda608a3 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,4 @@ A AIChat Client, but better. Msi version: https://github.com/kwaroran/RisuAI-release/releases -Web version: http://risu.pages.dev/ +Web version: http://risuai.xyz/ diff --git a/functions/drive.js b/functions/drive.js index 90a38030..fa75c5c6 100644 --- a/functions/drive.js +++ b/functions/drive.js @@ -3,14 +3,14 @@ export function onRequest(context) { return drive(request, context.env); } -const encodedRedirectUri = encodeURIComponent("https://risu.pages.dev/") +const encodedRedirectUri = encodeURIComponent("https://risuai.xyz/") async function drive(request, env){ const url = new URL(request.url); const headerE = { - "Access-Control-Allow-Origin": "https://risu.pages.dev", + "Access-Control-Allow-Origin": "https://risuai.xyz", "Access-Control-Allow-Headers": "*" } diff --git a/functions/proxy.js b/functions/proxy.js index 6fe72cb9..9605df29 100644 --- a/functions/proxy.js +++ b/functions/proxy.js @@ -38,7 +38,7 @@ async function fetchProxy(request) { const status = originalResponse.status; let newResponseHeaders = new Headers(responseHeaders); - newResponseHeaders.set('access-control-allow-origin', 'https://risu.pages.dev/'); + newResponseHeaders.set('access-control-allow-origin', 'https://risuai.xyz/'); newResponseHeaders.set('access-control-allow-credentials', "true"); newResponseHeaders.delete('content-security-policy'); newResponseHeaders.delete('content-security-policy-report-only'); diff --git a/src/ts/drive/drive.ts b/src/ts/drive/drive.ts index 8d1ebf99..18a6b4d6 100644 --- a/src/ts/drive/drive.ts +++ b/src/ts/drive/drive.ts @@ -10,7 +10,7 @@ import { open } from '@tauri-apps/api/shell'; export async function checkDriver(type:'save'|'load'|'loadtauri'|'savetauri'){ const CLIENT_ID = '580075990041-l26k2d3c0nemmqiu3d3aag01npfrkn76.apps.googleusercontent.com'; - const REDIRECT_URI = 'https://risu.pages.dev/'; + const REDIRECT_URI = `https://${location.host}/` const SCOPE = 'https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.appdata'; const encodedRedirectUri = encodeURIComponent(REDIRECT_URI); const authorizationUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${CLIENT_ID}&redirect_uri=${encodedRedirectUri}&scope=${SCOPE}&response_type=code&state=${type}`; diff --git a/src/ts/globalApi.ts b/src/ts/globalApi.ts index 20aefd82..93be77e6 100644 --- a/src/ts/globalApi.ts +++ b/src/ts/globalApi.ts @@ -8,7 +8,7 @@ import { get } from "svelte/store"; import { DataBase, loadedStore, setDatabase, type Database, updateTextTheme, defaultSdDataFunc } from "./database"; import pako from "pako"; import { appWindow } from "@tauri-apps/api/window"; -import { checkUpdate } from "./update"; +import { checkOldDomain, checkUpdate } from "./update"; import { selectedCharID } from "./stores"; import { Body, ResponseType, fetch as TauriFetch } from "@tauri-apps/api/http"; import { loadPlugins } from "./process/plugins"; @@ -265,6 +265,7 @@ export async function loadData() { else{ usingSw = false } + checkOldDomain() } try { await pargeChunks() @@ -465,7 +466,7 @@ export async function globalFetch(url:string, arg:{body?:any,headers?:{[key:stri headers["Content-Type"] = `application/json` } if(arg.rawResponse){ - const furl = new URL("https://risu.pages.dev/proxy") + const furl = new URL("/proxy") furl.searchParams.set("url", url) const da = await fetch(furl, { @@ -481,7 +482,7 @@ export async function globalFetch(url:string, arg:{body?:any,headers?:{[key:stri } } else{ - const furl = new URL("https://risu.pages.dev/proxy") + const furl = new URL("/proxy") furl.searchParams.set("url", url) diff --git a/src/ts/parser.ts b/src/ts/parser.ts index f8faf970..b6a0f002 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -6,7 +6,7 @@ convertor.setOption('simpleLineBreaks', true); export function ParseMarkdown(data:string) { return DOMPurify.sanitize(convertor.makeHtml(data), { - FORBID_TAGS: ['a'] + FORBID_TAGS: [] }) } diff --git a/src/ts/update.ts b/src/ts/update.ts index e504eaca..1a1115a7 100644 --- a/src/ts/update.ts +++ b/src/ts/update.ts @@ -1,10 +1,11 @@ import { fetch } from "@tauri-apps/api/http"; import { DataBase, appVer, setDatabase } from "./database"; -import { alertConfirm } from "./alert"; +import { alertConfirm, alertMd } from "./alert"; import { language } from "../lang"; import { get } from "svelte/store"; import {open} from '@tauri-apps/api/shell' +const isOldDomain = location.hostname.includes('pages.dev') export async function checkUpdate(){ try { @@ -48,4 +49,32 @@ function versionStringToNumber(versionString:string):number { .map((component) => component.padStart(2, "0")) .join("") ); +} + +export function checkOldDomain(){ + let db = get(DataBase) + if(true){ + if(!db.didFirstSetup){ + location.href = 'https://risuai.xyz' + alertMd("Redirecting...") + return + } + if(db.language === 'ko'){ + alertMd("# 웹 버전 RisuAI의 도메인이 **risuai.xyz**로 변경되었습니다" + + "\n\nRisuAI의 현재 도메인 risu.pages.dev는 클라우드플레어의 기본 도메인으로, 뭔가를 하기 힘든 구조입니다. 그래서 도메인을 옮기기로 했습니다." + + "\n\n현재 도메인인 risu.pages.dev은 언젠가 셧다운됩니다." + + "\n\n**브라우저는 교차 도메인 저장소를 허용하지 않으므로 설정에서 Google 드라이브에 백업/로드해서 데이터를 옮기거나 새 도메인으로 수동으로 옮겨야합니다. 그렇지 않은 경우 이 도메인이 셧다운 될 때, 데이터는 영원히 사라집니다.**" + + "\n\n[새로운 도메인 링크](https://risuai.xyz/)." + ) + } + else{ + alertMd("# Web version RisuAI's domain has transfered to **risuai.xyz**" + + "\n\nRisuAI's domain risu.pages.dev is cloudflare's default domain name, which we can't do something freely. so we decided to move to another domain." + + "\n\nThe current domain risu.pages.dev will be shut downed eventually." + + "\n\n**Browsers doesn't allow cross-domain storage so you should migrate datas by backuping/loading to google drive in settings or migrate manually to new domain. if not, when this domain shuts down: YOUR DATA WILL BE GONE FOREVER.**" + + "\n\n[Link to new domain](https://risuai.xyz/)." + ) + } + return + } } \ No newline at end of file