Revoke token when logging out (#7493)
* Revoke token when logging out * extract OAUTH2_DEVICE_CLIENT_ID * Update snapshots * Update snapshots * try fix * try fix * Move client id to `@src/lib/constants` --------- Co-authored-by: Jonathan Tran <jonnytran@gmail.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com> Co-authored-by: Pierre Jacquier <pierre@zoo.dev>
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB  | 
@ -222,3 +222,6 @@ export const CODE_QUERY_PARAM = 'code'
 | 
			
		||||
/** A query parameter to skip the sign-on view if unnecessary. */
 | 
			
		||||
export const IMMEDIATE_SIGN_IN_IF_NECESSARY_QUERY_PARAM =
 | 
			
		||||
  'immediate-sign-in-if-necessary'
 | 
			
		||||
 | 
			
		||||
// Only used by the desktop app
 | 
			
		||||
export const OAUTH2_DEVICE_CLIENT_ID = '2af127fb-e14e-400a-9c57-a9ed08d1a5b7'
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import {
 | 
			
		||||
} from '@src/env'
 | 
			
		||||
import { assign, fromPromise, setup } from 'xstate'
 | 
			
		||||
 | 
			
		||||
import { COOKIE_NAME } from '@src/lib/constants'
 | 
			
		||||
import { COOKIE_NAME, OAUTH2_DEVICE_CLIENT_ID } from '@src/lib/constants'
 | 
			
		||||
import {
 | 
			
		||||
  getUser as getUserDesktop,
 | 
			
		||||
  readTokenFile,
 | 
			
		||||
@ -254,8 +254,32 @@ async function getAndSyncStoredToken(input: {
 | 
			
		||||
async function logout() {
 | 
			
		||||
  localStorage.removeItem(TOKEN_PERSIST_KEY)
 | 
			
		||||
  if (isDesktop()) {
 | 
			
		||||
    await writeTokenFile('')
 | 
			
		||||
    return Promise.resolve(null)
 | 
			
		||||
    try {
 | 
			
		||||
      let token = await readTokenFile()
 | 
			
		||||
 | 
			
		||||
      if (token) {
 | 
			
		||||
        try {
 | 
			
		||||
          await fetch(withBaseUrl('/oauth2/token/revoke'), {
 | 
			
		||||
            method: 'POST',
 | 
			
		||||
            credentials: 'include',
 | 
			
		||||
            headers: {
 | 
			
		||||
              'Content-Type': 'application/x-www-form-urlencoded',
 | 
			
		||||
            },
 | 
			
		||||
            body: new URLSearchParams({
 | 
			
		||||
              token: token,
 | 
			
		||||
              client_id: OAUTH2_DEVICE_CLIENT_ID,
 | 
			
		||||
            }).toString(),
 | 
			
		||||
          })
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
          console.error('Error revoking token:', e)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await writeTokenFile('')
 | 
			
		||||
        return Promise.resolve(null)
 | 
			
		||||
      }
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      console.error('Error reading token during logout (ignoring):', e)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return fetch(withBaseUrl('/logout'), {
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,10 @@ import {
 | 
			
		||||
  parseCLIArgs,
 | 
			
		||||
} from '@src/commandLineArgs'
 | 
			
		||||
import { initPromiseNode } from '@src/lang/wasmUtilsNode'
 | 
			
		||||
import { ZOO_STUDIO_PROTOCOL } from '@src/lib/constants'
 | 
			
		||||
import {
 | 
			
		||||
  ZOO_STUDIO_PROTOCOL,
 | 
			
		||||
  OAUTH2_DEVICE_CLIENT_ID,
 | 
			
		||||
} from '@src/lib/constants'
 | 
			
		||||
import getCurrentProjectFile from '@src/lib/getCurrentProjectFile'
 | 
			
		||||
import { reportRejection } from '@src/lib/trap'
 | 
			
		||||
import {
 | 
			
		||||
@ -402,7 +405,7 @@ ipcMain.handle('startDeviceFlow', async (_, host: string) => {
 | 
			
		||||
    // We can hardcode the client ID.
 | 
			
		||||
    // This value is safe to be embedded in version control.
 | 
			
		||||
    // This is the client ID of the KittyCAD app.
 | 
			
		||||
    client_id: '2af127fb-e14e-400a-9c57-a9ed08d1a5b7',
 | 
			
		||||
    client_id: OAUTH2_DEVICE_CLIENT_ID,
 | 
			
		||||
    token_endpoint_auth_method: 'none',
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user