User.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. class User {
  3. public $address;
  4. public $username;
  5. public $domain;
  6. public static function get_random_address(array $domains): string {
  7. $wordLength = rand(3, 8);
  8. $container = new PronounceableWord_DependencyInjectionContainer();
  9. $generator = $container->getGenerator();
  10. $word = $generator->generateWordOfGivenLength($wordLength);
  11. $nr = rand(51, 91);
  12. $name = $word . $nr;
  13. $domain = $domains[array_rand($domains)];
  14. return "$name@$domain";
  15. }
  16. public function isInvalid(array $config_domains): bool {
  17. if (empty($this->username) || empty($this->domain)) {
  18. return true;
  19. } elseif (!in_array($this->domain, $config_domains)) {
  20. return true;
  21. } else {
  22. return false;
  23. }
  24. }
  25. public static function parseDomain(string $address, array $config_blocked_usernames): User {
  26. $clean_address = User::_clean_address($address);
  27. $user = new User();
  28. $user->username = User::_clean_username($clean_address, $config_blocked_usernames);
  29. $user->domain = User::_clean_domain($clean_address);
  30. $user->address = $user->username . '@' . $user->domain;
  31. return $user;
  32. }
  33. public static function parseUsernameAndDomain(string $username, string $domain, $config_blocked_usernames): User {
  34. $user = new User();
  35. $user->username = User::_clean_username($username, $config_blocked_usernames);
  36. $user->domain = User::_clean_domain($domain);
  37. $user->address = $user->username . '@' . $user->domain;
  38. return $user;
  39. }
  40. /**
  41. * Remove illegal characters from address.
  42. * @return string clean address
  43. */
  44. private static function _clean_address(string $address) {
  45. return strtolower(filter_var($address, FILTER_SANITIZE_EMAIL));
  46. }
  47. /**
  48. * Remove illegal characters from username and remove everything after the @-sign. You may extend it if your server supports them.
  49. *
  50. * @return string clean username
  51. */
  52. private static function _clean_username(string $address, array $config_blocked_usernames) {
  53. $username = strtolower($address);
  54. $username = preg_replace('/@.*$/', "", $username); // remove part after @
  55. $username = preg_replace('/[^A-Za-z0-9_.+-]/', "", $username); // remove special characters
  56. if (in_array($username, $config_blocked_usernames)) {
  57. // Forbidden name!
  58. return '';
  59. }
  60. return $username;
  61. }
  62. private static function _clean_domain(string $address) {
  63. $username = strtolower($address);
  64. $username = preg_replace('/^.*@/', "", $username); // remove part before @
  65. return preg_replace('/[^A-Za-z0-9_.+-]/', "", $username); // remove special characters
  66. }
  67. }