- name: 'Install pure-ftpd related packages'
  apt:
    pkg: '{{ item }}'
    state: 'installed'
    update_cache: 'yes'
  with_items:
    - 'pure-ftpd'
  when: with_ftp

- name: 'Install pure-ftpd configuration'
  lineinfile:
    dest: '/etc/pure-ftpd/conf/{{ item.dest }}'
    regexp: '{{ item.regexp }}'
    line: '{{ item.line }}'
    create: yes
  with_items:
    - { dest: 'BrokenClientsCompatibility', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'ChrootEveryone', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'DontResolve', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'NoAnonymous', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'NoChmod', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'PAMAuthentication', regexp: '^(yes|no)', line: 'yes' }
    - { dest: 'VerboseLog', regexp: '^(yes|no)', line: 'no' }
    - { dest: 'MinUID', regexp: '^[0-9]+$', line: '34' } # Debian's uid(backup) = 34
  notify:
    - 'Restart pure-ftpd'
  when: with_ftp

- name: 'Enable pure-ftpd internal DB'
  file:
    src: '/etc/pure-ftpd/conf/PureDB'
    path: '/etc/pure-ftpd/auth/80puredb'
    state: 'link'
  notify:
    - 'Restart pure-ftpd'
  when: with_ftp

- name: 'Clean up pure-ftpd internal DB'
  raw: pure-pw list 2>/dev/null | sed -r 's/^(\S+)\s.*$/\1/' | while read u ; do pure-pw userdel "${u}" ; done
  when: with_ftp

- name: 'Create FTP accounts home directory'
  file:
    path: '{{item.home}}'
    owner: '{{item.uid}}'
    group: '{{item.gid}}'
    mode: 0755
    state: 'directory'
  with_items: ftp_accounts
  when: ftp_accounts and with_ftp

- name: 'Add FTP accounts in pure-ftpd'
  raw: printf "{{item.password}}\n{{item.password}}\n" | pure-pw useradd "{{item.user}}" -d "{{item.home}}" -u "{{item.uid}}" -g "{{item.gid}}"
  with_items: ftp_accounts
  when: ftp_accounts and with_ftp

- name: 'Rebuild pure-ftpd internal DB'
  raw: pure-pw mkdb 2>/dev/null
  when: with_ftp

- name: 'Ensure pure-ftpd is running'
  service:
    name: 'pure-ftpd'
    state: 'started'
  when: with_ftp