aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgConfig.java
blob: f5064df0614ae8ddc567afca963c3406940e93cc (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
 * Copyright (C) 2018, 2021 Salesforce and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0 which is available at
 * https://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
package org.eclipse.jgit.lib;

/**
 * Typed access to GPG related configuration options.
 *
 * @since 5.2
 */
public class GpgConfig {

	/**
	 * Config values for gpg.format.
	 */
	public enum GpgFormat implements Config.ConfigEnum {

		/** Value for openpgp */
		OPENPGP("openpgp"), //$NON-NLS-1$
		/** Value for x509 */
		X509("x509"), //$NON-NLS-1$
		/**
		 * Value for ssh.
		 *
		 * @since 7.0
		 */
		SSH("ssh"); //$NON-NLS-1$

		private final String configValue;

		private GpgFormat(String configValue) {
			this.configValue = configValue;
		}

		@Override
		public boolean matchConfigValue(String s) {
			return configValue.equals(s);
		}

		@Override
		public String toConfigValue() {
			return configValue;
		}
	}

	private final GpgFormat keyFormat;

	private final String signingKey;

	private final String program;

	private final boolean signCommits;

	private final boolean signAllTags;

	private final boolean forceAnnotated;

	/**
	 * Create a {@link GpgConfig} with the given parameters and default
	 * {@code true} for signing commits and {@code false} for tags.
	 *
	 * @param keySpec
	 *            to use
	 * @param format
	 *            to use
	 * @param gpgProgram
	 *            to use
	 * @since 5.11
	 */
	public GpgConfig(String keySpec, GpgFormat format, String gpgProgram) {
		keyFormat = format;
		signingKey = keySpec;
		program = gpgProgram;
		signCommits = true;
		signAllTags = false;
		forceAnnotated = false;
	}

	/**
	 * Create a new GPG config that reads the configuration from config.
	 *
	 * @param config
	 *            the config to read from
	 */
	public GpgConfig(Config config) {
		keyFormat = config.getEnum(GpgFormat.values(),
				ConfigConstants.CONFIG_GPG_SECTION, null,
				ConfigConstants.CONFIG_KEY_FORMAT, GpgFormat.OPENPGP);
		signingKey = config.getString(ConfigConstants.CONFIG_USER_SECTION, null,
				ConfigConstants.CONFIG_KEY_SIGNINGKEY);

		String exe = config.getString(ConfigConstants.CONFIG_GPG_SECTION,
				keyFormat.toConfigValue(), ConfigConstants.CONFIG_KEY_PROGRAM);
		if (exe == null) {
			exe = config.getString(ConfigConstants.CONFIG_GPG_SECTION, null,
					ConfigConstants.CONFIG_KEY_PROGRAM);
		}
		program = exe;
		signCommits = config.getBoolean(ConfigConstants.CONFIG_COMMIT_SECTION,
				ConfigConstants.CONFIG_KEY_GPGSIGN, false);
		signAllTags = config.getBoolean(ConfigConstants.CONFIG_TAG_SECTION,
				ConfigConstants.CONFIG_KEY_GPGSIGN, false);
		forceAnnotated = config.getBoolean(ConfigConstants.CONFIG_TAG_SECTION,
				ConfigConstants.CONFIG_KEY_FORCE_SIGN_ANNOTATED, false);
	}

	/**
	 * Retrieves the config value of gpg.format.
	 *
	 * @return the {@link org.eclipse.jgit.lib.GpgConfig.GpgFormat}
	 */
	public GpgFormat getKeyFormat() {
		return keyFormat;
	}

	/**
	 * Retrieves the value of the configured GPG program to use, as defined by
	 * gpg.openpgp.program, gpg.x509.program (depending on the defined
	 * {@link #getKeyFormat() format}), or gpg.program.
	 *
	 * @return the program string configured, or {@code null} if none
	 * @since 5.11
	 */
	public String getProgram() {
		return program;
	}

	/**
	 * Retrieves the config value of user.signingKey.
	 *
	 * @return the value of user.signingKey (may be <code>null</code>)
	 */
	public String getSigningKey() {
		return signingKey;
	}

	/**
	 * Retrieves the config value of commit.gpgSign.
	 *
	 * @return the value of commit.gpgSign (defaults to <code>false</code>)
	 */
	public boolean isSignCommits() {
		return signCommits;
	}

	/**
	 * Retrieves the value of git config {@code tag.gpgSign}.
	 *
	 * @return the value of {@code tag.gpgSign}; by default {@code false}
	 *
	 * @since 5.11
	 */
	public boolean isSignAllTags() {
		return signAllTags;
	}

	/**
	 * Retrieves the value of git config {@code tag.forceSignAnnotated}.
	 *
	 * @return the value of {@code tag.forceSignAnnotated}; by default
	 *         {@code false}
	 *
	 * @since 5.11
	 */
	public boolean isSignAnnotated() {
		return forceAnnotated;
	}
}