Commit graph

1875 commits

Author SHA1 Message Date
Timo Võhmar
05210ddbba
Merge pull request #2764 from internetee/2747-multiple-underscores-in-email-addresses
# Improve email validation regex pattern and add comprehensive tests
2025-03-31 16:56:23 +03:00
Timo Võhmar
8d33bd5de0
Merge pull request #2771 from internetee/ipv6-whitelist-support
feat: support IPv6 /64 range in white IP validation
2025-03-28 14:25:33 +02:00
oleghasjanov
8ccfaef699 fixed integration test 2025-03-24 15:43:06 +02:00
oleghasjanov
bc01dfaa3a feat: support IPv6 /64 range in white IP validation
- Split IP validation logic for IPv4 and IPv6 addresses
- Add specific validation for IPv6 to allow only single addresses (/128) or /64 ranges
- Remove old network address calculation for IPv6
- Keep IPv4 address limit validation unchanged
- Add localization for new IPv6 validation error message
- Add test coverage for IPv6 validation:
  * Test for valid /64 range
  * Test for valid single address
  * Test for invalid ranges (/48 and /96)
2025-03-24 15:16:10 +02:00
oleghasjanov
58a1dbafb0 rollback 2025-03-21 12:42:18 +02:00
oleghasjanov
4b1d29944f fixed another one failed system test 2025-03-21 12:33:57 +02:00
oleghasjanov
7ef22c6894 fix system test 2025-03-21 12:24:20 +02:00
oleghasjanov
7799727867 feat: add age validation for admin contacts
- Add AgeValidation module for consistent age checks
- Validate admin contacts must be at least 18 years old
- Move age validation logic from Domain to shared module
- Add tests for admin contact age validation
- Fix JSON format for admin_contacts_allowed_ident_type setting

This change ensures that administrative contacts must be adults (18+),
using the same age validation logic as for registrants. The validation
works with both birthday and Estonian ID formats. Settings are now
properly stored as JSON strings for consistent parsing.
2025-03-20 16:37:38 +02:00
tsoganov
10738995b6 Updated integration test 2025-03-18 16:58:48 +02:00
oleghasjanov
54aefe4a2c update regex 2025-03-10 15:13:09 +02:00
oleghasjanov
f866b549b5 # Improve email validation regex pattern and add comprehensive tests
This commit updates the email validation pattern in Truemail configuration to better handle various email format edge cases. The changes include:
Refine email regex pattern in config/initializers/truemail.rb to properly validate:
RFC compliant local parts with allowed special characters
Proper domain name formatting
Prevention of consecutive dots in both local part and domain
Leading and trailing dots in local part
Add comprehensive test cases in test/interactions/email_check_test.rb to verify:
Valid email formats like standard addresses, underscore usage, and dot-atom formats
Invalid email formats including consecutive dots, leading/trailing dots, and invalid characters
These changes ensure our email validation is more RFC-compliant while still being strict enough to catch common errors. The test suite now explicitly validates both positive and negative test cases for email format validation.
2025-03-10 14:24:02 +02:00
Timo Võhmar
9db844a12c
Merge pull request #2763 from internetee/missing-reason-in-notification
Fix ProcessClientHold notification and added tests
2025-03-07 16:05:37 +02:00
oleghasjanov
95a6403595 Fix ProcessClientHold tests and implementation
This commit addresses several issues with the ProcessClientHold class and its tests:

1. Changed notification text in notify_client_hold method from 'force_delete_set_on_domain'
   to 'hold_client_on_domain' to better reflect the actual action being performed.
   Added corresponding translation key in locales/en.yml.

2. Fixed the test_send_mail_delivers_email test by using stub method instead of
   redefining DomainDeleteMailer.forced, which was causing conflicts with other tests.
   This ensures that tests are isolated and don't affect each other.

3. Updated all tests to use Domain.stub_any_instance(:force_delete_scheduled?, true)
   to properly stub the force_delete_scheduled? method.

