Browse Source

server: Disable address checks (#45)

In order to keep the database in sync, the address
checks are being disabled, this is a partial solution
to let the explorer continue working until the actual
validations are added.
prometheus-integration
Alexis Hernandez 7 years ago
parent
commit
8bb3ff26e0
  1. 13
      server/app/com/xsn/explorer/models/Address.scala
  2. 11
      server/conf/evolutions/default/5.sql
  3. 20
      server/test/com/xsn/explorer/models/AddressSpec.scala
  4. 2
      server/test/controllers/AddressesControllerSpec.scala

13
server/app/com/xsn/explorer/models/Address.scala

@ -11,14 +11,21 @@ class Address private (val string: String) extends AnyVal with WrappedString
object Address {
// TODO: add support for bech32 format
private val pattern = "(^[a-zA-Z0-9]{34}$)|(^[a-zA-Z0-9]{42}$)".r.pattern
def from(string: String): Option[Address] = {
if (pattern.matcher(string).matches()) {
Some(new Address(string))
} else {
// TODO: add validations when bech32 is supported
if (string.trim.isEmpty) {
None
} else {
Some(new Address(string))
}
// if (pattern.matcher(string).matches()) {
// Some(new Address(string))
// } else {
// None
// }
}
def fromHex(hex: String): Option[Address] = {

11
server/conf/evolutions/default/5.sql

@ -0,0 +1,11 @@
-- As bech32 format is not supported, it is simpler to just disable the checks until it is supported.
# --- !Ups
ALTER DOMAIN ADDRESS_TYPE DROP CONSTRAINT address_type_check;
ALTER DOMAIN ADDRESS_TYPE ADD CONSTRAINT address_type_check CHECK (VALUE <> '');
# --- !Downs
ALTER DOMAIN ADDRESS_TYPE DROP CONSTRAINT address_type_check;
ALTER DOMAIN ADDRESS_TYPE ADD CONSTRAINT address_type_check CHECK (VALUE ~ '(^[A-Za-z0-9]{34}$)|(^[A-Za-z0-9]{42}$)');

20
server/test/com/xsn/explorer/models/AddressSpec.scala

@ -17,43 +17,63 @@ class AddressSpec extends WordSpec with MustMatchers with OptionValues {
result.value.string mustEqual input
}
"allow to create segwit address" in {
val input = "xc1qphyjl73szcnz3jfpjryljx8elwc6wpdqqccy3s8g57gw7e44hw4q2jqdds"
val result = Address.from(input)
result.value.string mustEqual input
}
"reject an empty string" in {
pending
val input = ""
val result = Address.from(input)
result mustEqual Option.empty
}
"reject whitespaces" in {
pending
val input = " Xvjue2ZLnJwTrSLUBx7DTHaSHTdpWrxtLF "
val result = Address.from(input)
result mustEqual Option.empty
}
"reject invalid characters" in {
pending
val input = "bc1qzhayf65p2j4h3pfw22aujgr5w42xfqzx.uvddt"
val result = Address.from(input)
result mustEqual Option.empty
}
"reject invalid address, 1 character missing" in {
pending
val input = "Xvjue2ZLnJwTrSLUBx7DTHaSHTdpWrxtL"
val result = Address.from(input)
result mustEqual Option.empty
}
"reject invalid address, 1 extra character" in {
pending
val input = "Xvjue2ZLnJwTrSLUBx7DTHaSHTdpWrxtLFf"
val result = Address.from(input)
result mustEqual Option.empty
}
"reject invalid address, 1 character missing on P2WPKH" in {
pending
val input = "bc1qzhayf65p2j4h3pfw22aujgr5w42xfqzx5uvdd"
val result = Address.from(input)
result mustEqual Option.empty
}
"reject invalid address, 1 extra character on P2WPKH" in {
pending
val input = "bc1qzhayf65p2j4h3pfw22aujgr5w42xfqzx5uvddt1"
val result = Address.from(input)
result mustEqual Option.empty

2
server/test/controllers/AddressesControllerSpec.scala

@ -100,6 +100,8 @@ class AddressesControllerSpec extends MyAPISpec {
}
"fail on bad address format" in {
pending
val address = "XnH3bC9NruJ4wnu4Dgi8F3wemmJtcxpKp"
val response = GET(url(address))

Loading…
Cancel
Save