mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-02 01:52:10 +09:00
Merge branch 'rhymix:master' into develop
This commit is contained in:
commit
6e84829da4
80 changed files with 656 additions and 440 deletions
|
|
@ -79,24 +79,7 @@ class Cookie
|
|||
$options['samesite'] = config('cookie.samesite') ?? 'Lax';
|
||||
}
|
||||
|
||||
// PHP 7.3+ supports the samesite attribute natively. PHP 7.2 requires a hack.
|
||||
if (\PHP_VERSION_ID >= 70300)
|
||||
{
|
||||
$result = setcookie($name, $value, $options);
|
||||
}
|
||||
else
|
||||
{
|
||||
$expires = $options['expires'];
|
||||
$path = $options['path'] ?? '/';
|
||||
$domain = $options['domain'] ?? null;
|
||||
$secure = $options['secure'] ?? false;
|
||||
$httponly = $options['httponly'] ?? false;
|
||||
if (!empty($options['samesite']))
|
||||
{
|
||||
$path = ($path ?: '/') . '; SameSite=' . $options['samesite'];
|
||||
}
|
||||
$result = setcookie($name, $value, $expires, $path, $domain, $secure, $httponly);
|
||||
}
|
||||
$result = setcookie($name, $value, $options);
|
||||
|
||||
// Make the cookie immediately available server-side.
|
||||
if ($result && $options['expires'] >= 0)
|
||||
|
|
|
|||
|
|
@ -209,9 +209,10 @@ class HTTP
|
|||
];
|
||||
|
||||
// Add proxy settings.
|
||||
if (defined('__PROXY_SERVER__'))
|
||||
$proxy = config('other.proxy') ?: (defined('__PROXY_SERVER__') ? constant('__PROXY_SERVER__') : '');
|
||||
if ($proxy !== '')
|
||||
{
|
||||
$proxy = parse_url(constant('__PROXY_SERVER__'));
|
||||
$proxy = parse_url($proxy);
|
||||
$proxy_scheme = preg_match('/^(https|socks)/', $proxy['scheme'] ?? '') ? ($proxy['scheme'] . '://') : 'http://';
|
||||
$proxy_auth = (!empty($proxy['user']) && !empty($proxy['pass'])) ? ($proxy['user'] . ':' . $proxy['pass'] . '@') : '';
|
||||
$settings['proxy'] = sprintf('%s%s%s:%s', $proxy_scheme, $proxy_auth, $proxy['host'], $proxy['port']);
|
||||
|
|
|
|||
|
|
@ -79,17 +79,7 @@ class Session
|
|||
ini_set('session.use_cookies', 1);
|
||||
ini_set('session.use_only_cookies', 1);
|
||||
ini_set('session.use_strict_mode', 1);
|
||||
if ($samesite)
|
||||
{
|
||||
if (PHP_VERSION_ID >= 70300)
|
||||
{
|
||||
ini_set('session.cookie_samesite', $samesite);
|
||||
}
|
||||
else
|
||||
{
|
||||
$path = ($path ?: '/') . '; SameSite=' . $samesite;
|
||||
}
|
||||
}
|
||||
ini_set('session.cookie_samesite', $samesite ? 1 : 0);
|
||||
session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly);
|
||||
session_name($session_name = Config::get('session.name') ?: session_name());
|
||||
|
||||
|
|
|
|||
|
|
@ -899,19 +899,23 @@ class Template
|
|||
protected function _v2_checkCapability(int $check_type, $capability): bool
|
||||
{
|
||||
$grant = \Context::get('grant');
|
||||
if ($check_type === 1)
|
||||
if (!($grant instanceof \Rhymix\Modules\Module\Models\Permission))
|
||||
{
|
||||
return isset($grant->$capability) ? boolval($grant->$capability) : false;
|
||||
return false;
|
||||
}
|
||||
elseif ($check_type === 1)
|
||||
{
|
||||
return $grant->can($capability);
|
||||
}
|
||||
elseif ($check_type === 2)
|
||||
{
|
||||
return isset($grant->$capability) ? !boolval($grant->$capability) : true;
|
||||
return !$grant->can($capability);
|
||||
}
|
||||
elseif (is_array($capability))
|
||||
{
|
||||
foreach ($capability as $cap)
|
||||
{
|
||||
if (isset($grant->$cap) && $grant->$cap)
|
||||
if ($grant->can($cap))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,15 +7,6 @@ namespace Rhymix\Framework\Drivers\Mail;
|
|||
*/
|
||||
class MailFunction extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
||||
{
|
||||
/**
|
||||
* Direct invocation of the constructor is not permitted.
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
include_once \RX_BASEDIR . 'common/libraries/swift_mail.php';
|
||||
$this->_mailer = new \Swift_Mailer(new \Swift_MailTransport);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the human-readable name of this mail driver.
|
||||
*
|
||||
|
|
@ -58,6 +49,12 @@ class MailFunction extends Base implements \Rhymix\Framework\Drivers\MailInterfa
|
|||
*/
|
||||
public function send(\Rhymix\Framework\Mail $message)
|
||||
{
|
||||
if ($this->_mailer === null)
|
||||
{
|
||||
include_once \RX_BASEDIR . 'common/libraries/swift_mail.php';
|
||||
$this->_mailer = new \Swift_Mailer(new \Swift_MailTransport);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$errors = [];
|
||||
|
|
|
|||
|
|
@ -116,12 +116,13 @@ class Mailgun extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
|||
// Send the API request.
|
||||
$url = self::$_url . '/' . $this->_config['api_domain'] . '/messages.mime';
|
||||
$request = \Rhymix\Framework\HTTP::post($url, $data, $headers, [], $settings);
|
||||
$result = @json_decode($request->getBody()->getContents());
|
||||
$result_text = $request->getBody()->getContents();
|
||||
$result = @json_decode($result_text);
|
||||
|
||||
// Parse the result.
|
||||
if (!$result)
|
||||
{
|
||||
$message->errors[] = 'Mailgun: API error: ' . $request->getBody()->getContents();
|
||||
$message->errors[] = 'Mailgun: API error: ' . $result_text;
|
||||
return false;
|
||||
}
|
||||
elseif (!$result->id)
|
||||
|
|
|
|||
|
|
@ -7,23 +7,6 @@ namespace Rhymix\Framework\Drivers\Mail;
|
|||
*/
|
||||
class SMTP extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
||||
{
|
||||
/**
|
||||
* Direct invocation of the constructor is not permitted.
|
||||
*/
|
||||
protected function __construct(array $config)
|
||||
{
|
||||
$security = in_array($config['smtp_security'], ['ssl', 'tls']) ? $config['smtp_security'] : null;
|
||||
$transport = new \Swift_SmtpTransport($config['smtp_host'], $config['smtp_port'], $security);
|
||||
$transport->setUsername($config['smtp_user']);
|
||||
$transport->setPassword($config['smtp_pass']);
|
||||
$local_domain = $transport->getLocalDomain();
|
||||
if (preg_match('/^\*\.(.+)$/', $local_domain, $matches))
|
||||
{
|
||||
$transport->setLocalDomain($matches[1]);
|
||||
}
|
||||
$this->mailer = new \Swift_Mailer($transport);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of configuration fields required by this mail driver.
|
||||
*
|
||||
|
|
@ -56,9 +39,32 @@ class SMTP extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
|||
*/
|
||||
public function send(\Rhymix\Framework\Mail $message)
|
||||
{
|
||||
if ($this->_mailer === null)
|
||||
{
|
||||
if (isset($this->_config['smtp_security']) && in_array($this->_config['smtp_security'], ['ssl', 'tls']))
|
||||
{
|
||||
$security = $this->_config['smtp_security'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$security = null;
|
||||
}
|
||||
|
||||
$transport = new \Swift_SmtpTransport($this->_config['smtp_host'], $this->_config['smtp_port'], $security);
|
||||
$transport->setUsername($this->_config['smtp_user']);
|
||||
$transport->setPassword($this->_config['smtp_pass']);
|
||||
$local_domain = $transport->getLocalDomain();
|
||||
if (preg_match('/^\*\.(.+)$/', $local_domain, $matches))
|
||||
{
|
||||
$transport->setLocalDomain($matches[1]);
|
||||
}
|
||||
$this->_mailer = new \Swift_Mailer($transport);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$result = $this->mailer->send($message->message, $errors);
|
||||
$errors = [];
|
||||
$result = $this->_mailer->send($message->message, $errors);
|
||||
}
|
||||
catch(\Exception $e)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -151,7 +151,8 @@ class FCMv1 extends Base implements PushInterface
|
|||
foreach ($responses as $i => $response)
|
||||
{
|
||||
$status_code = $response->getStatusCode();
|
||||
$result = @json_decode($response->getBody()->getContents());
|
||||
$result_text = $response->getBody()->getContents();
|
||||
$result = @json_decode($result_text);
|
||||
if ($status_code === 200)
|
||||
{
|
||||
$output->success[$tokens[$i]] = $result->name ?? '';
|
||||
|
|
@ -164,6 +165,10 @@ class FCMv1 extends Base implements PushInterface
|
|||
{
|
||||
$output->invalid[$tokens[$i]] = $tokens[$i];
|
||||
}
|
||||
elseif (str_contains($error_message, 'Requested entity was not found'))
|
||||
{
|
||||
$output->invalid[$tokens[$i]] = $tokens[$i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -196,7 +201,8 @@ class FCMv1 extends Base implements PushInterface
|
|||
foreach ($responses as $i => $response)
|
||||
{
|
||||
$status_code = $response->getStatusCode();
|
||||
$result = @json_decode($response->getBody()->getContents());
|
||||
$result_text = $response->getBody()->getContents();
|
||||
$result = @json_decode($result_text);
|
||||
if ($status_code === 200)
|
||||
{
|
||||
$output->success[$topics[$i]] = $result->name ?? '';
|
||||
|
|
|
|||
|
|
@ -93,8 +93,8 @@ class DB implements QueueInterface
|
|||
public function addTask(string $handler, ?object $args = null, ?object $options = null): int
|
||||
{
|
||||
$oDB = RFDB::getInstance();
|
||||
$stmt = $oDB->prepare('INSERT INTO task_queue (handler, args, options) VALUES (?, ?, ?)');
|
||||
$result = $stmt->execute([$handler, serialize($args), serialize($options)]);
|
||||
$stmt = $oDB->prepare('INSERT INTO task_queue (handler, args, options, regdate) VALUES (?, ?, ?, ?)');
|
||||
$result = $stmt->execute([$handler, serialize($args), serialize($options), date('Y-m-d H:i:s')]);
|
||||
return $result ? $oDB->getInsertID() : 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,141 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Rhymix\Framework\Drivers\SMS;
|
||||
|
||||
/**
|
||||
* The ApiStore SMS driver.
|
||||
*/
|
||||
class ApiStore extends Base implements \Rhymix\Framework\Drivers\SMSInterface
|
||||
{
|
||||
/**
|
||||
* API specifications.
|
||||
*/
|
||||
protected static $_spec = array(
|
||||
'max_recipients' => 500,
|
||||
'sms_max_length' => 90,
|
||||
'sms_max_length_in_charset' => 'CP949',
|
||||
'lms_supported' => true,
|
||||
'lms_supported_country_codes' => array(82),
|
||||
'lms_max_length' => 2000,
|
||||
'lms_max_length_in_charset' => 'CP949',
|
||||
'lms_subject_supported' => true,
|
||||
'lms_subject_max_length' => 60,
|
||||
'mms_supported' => false,
|
||||
'delay_supported' => true,
|
||||
);
|
||||
|
||||
/**
|
||||
* Config keys used by this driver are stored here.
|
||||
*/
|
||||
protected static $_required_config = array('api_user', 'api_key');
|
||||
|
||||
/**
|
||||
* Check if the current SMS driver is supported on this server.
|
||||
*
|
||||
* This method returns true on success and false on failure.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSupported()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the last response.
|
||||
*/
|
||||
protected $_last_response = '';
|
||||
|
||||
/**
|
||||
* Send a message.
|
||||
*
|
||||
* This method returns true on success and false on failure.
|
||||
*
|
||||
* @param array $messages
|
||||
* @param object $original
|
||||
* @return bool
|
||||
*/
|
||||
public function send(array $messages, \Rhymix\Framework\SMS $original)
|
||||
{
|
||||
$status = true;
|
||||
|
||||
foreach ($messages as $i => $message)
|
||||
{
|
||||
$data = array();
|
||||
$data['send_phone'] = $message->from;
|
||||
$data['dest_phone'] = implode(',', $message->to);
|
||||
$data['msg_body'] = strval($message->content);
|
||||
if ($message->type !== 'SMS' && $message->subject)
|
||||
{
|
||||
$data['subject'] = $message->subject;
|
||||
}
|
||||
|
||||
$result = $this->_apiCall(sprintf('message/%s', strtolower($message->type)), $data);
|
||||
if (!$result)
|
||||
{
|
||||
$message->errors[] = 'ApiStore API returned invalid response: ' . $this->_getLastResponse();
|
||||
$status = false;
|
||||
}
|
||||
if ($result->result_message !== 'OK')
|
||||
{
|
||||
$message->errors[] = 'ApiStore API error: ' . $result->result_code . ' ' . $result->result_message;
|
||||
}
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* API call.
|
||||
*
|
||||
* @param string $url
|
||||
* @param array $data
|
||||
* @param string $method (optional)
|
||||
* @return object|false
|
||||
*/
|
||||
protected function _apiCall(string $url, array $data, string $method = 'POST')
|
||||
{
|
||||
// Build the request URL.
|
||||
if ($data['version'])
|
||||
{
|
||||
$version = $data['version'];
|
||||
unset($data['version']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$version = 1;
|
||||
}
|
||||
$url = sprintf('http://api.apistore.co.kr/ppurio/%d/%s/%s', $version, trim($url, '/'), $this->_config['api_user']);
|
||||
|
||||
// Set the API key in the header.
|
||||
$headers = array(
|
||||
'x-waple-authorization' => $this->_config['api_key'],
|
||||
);
|
||||
|
||||
// Send the API reqeust.
|
||||
if ($method === 'GET')
|
||||
{
|
||||
if ($data)
|
||||
{
|
||||
$url .= '?' . http_build_query($data);
|
||||
}
|
||||
$this->_last_response = \FileHandler::getRemoteResource($url, null, 5, $method, null, $headers) ?: '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_last_response = \FileHandler::getRemoteResource($url, $data, 5, $method, null, $headers) ?: '';
|
||||
}
|
||||
$result = @json_decode($this->_last_response);
|
||||
return $result ?: false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the last API response.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _getLastResponse()
|
||||
{
|
||||
return $this->_last_response;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue