Universal Acceptance Update (3/3)

This commit is contained in:
Pinga 2024-11-01 13:58:24 +02:00
parent f60b59b00b
commit be965db4cc
5 changed files with 78 additions and 38 deletions

View file

@ -67,9 +67,9 @@ class RegistrarsController extends Controller
'owner' => v::optional(v::keySet(...$contactValidator)), 'owner' => v::optional(v::keySet(...$contactValidator)),
'billing' => v::optional(v::keySet(...$contactValidator)), 'billing' => v::optional(v::keySet(...$contactValidator)),
'abuse' => v::optional(v::keySet(...$contactValidator)), 'abuse' => v::optional(v::keySet(...$contactValidator)),
'whoisServer' => v::domain(), 'whoisServer' => v::domain(false),
'rdapServer' => v::domain(), 'rdapServer' => v::domain(false),
'url' => v::url(), 'url' => v::domain(false),
'abuseEmail' => v::email(), 'abuseEmail' => v::email(),
'abusePhone' => v::optional($phoneValidator), 'abusePhone' => v::optional($phoneValidator),
'accountBalance' => v::numericVal(), 'accountBalance' => v::numericVal(),
@ -85,6 +85,11 @@ class RegistrarsController extends Controller
'panelPassword' => v::stringType()->notEmpty(), 'panelPassword' => v::stringType()->notEmpty(),
]; ];
// Convert specified fields to Punycode if necessary
$data['whoisServer'] = isset($data['whoisServer']) ? toPunycode($data['whoisServer']) : null;
$data['rdapServer'] = isset($data['rdapServer']) ? toPunycode($data['rdapServer']) : null;
$data['url'] = isset($data['url']) ? toPunycode($data['url']) : null;
$errors = []; $errors = [];
foreach ($validators as $field => $validator) { foreach ($validators as $field => $validator) {
try { try {
@ -138,9 +143,9 @@ class RegistrarsController extends Controller
'pw' => $eppPassword, 'pw' => $eppPassword,
'prefix' => $randomPrefix, 'prefix' => $randomPrefix,
'email' => $data['email'], 'email' => $data['email'],
'url' => $data['url'], 'url' => isset($data['url']) ? toUnicode($data['url']) : null,
'whois_server' => $data['whoisServer'], 'whois_server' => isset($data['whoisServer']) ? toUnicode($data['whoisServer']) : null,
'rdap_server' => $data['rdapServer'], 'rdap_server' => isset($data['rdapServer']) ? toUnicode($data['rdapServer']) : null,
'abuse_email' => $data['abuseEmail'], 'abuse_email' => $data['abuseEmail'],
'abuse_phone' => $data['abusePhone'], 'abuse_phone' => $data['abusePhone'],
'accountBalance' => $data['accountBalance'], 'accountBalance' => $data['accountBalance'],
@ -565,9 +570,9 @@ class RegistrarsController extends Controller
'owner' => v::optional(v::keySet(...$contactValidator)), 'owner' => v::optional(v::keySet(...$contactValidator)),
'billing' => v::optional(v::keySet(...$contactValidator)), 'billing' => v::optional(v::keySet(...$contactValidator)),
'abuse' => v::optional(v::keySet(...$contactValidator)), 'abuse' => v::optional(v::keySet(...$contactValidator)),
'whoisServer' => v::domain(), 'whoisServer' => v::domain(false),
'rdapServer' => v::domain(), 'rdapServer' => v::domain(false),
'url' => v::url(), 'url' => v::domain(false),
'abuseEmail' => v::email(), 'abuseEmail' => v::email(),
'abusePhone' => v::optional($phoneValidator), 'abusePhone' => v::optional($phoneValidator),
'creditLimit' => v::numericVal(), 'creditLimit' => v::numericVal(),
@ -575,6 +580,11 @@ class RegistrarsController extends Controller
'ipAddress' => v::optional($ipAddressValidator) 'ipAddress' => v::optional($ipAddressValidator)
]; ];
// Convert specified fields to Punycode if necessary
$data['whoisServer'] = isset($data['whoisServer']) ? toPunycode($data['whoisServer']) : null;
$data['rdapServer'] = isset($data['rdapServer']) ? toPunycode($data['rdapServer']) : null;
$data['url'] = isset($data['url']) ? toPunycode($data['url']) : null;
$errors = []; $errors = [];
foreach ($validators as $field => $validator) { foreach ($validators as $field => $validator) {
try { try {
@ -596,14 +606,14 @@ class RegistrarsController extends Controller
$errorText = rtrim($errorText, '; '); $errorText = rtrim($errorText, '; ');
$this->container->get('flash')->addMessage('error', $errorText); $this->container->get('flash')->addMessage('error', $errorText);
return $response->withHeader('Location', '/registrars')->withStatus(302); return $response->withHeader('Location', '/registrar/update/'.$registrar)->withStatus(302);
} }
if (!empty($_SESSION['registrars_user_email'])) { if (!empty($_SESSION['registrars_user_email'])) {
$regEmail = $_SESSION['registrars_user_email'][0]; $regEmail = $_SESSION['registrars_user_email'][0];
} else { } else {
$this->container->get('flash')->addMessage('error', 'No email specified for update'); $this->container->get('flash')->addMessage('error', 'No email specified for update');
return $response->withHeader('Location', '/registrars')->withStatus(302); return $response->withHeader('Location', '/registrar/update/'.$registrar)->withStatus(302);
} }
$db->beginTransaction(); $db->beginTransaction();
@ -621,9 +631,9 @@ class RegistrarsController extends Controller
'name' => $data['name'], 'name' => $data['name'],
'iana_id' => $data['ianaId'], 'iana_id' => $data['ianaId'],
'email' => $data['email'], 'email' => $data['email'],
'url' => $data['url'], 'url' => isset($data['url']) ? toUnicode($data['url']) : null,
'whois_server' => $data['whoisServer'], 'whois_server' => isset($data['whoisServer']) ? toUnicode($data['whoisServer']) : null,
'rdap_server' => $data['rdapServer'], 'rdap_server' => isset($data['rdapServer']) ? toUnicode($data['rdapServer']) : null,
'abuse_email' => $data['abuseEmail'], 'abuse_email' => $data['abuseEmail'],
'abuse_phone' => $data['abusePhone'], 'abuse_phone' => $data['abusePhone'],
'creditLimit' => $data['creditLimit'], 'creditLimit' => $data['creditLimit'],
@ -807,14 +817,19 @@ class RegistrarsController extends Controller
'owner' => v::optional(v::keySet(...$contactValidator)), 'owner' => v::optional(v::keySet(...$contactValidator)),
'billing' => v::optional(v::keySet(...$contactValidator)), 'billing' => v::optional(v::keySet(...$contactValidator)),
'abuse' => v::optional(v::keySet(...$contactValidator)), 'abuse' => v::optional(v::keySet(...$contactValidator)),
'whoisServer' => v::domain(), 'whoisServer' => v::domain(false),
'rdapServer' => v::domain(), 'rdapServer' => v::domain(false),
'url' => v::url(), 'url' => v::domain(false),
'abuseEmail' => v::email(), 'abuseEmail' => v::email(),
'abusePhone' => v::optional($phoneValidator), 'abusePhone' => v::optional($phoneValidator),
'ipAddress' => v::optional($ipAddressValidator) 'ipAddress' => v::optional($ipAddressValidator)
]; ];
// Convert specified fields to Punycode if necessary
$data['whoisServer'] = isset($data['whoisServer']) ? toPunycode($data['whoisServer']) : null;
$data['rdapServer'] = isset($data['rdapServer']) ? toPunycode($data['rdapServer']) : null;
$data['url'] = isset($data['url']) ? toPunycode($data['url']) : null;
$errors = []; $errors = [];
foreach ($validators as $field => $validator) { foreach ($validators as $field => $validator) {
try { try {
@ -861,9 +876,9 @@ class RegistrarsController extends Controller
'name' => $data['name'], 'name' => $data['name'],
'iana_id' => $data['ianaId'], 'iana_id' => $data['ianaId'],
'email' => $data['email'], 'email' => $data['email'],
'url' => $data['url'], 'url' => isset($data['url']) ? toUnicode($data['url']) : null,
'whois_server' => $data['whoisServer'], 'whois_server' => isset($data['whoisServer']) ? toUnicode($data['whoisServer']) : null,
'rdap_server' => $data['rdapServer'], 'rdap_server' => isset($data['rdapServer']) ? toUnicode($data['rdapServer']) : null,
'abuse_email' => $data['abuseEmail'], 'abuse_email' => $data['abuseEmail'],
'abuse_phone' => $data['abusePhone'], 'abuse_phone' => $data['abusePhone'],
'currency' => $currency, 'currency' => $currency,

View file

@ -577,3 +577,13 @@ function validateUniversalEmail($email) {
// Validate using regex // Validate using regex
return preg_match($emailPattern, $emailToValidate); return preg_match($emailPattern, $emailToValidate);
} }
function toPunycode($value) {
// Convert to Punycode if it contains non-ASCII characters
return preg_match('/[^\x00-\x7F]/', $value) ? idn_to_ascii($value, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46) : $value;
}
function toUnicode($value) {
// Convert from Punycode to UTF-8 if it's a valid IDN format
return (strpos($value, 'xn--') === 0) ? idn_to_utf8($value, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46) : $value;
}

View file

@ -46,12 +46,17 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="email" class="form-label required">{{ __('Email') }}</label> <label for="email" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="email" name="email" required autocapitalize="none"> <input type="text" class="form-control" id="email" name="email" required autocapitalize="none">
<small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small> <small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="url" class="form-label required">{{ __('URL') }}</label> <label for="url" class="form-label required">{{ __('URL') }}</label>
<input type="url" class="form-control" id="url" name="url" required autocapitalize="none"> <div class="input-group">
<span class="input-group-text">
https://
</span>
<input type="text" class="form-control" id="url" name="url" required autocapitalize="none">
</div>
<small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small> <small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small>
</div> </div>
</div> </div>
@ -70,7 +75,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none"> <input type="text" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none">
<small class="text-muted">{{ __('Email address for reporting abuse.') }}</small> <small class="text-muted">{{ __('Email address for reporting abuse.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
@ -212,7 +217,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="ownerEmail" class="form-label required">{{ __('Email') }}</label> <label for="ownerEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none"> <input type="text" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none">
</div> </div>
</div> </div>
</div> </div>
@ -271,7 +276,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="billingEmail" class="form-label required">{{ __('Email') }}</label> <label for="billingEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none"> <input type="text" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none">
</div> </div>
</div> </div>
</div> </div>
@ -330,7 +335,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none"> <input type="text" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none">
</div> </div>
</div> </div>
</div> </div>

View file

@ -46,12 +46,17 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="email" class="form-label required">{{ __('Email') }}</label> <label for="email" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="email" name="email" required autocapitalize="none" value="{{ registrar.email }}"> <input type="text" class="form-control" id="email" name="email" required autocapitalize="none" value="{{ registrar.email }}">
<small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small> <small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="url" class="form-label required">{{ __('URL') }}</label> <label for="url" class="form-label required">{{ __('URL') }}</label>
<input type="url" class="form-control" id="url" name="url" required autocapitalize="none" value="{{ registrar.url }}"> <div class="input-group">
<span class="input-group-text">
https://
</span>
<input type="text" class="form-control" id="url" name="url" required autocapitalize="none" value="{{ registrar.url }}">
</div>
<small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small> <small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small>
</div> </div>
</div> </div>
@ -70,7 +75,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none" value="{{ registrar.abuse_email }}"> <input type="text" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none" value="{{ registrar.abuse_email }}">
<small class="text-muted">{{ __('Email address for reporting abuse.') }}</small> <small class="text-muted">{{ __('Email address for reporting abuse.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
@ -211,7 +216,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="ownerEmail" class="form-label required">{{ __('Email') }}</label> <label for="ownerEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -274,7 +279,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="billingEmail" class="form-label required">{{ __('Email') }}</label> <label for="billingEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -337,7 +342,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}

View file

@ -46,12 +46,17 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="email" class="form-label required">{{ __('Email') }}</label> <label for="email" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="email" name="email" required autocapitalize="none" value="{{ registrar.email }}"> <input type="text" class="form-control" id="email" name="email" required autocapitalize="none" value="{{ registrar.email }}">
<small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small> <small class="text-muted">{{ __('Primary contact email of the registrar.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="url" class="form-label required">{{ __('URL') }}</label> <label for="url" class="form-label required">{{ __('URL') }}</label>
<input type="url" class="form-control" id="url" name="url" required autocapitalize="none" value="{{ registrar.url }}"> <div class="input-group">
<span class="input-group-text">
https://
</span>
<input type="text" class="form-control" id="url" name="url" required autocapitalize="none" value="{{ registrar.url }}">
</div>
<small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small> <small class="text-muted">{{ __('Registrar\'s official website URL.') }}</small>
</div> </div>
</div> </div>
@ -70,7 +75,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Abuse Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none" value="{{ registrar.abuse_email }}"> <input type="text" class="form-control" id="abuseEmail" name="abuseEmail" required autocapitalize="none" value="{{ registrar.abuse_email }}">
<small class="text-muted">{{ __('Email address for reporting abuse.') }}</small> <small class="text-muted">{{ __('Email address for reporting abuse.') }}</small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
@ -211,7 +216,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="ownerEmail" class="form-label required">{{ __('Email') }}</label> <label for="ownerEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="ownerEmail" name="owner[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -274,7 +279,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="billingEmail" class="form-label required">{{ __('Email') }}</label> <label for="billingEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="billingEmail" name="billing[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -337,7 +342,7 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="abuseEmail" class="form-label required">{{ __('Email') }}</label> <label for="abuseEmail" class="form-label required">{{ __('Email') }}</label>
<input type="email" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none" value="{{ contact.email }}"> <input type="text" class="form-control" id="abuseEmail" name="abuse[email]" required autocapitalize="none" value="{{ contact.email }}">
</div> </div>
</div> </div>
{% endif %} {% endif %}