mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-14 21:23:40 +01:00
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import type { GitCallbacks } from '@yaakapp-internal/git';
|
|
import { showPromptForm } from '../../lib/prompt-form';
|
|
import { Banner } from '../core/Banner';
|
|
import { InlineCode } from '../core/InlineCode';
|
|
import { addGitRemote } from './showAddRemoteDialog';
|
|
|
|
export function gitCallbacks(dir: string): GitCallbacks {
|
|
return {
|
|
addRemote: async () => {
|
|
return addGitRemote(dir);
|
|
},
|
|
promptCredentials: async ({ url: remoteUrl, error }) => {
|
|
const isGitHub = /github\.com/i.test(remoteUrl);
|
|
const userLabel = isGitHub ? 'GitHub Username' : 'Username';
|
|
const passLabel = isGitHub ? 'GitHub Personal Access Token' : 'Password / Token';
|
|
const userDescription = isGitHub ? 'Use your GitHub username (not your email).' : undefined;
|
|
const passDescription = isGitHub
|
|
? 'GitHub requires a Personal Access Token (PAT) for write operations over HTTPS. Passwords are not supported.'
|
|
: 'Enter your password or access token for this Git server.';
|
|
const r = await showPromptForm({
|
|
id: 'git-credentials',
|
|
title: 'Credentials Required',
|
|
description: error ? (
|
|
<Banner color="danger">{error}</Banner>
|
|
) : (
|
|
<>
|
|
Enter credentials for <InlineCode>{remoteUrl}</InlineCode>
|
|
</>
|
|
),
|
|
inputs: [
|
|
{ type: 'text', name: 'username', label: userLabel, description: userDescription },
|
|
{
|
|
type: 'text',
|
|
name: 'password',
|
|
label: passLabel,
|
|
description: passDescription,
|
|
password: true,
|
|
},
|
|
],
|
|
});
|
|
if (r == null) throw new Error('Cancelled credentials prompt');
|
|
|
|
const username = String(r.username || '');
|
|
const password = String(r.password || '');
|
|
return { username, password };
|
|
},
|
|
};
|
|
}
|