Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ jobs:
run: |
export OPENSRS_KEY=${{ secrets.OPENSRS_KEY }}
export OPENSRS_USERNAME=${{ secrets.OPENSRS_USERNAME }}
export NAMECOM_USERNAME=${{ secrets.NAMECOM_USERNAME }}
export NAMECOM_TOKEN=${{ secrets.NAMECOM_TOKEN }}
composer test
45 changes: 39 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ php ./data/import.php


## Using the Registrar API

The library supports multiple domain registrar adapters:
- **OpenSRS** - OpenSRS domain registrar
- **NameCom** - Name.com domain registrar

### Using OpenSRS Adapter
```php
<?php

Expand All @@ -85,18 +91,45 @@ use Utopia\Domains\Registrar\Contact;
use Utopia\Domains\Registrar\Adapter\OpenSRS;

$opensrs = new OpenSRS(
'apikey',
'apisecret',
'username',
'password',
'apikey',
'username',
'password',
[
'ns1.nameserver.com',
'ns2.nameserver.com',
]
],
'https://horizon.opensrs.net:55443' // or 'https://rr-n1-tor.opensrs.net:55443' for production
);


$reg = new Registrar($opensrs);
```

### Using NameCom Adapter
```php
<?php

use Utopia\Domains\Registrar;
use Utopia\Domains\Registrar\Contact;
use Utopia\Domains\Registrar\Adapter\NameCom;

$namecom = new NameCom(
'username',
'api-token',
[
'ns1.name.com',
'ns2.name.com',
],
'https://api.name.com' // or 'https://api.dev.name.com' for testing
);

$reg = new Registrar($namecom);
```

### Using the Registrar
Once you have initialized an adapter, you can use the Registrar API:

```php
$reg = new Registrar($adapter); // $adapter can be OpenSRS or NameCom

$contact = new Contact(
'firstname',
Expand Down
3 changes: 3 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
"autoload": {
"psr-4": {"Utopia\\Domains\\": "src/Domains"}
},
"autoload-dev": {
"psr-4": {"Utopia\\Tests\\": "tests"}
},
"scripts": {
"test": "vendor/bin/phpunit",
"lint": "./vendor/bin/pint --test",
Expand Down
88 changes: 73 additions & 15 deletions src/Domains/Registrar.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,51 @@

use Utopia\Domains\Registrar\Adapter as RegistrarAdapter;
use Utopia\Domains\Registrar\Domain;
use Utopia\Domains\Registrar\Registration;
use Utopia\Domains\Registrar\Renewal;
use Utopia\Domains\Registrar\Contact;
use Utopia\Domains\Registrar\TransferStatus;
use Utopia\Domains\Registrar\UpdateDetails;

class Registrar
{
/**
* Registration Types
*/
public const REG_TYPE_NEW = RegistrarAdapter::REG_TYPE_NEW;
public const REG_TYPE_TRANSFER = RegistrarAdapter::REG_TYPE_TRANSFER;
public const REG_TYPE_RENEWAL = RegistrarAdapter::REG_TYPE_RENEWAL;
public const REG_TYPE_TRADE = RegistrarAdapter::REG_TYPE_TRADE;
public const REG_TYPE_NEW = 'new';
public const REG_TYPE_TRANSFER = 'transfer';
public const REG_TYPE_RENEWAL = 'renewal';
public const REG_TYPE_TRADE = 'trade';

protected RegistrarAdapter $adapter;

public function __construct(RegistrarAdapter $adapter)
{
/**
* Constructor
*
* @param RegistrarAdapter $adapter The registrar adapter to use
* @param array $defaultNameservers Default nameservers for domain registration
* @param Cache|null $cache Optional cache instance
* @param int $connectTimeout Connection timeout in seconds
* @param int $timeout Request timeout in seconds
*/
public function __construct(
RegistrarAdapter $adapter,
array $defaultNameservers = [],
?Cache $cache = null,
int $connectTimeout = 5,
int $timeout = 10
) {
$this->adapter = $adapter;

if (!empty($defaultNameservers)) {
$this->adapter->setDefaultNameservers($defaultNameservers);
}

if ($cache !== null) {
$this->adapter->setCache($cache);
}

$this->adapter->setConnectTimeout($connectTimeout);
$this->adapter->setTimeout($timeout);
}

/**
Expand Down Expand Up @@ -53,9 +79,9 @@ public function available(string $domain): bool
* @param int $periodYears
* @param array|Contact $contacts
* @param array $nameservers
* @return Registration
* @return string Order ID
*/
public function purchase(string $domain, array|Contact $contacts, int $periodYears = 1, array $nameservers = []): Registration
public function purchase(string $domain, array|Contact $contacts, int $periodYears = 1, array $nameservers = []): string
{
return $this->adapter->purchase($domain, $contacts, $periodYears, $nameservers);
}
Expand Down Expand Up @@ -101,13 +127,24 @@ public function getDomain(string $domain): Domain
* Update the details of a domain
*
* @param string $domain
* @param array $details
* @param array|Contact|null $contacts
* @param UpdateDetails $details
* @return bool
*/
public function updateDomain(string $domain, array $details, array|Contact|null $contacts = null): bool
public function updateDomain(string $domain, UpdateDetails $details): bool
{
return $this->adapter->updateDomain($domain, $details);
}

/**
* Update nameservers of a domain
*
* @param string $domain
* @param array $nameservers
* @return array
*/
public function updateNameservers(string $domain, array $nameservers): array
{
return $this->adapter->updateDomain($domain, $details, $contacts);
return $this->adapter->updateNameservers($domain, $nameservers);
}

/**
Expand Down Expand Up @@ -143,9 +180,9 @@ public function renew(string $domain, int $periodYears): Renewal
* @param string $authCode
* @param array|Contact $contacts
* @param array $nameservers
* @return Registration
* @return string Order ID
*/
public function transfer(string $domain, string $authCode, array|Contact $contacts, int $periodYears = 1, array $nameservers = []): Registration
public function transfer(string $domain, string $authCode, array|Contact $contacts, int $periodYears = 1, array $nameservers = []): string
{
return $this->adapter->transfer($domain, $authCode, $contacts, $periodYears, $nameservers);
}
Expand All @@ -160,4 +197,25 @@ public function getAuthCode(string $domain): string
{
return $this->adapter->getAuthCode($domain);
}

/**
* Cancel pending purchase orders
*
* @return bool
*/
public function cancelPurchase(): bool
{
return $this->adapter->cancelPurchase();
}

/**
* Check transfer status for a domain
*
* @param string $domain
* @return TransferStatus
*/
public function checkTransferStatus(string $domain): TransferStatus
{
return $this->adapter->checkTransferStatus($domain);
}
}
Loading