Implement sop encrypt --profile=XXX

This commit is contained in:
Paul Schaub 2023-04-14 15:04:51 +02:00
parent f4ff5f89f7
commit 8a66f0bc4f
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
3 changed files with 38 additions and 0 deletions

View file

@ -85,6 +85,12 @@ public class EncryptExternal implements Encrypt {
return this;
}
@Override
public Encrypt profile(String profileName) {
commandList.add("--profile=" + profileName);
return this;
}
@Override
public Ready plaintext(InputStream plaintext)
throws IOException, SOPGPException.KeyIsProtected {

View file

@ -41,6 +41,10 @@ public class EncryptCmd extends AbstractSopCmd {
paramLabel = "PASSWORD")
List<String> withKeyPassword = new ArrayList<>();
@CommandLine.Option(names = "--profile",
paramLabel = "PROFILE")
String profile;
@CommandLine.Parameters(index = "0..*",
paramLabel = "CERTS")
List<String> certs = new ArrayList<>();
@ -50,6 +54,15 @@ public class EncryptCmd extends AbstractSopCmd {
Encrypt encrypt = throwIfUnsupportedSubcommand(
SopCLI.getSop().encrypt(), "encrypt");
if (profile != null) {
try {
encrypt.profile(profile);
} catch (SOPGPException.UnsupportedProfile e) {
String errorMsg = getMsg("sop.error.usage.profile_not_supported", "encrypt", profile);
throw new SOPGPException.UnsupportedProfile(errorMsg, e);
}
}
if (type != null) {
try {
encrypt.mode(type);

View file

@ -9,6 +9,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import sop.Profile;
import sop.Ready;
import sop.enums.EncryptAs;
import sop.exception.SOPGPException;
@ -146,6 +147,24 @@ public interface Encrypt {
return withCert(new ByteArrayInputStream(cert));
}
/**
* Pass in a profile.
*
* @param profile profile
* @return builder instance
*/
default Encrypt profile(Profile profile) {
return profile(profile.getName());
}
/**
* Pass in a profile identifier.
*
* @param profileName profile identifier
* @return builder instance
*/
Encrypt profile(String profileName);
/**
* Encrypt the given data yielding the ciphertext.
* @param plaintext plaintext