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. */
|
/** A query parameter to skip the sign-on view if unnecessary. */
|
||||||
export const IMMEDIATE_SIGN_IN_IF_NECESSARY_QUERY_PARAM =
|
export const IMMEDIATE_SIGN_IN_IF_NECESSARY_QUERY_PARAM =
|
||||||
'immediate-sign-in-if-necessary'
|
'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'
|
} from '@src/env'
|
||||||
import { assign, fromPromise, setup } from 'xstate'
|
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 {
|
import {
|
||||||
getUser as getUserDesktop,
|
getUser as getUserDesktop,
|
||||||
readTokenFile,
|
readTokenFile,
|
||||||
@ -254,8 +254,32 @@ async function getAndSyncStoredToken(input: {
|
|||||||
async function logout() {
|
async function logout() {
|
||||||
localStorage.removeItem(TOKEN_PERSIST_KEY)
|
localStorage.removeItem(TOKEN_PERSIST_KEY)
|
||||||
if (isDesktop()) {
|
if (isDesktop()) {
|
||||||
await writeTokenFile('')
|
try {
|
||||||
return Promise.resolve(null)
|
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'), {
|
return fetch(withBaseUrl('/logout'), {
|
||||||
|
@ -28,7 +28,10 @@ import {
|
|||||||
parseCLIArgs,
|
parseCLIArgs,
|
||||||
} from '@src/commandLineArgs'
|
} from '@src/commandLineArgs'
|
||||||
import { initPromiseNode } from '@src/lang/wasmUtilsNode'
|
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 getCurrentProjectFile from '@src/lib/getCurrentProjectFile'
|
||||||
import { reportRejection } from '@src/lib/trap'
|
import { reportRejection } from '@src/lib/trap'
|
||||||
import {
|
import {
|
||||||
@ -402,7 +405,7 @@ ipcMain.handle('startDeviceFlow', async (_, host: string) => {
|
|||||||
// We can hardcode the client ID.
|
// We can hardcode the client ID.
|
||||||
// This value is safe to be embedded in version control.
|
// This value is safe to be embedded in version control.
|
||||||
// This is the client ID of the KittyCAD app.
|
// 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',
|
token_endpoint_auth_method: 'none',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user