#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# virtual host loaded by the API Gateway for local development with docker-compose

# NOTE: This upstream should come from a service discovery component
#        All the upstreams could be generated sepparately and only included in the API Gateway
upstream whisk_controller {
  server whisk.controller:8888;
  keepalive 16;
}

server {
  listen 443 default ssl;

  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  10m;
  ssl_certificate      /etc/ssl/openwhisk-server-cert.pem;
  ssl_certificate_key  /etc/ssl/openwhisk-server-key.pem;
  ssl_verify_client off;
  ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers RC4:HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  proxy_ssl_session_reuse off;

  proxy_http_version 1.1;
  proxy_set_header Connection "";

  client_max_body_size 50m;     # allow bigger functions to be deployed

  location /docs {
    proxy_pass http://whisk_controller;
  }

  location /api-docs {
    proxy_pass http://whisk_controller;
  }

  location /api/v1 {
    proxy_pass http://whisk_controller;
    proxy_read_timeout 70s; # 60+10 additional seconds to allow controller to terminate request
  }

  location /blackbox.tar.gz {
    return 301 https://github.com/apache/openwhisk-runtime-docker/releases/download/sdk%400.1.0/blackbox-0.1.0.tar.gz;
  }

}
