mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-03 18:38:27 +01:00
0a83f253ed
Summary: The name of networks should be unique. Also adds support for exact-name queries for AlamanacNetworks. Test Plan: Applied migration with existing duplicates, saw networks renamed, attempted to add duplicates, got a nice error message. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin, PHID-OPKG-gm6ozazyms6q6i22gyam Differential Revision: https://secure.phabricator.com/D19379
64 lines
1.9 KiB
PHP
64 lines
1.9 KiB
PHP
<?php
|
|
|
|
final class AlmanacNames extends Phobject {
|
|
|
|
public static function validateName($name) {
|
|
if (strlen($name) < 3) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'must be at least 3 characters long.'));
|
|
}
|
|
|
|
if (strlen($name) > 100) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'may not be more than 100 characters long.'));
|
|
}
|
|
|
|
if (!preg_match('/^[a-z0-9.-]+\z/', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'may only contain lowercase letters, numbers, hyphens, and '.
|
|
'periods.'));
|
|
}
|
|
|
|
if (preg_match('/(^|\\.)\d+(\z|\\.)/', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, network, property and namespace names '.
|
|
'may not have any segments containing only digits.'));
|
|
}
|
|
|
|
if (preg_match('/\.\./', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'may not contain multiple consecutive periods.'));
|
|
}
|
|
|
|
if (preg_match('/\\.-|-\\./', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'may not contain hyphens adjacent to periods.'));
|
|
}
|
|
|
|
if (preg_match('/--/', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'may not contain multiple consecutive hyphens.'));
|
|
}
|
|
|
|
if (!preg_match('/^[a-z0-9].*[a-z0-9]\z/', $name)) {
|
|
throw new Exception(
|
|
pht(
|
|
'Almanac service, device, property, network and namespace names '.
|
|
'must begin and end with a letter or number.'));
|
|
}
|
|
}
|
|
|
|
}
|