@@ -23,6 +23,7 @@ import { getLatestAccountInboxMessages } from './handlers/getLatestAccountInboxM
2323import { getLatestSpaceInboxMessages } from './handlers/getLatestSpaceInboxMessages.js' ;
2424import { getSpace } from './handlers/getSpace.js' ;
2525import { getSpaceInbox } from './handlers/getSpaceInbox.js' ;
26+ import { isSignerForAccount } from './handlers/is-signer-for-account.js' ;
2627import { listAccountInboxes } from './handlers/list-account-inboxes.js' ;
2728import { listPublicAccountInboxes } from './handlers/list-public-account-inboxes.js' ;
2829import { listSpacesByAccount } from './handlers/list-spaces-by-account.js' ;
@@ -76,7 +77,12 @@ app.get('/connect/spaces', async (req, res) => {
7677 console . log ( 'GET connect/spaces' ) ;
7778 try {
7879 const idToken = req . headers [ 'privy-id-token' ] ;
79- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
80+ const accountAddress = req . headers [ 'account-address' ] as string ;
81+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
82+ if ( ! ( await isSignerForAccount ( signerAddress , accountAddress ) ) ) {
83+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
84+ return ;
85+ }
8086 const spaces = await listSpacesByAccount ( { accountAddress } ) ;
8187 const spaceResults = spaces . map ( ( space ) => ( {
8288 id : space . id ,
@@ -117,8 +123,13 @@ app.post('/connect/spaces', async (req, res) => {
117123 console . log ( 'POST connect/spaces' ) ;
118124 try {
119125 const idToken = req . headers [ 'privy-id-token' ] ;
120- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
121126 const message = Schema . decodeUnknownSync ( Messages . RequestConnectCreateSpaceEvent ) ( req . body ) ;
127+ const accountAddress = message . accountAddress ;
128+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
129+ if ( ! ( await isSignerForAccount ( signerAddress , accountAddress ) ) ) {
130+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
131+ return ;
132+ }
122133 const space = await createSpace ( {
123134 accountAddress,
124135 event : message . event ,
@@ -145,10 +156,15 @@ app.post('/connect/add-app-identity-to-spaces', async (req, res) => {
145156 console . log ( 'POST connect/add-app-identity-to-spaces' ) ;
146157 try {
147158 const idToken = req . headers [ 'privy-id-token' ] ;
148- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
159+
160+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
149161 const message = Schema . decodeUnknownSync ( Messages . RequestConnectAddAppIdentityToSpaces ) ( req . body ) ;
162+ if ( ! ( await isSignerForAccount ( signerAddress , message . accountAddress ) ) ) {
163+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
164+ return ;
165+ }
150166 const space = await addAppIdentityToSpaces ( {
151- accountAddress,
167+ accountAddress : message . accountAddress ,
152168 appIdentityAddress : message . appIdentityAddress ,
153169 spacesInput : message . spacesInput ,
154170 } ) ;
@@ -169,10 +185,14 @@ app.post('/connect/identity', async (req, res) => {
169185 console . log ( 'POST connect/identity' ) ;
170186 try {
171187 const idToken = req . headers [ 'privy-id-token' ] ;
172- const signerAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
188+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
173189 const message = Schema . decodeUnknownSync ( Messages . RequestConnectCreateIdentity ) ( req . body ) ;
174190 const accountAddress = message . keyBox . accountAddress ;
175191
192+ if ( signerAddress !== message . keyBox . signer ) {
193+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
194+ return ;
195+ }
176196 if (
177197 ! Identity . verifyIdentityOwnership (
178198 accountAddress ,
@@ -223,17 +243,23 @@ app.post('/connect/identity', async (req, res) => {
223243 }
224244} ) ;
225245
226- app . post ( '/connect/identity/encrypted' , async ( req , res ) => {
227- console . log ( 'POST connect/identity/encrypted' ) ;
246+ app . get ( '/connect/identity/encrypted' , async ( req , res ) => {
247+ console . log ( 'GET connect/identity/encrypted' ) ;
228248 try {
229249 const idToken = req . headers [ 'privy-id-token' ] ;
230- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
250+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
251+ const accountAddress = req . headers [ 'account-address' ] as string ;
252+ if ( ! ( await isSignerForAccount ( signerAddress , accountAddress ) ) ) {
253+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
254+ return ;
255+ }
231256 const identity = await getConnectIdentity ( { accountAddress } ) ;
232257 const outgoingMessage : Messages . ResponseIdentityEncrypted = {
233258 keyBox : {
234259 accountAddress,
235260 ciphertext : identity . ciphertext ,
236261 nonce : identity . nonce ,
262+ signer : signerAddress ,
237263 } ,
238264 } ;
239265 res . status ( 200 ) . send ( outgoingMessage ) ;
@@ -253,7 +279,12 @@ app.get('/connect/app-identity/:appId', async (req, res) => {
253279 console . log ( 'GET connect/app-identity/:appId' ) ;
254280 try {
255281 const idToken = req . headers [ 'privy-id-token' ] ;
256- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
282+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
283+ const accountAddress = req . headers [ 'account-address' ] as string ;
284+ if ( ! ( await isSignerForAccount ( signerAddress , accountAddress ) ) ) {
285+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
286+ return ;
287+ }
257288 const appId = req . params . appId ;
258289 const appIdentity = await findAppIdentity ( { accountAddress, appId } ) ;
259290 if ( ! appIdentity ) {
@@ -277,8 +308,13 @@ app.post('/connect/app-identity', async (req, res) => {
277308 console . log ( 'POST connect/app-identity' ) ;
278309 try {
279310 const idToken = req . headers [ 'privy-id-token' ] ;
280- const accountAddress = await getAddressByPrivyToken ( Array . isArray ( idToken ) ? idToken [ 0 ] : idToken ) ;
311+ const signerAddress = await getAddressByPrivyToken ( idToken ) ;
281312 const message = Schema . decodeUnknownSync ( Messages . RequestConnectCreateAppIdentity ) ( req . body ) ;
313+ const accountAddress = message . accountAddress ;
314+ if ( ! ( await isSignerForAccount ( signerAddress , accountAddress ) ) ) {
315+ res . status ( 401 ) . send ( 'Unauthorized' ) ;
316+ return ;
317+ }
282318 const sessionToken = bytesToHex ( randomBytes ( 32 ) ) ;
283319 const sessionTokenExpires = new Date ( Date . now ( ) + 1000 * 60 * 60 * 24 * 30 ) ; // 30 days
284320 const appIdentity = await createAppIdentity ( {
0 commit comments