Skip to content

Commit 1ec90c6

Browse files
authored
Merge pull request #124 from proximax-storage/issue/122-method_not_allowed
Transaction announcement does not work after security audit
2 parents 47942da + 3ce5070 commit 1ec90c6

File tree

10 files changed

+32
-26
lines changed

10 files changed

+32
-26
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# CHANGELOG
22

3+
## 0.5.1 Security audit
4+
5+
Fixing issues caused by changes introduced because of security audit
6+
* remove trailing slash from resource URLs
7+
38
## 0.5.0 MaxFee calculation and transaction builders
49

510
See [milestone](https://github.com/proximax-storage/java-xpx-chain-sdk/milestone/5?closed=1) for fixed issues

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# repository group
22
group=io.proximax
33
# current version
4-
version=0.5.0-SNAPSHOT
4+
version=0.5.1-SNAPSHOT

src/e2e/java/io/proximax/sdk/E2EBaseTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class E2EBaseTest extends BaseTest {
5656
/** logger */
5757
private static final Logger logger = LoggerFactory.getLogger(E2EBaseTest.class);
5858

59-
protected static final BigInteger DEFAULT_DEADLINE_DURATION = BigInteger.valueOf(5*60*1000l);
59+
protected static final BigInteger DEFAULT_DEADLINE_DURATION = BigInteger.valueOf(60*60*1000l);
6060

6161
protected BlockchainApi api;
6262
protected BlockchainRepository blockchainHttp;
@@ -187,7 +187,7 @@ protected void returnAllToSeed(Account from) {
187187
sendMosaic(from, seedAccount.getAddress(), mosaic);
188188
});
189189
} catch (RuntimeException e) {
190-
if (!"Not Found".equals(e.getMessage())) {
190+
if (!"404 Not Found".equals(e.getMessage())) {
191191
fail(e);
192192
}
193193
}

src/main/java/io/proximax/sdk/infrastructure/AccountHttp.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
*/
5252
public class AccountHttp extends Http implements AccountRepository {
5353

54-
private static final String ROUTE = "/account/";
54+
private static final String ROUTE = "/account";
5555
private static final String PROPERTIES_SUFFIX = "/properties";
5656

5757
private static final Type TYPE_ACCOUNT_LIST = new TypeToken<List<AccountInfoDTO>>(){}.getType();
@@ -64,7 +64,7 @@ public AccountHttp(BlockchainApi api) {
6464

6565
@Override
6666
public Observable<AccountInfo> getAccountInfo(Address address) {
67-
return this.client.get(ROUTE + address.plain()).map(Http::mapStringOrError)
67+
return this.client.get(ROUTE + SLASH + address.plain()).map(Http::mapStringOrError)
6868
.map(str -> gson.fromJson(str, AccountInfoDTO.class))
6969
.map(AccountInfo::fromDto);
7070
}
@@ -99,22 +99,22 @@ public Observable<List<AccountInfo>> getAccountsInfo(List<Address> addresses) {
9999

100100
@Override
101101
public Observable<MultisigAccountInfo> getMultisigAccountInfo(Address address) {
102-
return this.client.get(ROUTE + address.plain() + "/multisig").map(Http::mapStringOrError)
102+
return this.client.get(ROUTE + SLASH + address.plain() + "/multisig").map(Http::mapStringOrError)
103103
.map(str -> gson.fromJson(str, MultisigAccountInfoDTO.class))
104104
.map(dto -> MultisigAccountInfo.fromDto(dto, api.getNetworkType()));
105105
}
106106

107107
@Override
108108
public Observable<MultisigAccountGraphInfo> getMultisigAccountGraphInfo(Address address) {
109-
return this.client.get(ROUTE + address.plain() + "/multisig/graph")
109+
return this.client.get(ROUTE + SLASH + address.plain() + "/multisig/graph")
110110
.map(Http::mapStringOrError)
111111
.map(this::toMultisigAccountInfo)
112112
.map(dto -> MultisigAccountGraphInfo.fromDto(dto, api.getNetworkType()));
113113
}
114114

115115
@Override
116116
public Observable<AccountProperties> getAccountProperties(Address address) {
117-
return this.client.get(ROUTE + address.plain() + PROPERTIES_SUFFIX).map(Http::mapStringOrError)
117+
return this.client.get(ROUTE + SLASH + address.plain() + PROPERTIES_SUFFIX).map(Http::mapStringOrError)
118118
.map(str -> gson.fromJson(str, AccountPropertiesInfoDTO.class))
119119
.map(AccountPropertiesInfoDTO::getAccountProperties).map(AccountProperties::fromDto);
120120
}
@@ -224,8 +224,7 @@ private Observable<List<Transaction>> unconfirmedTransactions(PublicAccount publ
224224
private Observable<List<Transaction>> findTransactions(String accountKey,
225225
Optional<QueryParams> queryParams, String path) {
226226
return this.client
227-
.get(ROUTE
228-
+ accountKey + path + (queryParams.isPresent() ? queryParams.get().toUrl() : ""))
227+
.get(ROUTE + SLASH + accountKey + path + (queryParams.isPresent() ? queryParams.get().toUrl() : ""))
229228
.map(Http::mapStringOrError)
230229
.map(str -> stream(new Gson().fromJson(str, JsonArray.class)).map(s -> (JsonObject) s)
231230
.collect(Collectors.toList()))

src/main/java/io/proximax/sdk/infrastructure/BlockchainHttp.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ public class BlockchainHttp extends Http implements BlockchainRepository {
4747
private static final String BLOCK = "/block/";
4848
private static final String CHAIN_HEIGHT = "/chain/height";
4949
private static final String CHAIN_SCORE = "/chain/score";
50-
private static final String CONFIG = "/config/";
51-
private static final String UPGRADE = "/upgrade/";
50+
private static final String CONFIG = "/config";
51+
private static final String UPGRADE = "/upgrade";
5252

5353
private static final Type BLOCK_INFO_LIST_TYPE = new TypeToken<List<BlockInfoDTO>>(){}.getType();
5454

@@ -194,7 +194,7 @@ public Observable<List<BlockInfo>> getBlocksByHeightWithLimit(BigInteger height,
194194

195195
@Override
196196
public Observable<BlockchainConfig> getBlockchainConfiguration(BigInteger height) {
197-
return this.client.get(CONFIG + height.toString())
197+
return this.client.get(CONFIG + SLASH + height.toString())
198198
.map(Http::mapStringOrError)
199199
.map(str -> gson.fromJson(str, CatapultConfigDTO.class))
200200
.map(CatapultConfigDTO::getCatapultConfig)
@@ -203,7 +203,7 @@ public Observable<BlockchainConfig> getBlockchainConfiguration(BigInteger height
203203

204204
@Override
205205
public Observable<BlockchainUpgrade> getBlockchainUpgrade(BigInteger height) {
206-
return this.client.get(UPGRADE + height.toString())
206+
return this.client.get(UPGRADE + SLASH + height.toString())
207207
.map(Http::mapStringOrError)
208208
.map(str -> gson.fromJson(str, CatapultUpgradeDTO.class))
209209
.map(CatapultUpgradeDTO::getCatapultConfig)

src/main/java/io/proximax/sdk/infrastructure/ContractHttp.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
*/
2626
public class ContractHttp extends Http implements ContractRepository {
2727

28-
private static final String CONTRACT_ROUTE = "/contract/";
28+
private static final String CONTRACT_ROUTE = "/contract";
2929
private static final String CONTRACS_SUFFIX = "/contracts";
30-
private static final String ACCOUNT_ROUTE = "/account/";
30+
private static final String ACCOUNT_ROUTE = "/account";
3131
private static final String ACCOUNT_CONTRACTS_ROUTE = "/account/contracts";
3232

3333
private static final Type CONTRACT_INFO_LIST_TYPE = new TypeToken<List<ContractInfoDTO>>(){}.getType();
@@ -38,7 +38,7 @@ public ContractHttp(BlockchainApi api) {
3838

3939
@Override
4040
public Observable<Contract> getContract(Address address) {
41-
return this.client.get(CONTRACT_ROUTE + address.plain())
41+
return this.client.get(CONTRACT_ROUTE + SLASH + address.plain())
4242
.map(Http::mapStringOrError)
4343
.map(str -> gson.fromJson(str, ContractInfoDTO.class))
4444
.map(ContractInfoDTO::getContract)
@@ -64,7 +64,7 @@ public Observable<List<Contract>> getContracts(Address... addresses) {
6464

6565
@Override
6666
public Observable<Contract> getContract(PublicKey publicKey) {
67-
return this.client.get(ACCOUNT_ROUTE + publicKey.getHexString() + CONTRACS_SUFFIX)
67+
return this.client.get(ACCOUNT_ROUTE + SLASH + publicKey.getHexString() + CONTRACS_SUFFIX)
6868
.map(Http::mapStringOrError)
6969
.map(this::toContractInfoList)
7070
.flatMapIterable(item -> item)

src/main/java/io/proximax/sdk/infrastructure/Http.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
* base HTTP repository implementation, keeping track of the API, HTTP client and mapper
2929
*/
3030
public class Http {
31+
protected static final String SLASH = "/";
32+
3133
protected final BlockchainApi api;
3234
protected final HttpClient client;
3335
protected final Gson gson;
@@ -74,7 +76,7 @@ public Gson getGson() {
7476
*/
7577
static String mapStringOrError(final HttpResponse response) {
7678
if (response.getCode() < 200 || response.getCode() > 299) {
77-
throw new RuntimeException(response.getStatusMessage());
79+
throw new RuntimeException(response.getCode() + " " + response.getStatusMessage());
7880
}
7981
try {
8082
return response.getBodyString();

src/main/java/io/proximax/sdk/infrastructure/MetadataHttp.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* Metadata http repository.
4242
*/
4343
public class MetadataHttp extends Http implements MetadataRepository {
44-
private static final String URL_METADATA = "/metadata/";
44+
private static final String URL_METADATA = "/metadata";
4545
private static final String URL_ACCOUNT = "/account/";
4646
private static final String URL_MOSAIC = "/mosaic/";
4747
private static final String URL_NAMESPACE = "/namespace/";
@@ -55,7 +55,7 @@ public MetadataHttp(BlockchainApi api) {
5555
@Override
5656
public Observable<Metadata> getMetadata(String metadataId) {
5757
return this.client
58-
.get(URL_METADATA + metadataId)
58+
.get(URL_METADATA + SLASH + metadataId)
5959
.map(Http::mapStringOrError)
6060
.map(GsonUtils::mapToJsonObject)
6161
.map(MetadataMapper::mapToObject);

src/main/java/io/proximax/sdk/infrastructure/MosaicHttp.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
*/
4242
public class MosaicHttp extends Http implements MosaicRepository {
4343

44-
private static final String ROUTE = "/mosaic/";
44+
private static final String ROUTE = "/mosaic";
4545
private static final String NAMES_ROUTE = "/mosaic/names";
4646

4747
private static final Type MOSAIC_INFO_LIST_TYPE = new TypeToken<List<MosaicInfoDTO>>(){}.getType();
@@ -53,7 +53,7 @@ public MosaicHttp(BlockchainApi api) {
5353

5454
@Override
5555
public Observable<MosaicInfo> getMosaic(MosaicId mosaicId) {
56-
return this.client.get(ROUTE + mosaicId.getIdAsHex())
56+
return this.client.get(ROUTE + SLASH + mosaicId.getIdAsHex())
5757
.map(Http::mapStringOrError)
5858
.map(str -> gson.fromJson(str, MosaicInfoDTO.class))
5959
.map(dto -> MosaicInfo.fromDto(dto, api.getNetworkType()));

src/main/java/io/proximax/sdk/infrastructure/TransactionHttp.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
* @since 1.0
4747
*/
4848
public class TransactionHttp extends Http implements TransactionRepository {
49-
private static final String ROUTE = "/transaction/";
49+
private static final String ROUTE = "/transaction";
5050
private static final String KEY_MESSAGE = "message";
5151
private static final String KEY_PAYLOAD = "payload";
5252

@@ -59,7 +59,7 @@ public TransactionHttp(BlockchainApi api) {
5959
@Override
6060
public Observable<Transaction> getTransaction(String transactionHash) {
6161
return this.client
62-
.get(ROUTE + transactionHash)
62+
.get(ROUTE + SLASH + transactionHash)
6363
.map(Http::mapStringOrError)
6464
.map(GsonUtils::mapToJsonObject)
6565
.map(new TransactionMapping());
@@ -85,7 +85,7 @@ public Observable<List<Transaction>> getTransactions(List<String> transactionHas
8585
@Override
8686
public Observable<TransactionStatus> getTransactionStatus(String transactionHash) {
8787
return this.client
88-
.get(ROUTE + transactionHash + "/status")
88+
.get(ROUTE + SLASH + transactionHash + "/status")
8989
.map(Http::mapStringOrError)
9090
.map(str -> gson.fromJson(str, TransactionStatusDTO.class))
9191
.map(transactionStatusDTO -> new TransactionStatus(transactionStatusDTO.getGroup(),

0 commit comments

Comments
 (0)