public function testValidate() { // IPv4 + port $this->assertTrue(ViaPortHttp::validate('123.123.123.123:456')); // IPv6 + port $this->assertTrue(ViaPortHttp::validate('2001:0db8:85a3:0000:0000:8a2e:0370:7334:456')); $this->assertTrue(ViaPortHttp::validate('2001:db8:85a3::8a2e:370:7334:456')); // Second level domain name + port $this->assertTrue(ViaPortHttp::validate('example.com:456')); // Third level domain name + port $this->assertTrue(ViaPortHttp::validate('proxy.example.com:456')); $this->assertTrue(ViaPortHttp::validate('proxy-service.example.com:456')); // Bad TLD $this->assertFalse(ViaPortHttp::validate('example.123:456')); // IPv6, missing segment $this->assertFalse(ViaPortHttp::validate('2001:0db8:85a3:0000:0000:8a2e:0370:456')); // IPV6, bad char ('z') $this->assertFalse(ViaPortHttp::validate('2001:0db8:85a3:0000:0000:8a2e:0370:733z:456')); // Bad port number ('http') $this->assertFalse(ViaPortHttp::validate('proxy.example.com:http')); // Missing port $this->assertFalse(ViaPortHttp::validate('proxy.example.com')); // Bad leading char in hostname ('-') $this->assertFalse(ViaPortHttp::validate('-proxy.example.com:456')); // Illegal char in hostname $this->assertFalse(ViaPortHttp::validate('pr(oxy.example.com:456')); $this->assertFalse(ViaPortHttp::validate('proxy.examp:le.com:456')); }
/** * @param array $cxn * @return array * List of errors. Empty error if OK. */ public static function getValidationMessages($cxn) { $errors = array(); if (!is_array($cxn)) { $errors['appMeta'] = 'Not an array'; return $errors; } // cxnId is completely arbitrary. // Secret is base64-encoded AES-256 key (32 bytes, ~45 base64 char). foreach (array('cxnId', 'secret', 'appId') as $key) { if (empty($cxn[$key])) { $errors[$key] = 'Required field'; } } foreach (array('appUrl', 'siteUrl') as $key) { if (empty($cxn[$key])) { $errors[$key] = 'Required field'; } elseif (!filter_var($cxn[$key], FILTER_VALIDATE_URL)) { $errors[$key] = 'Malformed URL'; } } if (!isset($cxn['perm']) || !is_array($cxn['perm'])) { $errors['perm'] = 'Missing permisisons'; } // viaPort is optional. If specified, expect "ip:port" or "host:port" if (!empty($cxn['viaPort']) && !ViaPortHttp::validate($cxn['viaPort'])) { $errors['viaPort'] = 'Malformed proxy address'; } return $errors; }