mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
Add a getClientConnectUri function, add "Nostr Connect" link in the OAuth form
This commit is contained in:
parent
bdfa6f8826
commit
3b0739f187
2 changed files with 25 additions and 1 deletions
|
|
@ -2,10 +2,11 @@ import { encodeBase64 } from '@std/encoding/base64';
|
||||||
import { nip19 } from 'nostr-tools';
|
import { nip19 } from 'nostr-tools';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
import { lodash } from '@/deps.ts';
|
|
||||||
import { AppController } from '@/app.ts';
|
import { AppController } from '@/app.ts';
|
||||||
|
import { lodash } from '@/deps.ts';
|
||||||
import { nostrNow } from '@/utils.ts';
|
import { nostrNow } from '@/utils.ts';
|
||||||
import { parseBody } from '@/utils/api.ts';
|
import { parseBody } from '@/utils/api.ts';
|
||||||
|
import { getClientConnectUri } from '@/utils/connect.ts';
|
||||||
|
|
||||||
const passwordGrantSchema = z.object({
|
const passwordGrantSchema = z.object({
|
||||||
grant_type: z.literal('password'),
|
grant_type: z.literal('password'),
|
||||||
|
|
@ -68,6 +69,7 @@ const oauthController: AppController = async (c) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const redirectUri = maybeDecodeUri(encodedUri);
|
const redirectUri = maybeDecodeUri(encodedUri);
|
||||||
|
const connectUri = await getClientConnectUri(c.req.raw.signal);
|
||||||
|
|
||||||
const script = `
|
const script = `
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
|
|
@ -101,6 +103,8 @@ const oauthController: AppController = async (c) => {
|
||||||
<input type="hidden" name="redirect_uri" id="redirect_uri" value="${lodash.escape(redirectUri)}">
|
<input type="hidden" name="redirect_uri" id="redirect_uri" value="${lodash.escape(redirectUri)}">
|
||||||
<button type="submit">Authorize</button>
|
<button type="submit">Authorize</button>
|
||||||
</form>
|
</form>
|
||||||
|
<br>
|
||||||
|
<a href="${lodash.escape(connectUri)}">Nostr Connect</a>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
`);
|
`);
|
||||||
|
|
|
||||||
20
src/utils/connect.ts
Normal file
20
src/utils/connect.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { Conf } from '@/config.ts';
|
||||||
|
import { getInstanceMetadata } from '@/utils/instance.ts';
|
||||||
|
|
||||||
|
/** Get NIP-46 `nostrconnect://` URI for the Ditto server. */
|
||||||
|
export async function getClientConnectUri(signal?: AbortSignal): Promise<string> {
|
||||||
|
const uri = new URL('nostrconnect://');
|
||||||
|
const { name, description } = await getInstanceMetadata(signal);
|
||||||
|
|
||||||
|
const metadata = {
|
||||||
|
name,
|
||||||
|
description,
|
||||||
|
url: Conf.localDomain,
|
||||||
|
};
|
||||||
|
|
||||||
|
uri.host = Conf.pubkey;
|
||||||
|
uri.searchParams.set('relay', Conf.relay);
|
||||||
|
uri.searchParams.set('metadata', JSON.stringify(metadata));
|
||||||
|
|
||||||
|
return uri.toString();
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue