Skip to content
This repository has been archived by the owner on Jul 7, 2021. It is now read-only.

Commit

Permalink
fix #362: Double escaping of query parameters (#372)
Browse files Browse the repository at this point in the history
  • Loading branch information
proshin-roman authored Feb 18, 2021
1 parent a322379 commit 823465b
Show file tree
Hide file tree
Showing 28 changed files with 175 additions and 170 deletions.
7 changes: 7 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.apache.http.NameValuePair;
import org.proshin.finapi.primitives.StringOf;
import org.proshin.finapi.primitives.pair.CommaSeparatedPair;
import org.proshin.finapi.primitives.pair.QueryParamEncodedPair;
import org.proshin.finapi.primitives.pair.PlainNameValuePair;

public final class DailyBalancesCriteria implements Iterable<NameValuePair> {

Expand All @@ -38,34 +38,34 @@ public DailyBalancesCriteria(final List<NameValuePair> pairs) {
}

public DailyBalancesCriteria withAccounts(final Iterable<Long> accounts) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("accountIds", accounts)));
this.pairs.add(new CommaSeparatedPair<>("accountIds", accounts));
return this;
}

public DailyBalancesCriteria withStartDate(final OffsetDateTime startDate) {
this.pairs.add(new QueryParamEncodedPair("startDate", new StringOf(startDate)));
this.pairs.add(new PlainNameValuePair("startDate", new StringOf(startDate)));
return this;
}

public DailyBalancesCriteria withEndDate(final OffsetDateTime endDate) {
this.pairs.add(new QueryParamEncodedPair("endDate", new StringOf(endDate)));
this.pairs.add(new PlainNameValuePair("endDate", new StringOf(endDate)));
return this;
}

public DailyBalancesCriteria withoutProjection() {
this.pairs.add(new QueryParamEncodedPair("withProjection", false));
this.pairs.add(new PlainNameValuePair("withProjection", false));
return this;
}

public DailyBalancesCriteria withPage(final int page, final int perPage) {
this.pairs.add(new QueryParamEncodedPair("page", page));
this.pairs.add(new QueryParamEncodedPair("perPage", perPage));
this.pairs.add(new PlainNameValuePair("page", page));
this.pairs.add(new PlainNameValuePair("perPage", perPage));
return this;
}

public DailyBalancesCriteria orderBy(final String... orders) {
for (final String order : orders) {
this.pairs.add(new QueryParamEncodedPair("order", order));
this.pairs.add(new PlainNameValuePair("order", order));
}
return this;
}
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/org/proshin/finapi/account/in/FpQueryCriteria.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import org.proshin.finapi.account.Type;
import org.proshin.finapi.primitives.StringOf;
import org.proshin.finapi.primitives.pair.CommaSeparatedPair;
import org.proshin.finapi.primitives.pair.QueryParamEncodedPair;
import org.proshin.finapi.primitives.pair.PlainNameValuePair;

public final class FpQueryCriteria implements Iterable<NameValuePair> {

Expand All @@ -42,18 +42,18 @@ public FpQueryCriteria(final List<NameValuePair> pairs) {
}

public FpQueryCriteria withIds(final Iterable<Long> ids) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("ids", ids)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("ids", ids)));
return this;
}

public FpQueryCriteria withSearch(final String search) {
this.pairs.add(new QueryParamEncodedPair("search", search));
this.pairs.add(new PlainNameValuePair("search", search));
return this;
}

