Skip to content

Commit

Permalink
warn about bad dns federations
Browse files Browse the repository at this point in the history
  • Loading branch information
futurepaul committed Jul 1, 2024
1 parent c1445dc commit 625c0f6
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 58 deletions.
6 changes: 5 additions & 1 deletion public/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@
"just_me": "Just Me",
"friends": "Friends",
"requests": "Requests"
}
},
"federations_warn_generic": "Due to temporary issues with your current federation, we recommend you transfer your funds to a lightning channel or withdraw to another bitcoin wallet.",
"transfer_lightning": "Transfer to lightning",
"sent_to_another_wallet": "Send to another wallet"
},
"profile": {
"profile": "Profile",
Expand All @@ -49,6 +52,7 @@
"edit_profile": "Edit Profile",
"join_federation": "Join a federation",
"manage_federation": "Manage Federations",
"leave_federation": "Leave Federation",
"federated_custody": "Federated Custody",
"self_custody": "Self Custody",
"social": "Social",
Expand Down
2 changes: 1 addition & 1 deletion src/components/Activity.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { TagItem } from "@mutinywallet/mutiny-wasm";
import { cache, createAsync, useNavigate } from "@solidjs/router";
import { Plus, Save, Search, Shuffle, Users } from "lucide-solid";
import { Plus, Save, Search, Shuffle } from "lucide-solid";
import {
createEffect,
createMemo,
Expand Down
53 changes: 47 additions & 6 deletions src/components/FederationPopup.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import { useNavigate } from "@solidjs/router";
import { Users } from "lucide-solid";
import { createSignal } from "solid-js";
import { ArrowLeftRight, ArrowUpRight, Users } from "lucide-solid";
import { createSignal, Show } from "solid-js";

import { ButtonCard, NiceP, SimpleDialog } from "~/components/layout";
import {
ButtonCard,
ExternalLink,
NiceP,
SimpleDialog
} from "~/components/layout";
import { useI18n } from "~/i18n/context";
import { useMegaStore } from "~/state/megaStore";

Expand All @@ -16,9 +21,11 @@ export function FederationPopup() {
const i18n = useI18n();
const navigate = useNavigate();

const name = state.expiration_warning?.federationName;

return (
<SimpleDialog
title={`${i18n.t("activity.federation_message")}: ${state.expiration_warning?.federationName}`}
title={`${i18n.t("activity.federation_message")} ${name ? `: ${name}` : ""}`}
open={showFederationExpirationWarning()}
setOpen={(open: boolean) => {
if (!open) {
Expand All @@ -27,7 +34,41 @@ export function FederationPopup() {
}
}}
>
<NiceP>{state.expiration_warning?.expiresMessage}</NiceP>
<NiceP>
{state.expiration_warning?.expiresMessage ||
i18n.t("home.federations_warn_generic")}
</NiceP>
<Show when={!name}>
<NiceP>
<ExternalLink href="https://x.com/MutinyWallet/status/1805346636660429021">
{i18n.t("settings.manage_federations.learn_more")}
</ExternalLink>
</NiceP>
</Show>
<ButtonCard
onClick={() => {
actions.clearExpirationWarning();
setShowFederationExpirationWarning(false);
navigate("/swaplightning");
}}
>
<div class="flex items-center gap-2">
<ArrowLeftRight class="inline-block text-m-red" />
<NiceP>{i18n.t("home.transfer_lightning")}</NiceP>
</div>
</ButtonCard>
<ButtonCard
onClick={() => {
actions.clearExpirationWarning();
setShowFederationExpirationWarning(false);
navigate("/send");
}}
>
<div class="flex items-center gap-2">
<ArrowUpRight class="inline-block text-m-red" />
<NiceP>{i18n.t("home.sent_to_another_wallet")}</NiceP>
</div>
</ButtonCard>
<ButtonCard
onClick={() => {
actions.clearExpirationWarning();
Expand All @@ -37,7 +78,7 @@ export function FederationPopup() {
>
<div class="flex items-center gap-2">
<Users class="inline-block text-m-red" />
<NiceP>{i18n.t("profile.manage_federation")}</NiceP>
<NiceP>{i18n.t("profile.leave_federation")}</NiceP>
</div>
</ButtonCard>
</SimpleDialog>
Expand Down
20 changes: 4 additions & 16 deletions src/routes/settings/ManageFederations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from "@modular-forms/solid";
import { FederationBalance, TagItem } from "@mutinywallet/mutiny-wasm";
import { A, useNavigate, useSearchParams } from "@solidjs/router";
import { ArrowLeftRight, BadgeCheck, LogOut, Scan, Trash } from "lucide-solid";
import { BadgeCheck, LogOut, Scan, Trash } from "lucide-solid";
import {
createMemo,
createResource,
Expand Down Expand Up @@ -168,6 +168,8 @@ export function AddFederationForm(props: {
setSuccess(
i18n.t("settings.manage_federations.federation_added_success")
);
// Reset the expiration warning seen state
actions.resetExpirationWarning();
await actions.refreshFederations();
if (props.refetch) {
await props.refetch();
Expand Down Expand Up @@ -435,8 +437,7 @@ function FederationListItem(props: {
balance?: bigint;
}) {
const i18n = useI18n();
const [state, actions, sw] = useMegaStore();
const navigate = useNavigate();
const [_state, actions, sw] = useMegaStore();

async function removeFederation() {
setConfirmLoading(true);
Expand All @@ -455,15 +456,6 @@ function FederationListItem(props: {

const [transferDialogOpen, setTransferDialogOpen] = createSignal(false);

async function transferFunds() {
// If there's only one federation we need to let them know to add another
if (state.federations?.length && state.federations.length < 2) {
setTransferDialogOpen(true);
} else {
navigate("/transfer?from=" + props.fed.federation_id);
}
}

const [confirmOpen, setConfirmOpen] = createSignal(false);
const [confirmLoading, setConfirmLoading] = createSignal(false);

Expand Down Expand Up @@ -525,10 +517,6 @@ function FederationListItem(props: {
inviteCode={props.fed.invite_code}
/>
</KeyValue>
<SubtleButton onClick={transferFunds}>
<ArrowLeftRight class="h-4 w-4" />
{i18n.t("settings.manage_federations.transfer_funds")}
</SubtleButton>
<Suspense>
<RecommendButton fed={props.fed} />
</Suspense>
Expand Down
40 changes: 6 additions & 34 deletions src/state/megaStore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
BTC_OPTION,
Currency,
eify,
federationWarning,
subscriptionValid,
USD_OPTION
} from "~/utils";
Expand Down Expand Up @@ -302,23 +303,7 @@ export const makeMegaStoreContext = () => {
// Get federations
const federations = await sw.list_federations();

let expiration_warning:
| {
expiresTimestamp: number;
expiresMessage: string;
federationName: string;
}
| undefined = undefined;

federations.forEach((f) => {
if (f.popup_countdown_message && f.popup_end_timestamp) {
expiration_warning = {
expiresTimestamp: f.popup_end_timestamp,
expiresMessage: f.popup_countdown_message,
federationName: f.federation_name
};
}
});
const expiration_warning = federationWarning(federations);

setState({
wallet_loading: false,
Expand Down Expand Up @@ -576,23 +561,7 @@ export const makeMegaStoreContext = () => {
async refreshFederations() {
const federations = await sw.list_federations();

let expiration_warning:
| {
expiresTimestamp: number;
expiresMessage: string;
federationName: string;
}
| undefined = undefined;

federations.forEach((f) => {
if (f.popup_countdown_message && f.popup_end_timestamp) {
expiration_warning = {
expiresTimestamp: f.popup_end_timestamp,
expiresMessage: f.popup_countdown_message,
federationName: f.federation_name
};
}
});
const expiration_warning = federationWarning(federations);

setState({ federations, expiration_warning });
},
Expand Down Expand Up @@ -638,6 +607,9 @@ export const makeMegaStoreContext = () => {
// Only show the expiration warning once per session
clearExpirationWarning() {
setState({ expiration_warning_seen: true });
},
resetExpirationWarning() {
setState({ expiration_warning_seen: false });
}
};

Expand Down
37 changes: 37 additions & 0 deletions src/utils/federationWarning.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { MutinyFederationIdentity } from "~/routes/settings";

export function federationWarning(federations: MutinyFederationIdentity[]) {
const FEDERATIONS_WITH_WARNINGS = [
// Freedom One
"c944b2fd1e7fe04ca87f9a57d7894cb69116cec6264cb52faa71228f4ec54cd6",
// Bitcoin Principles
"b21068c84f5b12ca4fdf93f3e443d3bd7c27e8642d0d52ea2e4dce6fdbbee9df"
];

let expiration_warning:
| {
expiresTimestamp: number;
expiresMessage: string;
federationName: string;
}
| undefined = undefined;

federations.forEach((f) => {
if (f.popup_countdown_message && f.popup_end_timestamp) {
expiration_warning = {
expiresTimestamp: f.popup_end_timestamp,
expiresMessage: f.popup_countdown_message,
federationName: f.federation_name
};
} else if (FEDERATIONS_WITH_WARNINGS.includes(f.federation_id)) {
// If the federation has no expiration warning we'll do a generic one
expiration_warning = {
expiresTimestamp: 0,
expiresMessage: "",
federationName: ""
};
}
});

return expiration_warning;
}
1 change: 1 addition & 0 deletions src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ export * from "./bech32";
export * from "./keypad";
export * from "./debounce";
export * from "./blobToBase64";
export * from "./federationWarning";

0 comments on commit 625c0f6

Please sign in to comment.