16
16
package dev .sigstore .cli ;
17
17
18
18
import dev .sigstore .KeylessSigner ;
19
+ import dev .sigstore .TrustedRootProvider ;
19
20
import dev .sigstore .encryption .certificates .Certificates ;
20
21
import dev .sigstore .oidc .client .OidcClients ;
22
+ import dev .sigstore .tuf .RootProvider ;
23
+ import dev .sigstore .tuf .SigstoreTufClient ;
24
+ import java .net .URL ;
21
25
import java .nio .charset .StandardCharsets ;
22
26
import java .nio .file .Files ;
23
27
import java .nio .file .Path ;
@@ -40,12 +44,29 @@ public class Sign implements Callable<Integer> {
40
44
@ ArgGroup (multiplicity = "1" , exclusive = true )
41
45
SignatureFiles signatureFiles ;
42
46
43
- @ Option (
44
- names = {"--staging" },
45
- description = "test against staging" ,
46
- required = false ,
47
- defaultValue = "false" )
48
- Boolean staging ;
47
+ @ ArgGroup (multiplicity = "0..1" , exclusive = true )
48
+ Verify .Target target ;
49
+
50
+ static class Target {
51
+ @ Option (
52
+ names = {"--staging" },
53
+ description = "test against staging" ,
54
+ required = false ,
55
+ defaultValue = "false" )
56
+ Boolean staging ;
57
+
58
+ @ Option (
59
+ names = {"--public-good-with-tuf-url-override" },
60
+ description = "use public good with a tuf remote repository override" ,
61
+ required = false )
62
+ String publicGoodWithTufUrlOverride ;
63
+
64
+ @ Option (
65
+ names = {"--staging-with-tuf-url-override" },
66
+ description = "use staging with a tuf remote repository override" ,
67
+ required = false )
68
+ String stagingWithTufUrlOverride ;
69
+ }
49
70
50
71
@ Option (
51
72
names = {"--identity-token" },
@@ -55,10 +76,36 @@ public class Sign implements Callable<Integer> {
55
76
56
77
@ Override
57
78
public Integer call () throws Exception {
58
- var signerBuilder =
59
- staging
60
- ? KeylessSigner .builder ().sigstoreStagingDefaults ()
61
- : KeylessSigner .builder ().sigstorePublicDefaults ();
79
+ KeylessSigner .Builder signerBuilder ;
80
+ if (target == null ) {
81
+ signerBuilder = new KeylessSigner .Builder ().sigstorePublicDefaults ();
82
+ } else if (target .staging ) {
83
+ signerBuilder = new KeylessSigner .Builder ().sigstoreStagingDefaults ();
84
+ } else if (target .publicGoodWithTufUrlOverride != null ) {
85
+ var tufClientBuilder =
86
+ SigstoreTufClient .builder ()
87
+ .usePublicGoodInstance ()
88
+ .tufMirror (
89
+ new URL (target .publicGoodWithTufUrlOverride ),
90
+ RootProvider .fromResource (SigstoreTufClient .PUBLIC_GOOD_ROOT_RESOURCE ));
91
+ signerBuilder =
92
+ KeylessSigner .builder ()
93
+ .sigstorePublicDefaults ()
94
+ .trustedRootProvider (TrustedRootProvider .from (tufClientBuilder ));
95
+ } else if (target .stagingWithTufUrlOverride != null ) {
96
+ var tufClientBuilder =
97
+ SigstoreTufClient .builder ()
98
+ .useStagingInstance ()
99
+ .tufMirror (
100
+ new URL (target .stagingWithTufUrlOverride ),
101
+ RootProvider .fromResource (SigstoreTufClient .STAGING_ROOT_RESOURCE ));
102
+ signerBuilder =
103
+ KeylessSigner .builder ()
104
+ .sigstoreStagingDefaults ()
105
+ .trustedRootProvider (TrustedRootProvider .from (tufClientBuilder ));
106
+ } else {
107
+ throw new IllegalStateException ("Unable to initialize signer" );
108
+ }
62
109
if (identityToken != null ) {
63
110
// If we've explicitly provided an identity token, customize the signer to only use the token
64
111
// string OIDC client.
0 commit comments