.gitignore000064400000000036144761607240006546 0ustar00/vendor/ /tests/ composer.lockREADME.md000064400000000011144761607240006026 0ustar00# pwpush composer.json000064400000001210144761607240007273 0ustar00{ "name": "boru/pwpush", "type": "library", "autoload": { "psr-4": { "boru\\pwpush\\": "src/" } }, "authors": [ { "name": "Daniel Hayes", "email": "dhayes@boruapps.com" } ], "require": { "boru/dhttp": "*" }, "suggest": { "boru/dhdb": "dhDB library for database", "boru/dhcli": "CLI toolkit/library for making CLI apps", "boru/dhapi": "Toolkit/library for creating API apps" }, "repositories": [ { "type": "composer", "url": "https://satis.boruapps.com" } ] } src/Client.php000064400000013445144761607240007304 0ustar00setSchema($pushType); if(!empty($options)) { $this->setOptions($options); } if(!empty($baseUrl)) { $this->setBaseUrl($baseUrl); } } public function setOptions($options) { foreach($options as $item => $value) { $this->setOption($item,$value); } return $this; } public function setOption($item, $value) { if($item == "async") { $this->async = $value; return $this; } if($item == "throw") { $this->throw = $value; return $this; } if($item == "baseUrl") { $this->setBaseUrl($value); return $this; } if($item == "auth") { if(!is_array($value) || count($value) != 2) { throw new Exception("Invalid auth tokens, must be a 2 element array"); } $this->setAuth($value[0],$value[1]); return $this; } $this->schema->setOption($item, $value); return $this; } public function setBaseUrl($baseUrl) { $this->baseUrl = $baseUrl; return $this; } public function setAuth($user,$token) { $this->authTokens = [$user,$token]; } public function setSchema($pushType="text") { $pushType = strtolower($pushType); switch($pushType) { case "file": $this->schema = new FileSchema(); case "url": $this->schema = new UrlSchema(); case "text": default: $this->schema = new TextSchema(); } } private function url($what="push",$urlToken="",$passPhrase=null) { $url = $this->baseUrl.$this->schema->getUrlPrefix(); switch($what) { case "retrieve": $url .= "/".$urlToken.".json"; break; case "delete": $url .= "/".$urlToken.".json"; break; case "active": $url .= "/active.json"; break; case "expired": $url .= "/expired.json"; break; case "preview": $url .= "/".$urlToken."/preview.json"; break; case "audit": $url .= "/".$urlToken."/audit.json"; break; case "push": default: $url .= ".json"; break; } return $url . (!empty($passPhrase) ? "?passphrase=".$passPhrase : ""); } public function push($options=[]) { if(!empty($options)) { $this->setOptions($options); } $request = new Request(); $request->method("post"); $request->url($this->url("push")); $request->json($this->schema->toArray()); return $this->sendRequest($request); } public function get($urlToken,$passPhrase=null) { $request = new Request(); $request->method("get"); $request->url($this->url("retrieve",$urlToken,$passPhrase)); return $this->sendRequest($request); } public function delete($urlToken) { $request = new Request(); $request->method("delete"); $request->url($this->url("delete",$urlToken)); return $this->sendRequest($request); } public function active() { $request = new Request(); $request->method("get"); $request->url($this->url("active")); return $this->sendRequest($request); } public function expired() { $request = new Request(); $request->method("get"); $request->url($this->url("expired")); return $this->sendRequest($request); } public function preview($urlToken) { $request = new Request(); $request->method("get"); $request->url($this->url("preview",$urlToken)); return $this->sendRequest($request); } public function audit($urlToken) { $request = new Request(); $request->method("get"); $request->url($this->url("audit",$urlToken)); return $this->sendRequest($request); } /** * @param Request $request * @return bool|Response|PromiseInterface * @throws Exception */ private function sendRequest($request) { $request->async($this->async); if(!empty($this->authTokens)) { $request->header("X-User-Email",$this->authTokens[0]); $request->header("X-User-Token",$this->authTokens[1]); } $response = $request->send(); if($response instanceof \Exception) { if($this->throw) { throw $response; } return false; } if($this->async) { return $response; } else { if($response instanceof Response) { return $response->asArray(); } else { if($this->throw) { throw new \Exception("Response is not a Response object: ".print_r($response,true)); } return false; } } } } src/PwPush.php000064400000002475144761607240007315 0ustar00 1, "expire_after_views" => 5, "deletable_by_viewer" => false, "retrieval_step" => true, "baseUrl" => "https://pwpush.com" ]; public static function init($baseUrl) { self::$defaultOptions["baseUrl"] = $baseUrl; } public static function createSecret($content,$passPhrase,$options=[]) { $options["payload"] = $content; $options["passphrase"] = $passPhrase; $client = static::getTextClient($options); return $client->push(); } public static function getSecret($token,$passPhrase=null) { $client = static::getTextClient(); return $client->get($token,$passPhrase); } public static function getTextClient($options=[]) { $options = array_merge(self::$defaultOptions,$options); return new Client("text",$options); } public static function getFileClient($options=[]) { $options = array_merge(self::$defaultOptions,$options); return new Client("file",$options); } public static function getUrlClient($options=[]) { $options = array_merge(self::$defaultOptions,$options); return new Client("url",$options); } }src/schema/FileSchema.php000064400000000662144761607240011323 0ustar00setOptions($data); } } public function setOptions($data) { foreach($data as $item=>$value) { $this->setOption($item, $value); } return $this; } public function setOption($item, $value) { if(in_array($item, static::$required) || in_array($item, static::$optional)) { $this->data[$item] = $value; } return $this; } public function getUrlPrefix() { return static::$urlPrefix; } public function getRootElement() { return static::$rootElement; } public function getRequired() { return static::$required; } public function getOptional() { return static::$optional; } public function toArray($withRootElement = true) { $data = []; foreach($this->data as $item=>$value) { if($withRootElement) { $data[$this->getRootElement()][$item] = $value; } else { $data[$item] = $value; } } return $data; } public function toJson() { return json_encode($this->toArray()); } public function jsonSerialize() { return $this->toArray(); } }src/schema/TextSchema.php000064400000000661144761607240011367 0ustar00