@@ -61,6 +61,31 @@ func (a *AccountData) Issuer() string {
61
61
return a .Claim .Issuer
62
62
}
63
63
64
+ func (a * AccountData ) SetIssuer (issuer string ) error {
65
+ if issuer != "" {
66
+ _ , err := KeyFrom (issuer , nkeys .PrefixByteOperator )
67
+ if err != nil {
68
+ return err
69
+ }
70
+ }
71
+
72
+ found := issuer == "" || a .Operator .Key .Public == issuer
73
+ if ! found {
74
+ for i := 0 ; i < len (a .Operator .OperatorSigningKeys ); i ++ {
75
+ if a .Operator .OperatorSigningKeys [i ].Public == issuer {
76
+ found = true
77
+ break
78
+ }
79
+ }
80
+ }
81
+
82
+ if ! found {
83
+ return fmt .Errorf ("issuer is not a registered operator key" )
84
+ }
85
+ a .Claim .Issuer = issuer
86
+ return a .update ()
87
+ }
88
+
64
89
func (a * AccountData ) update () error {
65
90
if a .BaseData .readOnly {
66
91
return fmt .Errorf ("account is read-only" )
@@ -71,12 +96,19 @@ func (a *AccountData) update() error {
71
96
if vr .IsBlocking (true ) {
72
97
return vr .Errors ()[0 ]
73
98
}
74
- // FIXME: the account possibly needs a way to select the key...
75
- key := a .Operator .Key
76
- if len (a .Operator .OperatorSigningKeys ) > 0 {
77
- key = a .Operator .OperatorSigningKeys [0 ]
99
+ if a .Claim .Issuer == "" {
100
+ a .Claim .Issuer = a .Operator .Key .Public
101
+ }
102
+
103
+ if a .Claim .Issuer == a .Operator .Key .Public {
104
+ return a .issue (a .Operator .Key )
105
+ }
106
+ for i := 0 ; i < len (a .Operator .OperatorSigningKeys ); i ++ {
107
+ if a .Claim .Issuer == a .Operator .OperatorSigningKeys [0 ].Public {
108
+ return a .issue (a .Operator .OperatorSigningKeys [i ])
109
+ }
78
110
}
79
- return a . issue ( key )
111
+ return fmt . Errorf ( "operator signing key %q is was not found" , a . Claim . Issuer )
80
112
}
81
113
82
114
func (a * AccountData ) getRevocations () jwt.RevocationList {
0 commit comments