晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/public_html/oldTZh/wp-content/plugins/digits/Twilio/Jwt/TaskRouter/ |
Upload File : |
<?php
namespace Twilio\Jwt\TaskRouter;
use Exception;
use Twilio\Jwt\JWT;
/**
* Twilio TaskRouter Capability assigner
*
* @author Justin Witz <justin.witz@twilio.com>
* @license http://creativecommons.org/licenses/MIT/ MIT
*/
class CapabilityToken {
protected $accountSid;
protected $authToken;
protected $baseUrl = 'https://taskrouter.twilio.com/v1';
protected $baseWsUrl = 'https://event-bridge.twilio.com/v1/wschannels';
protected $version = 'v1';
protected $workspaceSid;
protected $channelId;
protected $resourceUrl;
protected $required = array("required" => true);
protected $optional = array("required" => false);
private $friendlyName;
/** @var Policy[] $policies */
private $policies;
public function __construct($accountSid, $authToken, $workspaceSid, $channelId, $resourceUrl = null, $overrideBaseUrl = null, $overrideBaseWSUrl = null) {
$this->accountSid = $accountSid;
$this->authToken = $authToken;
$this->friendlyName = $channelId;
$this->policies = array();
$this->workspaceSid = $workspaceSid;
$this->channelId = $channelId;
if (isset($overrideBaseUrl)) {
$this->baseUrl = $overrideBaseUrl;
}
if (isset($overrideBaseWSUrl)) {
$this->baseWsUrl = $overrideBaseWSUrl;
}
$this->baseUrl = $this->baseUrl . '/Workspaces/' . $workspaceSid;
$this->validateJWT();
if (!isset($resourceUrl)) {
$this->setupResource();
}
//add permissions to GET and POST to the event-bridge channel
$this->allow($this->baseWsUrl . "/" . $this->accountSid . "/" . $this->channelId, "GET", null, null);
$this->allow($this->baseWsUrl . "/" . $this->accountSid . "/" . $this->channelId, "POST", null, null);
//add permissions to fetch the instance resource
$this->allow($this->resourceUrl, "GET", null, null);
}
private function validateJWT() {
if (!isset($this->accountSid) || substr($this->accountSid, 0, 2) != 'AC') {
throw new Exception("Invalid AccountSid provided: " . $this->accountSid);
}
if (!isset($this->workspaceSid) || substr($this->workspaceSid, 0, 2) != 'WS') {
throw new Exception("Invalid WorkspaceSid provided: " . $this->workspaceSid);
}
if (!isset($this->channelId)) {
throw new Exception("ChannelId not provided");
}
$prefix = substr($this->channelId, 0, 2);
if ($prefix != 'WS' && $prefix != 'WK' && $prefix != 'WQ') {
throw new Exception("Invalid ChannelId provided: " . $this->channelId);
}
}
protected function setupResource() {
}
public function allow($url, $method, $queryFilter = array(), $postFilter = array()) {
$this->addPolicyDeconstructed($url, $method, $queryFilter, $postFilter, true);
}
public function addPolicyDeconstructed($url, $method, $queryFilter = array(), $postFilter = array(), $allow = true) {
$policy = new Policy($url, $method, $queryFilter, $postFilter, $allow);
array_push($this->policies, $policy);
return $policy;
}
public function deny($url, $method, $queryFilter = array(), $postFilter = array()) {
$this->addPolicyDeconstructed($url, $method, $queryFilter, $postFilter, false);
}
public function allowFetchSubresources() {
$method = 'GET';
$queryFilter = array();
$postFilter = array();
$this->allow($this->resourceUrl . '/**', $method, $queryFilter, $postFilter);
}
public function allowUpdates() {
$method = 'POST';
$queryFilter = array();
$postFilter = array();
$this->allow($this->resourceUrl, $method, $queryFilter, $postFilter);
}
public function allowUpdatesSubresources() {
$method = 'POST';
$queryFilter = array();
$postFilter = array();
$this->allow($this->resourceUrl . '/**', $method, $queryFilter, $postFilter);
}
public function allowDelete() {
$method = 'DELETE';
$queryFilter = array();
$postFilter = array();
$this->allow($this->resourceUrl, $method, $queryFilter, $postFilter);
}
public function allowDeleteSubresources() {
$method = 'DELETE';
$queryFilter = array();
$postFilter = array();
$this->allow($this->resourceUrl . '/**', $method, $queryFilter, $postFilter);
}
public function generateToken($ttl = 3600, $extraAttributes = array()) {
$payload = array(
'version' => $this->version,
'friendly_name' => $this->friendlyName,
'iss' => $this->accountSid,
'exp' => time() + $ttl,
'account_sid' => $this->accountSid,
'channel' => $this->channelId,
'workspace_sid' => $this->workspaceSid
);
if (substr($this->channelId, 0, 2) == 'WK') {
$payload['worker_sid'] = $this->channelId;
} else if (substr($this->channelId, 0, 2) == 'WQ') {
$payload['taskqueue_sid'] = $this->channelId;
}
foreach ($extraAttributes as $key => $value) {
$payload[$key] = $value;
}
$policyStrings = array();
foreach ($this->policies as $policy) {
$policyStrings[] = $policy->toArray();
}
$payload['policies'] = $policyStrings;
return JWT::encode($payload, $this->authToken, 'HS256');
}
}