mirror of
https://github.com/getnamingo/registry.git
synced 2025-05-17 01:57:00 +02:00
Security fixes in CP
This commit is contained in:
parent
ca1654a4eb
commit
25c736b68b
14 changed files with 194 additions and 91 deletions
|
@ -756,6 +756,14 @@ class ApplicationsController extends Controller
|
|||
$csrfTokenName = $this->container->get('csrf')->getTokenName();
|
||||
$csrfTokenValue = $this->container->get('csrf')->getTokenValue();
|
||||
|
||||
if (strpos($domain['name'], 'xn--') === 0) {
|
||||
$domain['punycode'] = $domain['name'];
|
||||
$domain['name'] = idn_to_utf8($domain['name'], IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
|
||||
} else {
|
||||
$domain['punycode'] = $domain['name'];
|
||||
}
|
||||
$_SESSION['applications_to_update'] = [$domain['punycode']];
|
||||
|
||||
return view($response,'admin/domains/updateApplication.twig', [
|
||||
'domain' => $domain,
|
||||
'domainStatus' => $domainStatus,
|
||||
|
@ -784,7 +792,12 @@ class ApplicationsController extends Controller
|
|||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
$domainName = $data['domainName'] ?? null;
|
||||
if (!empty($_SESSION['applications_to_update'])) {
|
||||
$domainName = $_SESSION['applications_to_update'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No application specified for update');
|
||||
return $response->withHeader('Location', '/applications')->withStatus(302);
|
||||
}
|
||||
$domain_id = $db->selectValue('SELECT id FROM application WHERE name = ?', [$domainName]);
|
||||
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
|
@ -949,6 +962,7 @@ class ApplicationsController extends Controller
|
|||
return $response->withHeader('Location', '/application/update/'.$domainName)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['applications_to_update']);
|
||||
$this->container->get('flash')->addMessage('success', 'Application ' . $domainName . ' has been updated successfully on ' . $update);
|
||||
return $response->withHeader('Location', '/application/update/'.$domainName)->withStatus(302);
|
||||
}
|
||||
|
|
|
@ -505,6 +505,8 @@ class ContactsController extends Controller
|
|||
$contactPostal = $db->select('SELECT * FROM contact_postalInfo WHERE contact_id = ?',
|
||||
[ $contact['id'] ]);
|
||||
|
||||
$_SESSION['contacts_to_update'] = [$contact['identifier']];
|
||||
|
||||
$responseData = [
|
||||
'contact' => $contact,
|
||||
'contactStatus' => $contactStatus,
|
||||
|
@ -586,6 +588,8 @@ class ContactsController extends Controller
|
|||
$contactPostal = $db->select('SELECT * FROM contact_postalInfo WHERE contact_id = ?',
|
||||
[ $contact['id'] ]);
|
||||
|
||||
$_SESSION['contacts_to_validate'] = [$contact['identifier']];
|
||||
|
||||
$responseData = [
|
||||
'contact' => $contact,
|
||||
'contactStatus' => $contactStatus,
|
||||
|
@ -676,7 +680,12 @@ class ContactsController extends Controller
|
|||
// Get the current URI
|
||||
$uri = $request->getUri()->getPath();
|
||||
|
||||
$identifier = trim($data['identifier']);
|
||||
if (!empty($_SESSION['contacts_to_validate'])) {
|
||||
$identifier = $_SESSION['contacts_to_validate'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No contact specified for validation');
|
||||
return $response->withHeader('Location', '/contacts')->withStatus(302);
|
||||
}
|
||||
|
||||
if (!preg_match('/^[a-zA-Z0-9\-]+$/', $identifier)) {
|
||||
$this->container->get('flash')->addMessage('error', 'Invalid contact ID format');
|
||||
|
@ -721,6 +730,7 @@ class ContactsController extends Controller
|
|||
return $response->withHeader('Location', '/contact/update/'.$identifier)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['contacts_to_validate']);
|
||||
$this->container->get('flash')->addMessage('success', 'Contact ' . $identifier . ' has been validated successfully on ' . $stamp);
|
||||
return $response->withHeader('Location', '/contact/update/'.$identifier)->withStatus(302);
|
||||
|
||||
|
@ -741,7 +751,12 @@ class ContactsController extends Controller
|
|||
$db = $this->container->get('db');
|
||||
$iso3166 = new ISO3166();
|
||||
$countries = $iso3166->all();
|
||||
$identifier = $data['identifier'] ?? null;
|
||||
if (!empty($_SESSION['contacts_to_update'])) {
|
||||
$identifier = $_SESSION['contacts_to_update'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No contact specified for update');
|
||||
return $response->withHeader('Location', '/contacts')->withStatus(302);
|
||||
}
|
||||
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
$clid = $db->selectValue('SELECT registrar_id FROM registrar_users WHERE user_id = ?', [$_SESSION['auth_user_id']]);
|
||||
|
@ -1078,6 +1093,7 @@ class ContactsController extends Controller
|
|||
return $response->withHeader('Location', '/contact/update/'.$identifier)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['contacts_to_update']);
|
||||
$this->container->get('flash')->addMessage('success', 'Contact ' . $identifier . ' has been updated successfully on ' . $update);
|
||||
return $response->withHeader('Location', '/contact/update/'.$identifier)->withStatus(302);
|
||||
}
|
||||
|
|
|
@ -1087,6 +1087,8 @@ class DomainsController extends Controller
|
|||
} else {
|
||||
$domain['punycode'] = $domain['name'];
|
||||
}
|
||||
$_SESSION['domains_to_update'] = [$domain['punycode']];
|
||||
|
||||
return view($response,'admin/domains/updateDomain.twig', [
|
||||
'domain' => $domain,
|
||||
'domainStatus' => $domainStatus,
|
||||
|
@ -1117,7 +1119,12 @@ class DomainsController extends Controller
|
|||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
$domainName = $data['domainName'] ?? null;
|
||||
if (!empty($_SESSION['domains_to_update'])) {
|
||||
$domainName = $_SESSION['domains_to_update'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No domain specified for update');
|
||||
return $response->withHeader('Location', '/domains')->withStatus(302);
|
||||
}
|
||||
$domain_id = $db->selectValue('SELECT id FROM domain WHERE name = ?', [$domainName]);
|
||||
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
|
@ -1599,6 +1606,7 @@ class DomainsController extends Controller
|
|||
return $response->withHeader('Location', '/domain/update/'.$domainName)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['domains_to_update']);
|
||||
$this->container->get('flash')->addMessage('success', 'Domain ' . $domainName . ' has been updated successfully on ' . $update);
|
||||
return $response->withHeader('Location', '/domain/update/'.$domainName)->withStatus(302);
|
||||
}
|
||||
|
@ -1707,7 +1715,13 @@ class DomainsController extends Controller
|
|||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
$domainName = $data['domainName'] ?? null;
|
||||
if (!empty($_SESSION['domains_to_renew'])) {
|
||||
$domainName = $_SESSION['domains_to_renew'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No domain specified for renewal');
|
||||
return $response->withHeader('Location', '/domains')->withStatus(302);
|
||||
}
|
||||
|
||||
$renewalYears = $data['renewalYears'] ?? null;
|
||||
|
||||
$parts = extractDomainAndTLD($domainName);
|
||||
|
@ -1853,6 +1867,7 @@ class DomainsController extends Controller
|
|||
return $response->withHeader('Location', '/domain/renew/'.$domainName)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['domains_to_renew']);
|
||||
$this->container->get('flash')->addMessage('success','Domain ' . $domainName . ' has been renewed for ' . $renewalYears . ' ' . ($renewalYears > 1 ? 'years' : 'year'));
|
||||
return $response->withHeader('Location', '/domains')->withStatus(302);
|
||||
}
|
||||
|
@ -1922,6 +1937,8 @@ class DomainsController extends Controller
|
|||
} else {
|
||||
$domain['punycode'] = $domain['name'];
|
||||
}
|
||||
$_SESSION['domains_to_renew'] = [$domain['punycode']];
|
||||
|
||||
return view($response,'admin/domains/renewDomain.twig', [
|
||||
'domain' => $domain,
|
||||
'domainStatus' => $domainStatus,
|
||||
|
|
|
@ -391,6 +391,8 @@ class HostsController extends Controller
|
|||
} else {
|
||||
$host['punycode'] = $host['name'];
|
||||
}
|
||||
$_SESSION['hosts_to_update'] = [$host['punycode']];
|
||||
|
||||
return view($response,'admin/hosts/updateHost.twig', [
|
||||
'host' => $host,
|
||||
'hostIPv4' => $hostIPv4,
|
||||
|
@ -415,7 +417,12 @@ class HostsController extends Controller
|
|||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
$hostName = $data['hostName'] ?? null;
|
||||
if (!empty($_SESSION['hosts_to_update'])) {
|
||||
$hostName = $_SESSION['hosts_to_update'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No host specified for update');
|
||||
return $response->withHeader('Location', '/hosts')->withStatus(302);
|
||||
}
|
||||
$host_id = $db->selectValue('SELECT id FROM host WHERE name = ?', [$hostName]);
|
||||
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
|
@ -431,14 +438,20 @@ class HostsController extends Controller
|
|||
$ipv4 = $data['ipv4'] ?? null;
|
||||
$ipv6 = $data['ipv6'] ?? null;
|
||||
|
||||
// Validate IPv4 address
|
||||
if ($ipv4 !== null && !filter_var($ipv4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
||||
// Check if both IPv4 and IPv6 are empty or null
|
||||
if (empty($ipv4) && empty($ipv6)) {
|
||||
$this->container->get('flash')->addMessage('error', 'At least one IP address (IPv4 or IPv6) is required');
|
||||
return $response->withHeader('Location', '/host/update/'.$hostName)->withStatus(302);
|
||||
}
|
||||
|
||||
// Validate IPv4 address, if provided
|
||||
if (!empty($ipv4) && !filter_var($ipv4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
||||
$this->container->get('flash')->addMessage('error', 'Invalid IPv4 address');
|
||||
return $response->withHeader('Location', '/host/update/'.$hostName)->withStatus(302);
|
||||
}
|
||||
|
||||
// Validate IPv6 address
|
||||
if ($ipv6 !== null && !filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||
// Validate IPv6 address, if provided
|
||||
if (!empty($ipv6) && !filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||
$this->container->get('flash')->addMessage('error', 'Invalid IPv6 address');
|
||||
return $response->withHeader('Location', '/host/update/'.$hostName)->withStatus(302);
|
||||
}
|
||||
|
@ -446,7 +459,8 @@ class HostsController extends Controller
|
|||
try {
|
||||
$db->beginTransaction();
|
||||
|
||||
if (isset($ipv4) && !empty($ipv4)) {
|
||||
if (isset($ipv4)) {
|
||||
if (!empty($ipv4)) {
|
||||
$ipv4 = normalize_v4_address($ipv4);
|
||||
|
||||
$does_it_exist = $db->selectValue("SELECT id FROM host_addr WHERE host_id = ? AND ip = 'v4'", [$host_id]);
|
||||
|
@ -454,9 +468,7 @@ class HostsController extends Controller
|
|||
if ($does_it_exist) {
|
||||
$db->update(
|
||||
'host_addr',
|
||||
[
|
||||
'addr' => $ipv4
|
||||
],
|
||||
['addr' => $ipv4],
|
||||
[
|
||||
'host_id' => $host_id,
|
||||
'ip' => 'v4'
|
||||
|
@ -472,10 +484,20 @@ class HostsController extends Controller
|
|||
]
|
||||
);
|
||||
}
|
||||
|
||||
} else {
|
||||
// If $ipv4 is set but is an empty string, delete the existing IPv4 address entry
|
||||
$db->delete(
|
||||
'host_addr',
|
||||
[
|
||||
'host_id' => $host_id,
|
||||
'ip' => 'v4'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($ipv6) && !empty($ipv6)) {
|
||||
if (isset($ipv6)) {
|
||||
if (!empty($ipv6)) {
|
||||
$ipv6 = normalize_v6_address($ipv6);
|
||||
|
||||
$does_it_exist = $db->selectValue("SELECT id FROM host_addr WHERE host_id = ? AND ip = 'v6'", [$host_id]);
|
||||
|
@ -483,9 +505,7 @@ class HostsController extends Controller
|
|||
if ($does_it_exist) {
|
||||
$db->update(
|
||||
'host_addr',
|
||||
[
|
||||
'addr' => $ipv6
|
||||
],
|
||||
['addr' => $ipv6],
|
||||
[
|
||||
'host_id' => $host_id,
|
||||
'ip' => 'v6'
|
||||
|
@ -501,6 +521,16 @@ class HostsController extends Controller
|
|||
]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// If $ipv6 is set but is an empty string, delete the existing IPv6 address entry
|
||||
$db->delete(
|
||||
'host_addr',
|
||||
[
|
||||
'host_id' => $host_id,
|
||||
'ip' => 'v6'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$currentDateTime = new \DateTime();
|
||||
|
@ -522,6 +552,7 @@ class HostsController extends Controller
|
|||
return $response->withHeader('Location', '/host/update/'.$hostName)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['hosts_to_update']);
|
||||
$this->container->get('flash')->addMessage('success', 'Host ' . $hostName . ' has been updated successfully on ' . $update);
|
||||
return $response->withHeader('Location', '/host/update/'.$hostName)->withStatus(302);
|
||||
}
|
||||
|
|
|
@ -395,6 +395,9 @@ class RegistrarsController extends Controller
|
|||
$whitelist = $db->select("SELECT * FROM registrar_whitelist WHERE registrar_id = ?",
|
||||
[ $registrar['id'] ]);
|
||||
|
||||
$_SESSION['registrars_to_update'] = [$registrar['clid']];
|
||||
$_SESSION['registrars_user_email'] = [$user['email']];
|
||||
|
||||
return view($response,'admin/registrars/updateRegistrar.twig', [
|
||||
'registrar' => $registrar,
|
||||
'contacts' => $contacts,
|
||||
|
@ -424,7 +427,12 @@ class RegistrarsController extends Controller
|
|||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
$registrar = $data['reg_clid'] ?? null;
|
||||
if (!empty($_SESSION['registrars_to_update'])) {
|
||||
$registrar = $_SESSION['registrars_to_update'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No registrar specified for update');
|
||||
return $response->withHeader('Location', '/registrars')->withStatus(302);
|
||||
}
|
||||
|
||||
$data['ipAddress'] = array_filter($data['ipAddress']);
|
||||
$iso3166 = new ISO3166();
|
||||
|
@ -498,6 +506,13 @@ class RegistrarsController extends Controller
|
|||
return $response->withHeader('Location', '/registrars')->withStatus(302);
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['registrars_user_email'])) {
|
||||
$regEmail = $_SESSION['registrars_user_email'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No email specified for update');
|
||||
return $response->withHeader('Location', '/registrars')->withStatus(302);
|
||||
}
|
||||
|
||||
$db->beginTransaction();
|
||||
|
||||
try {
|
||||
|
@ -634,7 +649,7 @@ class RegistrarsController extends Controller
|
|||
'password' => $panelPassword,
|
||||
],
|
||||
[
|
||||
'email' => $data['reg_email']
|
||||
'email' => $regEmail
|
||||
]
|
||||
);
|
||||
}
|
||||
|
@ -646,6 +661,8 @@ class RegistrarsController extends Controller
|
|||
return $response->withHeader('Location', '/registrar/update/'.$registrar)->withStatus(302);
|
||||
}
|
||||
|
||||
unset($_SESSION['registrars_to_update']);
|
||||
unset($_SESSION['registrars_user_email']);
|
||||
$this->container->get('flash')->addMessage('success', 'Registrar ' . $data['name'] . ' has been updated successfully on ' . $update);
|
||||
return $response->withHeader('Location', '/registrar/update/'.$registrar)->withStatus(302);
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ class SupportController extends Controller
|
|||
ORDER BY tr.date_created DESC', [$ticketNumber]);
|
||||
$category = $db->selectValue('SELECT name FROM ticket_categories WHERE id = ?', [$ticket['category_id']]);
|
||||
|
||||
// Default view for GET requests or if POST data is not set
|
||||
$_SESSION['current_ticket'] = [$ticket['id']];
|
||||
return view($response,'admin/support/viewTicket.twig', [
|
||||
'ticket' => $ticket,
|
||||
'replies' => $replies,
|
||||
|
@ -158,7 +158,12 @@ class SupportController extends Controller
|
|||
$uri = $request->getUri()->getPath();
|
||||
$categories = $db->select("SELECT * FROM ticket_categories");
|
||||
|
||||
$ticket_id = $data['ticket_id'] ?? null;
|
||||
if (!empty($_SESSION['current_ticket'])) {
|
||||
$ticket_id = $_SESSION['current_ticket'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No ticket selected');
|
||||
return $response->withHeader('Location', '/support')->withStatus(302);
|
||||
}
|
||||
$responseText = $data['responseText'] ?? null;
|
||||
|
||||
$result = $db->selectRow('SELECT registrar_id FROM registrar_users WHERE user_id = ?', [$_SESSION['auth_user_id']]);
|
||||
|
@ -217,6 +222,7 @@ class SupportController extends Controller
|
|||
// send message
|
||||
Mail::send($mailsubject, $message, $from, $to);
|
||||
|
||||
unset($_SESSION['current_ticket']);
|
||||
$this->container->get('flash')->addMessage('success', 'Reply has been posted successfully on ' . $crdate);
|
||||
return $response->withHeader('Location', '/ticket/'.$ticket_id)->withStatus(302);
|
||||
} catch (Exception $e) {
|
||||
|
@ -236,7 +242,12 @@ class SupportController extends Controller
|
|||
$uri = $request->getUri()->getPath();
|
||||
$categories = $db->select("SELECT * FROM ticket_categories");
|
||||
|
||||
$ticket_id = $data['ticket_id'] ?? null;
|
||||
if (!empty($_SESSION['current_ticket'])) {
|
||||
$ticket_id = $_SESSION['current_ticket'][0];
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'No ticket selected');
|
||||
return $response->withHeader('Location', '/support')->withStatus(302);
|
||||
}
|
||||
$action = $data['action'] ?? null;
|
||||
|
||||
$result = $db->selectRow('SELECT registrar_id FROM registrar_users WHERE user_id = ?', [$_SESSION['auth_user_id']]);
|
||||
|
@ -294,6 +305,7 @@ class SupportController extends Controller
|
|||
'id' => $ticket_id
|
||||
]
|
||||
);
|
||||
unset($_SESSION['current_ticket']);
|
||||
$this->container->get('flash')->addMessage('success', 'Ticket has been reopened successfully');
|
||||
return $response->withHeader('Location', '/ticket/'.$ticket_id)->withStatus(302);
|
||||
} else {
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="/contact/update" method="post">
|
||||
{{ csrf.field | raw }}<input type="hidden" name="identifier" value="{{ contact.identifier }}">
|
||||
{{ csrf.field | raw }}
|
||||
{% set postal_int = null %}
|
||||
{% set postal_loc = null %}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
{% endif %}</h3>
|
||||
<div class="card-actions">
|
||||
<form action="/contact/approve" method="post">
|
||||
{{ csrf.field | raw }}<input type="hidden" name="identifier" value="{{ contact.identifier }}">
|
||||
{{ csrf.field | raw }}
|
||||
<a href="/contact/update/{{ contact.identifier }}" class="btn btn-outline-secondary">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 11l-4 4l4 4m-4 -4h11a4 4 0 0 0 0 -8h-1" /></svg>
|
||||
{{ __('Back to Contact Update') }}
|
||||
|
|
|
@ -31,18 +31,15 @@
|
|||
{{ csrf.field | raw }}{% endif %}
|
||||
<div class="mb-3">
|
||||
<label for="domainName" class="form-label">{{ __('Domain Name') }}</label>
|
||||
<div class="form-control-plaintext">{{ domain.name }}</div><input type="hidden" name="domainName" id="domainName" value="{{ domain.punycode }}">
|
||||
<div class="form-control-plaintext">{{ domain.name }}</div>
|
||||
</div>
|
||||
|
||||
{% if maxYears >= 1 %}
|
||||
<!-- Slider for years -->
|
||||
<div class="mb-3">
|
||||
<label for="renewalYears" class="form-label">{{ 'Renewal Years' }}</label>
|
||||
<input type="range" class="form-range" min="1" max="{{ maxYears }}" step="1" id="renewalYears" name="renewalYears" value="1">
|
||||
<span id="yearValue">1 Year</span>
|
||||
</div>
|
||||
|
||||
<!-- Placeholder for displaying domain price -->
|
||||
<div class="mb-3" id="domainPriceDisplay" style="display:none;">
|
||||
<strong>{{ __('Estimated Price') }}: </strong><span id="domainPrice">{{ currency }} 0.00</span>
|
||||
</div>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
{{ __('Domain') }} {{ domain.name }} <input type="hidden" name="domainName" value="{{ domain.name }}">
|
||||
{{ __('Domain') }} {{ domain.name }}
|
||||
{% if domainStatus %}
|
||||
{% if domainStatus is iterable %}
|
||||
{% for status in domainStatus %}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
{{ __('Domain') }} {{ domain.name }} <input type="hidden" name="domainName" value="{{ domain.punycode }}">
|
||||
{{ __('Domain') }} {{ domain.name }}
|
||||
{% if domainStatus.status or domain.rgpstatus %}
|
||||
{% if domainStatus is iterable %}
|
||||
{% for status in domainStatus %}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="/host/update" method="post">
|
||||
{{ csrf.field | raw }}<input type="hidden" name="hostName" value="{{ host.punycode }}">
|
||||
{{ csrf.field | raw }}
|
||||
<div class="form-group mt-3">
|
||||
<label for="ipv4" class="form-label">{{ __('IPv4 Address') }}:</label>
|
||||
<input type="text" class="form-control" id="ipv4" name="ipv4" placeholder="192.168.1.1" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$" value="{{ hostIPv4[0].addr }}">
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<div class="container-xl">
|
||||
<div class="col-12">
|
||||
{% include 'partials/flash.twig' %}
|
||||
<form action="/registrar/update" method="post" autocomplete="off"><input type="hidden" name="reg_clid" value="{{ registrar.clid }}">
|
||||
<form action="/registrar/update" method="post" autocomplete="off">
|
||||
{{ csrf.field | raw }}
|
||||
<!-- Registrar Details Card -->
|
||||
<div class="card mb-3">
|
||||
|
@ -378,7 +378,7 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th scope="col required">{{ __('Username/CLID') }}</th>
|
||||
<th scope="col">{{ __('Login Email') }}</th><input type="hidden" name="reg_email" value="{{ user.email }}">
|
||||
<th scope="col">{{ __('Login Email') }}</th>
|
||||
<th scope="col">{{ __('Panel Password') }} <span class="text-red">*</span></th>
|
||||
<th scope="col">{{ __('EPP Password') }} <span class="text-red">*</span></th>
|
||||
</tr>
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
{% include 'partials/flash.twig' %}
|
||||
<form action="/support/status" method="post">
|
||||
{{ csrf.field | raw }}
|
||||
<input type="hidden" name="ticket_id" value="{{ ticket.id }}">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">{{ __('Ticket') }} #{{ ticket.id }} - {{ ticket.subject }}</h3>
|
||||
|
@ -63,7 +62,7 @@
|
|||
</form>
|
||||
{% if ticket.status != 'Closed' %}<form action="/support/reply" method="post">
|
||||
{{ csrf.field | raw }}
|
||||
<input type="hidden" name="ticket_id" value="{{ ticket.id }}">{% endif %}
|
||||
{% endif %}
|
||||
<div class="card-body">
|
||||
<h6 class="card-subtitle mb-2 text-muted">{{ __('Ticket Details') }}</h6>
|
||||
<p><span>{{ __('Created On') }}:</span> <strong>{{ ticket.date_created }}</strong></p>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue