Skip to content

Commit 0e47bd9

Browse files
Improve authorization checks for CN app APIs (#2509)
Signed-off-by: Robert Autenrieth <robert.autenrieth@digitalasset.com>
1 parent 82d6f89 commit 0e47bd9

File tree

43 files changed

+2474
-1682
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2474
-1682
lines changed

apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/ScanAppReference.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import org.lfdecentralizedtrust.splice.codegen.java.splice.dsorules.{
5959
DsoRules_CloseVoteRequestResult,
6060
VoteRequest,
6161
}
62-
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvAdminAppClient
62+
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvOperatorAppClient
6363

6464
import scala.jdk.OptionConverters.*
6565
import java.time.Instant
@@ -674,7 +674,7 @@ abstract class ScanAppReference(
674674
): Contract[VoteRequest.ContractId, VoteRequest] = {
675675
consoleEnvironment.run {
676676
httpCommand(
677-
HttpSvAdminAppClient.LookupVoteRequest(trackingCid)()
677+
HttpSvOperatorAppClient.LookupVoteRequest(trackingCid)()
678678
)
679679
}
680680
}

apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/SvAppReference.scala

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ import org.lfdecentralizedtrust.splice.http.v0.definitions
2222
import org.lfdecentralizedtrust.splice.sv.{SvApp, SvAppBootstrap, SvAppClientConfig}
2323
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.{
2424
HttpSvAdminAppClient,
25-
HttpSvAppClient,
25+
HttpSvOperatorAppClient,
26+
HttpSvPublicAppClient,
2627
}
2728
import org.lfdecentralizedtrust.splice.sv.automation.{
2829
DsoDelegateBasedAutomationService,
29-
SvSvAutomationService,
3030
SvDsoAutomationService,
31+
SvSvAutomationService,
3132
}
3233
import org.lfdecentralizedtrust.splice.sv.config.SvAppBackendConfig
3334
import org.lfdecentralizedtrust.splice.sv.migration.{DomainDataSnapshot, SynchronizerNodeIdentities}
@@ -54,46 +55,51 @@ abstract class SvAppReference(
5455
def onboardValidator(validator: PartyId, secret: String, contactPoint: String): Unit =
5556
consoleEnvironment.run {
5657
httpCommand(
57-
HttpSvAppClient.OnboardValidator(validator, secret, BuildInfo.compiledVersion, contactPoint)
58+
HttpSvPublicAppClient.OnboardValidator(
59+
validator,
60+
secret,
61+
BuildInfo.compiledVersion,
62+
contactPoint,
63+
)
5864
)
5965
}
6066

6167
def startSvOnboarding(token: String): Unit =
6268
consoleEnvironment.run {
63-
httpCommand(HttpSvAppClient.StartSvOnboarding(token))
69+
httpCommand(HttpSvPublicAppClient.StartSvOnboarding(token))
6470
}
6571

66-
def getSvOnboardingStatus(candidate: PartyId): HttpSvAppClient.SvOnboardingStatus =
72+
def getSvOnboardingStatus(candidate: PartyId): HttpSvPublicAppClient.SvOnboardingStatus =
6773
consoleEnvironment.run {
68-
httpCommand(HttpSvAppClient.getSvOnboardingStatus(candidate.toProtoPrimitive))
74+
httpCommand(HttpSvPublicAppClient.getSvOnboardingStatus(candidate.toProtoPrimitive))
6975
}
7076

71-
def getSvOnboardingStatus(candidate: String): HttpSvAppClient.SvOnboardingStatus =
77+
def getSvOnboardingStatus(candidate: String): HttpSvPublicAppClient.SvOnboardingStatus =
7278
consoleEnvironment.run {
73-
httpCommand(HttpSvAppClient.getSvOnboardingStatus(candidate))
79+
httpCommand(HttpSvPublicAppClient.getSvOnboardingStatus(candidate))
7480
}
7581

7682
@Help.Summary("Prepare a validator onboarding and return an onboarding secret (via client API)")
7783
def devNetOnboardValidatorPrepare(): String =
7884
consoleEnvironment.run {
79-
httpCommand(HttpSvAppClient.DevNetOnboardValidatorPrepare())
85+
httpCommand(HttpSvPublicAppClient.DevNetOnboardValidatorPrepare())
8086
}
8187

82-
def getDsoInfo(): HttpSvAppClient.DsoInfo =
88+
def getDsoInfo(): HttpSvPublicAppClient.DsoInfo =
8389
consoleEnvironment.run {
84-
httpCommand(HttpSvAppClient.GetDsoInfo)
90+
httpCommand(HttpSvPublicAppClient.GetDsoInfo)
8591
}
8692

8793
@Help.Summary("Get the CometBFT node status")
8894
def cometBftNodeStatus(): definitions.CometBftNodeStatusResponse =
8995
consoleEnvironment.run {
90-
httpCommand(HttpSvAppClient.GetCometBftNodeStatus())
96+
httpCommand(HttpSvPublicAppClient.GetCometBftNodeStatus())
9197
}
9298

9399
@Help.Summary("Get the CometBFT node dump")
94100
def cometBftNodeDebugDump(): definitions.CometBftNodeDumpResponse =
95101
consoleEnvironment.run {
96-
httpCommand(HttpSvAdminAppClient.GetCometBftNodeDump())
102+
httpCommand(HttpSvOperatorAppClient.GetCometBftNodeDump())
97103
}
98104

99105
@Help.Summary("Make a CometBFT Json RPC request")
@@ -103,17 +109,17 @@ abstract class SvAppReference(
103109
params: Map[String, io.circe.Json] = Map.empty,
104110
): definitions.CometBftJsonRpcResponse =
105111
consoleEnvironment.run {
106-
httpCommand(HttpSvAppClient.CometBftJsonRpcRequest(id, method, params))
112+
httpCommand(HttpSvPublicAppClient.CometBftJsonRpcRequest(id, method, params))
107113
}
108114

109115
def onboardSvPartyMigrationAuthorize(
110116
participantId: ParticipantId,
111117
candidateParty: PartyId,
112-
): HttpSvAppClient.OnboardSvPartyMigrationAuthorizeResponse =
118+
): HttpSvPublicAppClient.OnboardSvPartyMigrationAuthorizeResponse =
113119
consoleEnvironment
114120
.run {
115121
httpCommand(
116-
HttpSvAppClient.OnboardSvPartyMigrationAuthorize(
122+
HttpSvPublicAppClient.OnboardSvPartyMigrationAuthorize(
117123
participantId,
118124
candidateParty,
119125
)
@@ -177,7 +183,7 @@ abstract class SvAppReference(
177183
)(implicit tc: TraceContext): Unit = {
178184
consoleEnvironment.run {
179185
httpCommand(
180-
HttpSvAdminAppClient.CreateVoteRequest(
186+
HttpSvOperatorAppClient.CreateVoteRequest(
181187
requester,
182188
action,
183189
reasonUrl,
@@ -193,7 +199,7 @@ abstract class SvAppReference(
193199
def listVoteRequests(): Seq[Contract[VoteRequest.ContractId, VoteRequest]] = {
194200
consoleEnvironment.run {
195201
httpCommand(
196-
HttpSvAdminAppClient.ListVoteRequests
202+
HttpSvOperatorAppClient.ListVoteRequests
197203
)
198204
}
199205
}
@@ -215,7 +221,7 @@ abstract class SvAppReference(
215221
): Contract[VoteRequest.ContractId, VoteRequest] = {
216222
consoleEnvironment.run {
217223
httpCommand(
218-
HttpSvAdminAppClient.LookupVoteRequest(trackingCid)()
224+
HttpSvOperatorAppClient.LookupVoteRequest(trackingCid)()
219225
)
220226
}
221227
}
@@ -230,7 +236,7 @@ abstract class SvAppReference(
230236
): Seq[DsoRules_CloseVoteRequestResult] = {
231237
consoleEnvironment.run {
232238
httpCommand(
233-
HttpSvAdminAppClient.ListVoteRequestResults(
239+
HttpSvOperatorAppClient.ListVoteRequestResults(
234240
actionName,
235241
accepted,
236242
requester,
@@ -251,7 +257,7 @@ abstract class SvAppReference(
251257
): Unit = {
252258
consoleEnvironment.run {
253259
httpCommand(
254-
HttpSvAdminAppClient.CastVote(trackingCid, isAccepted, reasonUrl, reasonDescription)
260+
HttpSvOperatorAppClient.CastVote(trackingCid, isAccepted, reasonUrl, reasonDescription)
255261
)
256262
}
257263
}
@@ -341,31 +347,31 @@ class SvAppBackendReference(
341347
def listOngoingValidatorOnboardings(): Seq[ValidatorOnboarding] =
342348
consoleEnvironment.run {
343349
httpCommand(
344-
HttpSvAdminAppClient.ListOngoingValidatorOnboardings
350+
HttpSvOperatorAppClient.ListOngoingValidatorOnboardings
345351
)
346352
}
347353

348354
@Help.Summary("Prepare a validator onboarding and return an onboarding secret (via admin API)")
349355
def prepareValidatorOnboarding(expiresIn: FiniteDuration, partyHint: Option[String]): String =
350356
consoleEnvironment.run {
351357
httpCommand(
352-
HttpSvAdminAppClient.PrepareValidatorOnboarding(expiresIn, partyHint)
358+
HttpSvOperatorAppClient.PrepareValidatorOnboarding(expiresIn, partyHint)
353359
)
354360
}
355361

356362
@Help.Summary("Update CC price vote (via admin API)")
357363
def updateAmuletPriceVote(amuletPrice: BigDecimal): Unit =
358364
consoleEnvironment.run {
359365
httpCommand(
360-
HttpSvAdminAppClient.UpdateAmuletPriceVote(amuletPrice)
366+
HttpSvOperatorAppClient.UpdateAmuletPriceVote(amuletPrice)
361367
)
362368
}
363369

364370
@Help.Summary("List CC price vote (via admin API)")
365371
def listAmuletPriceVotes(): Seq[Contract[cp.AmuletPriceVote.ContractId, cp.AmuletPriceVote]] = {
366372
consoleEnvironment.run {
367373
httpCommand(
368-
HttpSvAdminAppClient.ListAmuletPriceVotes
374+
HttpSvOperatorAppClient.ListAmuletPriceVotes
369375
)
370376
}
371377
}
@@ -374,27 +380,27 @@ class SvAppBackendReference(
374380
def listOpenMiningRounds(): Seq[Contract[OpenMiningRound.ContractId, OpenMiningRound]] = {
375381
consoleEnvironment.run {
376382
httpCommand(
377-
HttpSvAdminAppClient.ListOpenMiningRounds
383+
HttpSvOperatorAppClient.ListOpenMiningRounds
378384
)
379385
}
380386
}
381387

382388
@Help.Summary("Get the CometBFT node debug dump")
383389
def cometBftNodeDump(): definitions.CometBftNodeDumpResponse =
384390
consoleEnvironment.run {
385-
httpCommand(HttpSvAdminAppClient.GetCometBftNodeDump())
391+
httpCommand(HttpSvOperatorAppClient.GetCometBftNodeDump())
386392
}
387393

388394
@Help.Summary("Get the sequencer node status")
389395
def sequencerNodeStatus(): NodeStatus[SpliceStatus] =
390396
consoleEnvironment.run {
391-
httpCommand(HttpSvAdminAppClient.GetSequencerNodeStatus())
397+
httpCommand(HttpSvOperatorAppClient.GetSequencerNodeStatus())
392398
}
393399

394400
@Help.Summary("Get the mediator node status")
395401
def mediatorNodeStatus(): NodeStatus[SpliceStatus] =
396402
consoleEnvironment.run {
397-
httpCommand(HttpSvAdminAppClient.GetMediatorNodeStatus())
403+
httpCommand(HttpSvOperatorAppClient.GetMediatorNodeStatus())
398404
}
399405

400406
/** Remote participant this sv app is configured to interact with. */

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/BftScanConnectionIntegrationTest.scala

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ class BftScanConnectionIntegrationTest
113113
)
114114

115115
aliceValidatorBackend.startSync()
116+
onboardWalletUser(aliceValidatorWalletClient, aliceValidatorBackend)
117+
val walletUserToken =
118+
OAuth2BearerToken(aliceValidatorWalletClient.token.valueOrFail("No token found"))
116119

117120
val fakeCid = new TransferInstruction.ContractId("00" + s"01" * 31 + "42")
118121

@@ -137,11 +140,7 @@ class BftScanConnectionIntegrationTest
137140
.getTransferInstructionAcceptContext(
138141
fakeCid.contractId,
139142
GetChoiceContextRequest(None),
140-
List(
141-
Authorization(
142-
OAuth2BearerToken(aliceValidatorBackend.token.valueOrFail("No token found"))
143-
)
144-
),
143+
List(Authorization(walletUserToken)),
145144
)
146145
.value
147146
.futureValue
@@ -163,11 +162,7 @@ class BftScanConnectionIntegrationTest
163162
walletClient
164163
.acceptTokenStandardTransfer(
165164
fakeCid.contractId,
166-
List(
167-
Authorization(
168-
OAuth2BearerToken(aliceValidatorBackend.token.valueOrFail("No token found"))
169-
)
170-
),
165+
List(Authorization(walletUserToken)),
171166
)
172167
.value
173168
.futureValue

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ScanIntegrationTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import org.lfdecentralizedtrust.splice.integration.tests.SpliceTests.{
3232
}
3333
import org.lfdecentralizedtrust.splice.scan.config.BftSequencerConfig
3434
import org.lfdecentralizedtrust.splice.store.Limit
35-
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvAppClient
35+
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvPublicAppClient
3636
import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.{
3737
AdvanceOpenMiningRoundTrigger,
3838
ExpireIssuingMiningRoundTrigger,
@@ -111,7 +111,7 @@ class ScanIntegrationTest extends IntegrationTest with WalletTestUtil with TimeT
111111
"return dso info same as the sv app" in { implicit env =>
112112
val scan = sv1ScanBackend.getDsoInfo()
113113
inside(sv1Backend.getDsoInfo()) {
114-
case HttpSvAppClient.DsoInfo(
114+
case HttpSvPublicAppClient.DsoInfo(
115115
svUser,
116116
svParty,
117117
dsoParty,

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvOnboardingAddlIntegrationTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.lfdecentralizedtrust.splice.sv.util.{SvOnboardingToken, SvUtil}
1111
import com.digitalasset.canton.sequencing.GrpcSequencerConnection
1212

1313
import scala.jdk.OptionConverters.*
14-
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvAppClient.SvOnboardingStatus
14+
import org.lfdecentralizedtrust.splice.sv.admin.api.client.commands.HttpSvPublicAppClient.SvOnboardingStatus
1515
import org.lfdecentralizedtrust.splice.util.{SvTestUtil, WalletTestUtil}
1616
import com.digitalasset.canton.logging.SuppressionRule
1717
import com.digitalasset.canton.topology.transaction.ParticipantPermission

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvOnboardingIntegrationTest.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ class SvOnboardingIntegrationTest extends SvIntegrationTestBase {
5858
.singleRequest(registerGet.withHeaders(tokenHeader(invalidUserToken)))
5959
.futureValue
6060
responseForInvalidUser.status should be(StatusCodes.Forbidden)
61-
responseForInvalidUser.entity.getContentType().toString should be("application/json")
61+
responseForInvalidUser.entity.getContentType().toString should be(
62+
"application/json"
63+
)
6264
},
6365
_.warningMessage should include(
6466
"Authorization Failed"

0 commit comments

Comments
 (0)