4. Improved test assertions to ensure proper behavior of the ProcessClientHold class,
   including notification creation and client hold status setting.

5. Added proper error handling in tests to ensure methods don't raise exceptions.

The changes ensure that the ProcessClientHold class correctly handles client hold
status for domains in the force delete process, properly notifies registrars with
appropriate messages, and sends emails when required.
2025-03-06 15:32:39 +02:00
oleghasjanov
29c6c8ff44 Fix ProcessClientHold tests and implementation
This commit addresses several issues with the ProcessClientHold class and its tests:

1. Fixed the test_send_mail_delivers_email test by properly mocking the
   DomainDeleteMailer.forced method with correct parameter signatures
   and adding template_name to the domain.

2. Updated all tests to use Domain.stub_any_instance(:force_delete_scheduled?, true)
   to properly stub the force_delete_scheduled? method.

3. Improved test assertions to ensure proper behavior of the ProcessClientHold class,
   including notification creation and client hold status setting.

4. Added proper error handling in tests to ensure methods don't raise exceptions
   and restore original method implementations after testing.

The changes ensure that the ProcessClientHold class correctly handles client hold
status for domains in the force delete process, properly notifies registrars,
and sends emails when required.
2025-03-06 15:18:16 +02:00
oleghasjanov
ea8fa01f9b refactor 2025-03-06 11:51:01 +02:00
oleghasjanov
a11c0fca2d fix: handle HTTPClient::KeepAliveDisconnected in OrgRegistrantPhoneCheckerJob
This commit implements a reliable connection error handling solution for the
Company Register API integration. The job previously failed when connection
errors occurred without proper recovery mechanisms.
The implementation:
Adds a lightweight Retryable module with configurable retry logic
Implements smart caching of API responses (1 day expiration)
Handles common network errors like KeepAliveDisconnected and timeouts
Provides a fallback mechanism when all retry attempts fail
Ensures test reliability with cache-skipping in test environment
Testing:
Added specific tests for both recovery and fallback scenarios
Verified cache behavior in production and test environments
Resolves connection errors observed in production logs without adding
unnecessary complexity to the codebase.
2025-03-06 11:38:09 +02:00
Timo Võhmar
5b1a5a6d06
Merge pull request #2755 from internetee/upgrade-registrar-invalid-company-notification
Refactor force delete notifications and improve status handling
2025-02-20 10:11:17 +02:00
Timo Võhmar
98bf7fb594
Merge pull request #2751 from internetee/2742-clienthold-status-must-not-me-reset-unless-the-forcedelete-status-is-reset
fix: prevent client_hold status from returning after manual removal
2025-02-19 15:38:17 +02:00
oleghasjanov
cdf301bc0e updated test 2025-02-17 13:16:14 +02:00
Timo Võhmar
38dc5466e9
Merge pull request #2723 from internetee/company-validator-during-creation
feat: restore company validation for Estonian organizations
2025-02-12 10:33:28 +02:00
oleghasjanov
6194c5c58a fix: prevent client_hold status from returning after manual removal
- Add flag in force_delete_data to track manual client_hold removal
- Update ProcessClientHold to respect manual status removal
- Add test to verify client_hold doesn't return after admin removes it

When an admin manually removes the client_hold status from a domain,
it should not be automatically re-added by the ProcessClientHold job.
This change tracks manual removals and prevents the status from being
re-added while maintaining the force delete process.
2025-02-10 13:42:19 +02:00
oleghasjanov
a56237c84f fix: update admin contact validation error code
- Change error code from 2004 to 2306 for admin contact validation
- Add explicit validation check for required admin contacts
- Update tests to expect new error code

