/**
  * @task auth
  */
 public function generateAuthorizationCode(PhutilURI $redirect_uri)
 {
     $code = Filesystem::readRandomCharacters(32);
     $client = $this->getClient();
     $authorization_code = new PhabricatorOAuthServerAuthorizationCode();
     $authorization_code->setCode($code);
     $authorization_code->setClientPHID($client->getPHID());
     $authorization_code->setClientSecret($client->getSecret());
     $authorization_code->setUserPHID($this->getUser()->getPHID());
     $authorization_code->setRedirectURI((string) $redirect_uri);
     $authorization_code->save();
     return $authorization_code;
 }