diff --git a/source/config.php b/source/config.php index 3ffa021..b10cf92 100644 --- a/source/config.php +++ b/source/config.php @@ -9,6 +9,7 @@ return [ "appname" => "SG-Gateway", "appversion" => "alpha 1.0", "operationmode" => "development" + ], "core" => diff --git a/source/defs/Hookmanager/Hookmanager.php b/source/defs/Hookmanager/Hookmanager.php index 2c7f87a..0cd14f1 100644 --- a/source/defs/Hookmanager/Hookmanager.php +++ b/source/defs/Hookmanager/Hookmanager.php @@ -2,6 +2,8 @@ use \Slim\Http\Request as Request; use \Slim\Http\Response as Response; +use Yadakhov\Json as Json; + // The hookmanager is the web-exposed class that allows you to manage a user within the billing system. // This system takes care of CRUD operations on customers. It doesn't keep track of order but it does suspend @@ -10,15 +12,21 @@ use \Slim\Http\Response as Response; class Hookmanager { + private $Customer; + private $Renderview; + private $APITools; + private $Mailer; + + // Can be overloaded by child classes in order to add new features.W protected $alertTypes = [ @@ -43,12 +51,110 @@ class Hookmanager $this->Customer = new Customer(); $this->Renderview = new EmailRenderer(); $this->APITools = new ApplicationAPI(); + $this->JsonHelper = new Json(); // Create mailer when needed } + + /** + * + * This function detects the intent within the payload. + * After doing so, it returns the intent back to you so that you can perfom the correct redirect + * + */ + public function detectPayloadIntent(Request $request, Response $response, $args) + { + if ($this->keyValidate($keyFromURI)) + { + + $data = $this->getStructuredVariableList($Request); + + foreach ($this->alertTypes as $types => $value) + { + if ($types == $data['alert_name']) + { + $sVal = $value; + } + } + + // Uses the response and redirect objects and the intent from the current request to redirect it + $this->redirectAlert($request, $response, $sVal); + + + } + + throw new LogicException("Illegal API key"); + + + } + + // The response and request method is passed by the redirecting method + private function redirectAlert(Request $Request, Response $response, $intent) + { + + switch ($intent) + { + // This serves as a proxy to all other methods + case "subscription_created": + + $this->EventSubscriptionCreated($Request, $response); + + + break; + + case "subscription_updated": + + $this->EventSubscriptionUpdated($Request, $response) + + break; + + case "subscription_cancelled": + + $this->EventSubscriptionCancelled($Request, $response); + + break; + + case "subscription_payment_successful": + + $this->EventSubscriptionPaymentSuccess($Request, $response); + + break; + + case "subscription_payment_failed": + + $this->EventSubscriptionPaymentFailed($Request, $response); + + break; + + case "subscription_payment_refunded": + + $this->EventSubscriptionPaymentRefunded($Request, $response); + + break; + + default: + + $this->JsonHelper->set + ([ + "status" => "fail", + "message" => "Error: Invalid alert type (Or middleman attack in-progress)", + "code" => 500 + + ]); + // Writing JsonHelper while it's not a string but an object will cause it to fire it's __toString method, which + // assembles the JSON defined in the array notation as written above in the form of an array. + // Calling Slim's withStatus method gives us the ability to tell the client something went wrong. + return $response->write($this->JsonHelper)->withStatus(500); + + } + + } + + + // Return POST variable list in a structured array, DRY private function getStructuredVariableList(Request $request) { @@ -65,96 +171,7 @@ class Hookmanager } - private function keyValidate($keyFromURI) - { - // FIXME: Theoretically, this method does not work. - // TODO: Devise a new way to validate keys without user ID - if($this->APITools->keysMatch($keyFromURI)) - { - return true; - } - else - { - return false; - } - } - public function detectPayloadIntent(Request $request, Response $response, $args) - { - if ($this->keyValidate($keyFromURI)) - { - - $data = $this->getStructuredVariableList($Request); - - foreach ($this->alertTypes as $types => $value) - { - if ($types == $data['alert_name']) - { - $sVal = $value; - } - } - - // Uses the response and redirect objects and the intent from the current request to redirect it - return $this->redirectAlert($request, $response, $sVal); - - - } - - throw new LogicException("Illegal API key"); - - - } - - // The response and request method is passed by the redirecting method - public function redirectAlert(Request $Request, Response $response, $intent) - { - - switch ($intent) - { - - case "subscription_created": - - return $response->withRedirect(, 307) - - break; - - case "subscription_updated": - - break; - - case "subscription_cancelled": - - - break; - - case "subscription_payment_successful": - - - break; - - case "subscription_payment_failed": - - - break; - - case "subscription_payment_refunded": - - - break; - - case "payment_refunded": - - - break; - - default: - - - // default code here - - } - - } public function EventSubscriptionCreated(Request $request, Response $response, $args) { @@ -163,12 +180,12 @@ class Hookmanager } - public function EventSubscriptionUpdated(Request $request, Response $response) + public function EventSubscriptionUpdated(Request $request, Response $response, $args) { // Update user information if necessary } - public function EventSubscriptionCancelled(Request $request, Response $response) + public function EventSubscriptionCancelled(Request $request, Response $response, $args) { // Suspend user's domain name as stated on DB @@ -176,7 +193,7 @@ class Hookmanager } - public function EventSubscriptionPaymentSuccess(Request $request, Response $response) + public function EventSubscriptionPaymentSuccess(Request $request, Response $response, $args) { // Renew user's subscription within billing system @@ -184,7 +201,7 @@ class Hookmanager } // TODO: Lenient business logic - public function EventSubscriptionPaymentFailed(Request $request, Response $response) + public function EventSubscriptionPaymentFailed(Request $request, Response $response, $args) { // Add payment strike to user account @@ -195,7 +212,7 @@ class Hookmanager } - public function EventSubscriptionPaymentRefunded(Request $request, Response $response) + public function EventSubscriptionPaymentRefunded(Request $request, Response $response, $args) { // Ban customer from billing system // Delete all customer data