diff options
author | 2024-04-24 12:12:47 +0200 | |
---|---|---|
committer | 2024-04-24 11:12:47 +0100 | |
commit | 7a1e6394831fb07e303c5ed0900dfe1ea4820de5 (patch) | |
tree | bcd526463b19a85fbe821dcad2276da401daec18 /web/source/settings/admin/domain-permissions/overview.tsx | |
parent | [chore]: Bump codeberg.org/gruf/go-mutexes from 1.4.0 to 1.4.1 (#2860) (diff) | |
download | gotosocial-7a1e6394831fb07e303c5ed0900dfe1ea4820de5.tar.xz |
[chore] Refactor settings panel routing (and other fixes) (#2864)
Diffstat (limited to 'web/source/settings/admin/domain-permissions/overview.tsx')
-rw-r--r-- | web/source/settings/admin/domain-permissions/overview.tsx | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/web/source/settings/admin/domain-permissions/overview.tsx b/web/source/settings/admin/domain-permissions/overview.tsx deleted file mode 100644 index bdfd214bc..000000000 --- a/web/source/settings/admin/domain-permissions/overview.tsx +++ /dev/null @@ -1,198 +0,0 @@ -/* - GoToSocial - Copyright (C) GoToSocial Authors admin@gotosocial.org - SPDX-License-Identifier: AGPL-3.0-or-later - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -import React from "react"; - -import { useMemo } from "react"; -import { Link, useLocation } from "wouter"; -import { matchSorter } from "match-sorter"; - -import { useTextInput } from "../../lib/form"; - -import { TextInput } from "../../components/form/inputs"; - -import Loading from "../../components/loading"; -import { useDomainAllowsQuery, useDomainBlocksQuery } from "../../lib/query/admin/domain-permissions/get"; -import type { MappedDomainPerms, PermType } from "../../lib/types/domain-permission"; -import { NoArg } from "../../lib/types/query"; - -export interface DomainPermissionsOverviewProps { - // Params injected by - // the wouter router. - permType: PermType; - baseUrl: string, -} - -export default function DomainPermissionsOverview({ permType, baseUrl }: DomainPermissionsOverviewProps) { - if (permType !== "block" && permType !== "allow") { - throw "unrecognized perm type " + permType; - } - - // Uppercase first letter of given permType. - const permTypeUpper = useMemo(() => { - return permType.charAt(0).toUpperCase() + permType.slice(1); - }, [permType]); - - // Fetch / wait for desired perms to load. - const { data: blocks, isLoading: isLoadingBlocks } = useDomainBlocksQuery(NoArg, { skip: permType !== "block" }); - const { data: allows, isLoading: isLoadingAllows } = useDomainAllowsQuery(NoArg, { skip: permType !== "allow" }); - - let data: MappedDomainPerms | undefined; - let isLoading: boolean; - - if (permType == "block") { - data = blocks; - isLoading = isLoadingBlocks; - } else { - data = allows; - isLoading = isLoadingAllows; - } - - if (isLoading || data === undefined) { - return <Loading />; - } - - return ( - <div> - <h1>Domain {permTypeUpper}s</h1> - { permType == "block" ? <BlockHelperText/> : <AllowHelperText/> } - <DomainPermsList - data={data} - baseUrl={baseUrl} - permType={permType} - permTypeUpper={permTypeUpper} - /> - <Link to="/settings/admin/domain-permissions/import-export"> - <a>Or use the bulk import/export interface</a> - </Link> - </div> - ); -} - -interface DomainPermsListProps { - data: MappedDomainPerms; - baseUrl: string; - permType: PermType; - permTypeUpper: string; -} - -function DomainPermsList({ data, baseUrl, permType, permTypeUpper }: DomainPermsListProps) { - // Format perms into a list. - const perms = useMemo(() => { - return Object.values(data); - }, [data]); - - const [_location, setLocation] = useLocation(); - const filterField = useTextInput("filter"); - - function filterFormSubmit(e) { - e.preventDefault(); - setLocation(`${baseUrl}/${filter}`); - } - - const filter = filterField.value ?? ""; - const filteredPerms = useMemo(() => { - return matchSorter(perms, filter, { keys: ["domain"] }); - }, [perms, filter]); - const filtered = perms.length - filteredPerms.length; - - const filterInfo = ( - <span> - {perms.length} {permType}ed domain{perms.length != 1 ? "s" : ""} {filtered > 0 && `(${filtered} filtered by search)`} - </span> - ); - - const entries = filteredPerms.map((entry) => { - return ( - <Link key={entry.domain} to={`${baseUrl}/${entry.domain}`}> - <a className="entry nounderline"> - <span id="domain">{entry.domain}</span> - <span id="date">{new Date(entry.created_at ?? "").toLocaleString()}</span> - </a> - </Link> - ); - }); - - return ( - <div className="domain-permissions-list"> - <form className="filter" role="search" onSubmit={filterFormSubmit}> - <TextInput - field={filterField} - placeholder="example.org" - label={`Search or add domain ${permType}`} - /> - <Link to={`${baseUrl}/${filter}`}> - <a className="button">{permTypeUpper} {filter}</a> - </Link> - </form> - <div> - {filterInfo} - <div className="list"> - <div className="entries scrolling"> - {entries} - </div> - </div> - </div> - </div> - ); -} - -function BlockHelperText() { - return ( - <p> - Blocking a domain blocks interaction between your instance, and all current and future accounts on - instance(s) running on the blocked domain. Stored content will be removed, and no more data is sent to - the remote server. This extends to all subdomains as well, so blocking 'example.com' also blocks 'social.example.com'. - <br/> - <a - href="https://docs.gotosocial.org/en/latest/admin/domain_blocks/" - target="_blank" - className="docslink" - rel="noreferrer" - > - Learn more about domain blocks (opens in a new tab) - </a> - <br/> - </p> - ); -} - -function AllowHelperText() { - return ( - <p> - Allowing a domain explicitly allows instance(s) running on that domain to interact with your instance. - If you're running in allowlist mode, this is how you "allow" instances through. - If you're running in blocklist mode (the default federation mode), you can use explicit domain allows - to override domain blocks. In blocklist mode, explicitly allowed instances will be able to interact with - your instance regardless of any domain blocks in place. This extends to all subdomains as well, so allowing - 'example.com' also allows 'social.example.com'. This is useful when you're importing a block list but - there are some domains on the list you don't want to block: just create an explicit allow for those domains - before importing the list. - <br/> - <a - href="https://docs.gotosocial.org/en/latest/admin/federation_modes/" - target="_blank" - className="docslink" - rel="noreferrer" - > - Learn more about federation modes (opens in a new tab) - </a> - </p> - ); -} |