<?php

final class ConduitGetCapabilitiesConduitAPIMethod extends ConduitAPIMethod {

  public function getAPIMethodName() {
    return 'conduit.getcapabilities';
  }

  public function shouldRequireAuthentication() {
    return false;
  }

  public function getMethodDescription() {
    return pht(
      'List capabilities, wire formats, and authentication protocols '.
      'available on this server.');
  }

  protected function defineParamTypes() {
    return array();
  }

  protected function defineReturnType() {
    return 'dict<string, any>';
  }

  public function getRequiredScope() {
    return self::SCOPE_ALWAYS;
  }

  protected function execute(ConduitAPIRequest $request) {
    $authentication = array(
      'token',
      'asymmetric',
      'session',
      'sessionless',
    );

    $oauth_app = 'PhabricatorOAuthServerApplication';
    if (PhabricatorApplication::isClassInstalled($oauth_app)) {
      $authentication[] = 'oauth';
    }

    return array(
      'authentication' => $authentication,
      'signatures' => array(
        'consign',
      ),
      'input' => array(
        'json',
        'urlencoded',
      ),
      'output' => array(
        'json',
        'human',
      ),
    );
  }

}