apiVersion: batch/v1
kind: Job
metadata:
  name: test-app-job-secrets-proxy
  namespace: default
spec:
  backoffLimit: 1
  template:
    metadata:
      annotations:
        ovai.asaintsever.org/inject: "true"
        ovai.asaintsever.org/mode: "secrets,proxy,job"  # Enable 'secrets', 'proxy' and 'job' modes
        ovai.asaintsever.org/proxy-port: "9999"     # Override default proxy port value (8200)
        # Open Vault Agent Injector receive the pod spec: don't know whether it is a job or a deployment. 
        # Annotation below is deprecated, use 'ovai.asaintsever.org/mode' instead.
        #ovai.asaintsever.org/workload: "job"
      labels:
        com.ovai.application: test
        com.ovai.service: test-app-svc
    spec:
      restartPolicy: Never
      # custom serviceAccountName with role allowing to perform GET on pods (needed to poll for job's pod status)
      serviceAccountName: job-sa
      containers:
        - name: test-app-job-secrets-proxy-container
          image: everpeace/curl-jq
          command:
            - "sh"
            - "-c"
            - |
              set -e
              while true; do
                echo "Wait for secrets file before running job..."
                if [ -f "/opt/ovai/secrets/secrets.properties" ]; then
                  echo "Secrets available"
                  break
                fi
                sleep 2
              done
              echo "Job started"
              echo "Now using Vault Agent as a proxy to leverage Encryption as a Service feature (will encrypt and decrypt our secrets here)"
              echo "Advantage: you do not need to deal with any Vault tokens and you just have to send requests to the local Vault Agent sidecar (available at 127.0.0.1) that will then forward everything to Vault server."
              echo

              plaintext=$(cat /opt/ovai/secrets/secrets.properties | grep SECRET1)
              echo "Data that is going to be ciphered and deciphered: $plaintext"
              echo
              b64Plaintext=$(echo "$plaintext" | base64)
              
              ciphertext=$(curl -s -X POST --data "{\"plaintext\": \"$b64Plaintext\"}" http://127.0.0.1:9999/v1/transit/encrypt/test-key | jq --raw-output .data.ciphertext)
              echo "Ciphertext"
              echo "=========="
              echo "$ciphertext"
              echo
              
              cleartext=$(curl -s -X POST --data "{\"ciphertext\": \"$ciphertext\"}" http://127.0.0.1:9999/v1/transit/decrypt/test-key | jq --raw-output .data.plaintext)
              echo "Cleartext"
              echo "=========="
              echo "$cleartext" | base64 -d
              echo
              echo "Job stopped"
          volumeMounts:
            - name: secrets
              mountPath: /opt/ovai/secrets