The error code 2306 better reflects the EPP standard for policy-based
validation failures. This change makes the error handling more consistent
with EPP specifications when validating admin contact requirements.
2025-02-05 10:54:21 +02:00
oleghasjanov
6d657426e5 remove test 2025-02-03 14:08:50 +02:00
oleghasjanov
7392ce2d76 refactor: Extract company status handling logic
- Move company status handling logic into a separate method `handle_company_statuses`
- Improve code readability by splitting proceed_company_status method
- Keep status update logic after handling company statuses
2025-02-03 14:08:50 +02:00
oleghasjanov
19df0cd57f fix tests -> count of running jobs were decreased 2025-02-03 14:08:50 +02:00
oleghasjanov
2ec545b3aa feat: add status notes to force delete notifications
- Add notes parameter to force delete interactions to provide more context
- Include company registry status in force delete notifications
- Add status mapping constants for better readability
- Move status note assignment before save in force delete process

Technical details:
- Add notes field to Domains::ForceDelete::Base interaction
- Update force delete notifications to include status notes
- Add REGISTRY_STATUSES mapping in CompanyRegisterStatusJob
- Update tests to verify new notification format
2025-02-03 14:08:50 +02:00
oleghasjanov
89097bfabe feat: restore company validation for Estonian organizations
- Re-enable company validation logic for Estonian organization contacts
- Update company_register gem to use master branch
- Restore and update company validation tests
- Add additional check for Estonian country code in validation

This change ensures that only registered or liquidated Estonian companies
can be used when creating organizational contacts.
2025-02-03 14:08:18 +02:00
oleghasjanov
f2978599b4 feat: add admin contact ident type validation
- Add new setting for allowed admin contact ident types
- Add validation for admin contact ident types on domain create/update
- Add UI controls for managing allowed ident types
- Add tests for new validation rules
- Update domain model to respect new settings

The changes allow configuring which identification types (private person,
organization, birthday) are allowed for administrative contacts. This is
enforced when creating new domains or adding new admin contacts.
2025-02-03 13:59:03 +02:00
Timo Võhmar
268b942042
Merge pull request #2741 from internetee/disclose-phone-num-for-org-registrants
Update company_register gem and fix logger dependency
2025-01-31 17:52:57 +02:00
Timo Võhmar
3289851340
Merge pull request #2740 from internetee/add-birthdate-verification
Added birthday ident verification
2025-01-31 17:50:55 +02:00
oleghasjanov
cd5de3bd14 commit
feat: make technical contacts optional for all domains

- Remove automatic tech contact assignment from admin contacts
- Set minimum tech contacts to 0 for all registrant types
- Update tests to reflect optional tech contacts
- Keep max tech contacts limit from settings

This change implements the requirement to make technical contacts optional
for all domain types while maintaining the maximum limit from settings.
Previously tech contacts were required for organizations and automatically
copied from admin contacts.
2025-01-31 15:49:35 +02:00
oleghasjanov
863dcce647 Add admin contact validation rules based on registrant type and age
- Add validation requiring admin contacts for legal entity registrants
- Add validation requiring admin contacts for underage private registrants:
  - Under 18 years old for birthday-based identification
  - Under 18 years old for Estonian ID numbers
- Make admin contacts optional for:
  - Adult private registrants (18+ years)
  - Adult Estonian ID holders
  - Non-Estonian private registrants
- Add tests covering all new validation scenarios
- Add helper methods to calculate age and parse Estonian ID birth dates
2025-01-31 12:49:14 +02:00
tsoganov
c87c86ac9b Corrected tests 2025-01-31 12:49:14 +02:00
oleghasjanov
803276d8c8 Add phone number validation for Estonian organization contacts
- Add OrgRegistrantPhoneCheckerJob execution for contact creation and update
- Rename validate_* methods to maybe_validate_* for consistency
- Add tests for phone number validation in REPP API
- Fix method naming and add proper job arguments

This ensures phone numbers are validated against company register data
for Estonian organization contacts after creation or update.
2025-01-30 12:49:20 +02:00
oleghasjanov
429e2644d6 Fix registrant user lookup in phone checker job
- Replace RegistrantUser.find_by with Contact model query
- Add proper scoping for organization contacts from Estonia
- Include join with registrant domains

