Add a ConnectSigner to wrap our default opts to NConnectSigner, add c.set('signer') calls to nip98 middleware

This commit is contained in:
Alex Gleason 2024-05-14 12:04:31 -05:00
parent c715827c81
commit 1accae2222
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
4 changed files with 30 additions and 17 deletions

View File

@ -126,9 +126,9 @@ app.use(
'*',
csp(),
cors({ origin: '*', exposeHeaders: ['link'] }),
signerMiddleware,
auth98(),
storeMiddleware,
signerMiddleware,
);
app.get('/.well-known/webfinger', webfingerController);

View File

@ -1,14 +1,16 @@
import { NostrEvent } from '@nostrify/nostrify';
import { HTTPException } from 'hono';
import { type AppContext, type AppMiddleware } from '@/app.ts';
import { findUser, User } from '@/db/users.ts';
import { ConnectSigner } from '@/signers/ConnectSigner.ts';
import { localRequest } from '@/utils/api.ts';
import {
buildAuthEventTemplate,
parseAuthRequest,
type ParseAuthRequestOpts,
validateAuthEvent,
} from '@/utils/nip98.ts';
import { localRequest } from '@/utils/api.ts';
import { findUser, User } from '@/db/users.ts';
/**
* NIP-98 auth.
@ -20,7 +22,7 @@ function auth98(opts: ParseAuthRequestOpts = {}): AppMiddleware {
const result = await parseAuthRequest(req, opts);
if (result.success) {
c.set('pubkey', result.data.pubkey);
c.set('signer', new ConnectSigner(result.data.pubkey));
c.set('proof', result.data);
}
@ -78,7 +80,7 @@ function withProof(
}
if (proof) {
c.set('pubkey', proof.pubkey);
c.set('signer', new ConnectSigner(proof.pubkey));
c.set('proof', proof);
await handler(c, proof, next);
} else {

View File

@ -1,9 +1,8 @@
import { NConnectSigner, NSecSigner } from '@nostrify/nostrify';
import { NSecSigner } from '@nostrify/nostrify';
import { nip19 } from 'nostr-tools';
import { AppMiddleware } from '@/app.ts';
import { AdminSigner } from '@/signers/AdminSigner.ts';
import { Storages } from '@/storages.ts';
import { ConnectSigner } from '@/signers/ConnectSigner.ts';
/** We only accept "Bearer" type. */
const BEARER_REGEX = new RegExp(`^Bearer (${nip19.BECH32_REGEX.source})$`);
@ -21,15 +20,7 @@ export const signerMiddleware: AppMiddleware = async (c, next) => {
switch (decoded.type) {
case 'npub':
c.set(
'signer',
new NConnectSigner({
pubkey: decoded.data,
relay: Storages.pubsub,
signer: new AdminSigner(),
timeout: 60000,
}),
);
c.set('signer', new ConnectSigner(decoded.data));
break;
case 'nsec':
c.set('signer', new NSecSigner(decoded.data));

View File

@ -0,0 +1,20 @@
import { NConnectSigner } from '@nostrify/nostrify';
import { AdminSigner } from '@/signers/AdminSigner.ts';
import { Storages } from '@/storages.ts';
/**
* NIP-46 signer.
*
* Simple extension of nostrify's `NConnectSigner`, with our options to keep it DRY.
*/
export class ConnectSigner extends NConnectSigner {
constructor(pubkey: string) {
super({
pubkey,
relay: Storages.pubsub,
signer: new AdminSigner(),
timeout: 60000,
});
}
}