public FpQueryCriteria withTypes(final Type... types) {
this.pairs.add(
new QueryParamEncodedPair(
new PlainNameValuePair(
new CommaSeparatedPair<>(
"accountTypes",
Arrays.stream(types)
Expand All @@ -66,13 +66,13 @@ public FpQueryCriteria withTypes(final Type... types) {
}

public FpQueryCriteria withBankConnections(final Iterable<Long> ids) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("bankConnectionIds", ids)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("bankConnectionIds", ids)));
return this;
}

public FpQueryCriteria withMinLastSuccessfulUpdate(final OffsetDateTime minLastSuccessfulUpdate) {
this.pairs.add(
new QueryParamEncodedPair(
new PlainNameValuePair(
"minLastSuccessfulUpdate",
new StringOf(minLastSuccessfulUpdate)
)
Expand All @@ -82,7 +82,7 @@ public FpQueryCriteria withMinLastSuccessfulUpdate(final OffsetDateTime minLastS

public FpQueryCriteria withMaxLastSuccessfulUpdate(final OffsetDateTime maxLastSuccessfulUpdate) {
this.pairs.add(
new QueryParamEncodedPair(
new PlainNameValuePair(
"maxLastSuccessfulUpdate",
new StringOf(maxLastSuccessfulUpdate)
)
Expand All @@ -91,12 +91,12 @@ public FpQueryCriteria withMaxLastSuccessfulUpdate(final OffsetDateTime maxLastS
}

public FpQueryCriteria withMinBalance(final BigDecimal minBalance) {
this.pairs.add(new QueryParamEncodedPair("minBalance", new StringOf(minBalance)));
this.pairs.add(new PlainNameValuePair("minBalance", new StringOf(minBalance)));
return this;
}

public FpQueryCriteria withMaxBalance(final BigDecimal maxBalance) {
this.pairs.add(new QueryParamEncodedPair("maxBalance", new StringOf(maxBalance)));
this.pairs.add(new PlainNameValuePair("maxBalance", new StringOf(maxBalance)));
return this;
}

Expand Down
20 changes: 10 additions & 10 deletions src/main/java/org/proshin/finapi/bank/in/BanksCriteria.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.proshin.finapi.primitives.BankingInterface;
import org.proshin.finapi.primitives.paging.PagingCriteria;
import org.proshin.finapi.primitives.pair.CommaSeparatedPair;
import org.proshin.finapi.primitives.pair.QueryParamEncodedPair;
import org.proshin.finapi.primitives.pair.PlainNameValuePair;

public final class BanksCriteria implements Iterable<NameValuePair> {

Expand All @@ -39,12 +39,12 @@ public BanksCriteria(final List<NameValuePair> pairs) {
}

public BanksCriteria withIds(final Iterable<Long> ids) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("ids", ids)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("ids", ids)));
return this;
}

public BanksCriteria withSearch(final String search) {
this.pairs.add(new QueryParamEncodedPair("search", search));
this.pairs.add(new PlainNameValuePair("search", search));
return this;
}

Expand All @@ -53,7 +53,7 @@ public BanksCriteria withSearch(final String search) {
*/
@Deprecated
public BanksCriteria withSupporting(final boolean supporting) {
this.pairs.add(new QueryParamEncodedPair("isSupported", supporting));
this.pairs.add(new PlainNameValuePair("isSupported", supporting));
return this;
}

Expand All @@ -62,7 +62,7 @@ public BanksCriteria withSupporting(final boolean supporting) {
*/
@Deprecated
public BanksCriteria withPinsAreVolatile(final boolean pinsAreVolatile) {
this.pairs.add(new QueryParamEncodedPair("pinsAreVolatile", pinsAreVolatile));
this.pairs.add(new PlainNameValuePair("pinsAreVolatile", pinsAreVolatile));
return this;
}

Expand All @@ -71,25 +71,25 @@ public BanksCriteria withPinsAreVolatile(final boolean pinsAreVolatile) {
*/
@Deprecated
public BanksCriteria withSupportedDataSources(final Iterable<Bank.DataSource> supportedDataSources) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("supportedDataSources",
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("supportedDataSources",
supportedDataSources
)));
return this;
}

public BanksCriteria withSupportedInterfaces(final Iterable<BankingInterface> supportedInterfaces) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("supportedInterfaces", supportedInterfaces)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("supportedInterfaces", supportedInterfaces)));
return this;
}

public BanksCriteria withLocation(final Iterable<String> location) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("location", location)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("location", location)));
return this;
}

public BanksCriteria withTppAuthenticationGroups(final Iterable<Long> tppAuthenticationGroups) {
this.pairs.add(
new QueryParamEncodedPair(
new PlainNameValuePair(
new CommaSeparatedPair<>(
"tppAuthenticationGroupIds",
tppAuthenticationGroups
Expand All @@ -98,7 +98,7 @@ public BanksCriteria withTppAuthenticationGroups(final Iterable<Long> tppAuthent
}

public BanksCriteria withTestBank(final boolean testBank) {
this.pairs.add(new QueryParamEncodedPair("isTestBank", testBank));
this.pairs.add(new PlainNameValuePair("isTestBank", testBank));
return this;
}

Expand Down
38 changes: 19 additions & 19 deletions src/main/java/org/proshin/finapi/category/in/CashFlowsCriteria.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.proshin.finapi.primitives.Direction;
import org.proshin.finapi.primitives.StringOf;
import org.proshin.finapi.primitives.pair.CommaSeparatedPair;
import org.proshin.finapi.primitives.pair.QueryParamEncodedPair;
import org.proshin.finapi.primitives.pair.PlainNameValuePair;

public final class CashFlowsCriteria implements Iterable<NameValuePair> {

Expand All @@ -40,93 +40,93 @@ public CashFlowsCriteria(final List<NameValuePair> pairs) {
}

public CashFlowsCriteria withSearch(final String search) {
this.pairs.add(new QueryParamEncodedPair("search", search));
this.pairs.add(new PlainNameValuePair("search", search));
return this;
}

public CashFlowsCriteria withCounterpart(final String counterpart) {
this.pairs.add(new QueryParamEncodedPair("counterpart", counterpart));
this.pairs.add(new PlainNameValuePair("counterpart", counterpart));
return this;
}

public CashFlowsCriteria withPurpose(final String purpose) {
this.pairs.add(new QueryParamEncodedPair("purpose", purpose));
this.pairs.add(new PlainNameValuePair("purpose", purpose));
return this;
}

public CashFlowsCriteria withAccounts(final Iterable<Long> accounts) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("accountIds", accounts)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("accountIds", accounts)));
return this;
}

public CashFlowsCriteria withMinBankBookingDate(final LocalDate minBankBookingDate) {
this.pairs.add(new QueryParamEncodedPair("minBankBookingDate", new StringOf(minBankBookingDate)));
this.pairs.add(new PlainNameValuePair("minBankBookingDate", new StringOf(minBankBookingDate)));
return this;
}

public CashFlowsCriteria withMaxBankBookingDate(final LocalDate maxBankBookingDate) {
this.pairs.add(new QueryParamEncodedPair("maxBankBookingDate", new StringOf(maxBankBookingDate)));
this.pairs.add(new PlainNameValuePair("maxBankBookingDate", new StringOf(maxBankBookingDate)));
return this;
}

public CashFlowsCriteria withMinFinapiBookingDate(final LocalDate minFinapiBookingDate) {
this.pairs.add(new QueryParamEncodedPair("minFinapiBookingDate", new StringOf(minFinapiBookingDate)));
this.pairs.add(new PlainNameValuePair("minFinapiBookingDate", new StringOf(minFinapiBookingDate)));
return this;
}

public CashFlowsCriteria withMaxFinapiBookingDate(final LocalDate maxFinapiBookingDate) {
this.pairs.add(new QueryParamEncodedPair("maxFinapiBookingDate", new StringOf(maxFinapiBookingDate)));
this.pairs.add(new PlainNameValuePair("maxFinapiBookingDate", new StringOf(maxFinapiBookingDate)));
return this;
}

public CashFlowsCriteria withMinAmount(final BigDecimal minAmount) {
this.pairs.add(new QueryParamEncodedPair("minAmount", new StringOf(minAmount)));
this.pairs.add(new PlainNameValuePair("minAmount", new StringOf(minAmount)));
return this;
}

public CashFlowsCriteria withMaxAmount(final BigDecimal maxAmount) {
this.pairs.add(new QueryParamEncodedPair("maxAmount", new StringOf(maxAmount)));
this.pairs.add(new PlainNameValuePair("maxAmount", new StringOf(maxAmount)));
return this;
}

public CashFlowsCriteria withDirection(final Direction direction) {
this.pairs.add(new QueryParamEncodedPair("direction", direction.lowerCase()));
this.pairs.add(new PlainNameValuePair("direction", direction.lowerCase()));
return this;
}

public CashFlowsCriteria withLabels(final Iterable<Long> labels) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("labelIds", labels)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("labelIds", labels)));
return this;
}

public CashFlowsCriteria withCategories(final Iterable<Long> categories) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("categoryIds", categories)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("categoryIds", categories)));
return this;
}

