{{/*
# 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.
*/}}

{{- $dot := default . .dot -}}
{{- $trustedDomain := default "cluster.local" $dot.Values.serviceMesh.authorizationPolicy.trustedDomain -}}
{{- $authorizedPrincipals := default list $dot.Values.serviceMesh.authorizationPolicy.authorizedPrincipals -}}
{{- $authorizedPrincipalsMetrics := default list $dot.Values.serviceMesh.authorizationPolicy.authorizedPrincipalsMetrics -}}
{{- $defaultOperationMethods := list "GET" "POST" "PUT" "PATCH" "DELETE" -}}
{{- $relName := include "common.release" . -}}

{{- if (include "common.useAuthorizationPolicies" .) }}
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: {{ include "common.fullname" (dict "suffix" "authz" "dot" . )}}
  namespace: {{ include "common.namespace" . }}
spec:
  selector:
    matchLabels:
      app: {{ include "common.name" . }}
  action: ALLOW
  rules:
{{-   if $authorizedPrincipals }}
{{-     range $principal := $authorizedPrincipals }}
  - 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 }}
---
{{- if (include "common.useAuthorizationPolicies" .) }}
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: {{ include "common.fullname" (dict "suffix" "metrics-authz" "dot" . )}}
  namespace: {{ include "common.namespace" . }}
spec:
  selector:
    matchLabels:
      app: {{ include "common.name" . }}-metrics
  action: ALLOW
  rules:
{{-   if $authorizedPrincipalsMetrics }}
{{-     range $principal := $authorizedPrincipalsMetrics }}
  - 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 }}
