You are here

public function VclHandler::uploadEdgeModule in Fastly 8.3

Uploads Edge module to fastly.

Parameters

$name: Name of the module.

$values: Values array for vcl template.

Return value

bool Successfull or not.

Throws

\Twig\Error\LoaderError

\Twig\Error\RuntimeError

\Twig\Error\SyntaxError

File

src/VclHandler.php, line 1264

Class

VclHandler
Class to control the VCL handling.

Namespace

Drupal\fastly

Code

public function uploadEdgeModule($name, $values) {
  $this
    ->cloneLastActiveVersion();
  switch ($name) {
    case 'blackfire_integration':
    case 'cors_headers':
    case 'countryblock':
    case 'datadome_integration':
    case 'force_cache_miss_on_hard_reload_for_admins':
    case 'increase_timeouts_long_jobs':
    case 'mobile_device_detection':
    case 'netacea_integration':
    case 'disable_cache':
    case 'other_cms_integration':
    case 'redirect_hosts':
    case 'url_rewrites':

      // Load module config.
      $moduleConfig = FastlyEdgeModulesHelper::getModules();
      $moduleConfig = $moduleConfig[$name];

      // Go through each vcl config upload it to fastly.
      foreach ($moduleConfig['vcl'] as $vcl) {
        if (isset($vcl['priority'])) {
          $data['priority'] = $vcl['priority'];
        }
        $data['name'] = FastlyEdgeModulesHelper::FASTLY_EDGE_MODULE_PREFIX . $name . '_' . $vcl['type'];

        // load vcl template and render it
        $path = drupal_get_path('module', 'fastly') . '/fastly_edge_modules/templates/';
        $loader = new \Twig\Loader\ArrayLoader([
          'template' => file_get_contents($path . $vcl['template'] . '.html.twig', TRUE),
        ]);
        $twig = new \Twig\Environment($loader);
        $data['content'] = $twig
          ->render('template', $values);

        // Skip if template is empty.
        if (empty($data['content'])) {
          continue;
        }
        $data['type'] = $vcl['type'];
        $requests = $this
          ->prepareSingleVcl($data, FastlyEdgeModulesHelper::FASTLY_EDGE_MODULE_PREFIX);
        foreach ($requests as $request) {
          $request['headers'] = is_null($request['headers']) ? [] : $request['headers'];
          $response = $this
            ->vclRequestWrapper($request['url'], $request['headers'], $request['data'], $request['type']);
          if ($response
            ->getStatusCode() != "200") {
            return FALSE;
          }
        }
      }
      break;
  }

  // Activation of version.
  $request = $this
    ->prepareActivateVersion();
  $response = $this
    ->vclRequestWrapper($request['url'], $request['headers'], [], $request['type']);
  if ($response
    ->getStatusCode() != "200") {
    $this->messenger
      ->addError($response
      ->getBody());
    return FALSE;
  }
  return TRUE;
}