mailgun-php/src/Mailgun/Api/Domain.php

274 lines
8.3 KiB
PHP
Raw Normal View History

2016-10-27 01:34:27 -05:00
<?php
/*
* Copyright (C) 2013-2016 Mailgun
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
namespace Mailgun\Api;
use Mailgun\Assert;
use Mailgun\Resource\Api\Domain\ConnectionResponse;
use Mailgun\Resource\Api\Domain\CreateCredentialResponse;
use Mailgun\Resource\Api\Domain\CreateResponse;
use Mailgun\Resource\Api\Domain\CredentialResponse;
use Mailgun\Resource\Api\Domain\DeleteCredentialResponse;
use Mailgun\Resource\Api\Domain\DeleteResponse;
use Mailgun\Resource\Api\Domain\IndexResponse;
use Mailgun\Resource\Api\Domain\ShowResponse;
use Mailgun\Resource\Api\Domain\UpdateConnectionResponse;
use Mailgun\Resource\Api\Domain\UpdateCredentialResponse;
use Psr\Http\Message\ResponseInterface;
2016-10-27 01:34:27 -05:00
/**
* {@link https://documentation.mailgun.com/api-domains.html}.
*
* @author Sean Johnson <sean@mailgun.com>
*/
class Domain extends HttpApi
2016-10-27 01:34:27 -05:00
{
/**
* Returns a list of domains on the account.
*
* @param int $limit
* @param int $skip
*
* @return IndexResponse
2016-10-27 01:34:27 -05:00
*/
public function index($limit = 100, $skip = 0)
2016-10-27 01:34:27 -05:00
{
Assert::integer($limit);
Assert::integer($skip);
$params = [
'limit' => $limit,
'skip' => $skip,
];
$response = $this->httpGet('/v3/domains', $params);
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, IndexResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Returns a single domain.
*
* @param string $domain Name of the domain.
*
* @return ShowResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function show($domain)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
$response = $this->httpGet(sprintf('/v3/domains/%s', $domain));
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, ShowResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Creates a new domain for the account.
* See below for spam filtering parameter information.
* {@link https://documentation.mailgun.com/user_manual.html#um-spam-filter}.
*
* @param string $domain Name of the domain.
* @param string $smtpPass Password for SMTP authentication.
* @param string $spamAction `disable` or `tag` - inbound spam filtering.
* @param bool $wildcard Domain will accept email for subdomains.
*
* @return CreateResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function create($domain, $smtpPass, $spamAction, $wildcard)
{
Assert::stringNotEmpty($domain);
Assert::stringNotEmpty($smtpPass);
// TODO(sean.johnson): Extended spam filter input validation.
Assert::stringNotEmpty($spamAction);
Assert::boolean($wildcard);
$params = [
'name' => $domain,
'smtp_password' => $smtpPass,
'spam_action' => $spamAction,
'wildcard' => $wildcard,
];
$response = $this->httpPostMultipart('/v3/domains', $params);
2016-10-27 01:34:27 -05:00
return $this->safeDeserialize($response, CreateResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Removes a domain from the account.
* WARNING: This action is irreversible! Be cautious!
*
* @param string $domain Name of the domain.
*
* @return DeleteResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function delete($domain)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
$response = $this->httpDelete(sprintf('/v3/domains/%s', $domain));
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, DeleteResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Returns a list of SMTP credentials for the specified domain.
*
* @param string $domain Name of the domain.
* @param int $limit Number of credentials to return
* @param int $skip Number of credentials to omit from the list
*
* @return CredentialResponse
2016-10-27 01:34:27 -05:00
*/
public function credentials($domain, $limit = 100, $skip = 0)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
Assert::integer($limit);
Assert::integer($skip);
$params = [
'limit' => $limit,
'skip' => $skip,
];
$response = $this->httpGet(sprintf('/v3/domains/%s/credentials', $domain), $params);
2016-10-27 01:34:27 -05:00
return $this->safeDeserialize($response, CredentialResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Create a new SMTP credential pair for the specified domain.
*
* @param string $domain Name of the domain.
* @param string $login SMTP Username.
* @param string $password SMTP Password. Length min 5, max 32.
*
* @return CreateCredentialResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function createCredential($domain, $login, $password)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
Assert::stringNotEmpty($login);
Assert::stringNotEmpty($password);
Assert::lengthBetween($password, 5, 32, 'SMTP password must be between 5 and 32 characters.');
$params = [
'login' => $login,
'password' => $password,
];
$response = $this->httpPostMultipart(sprintf('/v3/domains/%s/credentials', $domain), $params);
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, CreateCredentialResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Update a set of SMTP credentials for the specified domain.
*
* @param string $domain Name of the domain.
* @param string $login SMTP Username.
* @param string $pass New SMTP Password. Length min 5, max 32.
*
* @return UpdateCredentialResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function updateCredential($domain, $login, $pass)
{
Assert::stringNotEmpty($domain);
Assert::stringNotEmpty($login);
Assert::stringNotEmpty($pass);
Assert::lengthBetween($pass, 5, 32, 'SMTP password must be between 5 and 32 characters.');
$params = [
'password' => $pass,
];
$response = $this->httpPutMultipart(
2016-10-27 01:34:27 -05:00
sprintf(
'/v3/domains/%s/credentials/%s',
$domain,
$login
),
$params
);
return $this->deserializer->deserialize($response, UpdateCredentialResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Remove a set of SMTP credentials from the specified domain.
*
* @param string $domain Name of the domain.
* @param string $login SMTP Username.
*
* @return DeleteCredentialResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function deleteCredential($domain, $login)
{
Assert::stringNotEmpty($domain);
Assert::stringNotEmpty($login);
$response = $this->httpDelete(
2016-10-27 01:34:27 -05:00
sprintf(
'/v3/domains/%s/credentials/%s',
$domain,
$login
)
);
return $this->deserializer->deserialize($response, DeleteCredentialResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Returns delivery connection settings for the specified domain.
*
* @param string $domain Name of the domain.
*
* @return ConnectionResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function connection($domain)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
$response = $this->httpGet(sprintf('/v3/domains/%s/connection', $domain));
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, ConnectionResponse::class);
2016-10-27 01:34:27 -05:00
}
/**
* Updates the specified delivery connection settings for the specified domain.
* If a parameter is passed in as null, it will not be updated.
*
* @param string $domain Name of the domain.
* @param bool|null $requireTLS Enforces that messages are sent only over a TLS connection.
* @param bool|null $noVerify Disables TLS certificate and hostname verification.
*
* @return UpdateConnectionResponse|array|ResponseInterface
2016-10-27 01:34:27 -05:00
*/
public function updateConnection($domain, $requireTLS, $noVerify)
2016-10-27 01:34:27 -05:00
{
Assert::stringNotEmpty($domain);
Assert::nullOrBoolean($requireTLS);
Assert::nullOrBoolean($noVerify);
$params = [];
if (null !== $requireTLS) {
$params['require_tls'] = $requireTLS ? 'true' : 'false';
}
if (null !== $noVerify) {
$params['skip_verification'] = $noVerify ? 'true' : 'false';
}
$response = $this->httpPutMultipart(sprintf('/v3/domains/%s/connection', $domain), $params);
2016-10-27 01:34:27 -05:00
return $this->deserializer->deserialize($response, UpdateConnectionResponse::class);
2016-10-27 01:34:27 -05:00
}
}