server {
  listen 80;
  access_log /dev/stdout;
  error_log /dev/stdout;

  root   /usr/share/nginx/html;
  index  index.html index.htm;

  gzip_static on; # nginx will automatically search for a .gz version of a file and serve it if it exists

  set $dcos_release_version 1.6.1;

  set $serve_json false;

  if ($http_accept ~ ".*application/vnd\.dcos\.universe\.repo\+json;charset=utf-8;version=v3.*") {
    # The Accept header contains the v3 repo schema
    set $serve_json true;
    set $universe_version v3;
  }

  if ($http_accept ~ ".*application/vnd\.dcos\.universe\.repo\+json;charset=utf-8;version=v4.*") {
    # The Accept header contains the v4 repo schema
    set $serve_json true;
    set $universe_version v4;
  }

  if ($http_user_agent ~ ".*dcos\/1\.8.*") {
    set $dcos_release_version 1.8;
  }

  if ($http_user_agent ~ ".*dcos\/1\.9.*") {
    set $dcos_release_version 1.9;
  }

  if ($http_user_agent ~ ".*dcos\/1\.10.*") {
    set $dcos_release_version 1.10;
  }

  if ($http_user_agent ~ ".*dcos\/1\.11.*") {
    set $dcos_release_version 1.11;
  }

  location = /repo-1.7 {
    types {
      "application/vnd.dcos.universe.repo+json;charset=utf-8;version=v3" json;
      application/zip zip;
    }
    set $compound_if "";
    if ($serve_json = true) {
      set $compound_if "${compound_if}json";
    }
    if ($dcos_release_version != "1.7") {
      set $compound_if "${compound_if}notoneseven";
    }

    if ($compound_if ~ "jsonnotoneseven") {
      rewrite ^/repo-1.7$ /repo-empty-v3.json break;
    }

    rewrite ^/repo-1.7$ /repo-up-to-1.7.zip break;
  }

  location = /repo {
    types {
      application/zip zip;
    }

    if ($universe_version = v3) {
      rewrite ^/repo$ /v3;
    }

    if ($universe_version = v4) {
      rewrite ^/repo$ /v4;
    }

    rewrite ^/repo$ /repo-up-to-$dcos_release_version.zip break;
  }

  location = /v3 {
    internal;
    types {
      "application/vnd.dcos.universe.repo+json;charset=utf-8;version=v3" json;
    }
    rewrite ^/v3$ /repo-up-to-$dcos_release_version.json break;
  }

  location = /v4 {
    internal;
    types {
      "application/vnd.dcos.universe.repo+json;charset=utf-8;version=v4" json;
    }
    rewrite ^/v4$ /repo-up-to-$dcos_release_version.json break;
  }

}
