diff options
| author | Ahmed Abdelhalim <[email protected]> | 2025-11-24 22:16:43 +0100 |
|---|---|---|
| committer | Ahmed Abdelhalim <[email protected]> | 2025-11-24 22:29:51 +0100 |
| commit | bb251e5e6066d4eb89cdb70f682dfe7a88030a13 (patch) | |
| tree | 8a68bc1705bea688eb8b5e63307cc6323a4e6826 /roles/firefox/tasks | |
| parent | a41a92c635d7a4d5a72f55869082f1a76623cd45 (diff) | |
Add initial firefox role implementation with only GNOME support for pass
Diffstat (limited to 'roles/firefox/tasks')
| -rw-r--r-- | roles/firefox/tasks/install_browserpass.yml | 48 | ||||
| -rw-r--r-- | roles/firefox/tasks/install_passff.yml | 44 | ||||
| -rw-r--r-- | roles/firefox/tasks/main.yml | 45 |
3 files changed, 137 insertions, 0 deletions
diff --git a/roles/firefox/tasks/install_browserpass.yml b/roles/firefox/tasks/install_browserpass.yml new file mode 100644 index 00000000..50d6cef2 --- /dev/null +++ b/roles/firefox/tasks/install_browserpass.yml @@ -0,0 +1,48 @@ +--- +- name: "Add browserpass to default extensions" + ansible.builtin.set_fact: + firefox_default_extensions: "{{ firefox_default_extensions | combine(firefox_browserpass_extension) }}" + vars: + firefox_browserpass_extension: + "[email protected]": + installation_mode: "force_installed" + install_url: "https://addons.mozilla.org/firefox/downloads/latest/browserpass-ce/latest.xpi" + +- name: "Ensure browserpass native messaging host is installed" + become: true + ansible.builtin.package: + name: "{{ firefox_browserpass_packages }}" + state: "present" + +- name: "Create native messaging hosts directory" + become: true + ansible.builtin.file: + path: "/usr/lib/mozilla/native-messaging-hosts" + state: "directory" + mode: "0755" + +- name: "Create browserpass native messaging hosts file" + become: true + ansible.builtin.copy: + dest: "/usr/lib/mozilla/native-messaging-hosts/com.github.browserpass.native.json" + mode: "0644" + content: | + { + "name": "com.github.browserpass.native", + "description": "Browserpass native component for the Firefox extension", + "path": "/usr/lib/browserpass/browserpass-wrapper", + "type": "stdio", + "allowed_extensions": ["[email protected]"] + } + +- name: "Create browserpass-native wrapper" + become: true + ansible.builtin.copy: + dest: "/usr/lib/browserpass/browserpass-wrapper" + mode: "0755" + content: | + #!/bin/sh + # NOTE: this uses the dotfiles pinentry-wrapper which forces the usage of GUI pinentry in this case. + # REF: https://git.sr.ht/~a14m/.rc/tree/94b355aa0ce648e3d41bfa7ef76611e3650523d2/item/.gnupg/pinentry-wrapper + export PINENTRY_USER_DATA=gnome + exec /usr/lib/browserpass/browserpass-native "$@" diff --git a/roles/firefox/tasks/install_passff.yml b/roles/firefox/tasks/install_passff.yml new file mode 100644 index 00000000..70f3f397 --- /dev/null +++ b/roles/firefox/tasks/install_passff.yml @@ -0,0 +1,44 @@ +--- +- name: "Add passff to default extensions" + ansible.builtin.set_fact: + firefox_default_extensions: "{{ firefox_default_extensions | combine(firefox_passff_extension) }}" + vars: + firefox_passff_extension: + "[email protected]": + installation_mode: "force_installed" + install_url: "https://addons.mozilla.org/firefox/downloads/latest/passff/latest.xpi" + +- name: "Ensure passff native messaging host is installed" + become: true + ansible.builtin.shell: | + set -euo pipefail + curl -sSL https://codeberg.org/PassFF/passff-host/releases/download/latest/install_host_app.sh | bash -s -- firefox + args: + creates: "/usr/lib/mozilla/native-messaging-hosts/pro.invicem.passff.json" + executable: "/bin/bash" + +- name: "Create browserpass native messaging hosts file" + become: true + ansible.builtin.copy: + dest: "/usr/lib/mozilla/native-messaging-hosts/passff.json" + mode: "0644" + content: | + { + "name": "passff", + "description": "Host for communicating with zx2c4 pass", + "path": "/usr/lib/mozilla/native-messaging-hosts/passff-wrapper", + "type": "stdio", + "allowed_extensions": [ "[email protected]" ] + } + +- name: "Create passff wrapper" + become: true + ansible.builtin.copy: + dest: "/usr/lib/mozilla/native-messaging-hosts/passff-wrapper" + mode: "0755" + content: | + #!/bin/sh + # NOTE: this uses the dotfiles pinentry-wrapper which forces the usage of GUI pinentry in this case. + # REF: https://git.sr.ht/~a14m/.rc/tree/94b355aa0ce648e3d41bfa7ef76611e3650523d2/item/.gnupg/pinentry-wrapper + export PINENTRY_USER_DATA=gnome + exec /usr/lib/mozilla/native-messaging-hosts/passff.py "$@" diff --git a/roles/firefox/tasks/main.yml b/roles/firefox/tasks/main.yml new file mode 100644 index 00000000..be6c3e40 --- /dev/null +++ b/roles/firefox/tasks/main.yml @@ -0,0 +1,45 @@ +--- +- name: "Include OS-specific variables" + ansible.builtin.include_vars: "{{ ansible_os_family | lower }}.yml" + +- name: "Ensure firefox is installed" + become: true + ansible.builtin.package: + name: "{{ firefox_package }}" + state: "present" + +- name: "Create Firefox profile" + ansible.builtin.command: "firefox --headless -no-remote -CreateProfile {{ ansible_env.USER }}-profile" + args: + creates: "{{ firefox_folder }}/*{{ ansible_env.USER }}-profile/prefs.js" + +- name: "Install browserpass extension for Firefox" + ansible.builtin.include_tasks: "install_browserpass.yml" + when: firefox_install_browserpass | default(false) + +# NOTE: passff extension is using sed during install and python to run +# That's why the firefox role depends on these roles +- name: "Install passff extension for Firefox" + ansible.builtin.include_tasks: "install_passff.yml" + when: firefox_install_passff | default(false) + +- name: "Create policies directory" + become: true + ansible.builtin.file: + path: "/etc/firefox/policies" + state: "directory" + mode: "0755" + +- name: "Set firefox_policies fact" + ansible.builtin.set_fact: + firefox_policies: "{{ firefox_default_policies | combine(firefox_policies_override) }}" + +- name: "Create Firefox policies file" + become: true + ansible.builtin.copy: + dest: "/etc/firefox/policies/policies.json" + mode: "0644" + content: | + { + "policies": {{ firefox_policies | tojson(indent=4) }} + } |
