feat: pubkey whitelist
This commit is contained in:
3
.env
3
.env
@ -1 +1,2 @@
|
||||
VITE_SINGLE_PUBLISHER=
|
||||
# Array whitelist of pubkeys
|
||||
# VITE_SINGLE_PUBLISHER="npub18vy7ydt98zrlf47km0v82336cvzj7duv0u4nwulhy8eeps8u69sqdq3d5w,npub1kepjwqtmkr5rctx5rtpwqhyagwpxxg4ydfk84sqtnxh0t89slaesjqnlsn,npub1wxgpvehj0uhe22dwq4vhpgx3ew7w6v7etze36x89x6arpcmdzsqslwsvzl,npub1s3lr24j7pysn45yzmkky8pvrh7257vy6mxfrtskmyzycd3m0rxwstgdgdu,npub1ctrsduxssdgthmmx7lz7erhqt2hjgj99tzkt22g2uyvayhxd9asq3xsd73,npub17yemy3hswcelmcdgjsfn4sns4wr4q5ptvj5h08qt4s7fy2qe3hdqsczs99,npub1764k59pjf7yfmzag6e4jgh36t0p4fklmaaxhxcdgwfdvl8weuedq3jn7q3,npub1a8622rn2ptxazukjrkkrxdnpu29z8lztxvu9hnjewhaw29qntwas35c7gy,npub1agr3n5wn38dg8uvprl452w43pegsyphfh7hesg9tgf9d9enzxudspzgnej,npub1gfh3zdy07r37mgk4hyr0njmajapswk4ct6anc9w407uqkn39aslqqkalqc,npub18gp8p84hjmjh9zejdlyqqcg22sj6x3qra0q2ng4v6cxxg95sav8q0mcg5e,npub13ql75nq8rldygpkjke47y893akh5tglqtqzs6cspancaxktthsusvfqcg7,npub186ptarjwp53k6tz5fyzj2t0wcu9wtahrdh8lqca0j7065cuxfvksparxqq,npub1gr65v2hqq83n3vqfh6m65eej65hxlqwyjp0echc9ghvw5p6pvqpse3mmjc,npub1v5ufyh4lkeslgxxcclg8f0hzazhaw7rsrhvfquxzm2fk64c72hps45n0v5,npub1066yklzctwr34r0ph0hyteqjccg9q97ty7l0htm88jnq0kx425hs82perc,npub1theparkprcs70dcs437ke9zzwsr6u60f8flu7rg28m30438aep9sd94dha,npub17j3f7cuhcvjqnf7d80x6rt9hmkkhdguwg4l2th0h4qnhqketr63s6xakwv,npub1papldckxytp2m8met6hyeh37m0cn6e32j03srl6thy4gq3tqrz3srq8t4n,npub184cwc849sejs5pr566zcg4pqn53zzk85q70gmwqx7qt77h3suansvet30s,npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424,npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm,npub14wxtsrj7g2jugh70pfkzjln43vgn4p7655pgky9j9w9d75u465pqvagcye,npub1key55ax33gkl50uqemvl4khrtqrhzm7wzpc7fhseutt5ddkcwcrqgxlt3h,npub13qrrw2h4z52m7jh0spefrwtysl4psfkfv6j4j672se5hkhvtyw7qu0almy,npub19r9qrxmckj2vyk5a5ttyt966s5qu06vmzyczuh97wj8wtyluktxqymeukr,npub1yfg0d955c2jrj2080ew7pa4xrtj7x7s7umt28wh0zurwmxgpyj9shwv6vg,npub1eequz6v23szzyx9utphsh8kg6kll50wte6sfh4vah8gdjtplcz6qg7at9s,npub1t6njrhtc9q3f5wdrwfrhpypq3kes5mpdx4u4rw9w2pxjanuxcpkqveagv3,npub1d9a94klcx90k073pmlc606q9gyhtmg4p4h0jrzs0j0s34whjlzxq2sw3fp,npub14kw5ygpl6fyqagh9cnrytyaqyacg46lzkq42vz7hk8txdk49kzxs04j7y0,npub14mcddvsjsflnhgw7vxykz0ndfqj0rq04v7cjq5nnc95ftld0pv3shcfrlx,npub1fnn2h0tgm2mwnl0kar5ez25wztum2w0q0rrrf326n0ljn999znwsqf4xnx,npub1jwev660jrdrfeaw2u9sssv3v4jgsxqs32qmd5yhpgzlesg5j0gase4qha6,npub1w6gapkq7rajutrrgp89fyfcfxyt8rw7r4nuhfqnfa6306m7zh79s7f09sz,npub15t3qpnzd9h6lgh5zfeywl5353nefpjv6fls4lg6yqy2rypzslyas5cc8rq,npub1hrctsg2qwu5gsp65gvj29968z460g0th755jq92c8uaz620lewmq6qk525,npub1dsfcdwmj4h0hrhllu40ma3gfssjh0tr4elqfk7fac7j6hzqnwwwsy5ywd5,npub1geauq4eq8547h5ea75lpvg40q2k3syyun6hhwsejglex35s7cc8sd00xm0,npub1jz42cy8qxw6dres86sn0cr42hww24pnjqssa4k9wxqvzm5l0mvqsq2f5ku,npub1563z6kxmvuy7s8zhzan8m0hzmkavyfzg2aw6h7f0fvcvdms398csaxc9n6"
|
21
src/const.ts
21
src/const.ts
@ -1,4 +1,5 @@
|
||||
import { EventKind } from "@snort/system";
|
||||
import { isHex } from "@snort/shared";
|
||||
import { EventKind, parseNostrLink } from "@snort/system";
|
||||
|
||||
export const LIVE_STREAM = 30_311 as EventKind;
|
||||
export const LIVE_STREAM_CHAT = 1_311 as EventKind;
|
||||
@ -36,3 +37,21 @@ export const defaultRelays = {
|
||||
|
||||
export const DefaultProviderUrl = "https://api.zap.stream/api/nostr";
|
||||
//export const DefaultProviderUrl = "http://localhost:5295/api/nostr";
|
||||
|
||||
function loadWhitelist() {
|
||||
if (import.meta.env.VITE_SINGLE_PUBLISHER !== undefined) {
|
||||
const list = import.meta.env.VITE_SINGLE_PUBLISHER as string | undefined;
|
||||
if (list) {
|
||||
return list.split(",").map(a => {
|
||||
if (isHex(a)) {
|
||||
return a;
|
||||
} else {
|
||||
return parseNostrLink(a).id;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export const WHITELIST: Array<string> | undefined = loadWhitelist();
|
@ -1,7 +1,7 @@
|
||||
import { useMemo } from "react";
|
||||
import { RequestBuilder } from "@snort/system";
|
||||
import { useRequestBuilder } from "@snort/system-react";
|
||||
import { LIVE_STREAM } from "@/const";
|
||||
import { LIVE_STREAM, WHITELIST } from "@/const";
|
||||
|
||||
export function useStreamsFeed(tag?: string) {
|
||||
const liveStreamKinds = [LIVE_STREAM];
|
||||
@ -10,23 +10,23 @@ export function useStreamsFeed(tag?: string) {
|
||||
rb.withOptions({
|
||||
leaveOpen: true,
|
||||
});
|
||||
if (import.meta.env.VITE_SINGLE_PUBLISHER) {
|
||||
if (WHITELIST) {
|
||||
if (tag) {
|
||||
rb.withFilter()
|
||||
.kinds(liveStreamKinds)
|
||||
.tag("t", [tag])
|
||||
.authors([import.meta.env.VITE_SINGLE_PUBLISHER]);
|
||||
.authors(WHITELIST);
|
||||
rb.withFilter()
|
||||
.kinds(liveStreamKinds)
|
||||
.tag("t", [tag])
|
||||
.tag("p", [import.meta.env.VITE_SINGLE_PUBLISHER]);
|
||||
.tag("p", WHITELIST);
|
||||
} else {
|
||||
rb.withFilter()
|
||||
.kinds(liveStreamKinds)
|
||||
.authors([import.meta.env.VITE_SINGLE_PUBLISHER]);
|
||||
.authors(WHITELIST);
|
||||
rb.withFilter()
|
||||
.kinds(liveStreamKinds)
|
||||
.tag("p", [import.meta.env.VITE_SINGLE_PUBLISHER]);
|
||||
.tag("p", WHITELIST);
|
||||
}
|
||||
} else {
|
||||
if (tag) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { DAY, LIVE_STREAM, StreamState } from "@/const";
|
||||
import { DAY, LIVE_STREAM, StreamState, WHITELIST } from "@/const";
|
||||
import { findTag, getHost } from "@/utils";
|
||||
import { unixNow } from "@snort/shared";
|
||||
import { NostrEvent, TaggedNostrEvent } from "@snort/system";
|
||||
@ -19,7 +19,7 @@ export function useSortedStreams(feed: Array<TaggedNostrEvent>, oldest?: number)
|
||||
if (feed) {
|
||||
return feed
|
||||
.filter(a => a.created_at > (oldest ?? unixNow() - 7 * DAY))
|
||||
.filter(a => !import.meta.env.VITE_SINGLE_PUBLISHER || import.meta.env.VITE_SINGLE_PUBLISHER === getHost(a));
|
||||
.filter(a => !WHITELIST || WHITELIST.includes(getHost(a)));
|
||||
}
|
||||
return [];
|
||||
}, [feed]);
|
||||
|
@ -16,6 +16,7 @@ import { Profile } from "@/element/profile";
|
||||
import { SearchBar } from "./search";
|
||||
import { NavLinkIcon } from "./nav-icon";
|
||||
import { useLayout } from "./context";
|
||||
import { WHITELIST } from "@/const";
|
||||
|
||||
export function HeaderNav() {
|
||||
const navigate = useNavigate();
|
||||
@ -55,7 +56,7 @@ export function HeaderNav() {
|
||||
|
||||
return (
|
||||
<div className="flex gap-2 items-center pr-4 py-1">
|
||||
{(!import.meta.env.VITE_SINGLE_PUBLISHER || import.meta.env.VITE_SINGLE_PUBLISHER === login.pubkey) && (
|
||||
{(!WHITELIST || WHITELIST.includes(login.pubkey)) && (
|
||||
<Menu
|
||||
menuClassName="ctx-menu"
|
||||
menuButton={
|
||||
|
Reference in New Issue
Block a user