refactor: restrict WikiTree integration to the apps.wikitree.com domain and add helper utilities

This commit is contained in:
Przemek Więch
2026-07-05 20:35:44 +02:00
parent aeb73aced7
commit b285fe349f
6 changed files with 49 additions and 15 deletions

View File

@@ -5,6 +5,7 @@ import {Dropdown, Icon, Menu} from 'semantic-ui-react';
import {IndiInfo, JsonGedcomData} from 'topola';
import {isGoogleDriveConfigured} from '../datasource/google_drive_service';
import {Media} from '../util/media';
import {isOnWikitreeDomain} from '../util/wikitree_util';
import {GoogleDriveMenu} from './google_drive_menu';
import {MenuItem, MenuType} from './menu_item';
import {SearchBar} from './search';
@@ -50,6 +51,11 @@ export function TopBar(props: Props) {
const navigate = useNavigate();
const location = useLocation();
// WikiTree menus only work when hosted on apps.wikitree.com because
// WikiTree's API requires same-origin access. The CORS proxy workaround is
// no longer functional.
const showWikiTree = props.showWikiTreeMenus && isOnWikitreeDomain();
const {searchResults, searchString, setSearchString, handleResultSelect} =
useSearch({
data: props.data,
@@ -246,7 +252,7 @@ export function TopBar(props: Props) {
<>
<UploadMenu menuType={menuType} {...props} />
<UrlMenu menuType={menuType} {...props} />
<WikiTreeMenu menuType={menuType} {...props} />
{showWikiTree && <WikiTreeMenu menuType={menuType} {...props} />}
<GoogleDriveMenu
menuType={menuType}
onTokenAcquired={props.onGoogleTokenAcquired}
@@ -257,7 +263,7 @@ export function TopBar(props: Props) {
function fileMenus(screenSize: ScreenSize) {
// In standalone WikiTree mode, show only the "Select WikiTree ID" menu.
if (!props.standalone && props.showWikiTreeMenus) {
if (!props.standalone && showWikiTree) {
switch (screenSize) {
case ScreenSize.LARGE:
return <WikiTreeMenu menuType={MenuType.Menu} {...props} />;
@@ -307,7 +313,7 @@ export function TopBar(props: Props) {
}
function wikiTreeLoginMenu(screenSize: ScreenSize) {
if (!props.showWikiTreeMenus) {
if (!showWikiTree) {
return null;
}
return (

View File

@@ -5,6 +5,7 @@ import {useLocation, useNavigate} from 'react-router';
import {Button, Form, Header, Input, Modal} from 'semantic-ui-react';
import {getLoggedInUserName, navigateToLoginPage} from 'wikitree-js';
import {analyticsEvent} from '../util/analytics';
import {WIKITREE_TOPOLA_URL} from '../util/wikitree_util';
import {MenuItem, MenuType} from './menu_item';
import wikitreeLogo from './wikitree.png';
@@ -157,10 +158,8 @@ export function WikiTreeLoginMenu(props: Props) {
* Topola Viewer hosted on apps.wikitree.com.
*/
function login() {
const wikiTreeTopolaUrl =
'https://apps.wikitree.com/apps/wiech13/topola-viewer';
// TODO: remove authcode if it is in the current URL.
const returnUrl = `${wikiTreeTopolaUrl}${window.location.hash}`;
const returnUrl = `${WIKITREE_TOPOLA_URL}${window.location.hash}`;
navigateToLoginPage(returnUrl);
}