{{- $port := ternary .Values.portal.containerPorts.https .Values.portal.containerPorts.http .Values.internalTLS.enabled | int -}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "harbor.portal" . }}
  namespace: {{ .Release.Namespace | quote }}
  labels: {{- include "common.labels.standard" . | nindent 4 }}
    {{- if .Values.commonLabels }}
    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
    {{- end }}
    app.kubernetes.io/component: portal
  {{- if .Values.commonAnnotations }}
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
  {{- end }}
data:
  nginx.conf: |+
    worker_processes auto;
    pid /tmp/nginx.pid;
    events {
        worker_connections  1024;
    }
    http {
        client_body_temp_path /tmp/client_body_temp;
        proxy_temp_path /tmp/proxy_temp;
        fastcgi_temp_path /tmp/fastcgi_temp;
        uwsgi_temp_path /tmp/uwsgi_temp;
        scgi_temp_path /tmp/scgi_temp;
        server {
            {{- if .Values.internalTLS.enabled }}
            {{- if .Values.ipFamily.ipv4.enabled }}
            listen {{ $port }} ssl;
            {{- end }}
            {{- if .Values.ipFamily.ipv6.enabled }}
            listen [::]:{{ $port }} ssl;
            {{- end }}
            # SSL
            ssl_certificate /etc/harbor/ssl/portal/tls.crt;
            ssl_certificate_key /etc/harbor/ssl/portal/tls.key;

            # Recommendations from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
            ssl_protocols TLSv1.2;
            ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
            ssl_prefer_server_ciphers on;
            ssl_session_cache shared:SSL:10m;
            {{- else }}
            {{- if .Values.ipFamily.ipv4.enabled }}
            listen {{ $port }};
            {{- end }}
            {{- if .Values.ipFamily.ipv6.enabled }}
            listen [::]:{{ $port }};
            {{- end }}
            {{- end }}
            server_name  localhost;
            root   /opt/bitnami/harbor;
            index  index.html index.htm;
            include /opt/bitnami/nginx/conf/mime.types;
            gzip on;
            gzip_min_length 1000;
            gzip_proxied expired no-cache no-store private auth;
            gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
            location / {
                try_files $uri $uri/ /index.html;
            }
            location = /index.html {
                add_header Cache-Control "no-store, no-cache, must-revalidate";
            }
        }
    }
