Merge pull request #4250 from gitbutlerapp/deprecate-generated-key

remove the gitbutler generated key flow
This commit is contained in:
Kiril Videlov 2024-07-06 16:23:16 +02:00 committed by GitHub
commit 3d0953e50c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 12 additions and 118 deletions

View File

@ -8,7 +8,7 @@ import { get, writable } from 'svelte/store';
import type { HttpClient } from './httpClient';
import { goto } from '$app/navigation';
export type KeyType = 'generated' | 'gitCredentialsHelper' | 'local' | 'systemExecutable';
export type KeyType = 'gitCredentialsHelper' | 'local' | 'systemExecutable';
export type LocalKey = {
local: { private_key_path: string };
};

View File

@ -1,24 +1,19 @@
<script lang="ts">
import { AuthService } from '$lib/backend/auth';
import { ProjectService, type Key, type KeyType, Project } from '$lib/backend/projects';
import SectionCard from '$lib/components/SectionCard.svelte';
import { showError } from '$lib/notifications/toasts';
import Section from '$lib/settings/Section.svelte';
import Button from '$lib/shared/Button.svelte';
import CredentialCheck from '$lib/shared/CredentialCheck.svelte';
import Link from '$lib/shared/Link.svelte';
import ProjectNameLabel from '$lib/shared/ProjectNameLabel.svelte';
import RadioButton from '$lib/shared/RadioButton.svelte';
import TextBox from '$lib/shared/TextBox.svelte';
import { copyToClipboard } from '$lib/utils/clipboard';
import { getContext, getContextStore } from '$lib/utils/context';
import { openExternalUrl } from '$lib/utils/url';
import { BaseBranch } from '$lib/vbranches/types';
import { onMount } from 'svelte';
const project = getContext(Project);
const authService = getContext(AuthService);
const baseBranch = getContextStore(BaseBranch);
const projectService = getContext(ProjectService);
@ -28,7 +23,6 @@
export let showProjectName = false;
export let disabled = false;
let sshKey = '';
let credentialCheck: CredentialCheck;
let selectedType: KeyType =
@ -72,7 +66,6 @@
onMount(async () => {
form.credentialType.value = selectedType;
sshKey = await authService.getPublicKey();
});
</script>
@ -141,48 +134,6 @@
</SectionCard>
{/if}
<SectionCard
roundedTop={false}
roundedBottom={false}
bottomBorder={selectedType !== 'generated'}
orientation="row"
labelFor="credential-generated"
>
<svelte:fragment slot="title">Use locally generated SSH key</svelte:fragment>
<svelte:fragment slot="actions">
<RadioButton name="credentialType" id="credential-generated" value="generated" />
</svelte:fragment>
<svelte:fragment slot="caption">
{#if selectedType === 'generated'}
GitButler will use a locally generated SSH key. For this to work you need to add the
following public key to your Git remote provider:
{/if}
</svelte:fragment>
</SectionCard>
{#if selectedType === 'generated'}
<SectionCard topDivider roundedTop={false} roundedBottom={false}>
<TextBox id="sshKey" readonly bind:value={sshKey} wide />
<div class="row-buttons">
<Button style="pop" kind="solid" icon="copy" on:mousedown={() => copyToClipboard(sshKey)}>
Copy to Clipboard
</Button>
<Button
style="ghost"
outline
icon="open-link"
on:mousedown={() => {
openExternalUrl('https://github.com/settings/ssh/new');
}}
>
Add key to GitHub
</Button>
</div>
</SectionCard>
{/if}
<SectionCard
roundedTop={false}
roundedBottom={false}
@ -224,12 +175,6 @@
width: 100%;
}
.row-buttons {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.git-radio {
display: flex;
flex-direction: column;

View File

@ -72,10 +72,8 @@ impl From<Credential> for git2::RemoteCallbacks<'_> {
}
}
#[derive(Clone)]
pub struct Helper {
keys: keys::Controller,
}
#[derive(Clone, Default)]
pub struct Helper {}
#[derive(Debug, thiserror::Error)]
pub enum HelpError {
@ -90,16 +88,6 @@ pub enum HelpError {
}
impl Helper {
pub fn new(keys: keys::Controller) -> Self {
Self { keys }
}
pub fn from_path(path: impl Into<PathBuf>) -> Self {
let path = path.into();
let keys = keys::Controller::from_path(path);
Self::new(keys)
}
pub fn help<'a>(
&'a self,
project_repository: &'a project_repository::Repository,
@ -146,11 +134,6 @@ impl Helper {
.collect::<Vec<_>>();
Ok(vec![(https_remote, flow)])
}
projects::AuthKey::Generated => {
let generated_flow = self.generated_flow(remote, project_repository)?;
Ok(vec![generated_flow].into_iter().flatten().collect())
}
projects::AuthKey::SystemExecutable => {
tracing::error!("WARNING: FIXME: this codepath should NEVER be hit. Something is seriously wrong.");
Ok(vec![])
@ -158,30 +141,6 @@ impl Helper {
}
}
fn generated_flow<'a>(
&'a self,
remote: git2::Remote<'a>,
project_repository: &'a project_repository::Repository,
) -> Result<Vec<(git2::Remote, Vec<Credential>)>, HelpError> {
let remote_url = Url::from_str(remote.url().ok_or(HelpError::NoUrlSet)?)
.context("failed to parse remote url")?;
let ssh_remote = if remote_url.scheme == super::Scheme::Ssh {
Ok(remote)
} else {
let ssh_url = remote_url.as_ssh()?;
project_repository
.repo()
.remote_anonymous(&ssh_url.to_string())
}?;
let key = self.keys.get_or_create()?;
Ok(vec![(
ssh_remote,
vec![Credential::Ssh(SshCredential::GitButlerKey(Box::new(key)))],
)])
}
fn https_flow(
project_repository: &project_repository::Repository,
remote_url: &super::Url,

View File

@ -10,7 +10,6 @@ use crate::{id::Id, types::default_true::DefaultTrue, virtual_branches::VirtualB
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum AuthKey {
Generated,
GitCredentialsHelper,
Local {
private_key_path: path::PathBuf,

View File

@ -3,7 +3,7 @@ use std::str;
use gitbutler_core::{
git::credentials::{Credential, Helper, SshCredential},
keys, project_repository, projects, users,
project_repository, projects, users,
};
use gitbutler_testsupport::{temp_dir, test_repository};
@ -29,8 +29,7 @@ impl TestCase<'_> {
.expect("valid v1 sample user");
users.set_user(&user).unwrap();
let keys = keys::Controller::from_path(local_app_data.path());
let helper = Helper::new(keys);
let helper = Helper::default();
let (repo, _tmp) = test_repository();
repo.remote("origin", self.remote_url).unwrap();

View File

@ -4,7 +4,7 @@ use super::*;
async fn twice() {
let data_dir = paths::data_dir();
let projects = projects::Controller::from_path(data_dir.path());
let helper = git::credentials::Helper::from_path(data_dir.path());
let helper = git::credentials::Helper::default();
let test_project = TestProject::default();

View File

@ -32,7 +32,7 @@ impl Default for Test {
fn default() -> Self {
let data_dir = paths::data_dir();
let projects = projects::Controller::from_path(data_dir.path());
let helper = git::credentials::Helper::from_path(data_dir.path());
let helper = git::credentials::Helper::default();
let test_project = TestProject::default();
let project = projects

View File

@ -132,9 +132,7 @@ fn main() {
let keys_controller = gitbutler_core::keys::Controller::new(keys_storage_controller.clone());
app_handle.manage(keys_controller.clone());
let git_credentials_controller = git::credentials::Helper::new(
keys_controller.clone(),
);
let git_credentials_controller = git::credentials::Helper::default();
app_handle.manage(git_credentials_controller.clone());
app_handle.manage(gitbutler_core::virtual_branches::controller::Controller::new(

View File

@ -80,7 +80,7 @@ impl Suite {
pub fn new_case_with_files(&self, fs: HashMap<PathBuf, &str>) -> Case {
let (project, project_tmp) = self.project(fs);
Case::new(self, project, project_tmp)
Case::new(project, project_tmp)
}
pub fn new_case(&self) -> Case {
@ -109,15 +109,10 @@ impl Drop for Case {
}
impl Case {
fn new(
suite: &Suite,
project: gitbutler_core::projects::Project,
project_tmp: TempDir,
) -> Case {
fn new(project: gitbutler_core::projects::Project, project_tmp: TempDir) -> Case {
let project_repository = gitbutler_core::project_repository::Repository::open(&project)
.expect("failed to create project repository");
let credentials =
gitbutler_core::git::credentials::Helper::from_path(suite.local_app_data());
let credentials = gitbutler_core::git::credentials::Helper::default();
Case {
project,
project_repository,
@ -133,8 +128,7 @@ impl Case {
.expect("failed to get project");
let project_repository = gitbutler_core::project_repository::Repository::open(&project)
.expect("failed to create project repository");
let credentials =
gitbutler_core::git::credentials::Helper::from_path(suite.local_app_data());
let credentials = gitbutler_core::git::credentials::Helper::default();
Self {
credentials,
project_repository,