{{/*
# Copyright © 2023 Nordix Foundation
#
# Licensed 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.
*/}}

{{ include "common.authorizationPolicy" . }}
---
{{- $dot := default . .dot -}}
{{- $trustedDomain := default "cluster.local" $dot.Values.serviceMesh.authorizationPolicy.trustedDomain -}}
{{- $authorizedPrincipalsSdnHosts := default list $dot.Values.serviceMesh.authorizationPolicy.authorizedPrincipalsSdnHosts -}}
{{- $defaultOperationMethods := list "GET" "POST" "PUT" "PATCH" "DELETE" -}}
{{- $relName := include "common.release" . -}}
{{- if (include "common.useAuthorizationPolicies" .) }}
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: sdnhost-{{ include "common.servicename" . }}-authz
  namespace: {{ include "common.namespace" . }}
spec:
  selector:
    matchLabels:
      app: sdnhost-{{ include "common.name" . }}
  action: ALLOW
  rules:
{{-   if $authorizedPrincipalsSdnHosts }}
{{-     range $principal := $authorizedPrincipalsSdnHosts }}
  - from:
    - source:
        principals:
{{-       $namespace := default "onap" $principal.namespace -}}
{{-       if eq "onap" $namespace }}
        - "{{ $trustedDomain }}/ns/{{ $namespace }}/sa/{{ $relName }}-{{ $principal.serviceAccount }}"
{{-       else }}
        - "{{ $trustedDomain }}/ns/{{ $namespace }}/sa/{{ $principal.serviceAccount }}"
{{-       end }}
    to:
    - operation:
        methods:
{{-       if $principal.allowedOperationMethods }}
{{-         range $method := $principal.allowedOperationMethods }}
        - {{ $method }}
{{-         end }}
{{-       else }}
{{-         range $method := $defaultOperationMethods }}
        - {{ $method }}
{{-         end }}
{{-       end }}
{{-     end }}
{{-   end }}
{{- end }}