コード例 #1
0
 /**
  * Handle process on http request
  * 
  * @param \React\Http\Request $request
  * @param \React\Http\Request $response
  */
 public function onHttpRequest(\React\Http\Request $request, $response)
 {
     if ($request->getPath() !== "/auth/github/callback") {
         $response->writeHead(404, ['Content-Type' => 'text/plain']);
         $response->end("Not Found");
         return;
     }
     $query = $request->getQuery();
     if (!isset($query['state']) || !isset($query['code'])) {
         $response->writeHead(200, ['Content-Type' => 'text/plain']);
         $response->end("No Code or State query params found");
         return;
     }
     //If we don't already have a promise for this state, create one
     if (!isset($this->promises[$query['state']])) {
         $deferred = new Deferred();
         $this->promises[$query['state']] = $deferred;
     }
     $accessToken = $this->getAccessToken($query['code']);
     if ($accessToken) {
         $email = $this->getEmails($accessToken)[0]->email;
         $this->promises[$query['state']]->resolve(["SUCCESS", ["authid" => $email]]);
     } else {
         $this->promises[$query['state']]->resolve(["FAILURE"]);
     }
     $response->writeHead(200, ['Content-Type' => 'text/html']);
     $response->end("<script>window.close();</script>");
 }