---
- name: Test sysconfig
  hosts: all
  vars:
    __sshd_test_backup_files:
      - /etc/ssh/sshd_config
      - /etc/ssh/sshd_config.d/00-ansible_system_role.conf
      - /etc/sysconfig/sshd
  tasks:
    - name: "Backup configuration files"
      ansible.builtin.include_tasks: tasks/backup.yml

    - name: Configure sshd
      ansible.builtin.include_role:
        name: fedora.linux_system_roles.sshd
      vars:
        sshd_sysconfig: true
        sshd_sysconfig_override_crypto_policy: true
        sshd_sysconfig_use_strong_rng: 32

    - name: Verify the options are correctly set
      tags: tests::verify
      when:
        - ansible_facts['os_family'] == "RedHat"
        - ansible_facts['distribution'] != 'Fedora'
        - ansible_facts['distribution_major_version'] | int < 9
      block:
        - name: Flush handlers
          ansible.builtin.meta: flush_handlers

        - name: Print current configuration file
          ansible.builtin.slurp:
            src: /etc/sysconfig/sshd
          register: config

        - name: Evaluate sysconfig similarly as systemd
          ansible.builtin.shell: |
            set -eu
            if set -o | grep pipefail 2>&1 /dev/null ; then
              set -o pipefail
            fi
            source /etc/sysconfig/sshd
            echo "CP=|${CRYPTO_POLICY:-}|"
            echo "RNG=|${SSH_USE_STRONG_RNG:-}|"
          register: evaluation
          changed_when: false

        - name: Evaluate sysconfig similarly as systemd on RHEL 8
          ansible.builtin.shell: |
            set -eu
            if set -o | grep pipefail 2>&1 /dev/null ; then
              set -o pipefail
            fi
            source /etc/crypto-policies/back-ends/opensshserver.config
            source /etc/sysconfig/sshd
            echo "CP=|${CRYPTO_POLICY:-}|"
            echo "RNG=|${SSH_USE_STRONG_RNG:-}|"
          register: evaluation8
          changed_when: false
          when:
            - ansible_facts['os_family'] == "RedHat"
            - ansible_facts['distribution_major_version'] == "8"

        - name: Check the crypto policies is overridden in RHEL 8
          ansible.builtin.assert:
            that:
              - "'CRYPTO_POLICY=' in config.content | b64decode"
            # these are string variants in default configuration file
              - "'# CRYPTO_POLICY=' not in config.content | b64decode"
              - "'CP=||' in evaluation8.stdout"
          when:
            - ansible_facts['os_family'] == "RedHat"
            - ansible_facts['distribution_major_version'] == "8"

        - name: Check the RNG options are in configuration file
          ansible.builtin.assert:
            that:
              - "'SSH_USE_STRONG_RNG=32' in config.content | b64decode"
            # these are string variants in default configuration file
              - "'SSH_USE_STRONG_RNG=0' not in config.content | b64decode"
              - "'# SSH_USE_STRONG_RNG=1' not in config.content | b64decode"
              - "'RNG=|32|' in evaluation.stdout"

    - name: "Restore configuration files"
      ansible.builtin.include_tasks: tasks/restore.yml