This ensures consistent contact lookup between bulk and single checker methods
2025-01-30 10:57:45 +02:00
tsoganov
9f81402d64 Corrected integration test 2025-01-28 10:43:59 +02:00
Timo Võhmar
a9b341ebfe
Merge pull request #2730 from internetee/2702-optional-admin-contact-for-private-registrations
Make admin contacts optional for private registrants
2025-01-28 10:15:33 +02:00
tsoganov
8b872b4a14 Corrected test 2025-01-27 16:43:19 +02:00
Timo Võhmar
8dcc287d60
Merge pull request #2737 from internetee/improve-verification-translations
Improved verification email translations
2025-01-15 16:45:44 +02:00
tsoganov
5cf18bd9e5 Corrected tests 2025-01-14 15:52:33 +02:00
oleghasjanov
3c169bb00b Make admin contacts optional for private registrants
This change makes admin contacts optional for private registrants while keeping them mandatory for organizations. The changes include:

- Updated Domain model validations to make admin and tech contacts optional (min=0) for private registrants
- Added validation rules methods to handle different requirements based on registrant type
- Modified EPP domain creation to support domains without admin contacts for private registrants
- Updated attach_default_contacts to skip adding contacts for private registrants
- Added comprehensive test coverage for:
  - Domain model validations with private/org registrants
  - EPP domain creation without admin contacts for private registrants
  - REPP API contact management for private registrants

This implements the requirement to make admin contacts optional for private registrations of .ee domains while maintaining the existing validation rules for organizations.
2025-01-07 12:24:57 +02:00
Timo Võhmar
e38c46757b
Merge pull request #2718 from internetee/daily-fd-domains-subscription
Daily email notification to admins about new FD statuses
2024-12-31 10:56:52 +02:00
oleghasjanov
4b52284a86 Remove debug output from force delete process
WHAT:
- Removed debug output line from PostSetProcess
- Fixed force_delete_start date comparison in admin notifier job

WHY:
- Debug output was adding noise to logs and wasn't necessary

HOW:
- Removed puts statement for domain status debugging
- Changed query to use exact timestamp comparison for force_delete_start
2024-12-19 14:27:47 +02:00
oleghasjanov
6facbc8302 updated poll message 2024-12-19 11:15:23 +02:00
oleghasjanov
b229613b8a feat: Add invalid ident notification for company register status checks
- Add notification system for invalid company identifications
- Update force delete notifications to handle invalid company cases
- Add translations for invalid ident messages (ET/EN)
- Add test coverage for invalid ident scenarios
- Remove debug logging from force delete process
- Clean up unused CSV templates

This change improves handling of invalid company identifications in the
Estonian business registry by providing proper notifications to registrars
and ensuring appropriate status updates.
2024-12-17 14:08:57 +02:00
oleghasjanov
d0a39bf469 remove company creation validation 2024-11-25 14:48:28 +02:00
Timo Võhmar
5d454febb3
Merge pull request #2696 from internetee/verify-contacts
Handling contact verifications
2024-11-19 10:34:53 +02:00
oleghasjanov
35eb60a5d8 removed extra line 2024-11-14 10:16:24 +02:00
oleghasjanov
da17294836 feat: add company register status job tests
- Add test for checking companies with status K (DELETED) that should be scheduled for force delete
- Add test for checking companies that are not found in register and should be deleted
- Add company_details method to CompanyRegisterClientStub for mocking API responses

The tests verify that:
1. Companies with DELETED status are properly marked for force delete
2. Companies not found in register are marked as deleted and scheduled for force delete
3. Proper mocking of company_details API responses
2024-11-14 10:13:01 +02:00
tsoganov
af46be8d0f Corrected tests 2024-11-14 08:37:09 +02:00