From a0f66bc062d7c89dc7da1eebdd2aaa99df61d9bf Mon Sep 17 00:00:00 2001 From: Shiba <44804845+DeepDoge@users.noreply.github.com> Date: Fri, 22 Apr 2022 19:08:03 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=A3=20implementing=20finder=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/crypto.ts | 32 ++++++++++++++++++++++++++++++++ src/popup/popup.sass | 11 +++++++++-- src/popup/popup.tsx | 37 ++++++++++++++++++++++++++++++++++++- src/scripts/storageSetup.ts | 6 ------ 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/src/common/crypto.ts b/src/common/crypto.ts index d210897..c6d27d6 100644 --- a/src/common/crypto.ts +++ b/src/common/crypto.ts @@ -1,3 +1,6 @@ +import { getExtensionSettingsAsync } from "./settings" +import { setSetting } from "./useSettings" + export async function generateKeys() { const keys = await window.crypto.subtle.generateKey( { @@ -53,4 +56,33 @@ export async function sign(data: string, privateKey: string) { await importPrivateKey(privateKey), Buffer.from(data) )).toString('base64') +} + +export async function loginAndSetNickname() { + const settings = await getExtensionSettingsAsync() + + let nickname; + while (true) + { + nickname = prompt("Pick a nickname") + if (nickname) break + if (nickname === null) return + alert("Invalid nickname") + } + + if (!settings.privateKey || !settings.publicKey) + await generateKeys().then((keys) => { + setSetting('publicKey', keys.publicKey) + setSetting('privateKey', keys.privateKey) + }) + + const url = new URL('https://finder.madiator.com/api/v1/profile') + url.searchParams.set('data', JSON.stringify({ nickname })) + url.searchParams.set('keys', JSON.stringify({ + signature: await sign(url.searchParams.toString(), settings.privateKey!), + publicKey: settings.publicKey + })) + const respond = await fetch(url.href, { method: "POST" }) + if (respond.ok) alert(`Your nickname has been set to ${nickname}`) + else alert((await respond.json()).message) } \ No newline at end of file diff --git a/src/popup/popup.sass b/src/popup/popup.sass index ed3c5bd..656878b 100644 --- a/src/popup/popup.sass +++ b/src/popup/popup.sass @@ -7,10 +7,17 @@ grid-auto-flow: row gap: 1.5em -.container > section +.container section display: grid grid-auto-flow: row gap: 1em button - cursor: pointer \ No newline at end of file + cursor: pointer + +.container .options + display: flex + gap: .25em + white-space: nowrap + flex-wrap: wrap + justify-content: center diff --git a/src/popup/popup.tsx b/src/popup/popup.tsx index 9c63644..31819fe 100644 --- a/src/popup/popup.tsx +++ b/src/popup/popup.tsx @@ -1,6 +1,7 @@ import { h, render } from 'preact' import { useState } from 'preact/hooks' import ButtonRadio, { SelectionOption } from '../common/components/ButtonRadio' +import { loginAndSetNickname } from '../common/crypto' import { getTargetPlatfromSettingsEntiries, getYtUrlResolversSettingsEntiries, TargetPlatformName, YTUrlResolverName } from '../common/settings' import { setSetting, useLbrySettings } from '../common/useSettings' import { LbryPathnameCache } from '../common/yt/urlCache' @@ -15,7 +16,7 @@ const ytUrlResolverOptions: SelectionOption[] = getYtUrlResolversSettingsEntirie .map(([value, { name: display }]) => ({ value, display })) function WatchOnLbryPopup() { - const { redirect, targetPlatform, urlResolver } = useLbrySettings() + const { redirect, targetPlatform, urlResolver, privateKey, publicKey } = useLbrySettings() let [clearingCache, updateClearingCache] = useState(() => false) return
@@ -42,6 +43,40 @@ function WatchOnLbryPopup() { +
+ + + + +
+
+ + {(!privateKey || !publicKey) ? + + loginAndSetNickname()} target='_blank'> + + + loginAndSetNickname()} target='_blank'> + + + + : + + loginAndSetNickname()} target='_blank'> + + + loginAndSetNickname()} target='_blank'> + + + loginAndSetNickname()} target='_blank'> + + + loginAndSetNickname()} target='_blank'> + + + + } +
diff --git a/src/scripts/storageSetup.ts b/src/scripts/storageSetup.ts index 841bd41..7f77360 100644 --- a/src/scripts/storageSetup.ts +++ b/src/scripts/storageSetup.ts @@ -17,12 +17,6 @@ async function initSettings() { chrome.storage.local.set(changeSet) } - if (!settings.privateKey || !settings.publicKey) - await generateKeys().then((keys) => { - setSetting('publicKey', keys.publicKey) - setSetting('privateKey', keys.privateKey) - }) - chrome.browserAction.setBadgeText({ text: settings.redirect ? 'ON' : 'OFF' }) }