mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-10-31 18:46:07 +01:00 
			
		
		
		
	wip
This commit is contained in:
		| @@ -0,0 +1,62 @@ | ||||
| /* | ||||
|  * | ||||
|  * MIT License | ||||
|  * | ||||
|  * Copyright (c) 2020-present Cloudogu GmbH and Contributors | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| package sonia.scm.repository; | ||||
|  | ||||
| import org.eclipse.jgit.api.errors.CanceledException; | ||||
| import org.eclipse.jgit.lib.CommitBuilder; | ||||
| import org.eclipse.jgit.lib.GpgSignature; | ||||
| import org.eclipse.jgit.lib.GpgSigner; | ||||
| import org.eclipse.jgit.lib.PersonIdent; | ||||
| import org.eclipse.jgit.transport.CredentialsProvider; | ||||
| import sonia.scm.security.GPG; | ||||
|  | ||||
| import javax.inject.Inject; | ||||
| import java.io.UnsupportedEncodingException; | ||||
|  | ||||
| public class ScmGpgSigner extends GpgSigner { | ||||
|  | ||||
|   private final GPG gpg; | ||||
|  | ||||
|   @Inject | ||||
|   public ScmGpgSigner(GPG gpg) { | ||||
|     this.gpg = gpg; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void sign(CommitBuilder commitBuilder, String s, PersonIdent personIdent, CredentialsProvider credentialsProvider) throws CanceledException { | ||||
|     try { | ||||
|       final byte[] signature = this.gpg.getPrivateKey().sign(commitBuilder.build()); | ||||
|       commitBuilder.setGpgSignature(new GpgSignature(signature)); | ||||
|     } catch (UnsupportedEncodingException e) { | ||||
|       throw new IllegalStateException(e); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public boolean canLocateSigningKey(String s, PersonIdent personIdent, CredentialsProvider credentialsProvider) throws CanceledException { | ||||
|     return true; | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,54 @@ | ||||
| /* | ||||
|  * | ||||
|  * MIT License | ||||
|  * | ||||
|  * Copyright (c) 2020-present Cloudogu GmbH and Contributors | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| package sonia.scm.repository; | ||||
|  | ||||
| import org.eclipse.jgit.lib.GpgSigner; | ||||
| import sonia.scm.plugin.Extension; | ||||
|  | ||||
| import javax.inject.Inject; | ||||
| import javax.servlet.ServletContextEvent; | ||||
| import javax.servlet.ServletContextListener; | ||||
|  | ||||
| @Extension | ||||
| public class ScmGpgSignerInitializer implements ServletContextListener { | ||||
|  | ||||
|   private final ScmGpgSigner scmGpgSigner; | ||||
|  | ||||
|   @Inject | ||||
|   public ScmGpgSignerInitializer(ScmGpgSigner scmGpgSigner) { | ||||
|     this.scmGpgSigner = scmGpgSigner; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void contextInitialized(ServletContextEvent servletContextEvent) { | ||||
|     GpgSigner.setDefault(scmGpgSigner); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void contextDestroyed(ServletContextEvent servletContextEvent) { | ||||
|     // Do nothing | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user