public CashFlowsCriteria withIsNew(final boolean isNew) {
this.pairs.add(new QueryParamEncodedPair("isNew", isNew));
this.pairs.add(new PlainNameValuePair("isNew", isNew));
return this;
}

public CashFlowsCriteria withMinImportDate(final LocalDate minImportDate) {
this.pairs.add(new QueryParamEncodedPair("minImportDate", new StringOf(minImportDate)));
this.pairs.add(new PlainNameValuePair("minImportDate", new StringOf(minImportDate)));
return this;
}

public CashFlowsCriteria withMaxImportDate(final LocalDate maxImportDate) {
this.pairs.add(new QueryParamEncodedPair("maxImportDate", new StringOf(maxImportDate)));
this.pairs.add(new PlainNameValuePair("maxImportDate", new StringOf(maxImportDate)));
return this;
}

public CashFlowsCriteria withoutSubCashFlows() {
this.pairs.add(new QueryParamEncodedPair("includeSubCashFlows", false));
this.pairs.add(new PlainNameValuePair("includeSubCashFlows", false));
return this;
}

public CashFlowsCriteria withOrdering(final String... orders) {
for (final String order : orders) {
this.pairs.add(new QueryParamEncodedPair("order", order));
this.pairs.add(new PlainNameValuePair("order", order));
}
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import javax.annotation.Nonnull;
import org.apache.http.NameValuePair;
import org.proshin.finapi.primitives.pair.CommaSeparatedPair;
import org.proshin.finapi.primitives.pair.QueryParamEncodedPair;
import org.proshin.finapi.primitives.pair.PlainNameValuePair;

public final class CategoriesCriteria implements Iterable<NameValuePair> {

Expand All @@ -36,29 +36,29 @@ public CategoriesCriteria(final List<NameValuePair> pairs) {
}

public CategoriesCriteria withIds(final Iterable<Long> ids) {
this.pairs.add(new QueryParamEncodedPair(new CommaSeparatedPair<>("ids", ids)));
this.pairs.add(new PlainNameValuePair(new CommaSeparatedPair<>("ids", ids)));
return this;
}

public CategoriesCriteria withSearch(final String search) {
this.pairs.add(new QueryParamEncodedPair("search", search));
this.pairs.add(new PlainNameValuePair("search", search));
return this;
}

public CategoriesCriteria withIsCustom(final boolean isCustom) {
this.pairs.add(new QueryParamEncodedPair("isCustom", isCustom));
this.pairs.add(new PlainNameValuePair("isCustom", isCustom));
return this;
}

public CategoriesCriteria withPage(final int page, final int perPage) {
this.pairs.add(new QueryParamEncodedPair("page", page));
this.pairs.add(new QueryParamEncodedPair("perPage", perPage));
this.pairs.add(new PlainNameValuePair("page", page));
this.pairs.add(new PlainNameValuePair("perPage", perPage));
return this;
}

public CategoriesCriteria orderBy(final String... orders) {
for (final String order : orders) {
this.pairs.add(new QueryParamEncodedPair("order", order));
this.pairs.add(new PlainNameValuePair("order", order));
}
return this;
}
Expand Down
Loading

1 comment on commit 823465b

@0pdd
Copy link
Collaborator

@0pdd 0pdd commented on 823465b Feb 18, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to GitHub. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client && pdd -v -f /tmp/20210218-26413-1w4vvt6 [1]: + set -e + set -o pipefail + cd /tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client + pdd -v -f /tmp/20210218-26413-1w4vvt6 My version is...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client && pdd -v -f /tmp/20210218-26413-1w4vvt6 [1]:
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client
+ pdd -v -f /tmp/20210218-26413-1w4vvt6

My version is 0.20.6
Ruby version is 2.6.0 at x86_64-linux
Reading /tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client
332 file(s) found, 312 excluded
/tmp/0pdd20201201-12-in0cd3/proshin-roman/finapi-java-client/codesigning.asc.enc is a binary file (9888 bytes)
Reading appveyor.yml...
Reading LICENSE...
Reading before-deploy.sh...
Reading mvnsettings.xml...
Reading .gitignore...
Reading README.md...
Reading .mvn/extensions.xml...
Reading .rultor.yml...
Reading finapi-java-client.iml...
Reading pom.xml...
Reading deploy.sh...
Reading .idea/encodings.xml...
Reading .idea/inspectionProfiles/Project_Default.xml...
Reading .idea/copyright/profiles_settings.xml...
Reading .idea/copyright/Roman_Proshin___Apache_2_0.xml...
Reading .idea/finapi-java-client.iml...
Reading .idea/misc.xml...
Reading .idea/compiler.xml...
Reading .idea/vcs.xml...
Reading .idea/codeStyles/Project.xml...
Reading .idea/codeStyles/codeStyleConfig.xml...
Reading .github/workflows/snapshot.yml...
Reading .github/workflows/run-tests.yml...
Reading .github/workflows/release.yml...
Reading .travis.yml...
Reading CHANGELOG.md...
Reading src/main/resources/swagger.json...
Reading src/main/java/org/proshin/finapi/tppcredential/FpTppCredential.java...
Reading src/main/java/org/proshin/finapi/tppcredential/TppCredentials.java...
Reading src/main/java/org/proshin/finapi/tppcredential/FpTppAuthenticationGroups.java...
Reading src/main/java/org/proshin/finapi/tppcredential/FpTppCredentials.java...
Reading src/main/java/org/proshin/finapi/tppcredential/FpTppAuthenticationGroup.java...
Reading src/main/java/org/proshin/finapi/tppcredential/TppAuthenticationGroup.java...
Reading src/main/java/org/proshin/finapi/tppcredential/TppCredential.java...
Reading src/main/java/org/proshin/finapi/tppcredential/in/EditTppCredentialParameters.java...
Reading src/main/java/org/proshin/finapi/tppcredential/in/QueryTppAuthenticationGroupsCriteria.java...
Reading src/main/java/org/proshin/finapi/tppcredential/in/QueryTppCredentialsCriteria.java...
Reading src/main/java/org/proshin/finapi/tppcredential/in/CreateTppCredentialParameters.java...
Reading src/main/java/org/proshin/finapi/tppcredential/TppAuthenticationGroups.java...
Reading src/main/java/org/proshin/finapi/primitives/BigDecimalOf.java...
Reading src/main/java/org/proshin/finapi/primitives/QueryString.java...
Reading src/main/java/org/proshin/finapi/primitives/LocalDateOf.java...
Reading src/main/java/org/proshin/finapi/primitives/IterableJsonArray.java...
Reading src/main/java/org/proshin/finapi/primitives/OffsetDateTimeOf.java...
Reading src/main/java/org/proshin/finapi/primitives/pair/PlainNameValuePair.java...
Reading src/main/java/org/proshin/finapi/primitives/pair/UrlEncodedPair.java...
Reading src/main/java/org/proshin/finapi/primitives/pair/CommaSeparatedPair.java...
Reading src/main/java/org/proshin/finapi/primitives/BankingInterface.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalOffsetDateTimeOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalObjectOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalLocalDateOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalBigDecimalOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalLongOf.java...
Reading src/main/java/org/proshin/finapi/primitives/optional/OptionalStringOf.java...
Reading src/main/java/org/proshin/finapi/primitives/paging/FpPaging.java...
Reading src/main/java/org/proshin/finapi/primitives/paging/Paging.java...
Reading src/main/java/org/proshin/finapi/primitives/paging/FpPage.java...
Reading src/main/java/org/proshin/finapi/primitives/paging/Page.java...
Reading src/main/java/org/proshin/finapi/primitives/paging/PagingCriteria.java...
Reading src/main/java/org/proshin/finapi/primitives/MultiStepAuthentication.java...
Reading src/main/java/org/proshin/finapi/primitives/Direction.java...
Reading src/main/java/org/proshin/finapi/primitives/StringOf.java...
Reading src/main/java/org/proshin/finapi/payment/out/Type.java...
Reading src/main/java/org/proshin/finapi/payment/out/Status.java...
Reading src/main/java/org/proshin/finapi/payment/Payment.java...
Reading src/main/java/org/proshin/finapi/payment/FpPayments.java...
Reading src/main/java/org/proshin/finapi/payment/Payments.java...
Reading src/main/java/org/proshin/finapi/payment/FpPayment.java...
Reading src/main/java/org/proshin/finapi/payment/in/FpQueryCriteria.java...
Reading src/main/java/org/proshin/finapi/account/out/FpHolder.java...
Reading src/main/java/org/proshin/finapi/account/out/Order.java...
Reading src/main/java/org/proshin/finapi/account/out/Status.java...
Reading src/main/java/org/proshin/finapi/account/out/FpDailyBalances.java...
Reading src/main/java/org/proshin/finapi/account/out/Capability.java...
Reading src/main/java/org/proshin/finapi/account/out/SepaRequestingResponse.java...
Reading src/main/java/org/proshin/finapi/account/out/SepaExecutingResponse.java...
Reading src/main/java/org/proshin/finapi/account/out/DailyBalance.java...
Reading src/main/java/org/proshin/finapi/account/out/FpSepaRequestingResponse.java...
Reading src/main/java/org/proshin/finapi/account/out/FpDailyBalance.java...
Reading src/main/java/org/proshin/finapi/account/out/DailyBalances.java...
Reading src/main/java/org/proshin/finapi/account/out/Holder.java...
Reading src/main/java/org/proshin/finapi/account/out/FpSepaExecutingResponse.java...
Reading src/main/java/org/proshin/finapi/account/out/FpClearingAccount.java...
Reading src/main/java/org/proshin/finapi/account/out/ClearingAccount.java...
Reading src/main/java/org/proshin/finapi/account/Type.java...
Puzzle 21-51ebd5b2 0/DEV at src/main/java/org/proshin/finapi/account/Type.java
Reading src/main/java/org/proshin/finapi/account/Account.java...
Reading src/main/java/org/proshin/finapi/account/TypeOf.java...
Reading src/main/java/org/proshin/finapi/account/FpMoneyTransfer.java...
Reading src/main/java/org/proshin/finapi/account/FpAccountInterface.java...
Reading src/main/java/org/proshin/finapi/account/FpAccounts.java...
Reading src/main/java/org/proshin/finapi/account/AccountInterface.java...
Reading src/main/java/org/proshin/finapi/account/DirectDebit.java...
Reading src/main/java/org/proshin/finapi/account/MoneyTransfer.java...
Reading src/main/java/org/proshin/finapi/account/FpAccount.java...
Puzzle 69-65086ef3 0/DEV at src/main/java/org/proshin/finapi/account/FpAccount.java
Reading src/main/java/org/proshin/finapi/account/in/DirectDebitParameters.java...
Reading src/main/java/org/proshin/finapi/account/in/MoneyTransferParameters.java...
Reading src/main/java/org/proshin/finapi/account/in/Debtor.java...
Reading src/main/java/org/proshin/finapi/account/in/FpEditParameters.java...
Reading src/main/java/org/proshin/finapi/account/in/Recipient.java...
Reading src/main/java/org/proshin/finapi/account/in/FpQueryCriteria.java...
Reading src/main/java/org/proshin/finapi/account/in/DailyBalancesCriteria.java...
Reading src/main/java/org/proshin/finapi/account/Accounts.java...
Reading src/main/java/org/proshin/finapi/account/FpDirectDebit.java...
Reading src/main/java/org/proshin/finapi/mandator/out/FpMonthlyUserStats.java...
Reading src/main/java/org/proshin/finapi/mandator/out/FpUser.java...
Reading src/main/java/org/proshin/finapi/mandator/out/MonthlyUserStats.java...
Reading src/main/java/org/proshin/finapi/mandator/out/FpDeletionResult.java...
Reading src/main/java/org/proshin/finapi/mandator/out/DeletionResult.java...
Reading src/main/java/org/proshin/finapi/mandator/out/User.java...
Reading src/main/java/org/proshin/finapi/mandator/Mandator.java...
Reading src/main/java/org/proshin/finapi/mandator/IbanRules.java...
Puzzle 353-95e46447 0/DEV at src/main/java/org/proshin/finapi/mandator/IbanRules.java
Reading src/main/java/org/proshin/finapi/mandator/FpIbanRule.java...
Reading src/main/java/org/proshin/finapi/mandator/KeywordRules.java...
Reading src/main/java/org/proshin/finapi/mandator/KeywordRule.java...
Puzzle 353-95e46447 0/DEV at src/main/java/org/proshin/finapi/mandator/KeywordRule.java
Reading src/main/java/org/proshin/finapi/mandator/IbanRule.java...
Reading src/main/java/org/proshin/finapi/mandator/FpIbanRules.java...
Reading src/main/java/org/proshin/finapi/mandator/FpMandator.java...
Reading src/main/java/org/proshin/finapi/mandator/FpKeywordRules.java...
Reading src/main/java/org/proshin/finapi/mandator/in/UsersCriteria.java...
Reading src/main/java/org/proshin/finapi/mandator/in/NewIbanRule.java...
Reading src/main/java/org/proshin/finapi/mandator/in/NewKeywordRule.java...
Reading src/main/java/org/proshin/finapi/mandator/FpKeywordRule.java...
Reading src/main/java/org/proshin/finapi/client/out/FpConfiguration.java...
Reading src/main/java/org/proshin/finapi/client/out/Configuration.java...
Reading src/main/java/org/proshin/finapi/client/FpClient.java...
Reading src/main/java/org/proshin/finapi/client/in/EditClientParameters.java...
Reading src/main/java/org/proshin/finapi/client/Client.java...
Reading src/main/java/org/proshin/finapi/endpoint/Endpoint.java...
Reading src/main/java/org/proshin/finapi/endpoint/FpEndpoint.java...
Puzzle 16-d1c62362 0/DEV at src/main/java/org/proshin/finapi/endpoint/FpEndpoint.java
Reading src/main/java/org/proshin/finapi/user/Users.java...
Puzzle 164-4f8bbc5d 0/DEV at src/main/java/org/proshin/finapi/user/Users.java
Reading src/main/java/org/proshin/finapi/user/FpAuthorizedUser.java...
Reading src/main/java/org/proshin/finapi/user/FpUsers.java...
Reading src/main/java/org/proshin/finapi/user/FpUser.java...
Reading src/main/java/org/proshin/finapi/user/AuthorizedUser.java...
Reading src/main/java/org/proshin/finapi/user/in/FpCreateParameters.java...
Reading src/main/java/org/proshin/finapi/user/User.java...
Reading src/main/java/org/proshin/finapi/mock/out/CategorizationResults.java...
Reading src/main/java/org/proshin/finapi/mock/out/FpCategorizationResult.java...
Reading src/main/java/org/proshin/finapi/mock/out/CategorizationResult.java...
Reading src/main/java/org/proshin/finapi/mock/out/FpCategorizationResults.java...
Reading src/main/java/org/proshin/finapi/mock/FpMocksAndTests.java...
Reading src/main/java/org/proshin/finapi/mock/in/BatchUpdateParameters.java...
Reading src/main/java/org/proshin/finapi/mock/in/Transaction.java...
Reading src/main/java/org/proshin/finapi/mock/in/Connection.java...
Reading src/main/java/org/proshin/finapi/mock/in/Account.java...
Reading src/main/java/org/proshin/finapi/mock/in/CategorizationParameter.java...
Reading src/main/java/org/proshin/finapi/mock/MocksAndTests.java...
Puzzle 77-c5cfef39 0/DEV at src/main/java/org/proshin/finapi/mock/MocksAndTests.java
Reading src/main/java/org/proshin/finapi/Jsonable.java...
Reading src/main/java/org/proshin/finapi/category/out/CashFlows.java...
Reading src/main/java/org/proshin/finapi/category/out/CashFlow.java...
Reading src/main/java/org/proshin/finapi/category/out/FpCashFlows.java...
Reading src/main/java/org/proshin/finapi/category/out/FpCashFlow.java...
Reading src/main/java/org/proshin/finapi/category/FpCategories.java...
Reading src/main/java/org/proshin/finapi/category/Categories.java...
Reading src/main/java/org/proshin/finapi/category/Category.java...
Reading src/main/java/org/proshin/finapi/category/FpCategory.java...
Reading src/main/java/org/proshin/finapi/category/in/CreateCategoryParameters.java...
Reading src/main/java/org/proshin/finapi/category/in/CategoriesCriteria.java...
Reading src/main/java/org/proshin/finapi/category/in/TrainCategorizationTransaction.java...
Reading src/main/java/org/proshin/finapi/category/in/TrainCategorizationParameters.java...
Reading src/main/java/org/proshin/finapi/category/in/FpEditParameters.java...
Reading src/main/java/org/proshin/finapi/category/in/CashFlowsCriteria.java...
Reading src/main/java/org/proshin/finapi/accesstoken/UserAccessToken.java...
Reading src/main/java/org/proshin/finapi/accesstoken/AccessToken.java...
Puzzle 14-fde3094d 0/DEV at src/main/java/org/proshin/finapi/accesstoken/AccessToken.java
Reading src/main/java/org/proshin/finapi/accesstoken/AccessTokens.java...
Reading src/main/java/org/proshin/finapi/accesstoken/FpAccessTokens.java...
Reading src/main/java/org/proshin/finapi/accesstoken/ClientAccessToken.java...
Reading src/main/java/org/proshin/finapi/webform/FpWebForm.java...
Reading src/main/java/org/proshin/finapi/webform/FpWebForms.java...
Reading src/main/java/org/proshin/finapi/webform/WebForm.java...
Reading src/main/java/org/proshin/finapi/webform/WebForms.java...
Reading src/main/java/org/proshin/finapi/security/out/QuoteType.java...
Reading src/main/java/org/proshin/finapi/security/out/QuantityNominalType.java...
Reading src/main/java/org/proshin/finapi/security/FpSecurities.java...
Reading src/main/java/org/proshin/finapi/security/FpSecurity.java...
Reading src/main/java/org/proshin/finapi/security/Security.java...
Reading src/main/java/org/proshin/finapi/security/Securities.java...
Reading src/main/java/org/proshin/finapi/security/in/SecuritiesCriteria.java...
Reading src/main/java/org/proshin/finapi/label/FpLabels.java...
Reading src/main/java/org/proshin/finapi/label/FpLabel.java...
Reading src/main/java/org/proshin/finapi/label/Labels.java...
Reading src/main/java/org/proshin/finapi/label/in/LabelsCriteria.java...
Reading src/main/java/org/proshin/finapi/label/Label.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/CertificateType.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/TppCertificates.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/FpTppCertificate.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/TppCertificate.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/FpTppCertificates.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/in/QueryTppCertificatesCriteria.java...
Reading src/main/java/org/proshin/finapi/tppcertificate/in/CreateTppCertificateParameters.java...
Reading src/main/java/org/proshin/finapi/bank/out/BankGroup.java...
Reading src/main/java/org/proshin/finapi/bank/out/LoginCredential.java...
Reading src/main/java/org/proshin/finapi/bank/out/FpLoginCredential.java...
Reading src/main/java/org/proshin/finapi/bank/out/BankInterface.java...
Reading src/main/java/org/proshin/finapi/bank/out/FpBankGroup.java...
Reading src/main/java/org/proshin/finapi/bank/out/FpLoginFields.java...
Reading src/main/java/org/proshin/finapi/bank/out/LoginFields.java...
Reading src/main/java/org/proshin/finapi/bank/out/FpBankInterface.java...
Reading src/main/java/org/proshin/finapi/bank/FpBank.java...
Reading src/main/java/org/proshin/finapi/bank/FpBanks.java...
Reading src/main/java/org/proshin/finapi/bank/Bank.java...
Reading src/main/java/org/proshin/finapi/bank/in/BanksCriteria.java...
Reading src/main/java/org/proshin/finapi/bank/Banks.java...
Reading src/main/java/org/proshin/finapi/notificationrule/TriggerEvent.java...
Reading src/main/java/org/proshin/finapi/notificationrule/NotificationRules.java...
Reading src/main/java/org/proshin/finapi/notificationrule/FpNotificationRules.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/NotificationRulesCriteria.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/NewTransactionsParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/ForeignMoneyTransferParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/NotificationRuleParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/HighTransactionAmountParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/LowAccountBalanceParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/CategoryCashFlowParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/NewAccountBalanceParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/params/BankLoginErrorParams.java...
Reading src/main/java/org/proshin/finapi/notificationrule/in/CreatingParameters.java...
Reading src/main/java/org/proshin/finapi/notificationrule/FpNotificationRule.java...
Reading src/main/java/org/proshin/finapi/notificationrule/NotificationRule.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/Type.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/Status.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpTwoStepProcedures.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/LoginCredential.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpCredentials.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/TwoStepProcedure.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpBankConnectionInterface.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpLoginCredential.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/UpdateResult.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/Owner.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpStatus.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpUpdateResult.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/BankConnectionInterface.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/Credentials.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/BankConsent.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpBankConsent.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpOwner.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/FpTwoStepProcedure.java...
Reading src/main/java/org/proshin/finapi/bankconnection/out/TwoStepProcedures.java...
Reading src/main/java/org/proshin/finapi/bankconnection/BankConnection.java...
Reading src/main/java/org/proshin/finapi/bankconnection/BankConnections.java...
Reading src/main/java/org/proshin/finapi/bankconnection/in/ConnectInterfaceParameters.java...
Reading src/main/java/org/proshin/finapi/bankconnection/in/ImportBankConnectionParameters.java...
Reading src/main/java/org/proshin/finapi/bankconnection/in/EditBankConnectionParameters.java...
Reading src/main/java/org/proshin/finapi/bankconnection/in/UpdateBankConnectionParameters.java...
Reading src/main/java/org/proshin/finapi/bankconnection/FpBankConnection.java...
Reading src/main/java/org/proshin/finapi/bankconnection/FpBankConnections.java...
Reading src/main/java/org/proshin/finapi/exception/ErrorType.java...
Reading src/main/java/org/proshin/finapi/exception/ErrorCode.java...
Reading src/main/java/org/proshin/finapi/exception/MultiStepAuthenticationChallenge.java...
Reading src/main/java/org/proshin/finapi/exception/NoFieldException.java...
Reading src/main/java/org/proshin/finapi/exception/FinapiError.java...
Reading src/main/java/org/proshin/finapi/exception/FinapiException.java...
Reading src/main/java/org/proshin/finapi/transaction/out/Counterpart.java...
Reading src/main/java/org/proshin/finapi/transaction/out/FpPayPalData.java...
Reading src/main/java/org/proshin/finapi/transaction/out/Type.java...
Reading src/main/java/org/proshin/finapi/transaction/out/FpType.java...
Reading src/main/java/org/proshin/finapi/transaction/out/TransactionsPage.java...
Reading src/main/java/org/proshin/finapi/transaction/out/FpTransactionsPage.java...
Reading src/main/java/org/proshin/finapi/transaction/out/PayPalData.java...
Reading src/main/java/org/proshin/finapi/transaction/out/FpCounterpart.java...
Reading src/main/java/org/proshin/finapi/transaction/FpTransactions.java...
Reading src/main/java/org/proshin/finapi/transaction/FpTransaction.java...
Reading src/main/java/org/proshin/finapi/transaction/Transactions.java...
Reading src/main/java/org/proshin/finapi/transaction/Transaction.java...
Reading src/main/java/org/proshin/finapi/transaction/in/DeleteTransactionsCriteria.java...
Reading src/main/java/org/proshin/finapi/transaction/in/TransactionsCriteria.java...
Reading src/main/java/org/proshin/finapi/transaction/in/SplitTransactionParameters.java...
Reading src/main/java/org/proshin/finapi/transaction/in/EditTransactionParameters.java...
Reading src/main/java/org/proshin/finapi/transaction/in/EditTransactionsParameters.java...
Reading src/main/java/org/proshin/finapi/transaction/in/Subtransaction.java...
Reading src/test/java/org/proshin/finapi/tppcredential/FpTppCredentialsTest.java...
Reading src/test/java/org/proshin/finapi/tppcredential/FpTppCredentialTest.java...
Reading src/test/java/org/proshin/finapi/tppcredential/in/CreateTppCredentialParametersTest.java...
Reading src/test/java/org/proshin/finapi/tppcredential/FpTppAuthenticationGroupTest.java...
Reading src/test/java/org/proshin/finapi/primitives/IterableJsonArrayTest.java...
Reading src/test/java/org/proshin/finapi/primitives/StringOfTest.java...
Reading src/test/java/org/proshin/finapi/primitives/paging/FpPageTest.java...
Reading src/test/java/org/proshin/finapi/primitives/paging/FpPagingTest.java...
Reading src/test/java/org/proshin/finapi/primitives/BigDecimalOfTest.java...
Reading src/test/java/org/proshin/finapi/payment/FpPaymentsTest.java...
Reading src/test/java/org/proshin/finapi/account/out/FpSepaExecutingResponseTest.java...
Reading src/test/java/org/proshin/finapi/account/out/FpSepaRequestingResponseTest.java...
Reading src/test/java/org/proshin/finapi/account/FpAccountTest.java...
Reading src/test/java/org/proshin/finapi/account/FpDirectDebitTest.java...
Reading src/test/java/org/proshin/finapi/account/TypeTest.java...
Reading src/test/java/org/proshin/finapi/account/FpAccountsTest.java...
Reading src/test/java/org/proshin/finapi/account/FpMoneyTransferTest.java...
Reading src/test/java/org/proshin/finapi/mandator/out/FpDeletionResultTest.java...
Reading src/test/java/org/proshin/finapi/mandator/out/FpUserTest.java...
Reading src/test/java/org/proshin/finapi/mandator/FpMandatorTest.java...
Reading src/test/java/org/proshin/finapi/client/FpClientTest.java...
Puzzle 164-3cefcf91 0/DEV at src/test/java/org/proshin/finapi/client/FpClientTest.java
Reading src/test/java/org/proshin/finapi/user/UsersTest.java...
Reading src/test/java/org/proshin/finapi/mock/out/FpCategorizationResultTest.java...
Reading src/test/java/org/proshin/finapi/mock/FpMocksAndTestsTest.java...
Reading src/test/java/org/proshin/finapi/category/out/FpCashFlowTest.java...
Reading src/test/java/org/proshin/finapi/category/FpCategoriesTest.java...
Reading src/test/java/org/proshin/finapi/category/FpCategoryTest.java...
Reading src/test/java/org/proshin/finapi/accesstoken/UserAccessTokenTest.java...
Reading src/test/java/org/proshin/finapi/accesstoken/FpAccessTokensTest.java...
Reading src/test/java/org/proshin/finapi/webform/FpWebFormTest.java...
Reading src/test/java/org/proshin/finapi/webform/WebFormsTest.java...
Reading src/test/java/org/proshin/finapi/TestWithMockedEndpoint.java...
Reading src/test/java/org/proshin/finapi/security/FpSecuritiesTest.java...
Reading src/test/java/org/proshin/finapi/security/FpSecurityTest.java...
Reading src/test/java/org/proshin/finapi/label/FpLabelTest.java...
Reading src/test/java/org/proshin/finapi/label/LabelsTest.java...
Reading src/test/java/org/proshin/finapi/tppcertificate/FpTppCertificatesTest.java...
Reading src/test/java/org/proshin/finapi/tppcertificate/FpTppCertificateTest.java...
Reading src/test/java/org/proshin/finapi/tppcertificate/in/CreateTppCertificateParametersTest.java...
Reading src/test/java/org/proshin/finapi/bank/FpBankTest.java...
Reading src/test/java/org/proshin/finapi/bank/BanksTest.java...
Reading src/test/java/org/proshin/finapi/fake/matcher/path/AnyPathMatcher.java...
Reading src/test/java/org/proshin/finapi/fake/matcher/path/ExactPathMatcher.java...
Reading src/test/java/org/proshin/finapi/fake/matcher/path/PathMatcher.java...
Reading src/test/java/org/proshin/finapi/fake/matcher/token/TokenMatcher.java...
Reading src/test/java/org/proshin/finapi/fake/matcher/token/AnyTokenMatcher.java...
Reading src/test/java/org/proshin/finapi/fake/FakeAccessToken.java...
Reading src/test/java/org/proshin/finapi/fake/FakeRoute.java...
Reading src/test/java/org/proshin/finapi/notificationrule/FpNotificationRulesTest.java...
Reading src/test/java/org/proshin/finapi/notificationrule/FpNotificationRuleTest.java...
Reading src/test/java/org/proshin/finapi/notificationrule/in/CreatingParametersTest.java...
Reading src/test/java/org/proshin/finapi/bankconnection/out/FpTwoStepProceduresTest.java...
Reading src/test/java/org/proshin/finapi/bankconnection/out/FpOwnerTest.java...
Reading src/test/java/org/proshin/finapi/bankconnection/out/FpBankConsentTest.java...
Reading src/test/java/org/proshin/finapi/bankconnection/FpBankConnectionsTest.java...
Reading src/test/java/org/proshin/finapi/bankconnection/FpBankConnectionTest.java...
Reading src/test/java/org/proshin/finapi/exception/FinapiExceptionTest.java...
Reading src/test/java/org/proshin/finapi/transaction/FpTransactionsTest.java...
Reading src/test/java/org/proshin/finapi/transaction/FpTransactionTest.java...
Reading .editorconfig...
Reading .0pdd.yml...
ERROR: there are 2 duplicate(s) of the same puzzle: src/main/java/org/proshin/finapi/mandator/IbanRules.java:22-22, src/main/java/org/proshin/finapi/mandator/KeywordRule.java:23-23, while maximum 1 duplicate is allowed
ERROR: 1 errors, see log above
If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/yegor256/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/yegor256/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:66:in `rescue in block in xml'
/app/objects/git_repo.rb:63:in `block in xml'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/tempfile.rb:295:in `open'
/app/objects/git_repo.rb:62:in `xml'
/app/objects/puzzles.rb:36:in `deploy'
/app/objects/job.rb:38:in `proceed'
/app/objects/job_starred.rb:33:in `proceed'
/app/objects/job_recorded.rb:32:in `proceed'
/app/objects/job_emailed.rb:35:in `proceed'
/app/objects/job_commiterrors.rb:36:in `proceed'
/app/objects/job_detached.rb:48:in `exclusive'
/app/objects/job_detached.rb:36:in `block in proceed'
/app/objects/job_detached.rb:36:in `fork'
/app/objects/job_detached.rb:36:in `proceed'
/app/0pdd.rb:357:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `block in compile!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1032:in `route_eval'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1061:in `block in process_route'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `process_route'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1011:in `block in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `each'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1129:in `block in dispatch!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1124:in `dispatch!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `block in call!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `call!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:929:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/xss_header.rb:18:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/path_traversal.rb:16:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/json_csrf.rb:26:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/frame_options.rb:31:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/logger.rb:17:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/common_logger.rb:38:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:253:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:246:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/method_override.rb:24:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:216:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1991:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `block in call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1769:in `synchronize'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/handler/webrick.rb:95:in `service'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/httpserver.rb:140:in `service'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/httpserver.rb:96:in `run'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/server.rb:307:in `block in start_thread'

Please sign in to comment.