Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 2x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x | import * as vscode from 'vscode';
/**
* Displays a Webview panel that allows users to log in to the Copilot Clone extension via Supabase authentication.
*
* Presents a login form (email and password) inside a Webview.
* Upon successful authentication, stores the session information in VS Code's global state
* and displays a success message to the user.
*
* @param context - The extension context, used to store the authenticated session and manage subscriptions.
*/
export function showLoginWebview(context: vscode.ExtensionContext) {
const panel = vscode.window.createWebviewPanel(
'loginWebview',
'Log in to Copilot Clone',
vscode.ViewColumn.One,
{
enableScripts: true,
}
);
panel.webview.html = getWebviewContent();
panel.webview.onDidReceiveMessage(
async (message) => {
if (message.type === 'auth-success') {
await context.globalState.update('supabaseSession', message.data);
vscode.window.showInformationMessage(`Logged in as ${message.data.email}!`);
panel.dispose();
} else if (message.type === 'auth-error') {
vscode.window.showErrorMessage(`Login failed: ${message.error}`);
}
},
undefined,
context.subscriptions
);
/**
* Returns the HTML content for the login Webview.
*
* The HTML page contains:
* - A login form for email and password input
* - Client-side logic to authenticate the user with Supabase
* - Message passing to notify the VS Code extension of authentication success
*
* @returns The complete HTML markup as a string.
*/
function getWebviewContent(): string {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supabase Login</title>
<script>
const vscode = acquireVsCodeApi();
async function handleLogin() {
const email = document.getElementById('email').value;
const password = document.getElementById('password').value;
const { user, error } = await supabase.auth.signInWithPassword({ email, password });
if (error) {
alert(error.message);
} else {
vscode.postMessage({ type: 'auth-success', data: user });
}
}
</script>
</head>
<body>
<h2>Login to Supabase</h2>
<input id="email" type="email" placeholder="Email" />
<input id="password" type="password" placeholder="Password" />
<button onclick="handleLogin()">Login</button>
</body>
</html>
`
;
}
} |