From 23c088beb01b02d123c0ee44e0e074ad4824a8f1 Mon Sep 17 00:00:00 2001 From: vorkulsky Date: Thu, 3 Jun 2021 11:30:08 +0500 Subject: [PATCH 1/2] Added SSH support. Renamed package LibGit2Sharp-SSH-standard # Conflicts: # LibGit2Sharp/LibGit2Sharp.csproj --- LibGit2Sharp/LibGit2Sharp.csproj | 5 +- LibGit2Sharp/SshExtensions.cs | 141 +++++++++++++++++++++++++++++++ README.md | 20 +++++ global.json | 5 -- 4 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 LibGit2Sharp/SshExtensions.cs delete mode 100644 global.json diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index fe5f98ea9..8391bc6f3 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -18,6 +18,7 @@ ..\libgit2sharp.snk square-logo.png App_Readme/LICENSE.md + LibGit2Sharp-SSH-standard @@ -32,9 +33,9 @@ - - + + diff --git a/LibGit2Sharp/SshExtensions.cs b/LibGit2Sharp/SshExtensions.cs new file mode 100644 index 000000000..80bb21de8 --- /dev/null +++ b/LibGit2Sharp/SshExtensions.cs @@ -0,0 +1,141 @@ +using LibGit2Sharp.Core; +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; + +namespace LibGit2Sharp.Ssh +{ + internal static class NativeMethods + { + private const string libgit2 = NativeDllName.Name; + + [DllImport(libgit2)] + internal static extern int git_cred_ssh_key_new( + out IntPtr cred, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string username, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string publickey, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string privatekey, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string passphrase); + + [DllImport(libgit2)] + internal static extern int git_cred_ssh_key_memory_new( + out IntPtr cred, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string username, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string publickey, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string privatekey, + [MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string passphrase); + } + + /// + /// Class that holds SSH username with key credentials for remote repository access. + /// + public sealed class SshUserKeyCredentials : Credentials + { + /// + /// Callback to acquire a credential object. + /// + /// The newly created credential object. + /// 0 for success, < 0 to indicate an error, > 0 to indicate no credential was acquired. + protected internal override int GitCredentialHandler(out IntPtr cred) + { + if (Username == null) + { + throw new InvalidOperationException("SshUserKeyCredentials contains a null Username."); + } + + if (Passphrase == null) + { + throw new InvalidOperationException("SshUserKeyCredentials contains a null Passphrase."); + } + + if (PublicKey == null) + { + throw new InvalidOperationException("SshUserKeyCredentials contains a null PublicKey."); + } + + if (PrivateKey == null) + { + throw new InvalidOperationException("SshUserKeyCredentials contains a null PrivateKey."); + } + + return NativeMethods.git_cred_ssh_key_new(out cred, Username, PublicKey, PrivateKey, Passphrase); + } + + /// + /// Username for SSH authentication. + /// + public string Username { get; set; } + + /// + /// Public key file location for SSH authentication. + /// + public string PublicKey { get; set; } + + /// + /// Private key file location for SSH authentication. + /// + public string PrivateKey { get; set; } + + /// + /// Passphrase for SSH authentication. + /// + public string Passphrase { get; set; } + } + + /// + /// Class that holds SSH username with in-memory key credentials for remote repository access. + /// + public sealed class SshUserKeyMemoryCredentials : Credentials + { + /// + /// Callback to acquire a credential object. + /// + /// The newly created credential object. + /// 0 for success, < 0 to indicate an error, > 0 to indicate no credential was acquired. + protected internal override int GitCredentialHandler(out IntPtr cred) + { + if (Username == null) + { + throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null Username."); + } + + if (Passphrase == null) + { + throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null Passphrase."); + } + + if (PublicKey == null) + { + //throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null PublicKey."); + } + + if (PrivateKey == null) + { + throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null PrivateKey."); + } + + return NativeMethods.git_cred_ssh_key_memory_new(out cred, Username, PublicKey, PrivateKey, Passphrase); + } + + /// + /// Username for SSH authentication. + /// + public string Username { get; set; } + + /// + /// Public key for SSH authentication. + /// + public string PublicKey { get; set; } + + /// + /// Private key for SSH authentication. + /// + public string PrivateKey { get; set; } + + /// + /// Passphrase for SSH authentication. + /// + public string Passphrase { get; set; } + } +} diff --git a/README.md b/README.md index c67e6ec8e..97e9e710d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,23 @@ +# LibGit2Sharp-SSH-standard + +This is a fork of LibGit2Sharp, modified to support SSH on .NET Standard + + +## Building the Nuget Package +Preparation: +1. first build the LibGit2Sharp-SSH-standard.NativeBinaries Nuget package: https://github.com/alex-weaver/libgit2sharp.nativebinaries +1. edit nuget dependencies to include the correct version of LibGit2Sharp-SSH-standard.NativeBinaries +2. set verion in version.json +Run the following in powershell +``` +dotnet restore +dotnet pack -c Release +``` + +Note that on alpine linux the native binaries have a dependency on libcurl + +--- +The original readme for this package is included below: # LibGit2Sharp [![master azurepipelines][master-azurepipelines-badge]][master-azurepipelines] diff --git a/global.json b/global.json deleted file mode 100644 index 05d0ae3d2..000000000 --- a/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "3.1.201" - } -} From 6f6cdc09e94075b1a5f45d4efbb03e3273e372fc Mon Sep 17 00:00:00 2001 From: Anton Fedorov Date: Thu, 3 Jun 2021 11:34:29 +0500 Subject: [PATCH 2/2] Update README.md --- README.md | 97 +------------------------------------------------------ 1 file changed, 1 insertion(+), 96 deletions(-) diff --git a/README.md b/README.md index 97e9e710d..83d01215b 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,3 @@ # LibGit2Sharp-SSH-standard -This is a fork of LibGit2Sharp, modified to support SSH on .NET Standard - - -## Building the Nuget Package -Preparation: -1. first build the LibGit2Sharp-SSH-standard.NativeBinaries Nuget package: https://github.com/alex-weaver/libgit2sharp.nativebinaries -1. edit nuget dependencies to include the correct version of LibGit2Sharp-SSH-standard.NativeBinaries -2. set verion in version.json -Run the following in powershell -``` -dotnet restore -dotnet pack -c Release -``` - -Note that on alpine linux the native binaries have a dependency on libcurl - ---- -The original readme for this package is included below: -# LibGit2Sharp - -[![master azurepipelines][master-azurepipelines-badge]][master-azurepipelines] -[![master win][master-win-badge]][master-win] -[![master nix][master-nix-badge]][master-nix] -[![coverity][coverity-badge]][coverity-project] - -[master-azurepipelines-badge]: https://dev.azure.com/libgit2sharp/libgit2sharp/_apis/build/status/libgit2sharp?branchName=master -[master-azurepipelines]: https://dev.azure.com/libgit2sharp/libgit2sharp/_build/latest?definitionId=1 -[master-win-badge]: https://ci.appveyor.com/api/projects/status/8qxcoqdo9kp7x2w9/branch/master?svg=true -[master-win]: https://ci.appveyor.com/project/libgit2/libgit2sharp/branch/master -[master-nix-badge]: https://travis-ci.org/libgit2/libgit2sharp.svg?branch=master -[master-nix]: https://travis-ci.org/libgit2/libgit2sharp/branches - -[coverity-project]: https://scan.coverity.com/projects/2088 -[coverity-badge]: https://scan.coverity.com/projects/2088/badge.svg - -**LibGit2Sharp brings all the might and speed of [libgit2][libgit2], a native Git implementation, to the managed world of .NET and Mono.** - - [libgit2]: http://libgit2.github.com/ - -## Prerequisites - - - **Windows:** .NET 4.6.1+ - - **Linux/Mac OS X:** Mono 5.4+ - -## Online resources - - - [NuGet package][nuget] (Requires NuGet 2.7+) - - [Source code][source] - - [nuget]: http://nuget.org/List/Packages/LibGit2Sharp - [source]: https://github.com/libgit2/libgit2sharp/ - -## Troubleshooting and support - - - Usage or programming related question? Post it on [StackOverflow][so] using the tag *libgit2sharp* - - Found a bug or missing a feature? Feed the [issue tracker][tracker] - - Announcements and related miscellanea through Twitter ([@libgit2sharp][twitter]) - - [so]: http://stackoverflow.com/questions/tagged/libgit2sharp - [tracker]: https://github.com/libgit2/libgit2sharp/issues - [twitter]: http://twitter.com/libgit2sharp - -## Quick contributing guide - - - Fork and clone locally - - Create a topic specific branch. Add some nice feature. Do not forget the tests ;-) - - Send a Pull Request to spread the fun! - -More thorough information available in the [wiki][wiki]. - - [wiki]: https://github.com/libgit2/libgit2sharp/wiki - -## Optimizing unit testing -LibGit2Sharp strives to have comprehensive and robust unit test suite to ensure the quality of the software and to assist new contributors and users who can use the tests as sample to jump start development. There are over one thousand unit-tests for LibGit2Sharp, this number will only grow as functionality is added. - -You can do a few things to optimize running unit-tests on Windows: - -1. Set the `LibGit2TestPath` environment variable to a path in your development environment. - * If the unit-test framework cannot find the specified folder at runtime, it will fall back to the default location. -2. Configure your anti-virus software to ignore the `LibGit2TestPath` path. -3. Install a RAM disk like [IMDisk](http://www.ltr-data.se/opencode.html/#ImDisk) and set `LibGit2TestPath` to use it. - * Use `imdisk.exe -a -s 512M -m X: -p "/fs:fat /q /v:ramdisk /y"` to create a RAM disk. This command requires elevated privileges and can be placed into a scheduled task or run manually before you begin unit-testing. - -## Authors - - - **Code:** The LibGit2Sharp [contributors][committers] - - **Logo:** [Jason "blackant" Long][blackant] - - [committers]: https://github.com/libgit2/libgit2sharp/contributors - [blackant]: https://github.com/jasonlong - -## License - -The MIT license (Refer to the [LICENSE.md][license] file) - - [license]: https://github.com/libgit2/libgit2sharp/blob/master/LICENSE.md +It is fork from https://github.com/alex-weaver/libgit2sharp with updates to some new version.