├── .all-contributorsrc ├── .deepsource.toml ├── .github ├── stale.yml └── workflows │ ├── codeql-analysis.yml │ ├── install-ajenti.yml │ └── release.yml ├── .gitignore ├── CHANGELOG.txt ├── LICENSE ├── Makefile ├── README.md ├── ajenti-core ├── .gitignore ├── MANIFEST.in ├── aj │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── endpoint.py │ │ ├── http.py │ │ └── mail.py │ ├── auth.py │ ├── compat.py │ ├── config.py │ ├── core.py │ ├── entry.py │ ├── gate │ │ ├── __init__.py │ │ ├── gate.py │ │ ├── middleware.py │ │ ├── session.py │ │ ├── stream.py │ │ └── worker.py │ ├── http.py │ ├── https_redirect.py │ ├── log.py │ ├── plugins.py │ ├── routing.py │ ├── security │ │ ├── __init__.py │ │ ├── pwreset.py │ │ ├── totp.py │ │ └── verifier.py │ ├── static │ │ ├── emails │ │ │ └── reset_email.html │ │ └── images │ │ │ ├── Logo.png │ │ │ └── error.jpeg │ ├── util │ │ ├── __init__.py │ │ ├── broadcast_queue.py │ │ ├── lazy.py │ │ ├── misc.py │ │ ├── pidfile.py │ │ ├── public.py │ │ └── strings.py │ └── wsgi.py ├── requirements.txt ├── setup.cfg └── setup.py ├── ajenti-panel ├── aj ├── ajenti-client-ssl-gen ├── ajenti-panel ├── ajenti-ssl-gen ├── ajenti-upgrade ├── config.yml ├── packaging │ └── files │ │ ├── .placeholder │ │ ├── ajenti │ │ ├── ajenti-bsd │ │ └── ajenti.service ├── setup.cfg └── setup.py ├── debian ├── scripts │ └── postinstall.sh └── systemd │ └── ajenti2.service ├── docs ├── CHANGELOG ├── COPYRIGHT ├── LICENSE ├── Makefile ├── img │ ├── Logo.png │ ├── rd-check_cert-add.png │ ├── rd-check_cert-list.png │ ├── rd-cron-add.png │ ├── rd-cron-list.png │ ├── rd-dashboard.png │ ├── rd-date.png │ ├── rd-docker-containers.png │ ├── rd-docker-images.png │ ├── rd-filemanager-permissions.png │ ├── rd-filemanager-properties.png │ ├── rd-filemanager.png │ ├── rd-fstab-file.png │ ├── rd-fstab-mount.png │ ├── rd-login.png │ ├── rd-network.png │ ├── rd-notepad.png │ ├── rd-packages.png │ ├── rd-plugins.png │ ├── rd-power.png │ ├── rd-pwreset.png │ ├── rd-sessions.png │ ├── rd-settings-general.png │ ├── rd-settings-security.png │ ├── rd-settings-smtp.png │ ├── rd-settings.png │ ├── rd-softraid.png │ ├── rd-systemd.png │ ├── rd-terminal.png │ ├── rd-users-list.png │ └── rd-users-properties.png └── source │ ├── _static │ └── style.css │ ├── _templates │ ├── layout.html │ └── page.html │ ├── conf.py │ ├── dev │ ├── about.rst │ ├── dash-widgets.rst │ ├── http.rst │ ├── intro-core.rst │ ├── intro.rst │ ├── multitool.rst │ ├── resources.rst │ └── ui.rst │ ├── index.rst │ ├── man │ ├── config.rst │ ├── contributing.rst │ ├── install.rst │ ├── run.rst │ └── security.rst │ ├── plugins │ ├── check_certificates.rst │ ├── core.rst │ ├── cron.rst │ ├── dashboard.rst │ ├── datetime.rst │ ├── docker.rst │ ├── filemanager.rst │ ├── fstab.rst │ ├── network.rst │ ├── notepad.rst │ ├── packages.rst │ ├── plugins.rst │ ├── power.rst │ ├── services.rst │ ├── session_list.rst │ ├── settings.rst │ ├── terminal.rst │ └── users.rst │ ├── ref │ ├── aj.api.endpoint.rst │ ├── aj.api.http.rst │ ├── aj.config.rst │ ├── aj.core.rst │ ├── aj.entry.rst │ ├── aj.http.rst │ ├── aj.plugins.augeas.api.rst │ ├── aj.plugins.auth-users.api.rst │ ├── aj.plugins.check_certificates.api.rst │ ├── aj.plugins.core.api.push.rst │ ├── aj.plugins.core.api.sidebar.rst │ ├── aj.plugins.core.api.tasks.rst │ ├── aj.plugins.dashboard.api.rst │ ├── aj.plugins.datetime.api.rst │ ├── aj.plugins.network.api.rst │ ├── aj.plugins.packages.api.rst │ ├── aj.plugins.power.api.rst │ ├── aj.plugins.rst │ ├── aj.plugins.services.api.rst │ ├── aj.rst │ └── jadi.rst │ └── refjs │ ├── ace.rst │ ├── augeas.rst │ ├── core.rst │ ├── filesystem.rst │ ├── passwd.rst │ ├── services.rst │ └── terminal.rst ├── e2e ├── .gitignore ├── conf.coffee ├── package.json ├── run └── specs │ ├── filemanager.coffee │ ├── notepad.coffee │ ├── pre.coffee │ └── terminal.coffee ├── official_plugins.json ├── package.json ├── plugins ├── .gitignore ├── ace │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── plugin.yml │ ├── requirements.txt │ └── resources │ │ ├── css │ │ └── ace.less │ │ └── js │ │ ├── directives │ │ └── ace.es │ │ └── module.es ├── augeas │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ └── js │ │ │ ├── module.es │ │ │ └── services │ │ │ ├── aug.service.es │ │ │ └── augeas.service.es │ └── views.py ├── auth_users │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── users.service.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── check_certificates │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── index.controller.coffee │ │ │ │ └── widget.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ ├── index.html │ │ │ └── widget.html │ ├── views.py │ └── widget.py ├── core │ ├── README.md │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── navbox.py │ │ ├── push.py │ │ ├── sidebar.py │ │ └── tasks.py │ ├── bower.json │ ├── content │ │ └── pages │ │ │ └── index.html │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── css │ │ │ ├── animations.less │ │ │ ├── app.less │ │ │ ├── bootstrap │ │ │ │ ├── bootstrap.less │ │ │ │ └── variables.less │ │ │ ├── colors.less │ │ │ ├── overrides.less │ │ │ └── responsive.less │ │ ├── extra-vendor │ │ │ └── socket.io.js │ │ ├── images │ │ │ └── icon.png │ │ ├── js │ │ │ ├── app.es │ │ │ ├── babel.js │ │ │ ├── core │ │ │ │ ├── controllers │ │ │ │ │ ├── error.controller.es │ │ │ │ │ ├── index.controller.es │ │ │ │ │ ├── login.controller.es │ │ │ │ │ ├── navbox.controller.es │ │ │ │ │ ├── pwreset.controller.es │ │ │ │ │ ├── root.controller.es │ │ │ │ │ ├── tasks.controller.es │ │ │ │ │ └── totp.controller.es │ │ │ │ ├── directives │ │ │ │ │ ├── autofocus.es │ │ │ │ │ ├── checkbox.es │ │ │ │ │ ├── datePickerFix.es │ │ │ │ │ ├── dialog.es │ │ │ │ │ ├── fitToParent.es │ │ │ │ │ ├── floatingToolbar.es │ │ │ │ │ ├── keyboardFocus.es │ │ │ │ │ ├── messageboxContainer.es │ │ │ │ │ ├── ngEnter.es │ │ │ │ │ ├── progressSpinner.es │ │ │ │ │ ├── rootAccess.es │ │ │ │ │ ├── sidebar.es │ │ │ │ │ └── smartProgress.es │ │ │ │ ├── filters.es │ │ │ │ ├── interceptors.es │ │ │ │ ├── module.es │ │ │ │ ├── routing.es │ │ │ │ └── services │ │ │ │ │ ├── config.service.es │ │ │ │ │ ├── core.service.es │ │ │ │ │ ├── customization.service.es │ │ │ │ │ ├── favicon.service.es │ │ │ │ │ ├── gettext.service.es │ │ │ │ │ ├── hotkeys.service.es │ │ │ │ │ ├── identity.service.es │ │ │ │ │ ├── messagebox.service.es │ │ │ │ │ ├── notify.service.es │ │ │ │ │ ├── pageTitle.service.es │ │ │ │ │ ├── push.service.es │ │ │ │ │ ├── socket.service.es │ │ │ │ │ └── tasks.service.es │ │ │ └── js_extensions.es │ │ └── partial │ │ │ ├── 404.html │ │ │ ├── index.html │ │ │ ├── login.html │ │ │ ├── reset_password.html │ │ │ ├── reset_password_send.html │ │ │ ├── serverErrorMessage.html │ │ │ ├── sidebarItem.html │ │ │ ├── sidebarTasks.html │ │ │ └── totp.html │ └── views │ │ ├── __init__.py │ │ ├── api.py │ │ ├── config.py │ │ ├── main.py │ │ ├── push.py │ │ ├── resource_server.py │ │ └── tasks.py ├── cron │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── dashboard │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── css │ │ │ └── styles.less │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── cpuWidget.controller.es │ │ │ │ ├── hostnameWidget.controller.es │ │ │ │ ├── index.controller.es │ │ │ │ ├── loadAverageWidget.controller.es │ │ │ │ ├── memoryWidget.controller.es │ │ │ │ └── uptimeWidget.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── dashboard.service.es │ │ └── partial │ │ │ ├── index.html │ │ │ ├── widget.html │ │ │ └── widgets │ │ │ ├── cpu.html │ │ │ ├── hostname.html │ │ │ ├── loadavg.html │ │ │ ├── memory.html │ │ │ └── uptime.html │ ├── views.py │ └── widgets │ │ ├── __init__.py │ │ ├── cpu.py │ │ ├── hostname.py │ │ ├── loadavg.py │ │ ├── memory.py │ │ └── uptime.py ├── datetime │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── managers │ │ ├── __init__.py │ │ ├── centos_manager.py │ │ └── debian_manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── datetime.service.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── dns_api │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── manager.py │ ├── plugin.yml │ ├── providers │ │ ├── __init__.py │ │ └── gandi.py │ ├── record.py │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── docker │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── filemanager │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ └── resources │ │ ├── js │ │ ├── controllers │ │ │ ├── index.controller.es │ │ │ └── properties.controller.es │ │ ├── module.es │ │ └── routing.es │ │ └── partial │ │ ├── index.html │ │ └── properties.html ├── filesystem │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── widget.controller.es │ │ │ ├── directives │ │ │ │ ├── fileDialog.es │ │ │ │ ├── fileDialog.html │ │ │ │ └── pathSelector.es │ │ │ ├── module.es │ │ │ └── services │ │ │ │ └── filesystem.service.es │ │ └── partial │ │ │ ├── widget.config.html │ │ │ └── widget.html │ ├── tasks.py │ ├── views.py │ └── widget.py ├── fstab │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── iptables │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── network │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── aug.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── managers │ │ ├── __init__.py │ │ ├── centos_manager.py │ │ ├── debian_manager.py │ │ ├── gentoo_manager.py │ │ ├── ifconfig.py │ │ ├── ip.py │ │ └── ubuntu_manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── dns.controller.es │ │ │ │ ├── hosts.controller.es │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── network.service.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── notepad │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ └── resources │ │ ├── js │ │ ├── controllers │ │ │ └── index.controller.es │ │ ├── module.es │ │ └── routing.es │ │ └── partial │ │ └── index.html ├── packages │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── managers │ │ ├── __init__.py │ │ ├── apt_manager.py │ │ ├── pip_manager.py │ │ └── yum_manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── packages.service.es │ │ └── partial │ │ │ └── index.html │ ├── tasks.py │ └── views.py ├── passwd │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ └── js │ │ │ ├── module.es │ │ │ └── services │ │ │ └── passwd.service.es │ └── views.py ├── plugins │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ └── module.es │ │ └── partial │ │ │ └── index.html │ ├── tasks.py │ └── views.py ├── power │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── index.controller.es │ │ │ │ └── widget.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── power.service.es │ │ └── partial │ │ │ ├── index.html │ │ │ └── widget.html │ ├── views.py │ └── widget.py ├── services │ ├── README.md │ ├── __init__.py │ ├── api.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── managers │ │ ├── __init__.py │ │ ├── systemd_manager.py │ │ └── sysv_manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── index.controller.es │ │ │ │ └── widget.controller.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── services.service.es │ │ └── partial │ │ │ ├── index.html │ │ │ ├── systemd_status.modal.html │ │ │ ├── widget.config.html │ │ │ └── widget.html │ ├── views.py │ └── widget.py ├── session_list │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── index.controller.coffee │ │ │ │ └── widget.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ ├── index.html │ │ │ └── widget.html │ ├── views.py │ └── widget.py ├── settings │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── views.py ├── softraid │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ ├── softraid.py │ └── views.py ├── supervisor │ ├── __init__.py │ ├── api.py │ ├── aug.py │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── js │ │ │ ├── controllers │ │ │ │ └── index.controller.es │ │ │ ├── module.es │ │ │ └── routing.es │ │ └── partial │ │ │ └── index.html │ └── supervisor.aug ├── terminal │ ├── README.md │ ├── __init__.py │ ├── bower.json │ ├── locale │ │ ├── af │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── app.pot │ │ ├── ar │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── be │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bn │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── bs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ca │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── en │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── eo │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── es-ES │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── et │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fa │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── fy-NL │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── he │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ka │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── lv │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── my │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-BR │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── pt-PT │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr-CS │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sv-SE │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── sw │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tlh-AA │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── tzl │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ ├── zh-CN │ │ │ └── LC_MESSAGES │ │ │ │ └── app.po │ │ └── zh-TW │ │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── main.py │ ├── manager.py │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ │ ├── css │ │ │ └── terminal.less │ │ ├── js │ │ │ ├── controllers │ │ │ │ ├── index.controller.es │ │ │ │ ├── view.controller.es │ │ │ │ └── widget.controller.es │ │ │ ├── directives │ │ │ │ └── terminal.es │ │ │ ├── module.es │ │ │ ├── routing.es │ │ │ └── services │ │ │ │ └── terminals.service.es │ │ └── partial │ │ │ ├── index.html │ │ │ ├── view.html │ │ │ ├── widget.config.html │ │ │ └── widget.html │ ├── terminal.py │ ├── views.py │ └── widget.py └── traffic │ ├── README.md │ ├── __init__.py │ ├── locale │ ├── af │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── app.pot │ ├── ar │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── be │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── bg │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── bn │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── bs │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ca │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── cs │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── da │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── de │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── el │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── en │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── eo │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── es-ES │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── et │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── fa │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── fi │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── fy-NL │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── he │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── hr │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── hu │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── id │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── it │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ja │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ka │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ko │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── lt │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── lv │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── my │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── no │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── pt-BR │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── pt-PT │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ro │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sk │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sl │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sr-CS │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sr │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sv-SE │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── sw │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── th │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── tlh-AA │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── tr │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── tzl │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── uk │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── vi │ │ └── LC_MESSAGES │ │ │ └── app.po │ ├── zh-CN │ │ └── LC_MESSAGES │ │ │ └── app.po │ └── zh-TW │ │ └── LC_MESSAGES │ │ └── app.po │ ├── plugin.yml │ ├── requirements.txt │ ├── resources │ ├── js │ │ ├── controllers │ │ │ └── widget.controller.es │ │ └── module.es │ └── partial │ │ ├── widget.config.html │ │ └── widget.html │ ├── views.py │ └── widget.py ├── pylama.ini ├── requirements-rtd.txt ├── scripts ├── ajenti.conf ├── build_deb.sh ├── ci-setup.sh ├── ci.sh ├── install-dev.sh ├── install-venv.sh └── install.sh ├── setup.cfg ├── tests-karma ├── .gitignore ├── karma.conf.coffee ├── package.json ├── test-extras.coffee ├── test-main.coffee └── tests │ ├── augeas.service.coffee │ └── core │ ├── core.service.coffee │ ├── filters │ ├── bytes.coffee │ ├── ordinal.coffee │ ├── page.coffee │ ├── rankMatch.coffee │ └── time.coffee │ ├── identity.service.coffee │ ├── interceptors.coffee │ ├── notify.service.coffee │ ├── pageTitle.service.coffee │ ├── push.service.coffee │ ├── socket.service.coffee │ └── tasks.service.coffee └── tests-pytest ├── ajenti-test-instance.py └── tests ├── __init__.py └── test_base.py /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | test_patterns = [ 4 | "tests-karma/**", 5 | "tests-nose/**" 6 | ] 7 | 8 | exclude_patterns = [] 9 | 10 | [[analyzers]] 11 | name = "python" 12 | enabled = true 13 | 14 | [analyzers.meta] 15 | runtime_version = "3.x.x" 16 | additional_builtins = ["_"] 17 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "tagged-release" 3 | 4 | on: 5 | push: 6 | tags: 7 | - "v*" 8 | 9 | jobs: 10 | tagged-release: 11 | name: "Tagged Release" 12 | runs-on: "ubuntu-latest" 13 | 14 | steps: 15 | - uses: "marvinpinto/action-automatic-releases@latest" 16 | with: 17 | repo_token: "${{ secrets.GITHUB_TOKEN }}" 18 | prerelease: false 19 | draft: true 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /**/.DS_Store 2 | /**/bower_components 3 | /**/node_modules 4 | /**/.idea 5 | *.sublime-* 6 | .~lock.* 7 | *~ 8 | *.deb 9 | *.pyc 10 | *.gz 11 | *.whl 12 | *.egg* 13 | *.asc 14 | .last-upload 15 | plugins/demo* 16 | /**/build 17 | *.mo 18 | .idea* 19 | .crowdin.key 20 | .crowdin.token 21 | .mypy_cache 22 | -------------------------------------------------------------------------------- /ajenti-core/.gitignore: -------------------------------------------------------------------------------- 1 | build/* 2 | 3 | -------------------------------------------------------------------------------- /ajenti-core/MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include aj * *.* 2 | recursive-exclude aj *~ *.pyc 3 | include Makefile 4 | include requirements.txt 5 | -------------------------------------------------------------------------------- /ajenti-core/aj/api/__init__.py: -------------------------------------------------------------------------------- 1 | from jadi import interface, component, service, Context, NoImplementationError 2 | 3 | 4 | __all__ = [ 5 | 'interface', 6 | 'component', 7 | 'service', 8 | 'Context', 9 | 'NoImplementationError', 10 | ] 11 | -------------------------------------------------------------------------------- /ajenti-core/aj/gate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/ajenti-core/aj/gate/__init__.py -------------------------------------------------------------------------------- /ajenti-core/aj/security/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/ajenti-core/aj/security/__init__.py -------------------------------------------------------------------------------- /ajenti-core/aj/static/images/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/ajenti-core/aj/static/images/Logo.png -------------------------------------------------------------------------------- /ajenti-core/aj/static/images/error.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/ajenti-core/aj/static/images/error.jpeg -------------------------------------------------------------------------------- /ajenti-core/aj/util/__init__.py: -------------------------------------------------------------------------------- 1 | from aj.util.broadcast_queue import BroadcastQueue 2 | from aj.util.public import public 3 | from aj.util.strings import str_fsize 4 | from aj.util.misc import make_report, platform_select 5 | from aj.util.lazy import LazyModule 6 | 7 | __all__ = [ 8 | 'BroadcastQueue', 9 | 'public', 10 | 'str_fsize', 11 | 'make_report', 12 | 'platform_select', 13 | 'LazyModule', 14 | ] -------------------------------------------------------------------------------- /ajenti-core/aj/util/broadcast_queue.py: -------------------------------------------------------------------------------- 1 | import weakref 2 | from gevent.queue import Queue 3 | 4 | 5 | class BroadcastQueue(): 6 | def __init__(self): 7 | self._queues = [] 8 | 9 | def register(self): 10 | q = Queue() 11 | self._queues.append(weakref.ref(q)) 12 | return q 13 | 14 | def broadcast(self, val): 15 | for q in list(self._queues): 16 | if q(): 17 | q().put(val) 18 | else: 19 | self._queues.remove(q) 20 | -------------------------------------------------------------------------------- /ajenti-core/aj/util/public.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | 4 | def public(f): 5 | """" 6 | Use a decorator to avoid retyping function/class names. 7 | 8 | Based on an idea by Duncan Booth: 9 | http://groups.google.com/group/comp.lang.python/msg/11cbb03e09611b8a 10 | 11 | Improved via a suggestion by Dave Angel: 12 | http://groups.google.com/group/comp.lang.python/msg/3d400fb22d8a42e1 13 | 14 | """ 15 | _all = sys.modules[f.__module__].__dict__.setdefault('__all__', []) 16 | if f.__name__ not in _all: # Prevent duplicates if run from an IDE. 17 | _all.append(f.__name__) 18 | return f 19 | -------------------------------------------------------------------------------- /ajenti-core/aj/util/strings.py: -------------------------------------------------------------------------------- 1 | def str_fsize(sz): 2 | """ 3 | Formats file size as string (i.e., 1.2 Mb) 4 | """ 5 | if sz < 1024: 6 | return f'{sz:.1f} bytes' 7 | sz /= 1024.0 8 | if sz < 1024: 9 | return f'{sz:.1f} KB' 10 | sz /= 1024.0 11 | if sz < 1024: 12 | return f'{sz:.1f} MB' 13 | sz /= 1024.0 14 | if sz < 1024: 15 | return f'{sz:.1f} GB' 16 | sz /= 1024.0 17 | return f'{sz:.1f} TB' 18 | 19 | 20 | -------------------------------------------------------------------------------- /ajenti-core/requirements.txt: -------------------------------------------------------------------------------- 1 | # core 2 | arrow 3 | bs4 4 | cookies 5 | cryptography 6 | distro 7 | greenlet>=2.0.2 8 | gevent>=23.9.1 9 | gevent-websocket 10 | gipc==1.8.0 11 | itsdangerous 12 | jadi>=1.0.3 13 | jinja2 14 | lxml>=2.2.4 15 | passlib 16 | pexpect 17 | psutil>=2.2.1 18 | pyOpenSSL 19 | pyotp 20 | python-daemon 21 | python-socketio==5.8.0 22 | python-engineio==4.4.1 23 | pyyaml 24 | qrcode 25 | reconfigure 26 | requests>=2 27 | setproctitle 28 | simplejson 29 | six>=1.9.0 30 | termcolor 31 | pip>=20 32 | setuptools>=41 33 | -------------------------------------------------------------------------------- /ajenti-core/setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_wheel] 2 | universal = 1 3 | -------------------------------------------------------------------------------- /ajenti-panel/aj: -------------------------------------------------------------------------------- 1 | ../ajenti-core/aj -------------------------------------------------------------------------------- /ajenti-panel/packaging/files/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/ajenti-panel/packaging/files/.placeholder -------------------------------------------------------------------------------- /ajenti-panel/packaging/files/ajenti-bsd: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # PROVIDE: ajenti 4 | # REQUIRE: netif 5 | # KEYWORD: nojail 6 | 7 | . /etc/rc.subr 8 | 9 | name="ajenti" 10 | command="/usr/local/bin/ajenti-panel" 11 | start_cmd="/usr/local/bin/ajenti-panel -d" 12 | procname="/usr/local/bin/ajenti-panel" 13 | command_interpreter=`readlink -f /usr/local/bin/python` 14 | 15 | load_rc_config $name 16 | run_rc_command "$1" -------------------------------------------------------------------------------- /ajenti-panel/packaging/files/ajenti.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Ajenti - an easy server administration frontend 3 | 4 | [Service] 5 | Type=forking 6 | PIDFile=/var/run/ajenti.pid 7 | ExecStart=/usr/bin/ajenti-panel -d 8 | 9 | [Install] 10 | WantedBy=multi-user.target 11 | -------------------------------------------------------------------------------- /ajenti-panel/setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_wheel] 2 | universal = 1 3 | -------------------------------------------------------------------------------- /debian/systemd/ajenti2.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Ajenti panel 3 | After=network.target 4 | 5 | [Service] 6 | Type=forking 7 | PIDFile=/var/run/ajenti.pid 8 | ExecStart=/usr/bin/python3 /usr/local/bin/ajenti-panel -d 9 | ExecStartPost=/bin/sleep 5 10 | 11 | [Install] 12 | WantedBy=multi-user.target 13 | -------------------------------------------------------------------------------- /docs/CHANGELOG: -------------------------------------------------------------------------------- 1 | ajenti (__VERSION__) UNRELEASED; urgency=low 2 | 3 | * Initial pre-release. 4 | 5 | -- Eugeny Pankov <e@ajenti.org> __DATE__ 6 | -------------------------------------------------------------------------------- /docs/img/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/Logo.png -------------------------------------------------------------------------------- /docs/img/rd-check_cert-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-check_cert-add.png -------------------------------------------------------------------------------- /docs/img/rd-check_cert-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-check_cert-list.png -------------------------------------------------------------------------------- /docs/img/rd-cron-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-cron-add.png -------------------------------------------------------------------------------- /docs/img/rd-cron-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-cron-list.png -------------------------------------------------------------------------------- /docs/img/rd-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-dashboard.png -------------------------------------------------------------------------------- /docs/img/rd-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-date.png -------------------------------------------------------------------------------- /docs/img/rd-docker-containers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-docker-containers.png -------------------------------------------------------------------------------- /docs/img/rd-docker-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-docker-images.png -------------------------------------------------------------------------------- /docs/img/rd-filemanager-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-filemanager-permissions.png -------------------------------------------------------------------------------- /docs/img/rd-filemanager-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-filemanager-properties.png -------------------------------------------------------------------------------- /docs/img/rd-filemanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-filemanager.png -------------------------------------------------------------------------------- /docs/img/rd-fstab-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-fstab-file.png -------------------------------------------------------------------------------- /docs/img/rd-fstab-mount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-fstab-mount.png -------------------------------------------------------------------------------- /docs/img/rd-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-login.png -------------------------------------------------------------------------------- /docs/img/rd-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-network.png -------------------------------------------------------------------------------- /docs/img/rd-notepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-notepad.png -------------------------------------------------------------------------------- /docs/img/rd-packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-packages.png -------------------------------------------------------------------------------- /docs/img/rd-plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-plugins.png -------------------------------------------------------------------------------- /docs/img/rd-power.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-power.png -------------------------------------------------------------------------------- /docs/img/rd-pwreset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-pwreset.png -------------------------------------------------------------------------------- /docs/img/rd-sessions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-sessions.png -------------------------------------------------------------------------------- /docs/img/rd-settings-general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-settings-general.png -------------------------------------------------------------------------------- /docs/img/rd-settings-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-settings-security.png -------------------------------------------------------------------------------- /docs/img/rd-settings-smtp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-settings-smtp.png -------------------------------------------------------------------------------- /docs/img/rd-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-settings.png -------------------------------------------------------------------------------- /docs/img/rd-softraid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-softraid.png -------------------------------------------------------------------------------- /docs/img/rd-systemd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-systemd.png -------------------------------------------------------------------------------- /docs/img/rd-terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-terminal.png -------------------------------------------------------------------------------- /docs/img/rd-users-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-users-list.png -------------------------------------------------------------------------------- /docs/img/rd-users-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/docs/img/rd-users-properties.png -------------------------------------------------------------------------------- /docs/source/_static/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'PT Sans', Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif; 3 | } 4 | 5 | h1,h2,h3,h4,h5,h6 { 6 | font-family: 'PT Sans', Lato, proxima-nova, 'Helvetica Neue', Arial, sans-serif; 7 | } -------------------------------------------------------------------------------- /docs/source/_templates/layout.html: -------------------------------------------------------------------------------- 1 | {% extends "!layout.html" %} 2 | {% set css_files = css_files + ['https://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700italic,700', '_static/style.css'] %} -------------------------------------------------------------------------------- /docs/source/plugins/cron.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_cron: 2 | 3 | Plugin cron 4 | *********** 5 | 6 | This plugin allows to handle all entries in a personal ``cron`` file. 7 | 8 | .. image:: ../../img/rd-cron-list.png 9 | 10 | This is quite equivalent as running ``crontab -l -u USER`` to manage your own cronjobs. 11 | 12 | With this plugin, you can: 13 | 14 | * add jobs, 15 | * remove jobs, 16 | * edit jobs, 17 | * edit special entries ( @yearly, etc ... ), 18 | * set environment variables, 19 | * add comments. 20 | 21 | .. image:: ../../img/rd-cron-add.png 22 | -------------------------------------------------------------------------------- /docs/source/plugins/datetime.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_datetime: 2 | 3 | Plugin datetime 4 | *************** 5 | 6 | This plugin displays the current time zone used, and time and date set on the server. 7 | 8 | .. image:: ../../img/rd-date.png 9 | 10 | It's possible to: 11 | 12 | * change the time zone used, 13 | * set the time on the server, 14 | * synchronize time using ``NTP`` (package ``ntpdate`` is for this necessary). -------------------------------------------------------------------------------- /docs/source/plugins/docker.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_docker: 2 | 3 | Plugin docker 4 | ************* 5 | 6 | This plugin allows to show all running containers and images from a locally docker instance. 7 | 8 | .. image:: ../../img/rd-docker-containers.png 9 | 10 | The default tab shows all containers, with their names and id, and you can: 11 | 12 | * start/stop a container, 13 | * remove a container, 14 | * see memory usage, cpu usage and network I/O 15 | 16 | On the second tab, you will see the stored images with their sizes. 17 | 18 | You can easily choose which one you want to delete. 19 | 20 | .. image:: ../../img/rd-docker-images.png 21 | -------------------------------------------------------------------------------- /docs/source/plugins/notepad.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_notepad: 2 | 3 | Plugin notepad 4 | ************** 5 | 6 | Based on the `ACE editor <https://ace.c9.io>`_, you can: 7 | 8 | * edit all plain text files, 9 | * create a new file, 10 | * save an existing file in another location, 11 | * manage all of these files with tabs. 12 | 13 | Hotkey: 14 | 15 | * Ctrl + O : open file 16 | * Ctrl + N : new file 17 | * Ctrl + S : save file 18 | 19 | .. image:: ../../img/rd-notepad.png -------------------------------------------------------------------------------- /docs/source/plugins/plugins.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_plugins: 2 | 3 | Plugin plugins 4 | ************** 5 | 6 | ``Ajenti`` is pretty flexible and allow anyone to write its own plugin (backend ``Python`` and frontend ``AngularJS``). 7 | 8 | In order to manage all plugins and their versions, the plugin ``plugins`` lists all available plugins, shows if they are installed, or if an update if published. 9 | 10 | The main plugin ``core`` can not be uninstalled, because ``Ajenti`` can not run without it, but you can check whenever a new version is available. 11 | 12 | Updating or removing a plugin is this way pretty easy. 13 | 14 | .. image:: ../../img/rd-plugins.png 15 | -------------------------------------------------------------------------------- /docs/source/plugins/power.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_power: 2 | 3 | Plugin power 4 | ************ 5 | 6 | Basically handle all around power management on your server. 7 | 8 | Uptime appears, and you can also reboot or shutdown the server if needed. 9 | 10 | .. image:: ../../img/rd-power.png 11 | 12 | -------------------------------------------------------------------------------- /docs/source/plugins/services.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_services: 2 | 3 | Plugin services 4 | *************** 5 | 6 | The plugin ``services`` shows the status of services in ``systemd`` or in ``system V init``. 7 | 8 | .. image:: ../../img/rd-systemd.png 9 | 10 | For the ``systemd`` unit services, you can: 11 | 12 | * start/stop/restart the service, 13 | * enable/disable the service, if not static. 14 | 15 | For the ``system V init`` services, you can: 16 | 17 | * start/stop/restart the service, 18 | * kill a running service. 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/source/plugins/session_list.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_session_list: 2 | 3 | Plugin session_list 4 | ******************* 5 | 6 | this plugin displays the logged users, their ip and the timeout. 7 | 8 | .. image:: ../../img/rd-sessions.png 9 | 10 | -------------------------------------------------------------------------------- /docs/source/plugins/terminal.rst: -------------------------------------------------------------------------------- 1 | .. _plugin_terminal: 2 | 3 | Plugin terminal 4 | *************** 5 | 6 | It would be really cool to have an terminal access on the server. That's exactly what this plugin does! 7 | 8 | You have the possibility to launch a command (and naturally see the result) or to open a whole terminal on the server. You will get the same environment as your user on the system. 9 | 10 | Type exit or Ctrl + D to come back to the terminal list. 11 | 12 | Hotkeys 13 | ======= 14 | 15 | * Ctrl + C : copy 16 | * Ctrl + V : paste 17 | * Ctrl + D : exit 18 | 19 | .. image:: ../../img/rd-terminal.png 20 | 21 | -------------------------------------------------------------------------------- /docs/source/ref/aj.api.endpoint.rst: -------------------------------------------------------------------------------- 1 | API: aj.api.endpoint 2 | ******************** 3 | 4 | .. automodule:: aj.api.endpoint 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.api.http.rst: -------------------------------------------------------------------------------- 1 | API: aj.api.http 2 | **************** 3 | 4 | .. automodule:: aj.api.http 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.config.rst: -------------------------------------------------------------------------------- 1 | API: aj.config 2 | ************** 3 | 4 | .. automodule:: aj.config 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.core.rst: -------------------------------------------------------------------------------- 1 | API: aj.core 2 | ************ 3 | 4 | .. automodule:: aj.core 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.entry.rst: -------------------------------------------------------------------------------- 1 | API: aj.entry 2 | ************* 3 | 4 | .. automodule:: aj.entry 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.http.rst: -------------------------------------------------------------------------------- 1 | API: aj.http 2 | ************ 3 | 4 | .. automodule:: aj.http 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.augeas.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.augeas.api 2 | ***************************** 3 | 4 | .. automodule:: aj.plugins.augeas.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.auth-users.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.auth-users.api 2 | ********************************* 3 | 4 | .. automodule:: aj.plugins.auth-users.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.check_certificates.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.check_certificates.api 2 | ****************************************** 3 | 4 | .. automodule:: aj.plugins.check_certificates.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.core.api.push.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.core.api.push 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.core.api.push 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.core.api.sidebar.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.core.api.sidebar 2 | *********************************** 3 | 4 | .. automodule:: aj.plugins.core.api.sidebar 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.core.api.tasks.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.core.api.tasks 2 | ********************************* 3 | 4 | .. automodule:: aj.plugins.core.api.tasks 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.dashboard.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.dashboard.api 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.dashboard.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.datetime.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.datetime.api 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.datetime.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.network.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.network.api 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.network.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.packages.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.packages.api 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.packages.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.power.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.power.api 2 | ******************************** 3 | 4 | .. automodule:: aj.plugins.power.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.rst: -------------------------------------------------------------------------------- 1 | API: aj.plugins 2 | *************** 3 | 4 | .. automodule:: aj.plugins 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.plugins.services.api.rst: -------------------------------------------------------------------------------- 1 | Plugin: aj.plugins.services.api 2 | ******************************* 3 | 4 | .. automodule:: aj.plugins.services.api 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/aj.rst: -------------------------------------------------------------------------------- 1 | API: aj 2 | ******* 3 | 4 | .. automodule:: aj 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/ref/jadi.rst: -------------------------------------------------------------------------------- 1 | API: jadi 2 | ********* 3 | 4 | .. automodule:: jadi 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/refjs/ace.rst: -------------------------------------------------------------------------------- 1 | Angular: ajenti.ace 2 | ******************* 3 | 4 | ACE code editor integration 5 | 6 | Directives 7 | ========== 8 | 9 | .. js:function:: ace-editor 10 | 11 | :param binding ngModel: 12 | :param object aceOptions: (optional) options for ace.setOptions() 13 | 14 | -------------------------------------------------------------------------------- /docs/source/refjs/passwd.rst: -------------------------------------------------------------------------------- 1 | Angular: ajenti.passwd 2 | ********************** 3 | 4 | Services 5 | ======== 6 | 7 | .. js:class:: passwd 8 | 9 | .. js:function:: list() 10 | 11 | :returns: promise → array of the users registered in the system 12 | -------------------------------------------------------------------------------- /e2e/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | -------------------------------------------------------------------------------- /e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "coffee-script": "~1.8.0", 4 | "jasmine-spec-reporter": "^1.1.1", 5 | "protractor": "4.0.10" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /e2e/run: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #webdriver-manager start & 3 | #PID=$! 4 | 5 | #sleep 3 6 | 7 | #function finish { 8 | # kill -TERM -$PID 9 | # sleep 1 10 | #} 11 | 12 | #trap finish TERM INT EXIT 13 | 14 | node_modules/protractor/bin/protractor --verbose --stackTrace --baseUrl http://localhost:8000 conf.coffee 15 | 16 | -------------------------------------------------------------------------------- /e2e/specs/pre.coffee: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/e2e/specs/pre.coffee -------------------------------------------------------------------------------- /official_plugins.json: -------------------------------------------------------------------------------- 1 | {"plugins":["ace","augeas","auth_users","check_certificates","core","cron","dashboard","datetime","docker","filemanager","filesystem","fstab","network","notepad","packages","passwd","plugins","power","services","session_list","settings","softraid","supervisor","terminal","traffic"]} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "coffeelintConfig": { 3 | "indentation": { 4 | "level": "error", 5 | "value": 4 6 | }, 7 | "max_line_length": { 8 | "level": "error", 9 | "value": 999 10 | } 11 | }, 12 | "devDependencies": { 13 | "babel-cli": "^6.16.0", 14 | "babel-plugin-external-helpers": "^6.22.0", 15 | "babel-preset-es2015": "^6.16.0" 16 | }, 17 | "dependencies": {} 18 | } 19 | -------------------------------------------------------------------------------- /plugins/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.sublime-* 3 | .~lock.* 4 | .bowerrc 5 | resources/build 6 | resources/vendor 7 | */resources/build 8 | */resources/vendor 9 | */locale/*/LC_MESSAGES/app.js 10 | -------------------------------------------------------------------------------- /plugins/ace/README.md: -------------------------------------------------------------------------------- 1 | # Ace plugin 2 | 3 | Register a angular directive to use the ace editor on the frontend. 4 | This plugin has no Python method. 5 | -------------------------------------------------------------------------------- /plugins/ace/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/ace/__init__.py -------------------------------------------------------------------------------- /plugins/ace/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | "angular-ui-ace": "0.2.3" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /plugins/ace/locale/af/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: af\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Afrikaans\n" 13 | "Language: af_ZA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/app.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: \n" 6 | -------------------------------------------------------------------------------- /plugins/ace/locale/ar/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ar\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Arabic\n" 13 | "Language: ar_SA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/be/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: be\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Belarusian\n" 13 | "Language: be_BY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/bg/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bg\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Bulgarian\n" 13 | "Language: bg_BG\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/bn/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bn\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Bengali\n" 13 | "Language: bn_BD\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/bs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bs\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Bosnian\n" 13 | "Language: bs_BA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ca/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ca\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Catalan\n" 13 | "Language: ca_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/cs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: cs\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Czech\n" 13 | "Language: cs_CZ\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/da/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: da\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Danish\n" 13 | "Language: da_DK\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/de/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: de\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: German\n" 13 | "Language: de_DE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/el/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: el\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Greek\n" 13 | "Language: el_GR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/en/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Content-Type: text/plain; charset=UTF-8\n" 5 | "Content-Transfer-Encoding: 8bit\n" 6 | -------------------------------------------------------------------------------- /plugins/ace/locale/eo/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: eo\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Esperanto\n" 13 | "Language: eo_UY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/es-ES/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: es-ES\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Spanish\n" 13 | "Language: es_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/et/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: et\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Estonian\n" 13 | "Language: et_EE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/fa/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fa\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Persian\n" 13 | "Language: fa_IR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/fi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fi\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Finnish\n" 13 | "Language: fi_FI\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/fr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fr\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: French\n" 13 | "Language: fr_FR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/fy-NL/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fy-NL\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Frisian\n" 13 | "Language: fy_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/he/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: he\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Hebrew\n" 13 | "Language: he_IL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/hr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hr\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Croatian\n" 13 | "Language: hr_HR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/hu/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hu\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Hungarian\n" 13 | "Language: hu_HU\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/id/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: id\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Indonesian\n" 13 | "Language: id_ID\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/it/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: it\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Italian\n" 13 | "Language: it_IT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ja/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ja\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Japanese\n" 13 | "Language: ja_JP\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ka/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ka\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Georgian\n" 13 | "Language: ka_GE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ko/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ko\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Korean\n" 13 | "Language: ko_KR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/lt/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lt\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Lithuanian\n" 13 | "Language: lt_LT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/lv/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lv\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Latvian\n" 13 | "Language: lv_LV\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/my/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: my\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Burmese\n" 13 | "Language: my_MM\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/nl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: nl\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Dutch\n" 13 | "Language: nl_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/no/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: no\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Norwegian\n" 13 | "Language: no_NO\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/pl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pl\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Polish\n" 13 | "Language: pl_PL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/pt-BR/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-BR\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Portuguese, Brazilian\n" 13 | "Language: pt_BR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/pt-PT/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-PT\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Portuguese\n" 13 | "Language: pt_PT\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ro/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ro\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Romanian\n" 13 | "Language: ro_RO\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/ru/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ru\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Russian\n" 13 | "Language: ru_RU\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sk/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sk\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Slovak\n" 13 | "Language: sk_SK\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sl\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Slovenian\n" 13 | "Language: sl_SI\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sr-CS/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr-CS\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Serbian (Latin)\n" 13 | "Language: sr_CS\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Serbian (Cyrillic)\n" 13 | "Language: sr_SP\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sv-SE/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sv-SE\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Swedish\n" 13 | "Language: sv_SE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/sw/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sw\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Swahili\n" 13 | "Language: sw_KE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/th/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: th\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Thai\n" 13 | "Language: th_TH\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/tlh-AA/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tlh-AA\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Klingon\n" 13 | "Language: tlh_AA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/tr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tr\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Turkish\n" 13 | "Language: tr_TR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/tzl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tzl\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Talossan\n" 13 | "Language: tzl_TZL\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/uk/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: uk\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Ukrainian\n" 13 | "Language: uk_UA\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/vi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: vi\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Vietnamese\n" 13 | "Language: vi_VN\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/zh-CN/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-CN\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Chinese Simplified\n" 13 | "Language: zh_CN\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/locale/zh-TW/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-TW\n" 10 | "X-Crowdin-File: /2.0/ace.po\n" 11 | "X-Crowdin-File-ID: 23\n" 12 | "Language-Team: Chinese Traditional\n" 13 | "Language: zh_TW\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/ace/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/ace/resources/css/ace.less: -------------------------------------------------------------------------------- 1 | ace-editor { 2 | border-top: 10px solid #002B36; 3 | border-bottom: 10px solid #002B36; 4 | 5 | &.full-screen > div { 6 | min-height: 100vh; 7 | } 8 | } 9 | 10 | .ace_gutter { 11 | padding-right: 10px; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /plugins/ace/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.ace', [ 2 | 'core', 3 | 'ui.ace', 4 | ]); 5 | -------------------------------------------------------------------------------- /plugins/augeas/README.md: -------------------------------------------------------------------------------- 1 | # Augeas plugin 2 | 3 | Contains wrapper classes to facilitate the use of augeas in other plugins. 4 | -------------------------------------------------------------------------------- /plugins/augeas/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .views import * 4 | -------------------------------------------------------------------------------- /plugins/augeas/locale/af/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: af\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Afrikaans\n" 13 | "Language: af_ZA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/app.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: \n" 6 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ar/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ar\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Arabic\n" 13 | "Language: ar_SA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/be/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: be\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Belarusian\n" 13 | "Language: be_BY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/bg/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bg\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Bulgarian\n" 13 | "Language: bg_BG\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/bn/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bn\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Bengali\n" 13 | "Language: bn_BD\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/bs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bs\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Bosnian\n" 13 | "Language: bs_BA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ca/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ca\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Catalan\n" 13 | "Language: ca_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/cs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: cs\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Czech\n" 13 | "Language: cs_CZ\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/da/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: da\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Danish\n" 13 | "Language: da_DK\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/de/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: de\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: German\n" 13 | "Language: de_DE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/el/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: el\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Greek\n" 13 | "Language: el_GR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/en/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Content-Type: text/plain; charset=UTF-8\n" 5 | "Content-Transfer-Encoding: 8bit\n" 6 | -------------------------------------------------------------------------------- /plugins/augeas/locale/eo/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: eo\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Esperanto\n" 13 | "Language: eo_UY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/es-ES/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: es-ES\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Spanish\n" 13 | "Language: es_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/et/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: et\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Estonian\n" 13 | "Language: et_EE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/fa/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fa\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Persian\n" 13 | "Language: fa_IR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/fi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fi\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Finnish\n" 13 | "Language: fi_FI\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/fr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fr\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: French\n" 13 | "Language: fr_FR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/fy-NL/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fy-NL\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Frisian\n" 13 | "Language: fy_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/he/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: he\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Hebrew\n" 13 | "Language: he_IL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/hr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hr\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Croatian\n" 13 | "Language: hr_HR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/hu/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hu\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Hungarian\n" 13 | "Language: hu_HU\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/id/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: id\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Indonesian\n" 13 | "Language: id_ID\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/it/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: it\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Italian\n" 13 | "Language: it_IT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ja/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ja\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Japanese\n" 13 | "Language: ja_JP\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ka/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ka\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Georgian\n" 13 | "Language: ka_GE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ko/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ko\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Korean\n" 13 | "Language: ko_KR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/lt/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lt\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Lithuanian\n" 13 | "Language: lt_LT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/lv/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lv\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Latvian\n" 13 | "Language: lv_LV\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/my/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: my\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Burmese\n" 13 | "Language: my_MM\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/nl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: nl\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Dutch\n" 13 | "Language: nl_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/no/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: no\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Norwegian\n" 13 | "Language: no_NO\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/pl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pl\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Polish\n" 13 | "Language: pl_PL\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/pt-BR/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-BR\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Portuguese, Brazilian\n" 13 | "Language: pt_BR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/pt-PT/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-PT\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Portuguese\n" 13 | "Language: pt_PT\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/ro/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ro\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Romanian\n" 13 | "Language: ro_RO\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sk/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sk\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Slovak\n" 13 | "Language: sk_SK\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sl\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Slovenian\n" 13 | "Language: sl_SI\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sr-CS/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr-CS\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Serbian (Latin)\n" 13 | "Language: sr_CS\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Serbian (Cyrillic)\n" 13 | "Language: sr_SP\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sv-SE/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sv-SE\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Swedish\n" 13 | "Language: sv_SE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/sw/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sw\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Swahili\n" 13 | "Language: sw_KE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/th/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: th\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Thai\n" 13 | "Language: th_TH\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/tlh-AA/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tlh-AA\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Klingon\n" 13 | "Language: tlh_AA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/tr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tr\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Turkish\n" 13 | "Language: tr_TR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/tzl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tzl\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Talossan\n" 13 | "Language: tzl_TZL\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/vi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: vi\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Vietnamese\n" 13 | "Language: vi_VN\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/zh-CN/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-CN\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Chinese Simplified\n" 13 | "Language: zh_CN\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/locale/zh-TW/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-TW\n" 10 | "X-Crowdin-File: /2.0/augeas.po\n" 11 | "X-Crowdin-File-ID: 24\n" 12 | "Language-Team: Chinese Traditional\n" 13 | "Language: zh_TW\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/augeas/plugin.yml: -------------------------------------------------------------------------------- 1 | name: augeas 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | version: '0.20' 6 | title: 'Augeas API' 7 | icon: cog 8 | dependencies: 9 | - !PluginDependency { plugin_name: core } 10 | resources: 11 | - resources/js/module.es 12 | - resources/js/services/augeas.service.es 13 | - resources/js/services/aug.service.es 14 | - ng:ajenti.augeas 15 | -------------------------------------------------------------------------------- /plugins/augeas/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | python-augeas 4 | -------------------------------------------------------------------------------- /plugins/augeas/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.augeas', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/augeas/resources/js/services/augeas.service.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.augeas').service('augeas', function($http, $q, AugeasConfig) { 2 | this.get = (endpoint) => { 3 | return $http.get(`/api/augeas/endpoint/${endpoint}`).then(response => AugeasConfig.get(response.data)) 4 | }; 5 | 6 | this.set = (endpoint, config) => { 7 | return $http.post(`/api/augeas/endpoint/${endpoint}`, config.serialize()).then(response => response.data) 8 | }; 9 | 10 | return this; 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/auth_users/README.md: -------------------------------------------------------------------------------- 1 | # Auth user plugin 2 | 3 | Authentication mechanism based on ajenti config file, and permissions management. 4 | -------------------------------------------------------------------------------- /plugins/auth_users/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .main import * 4 | from .views import * 5 | -------------------------------------------------------------------------------- /plugins/auth_users/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | self.context = context 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:general', 15 | 'id': 'auth_users', 16 | 'name': _('Users'), 17 | 'icon': 'users', 18 | 'url': '/view/auth-users', 19 | 'children': [], 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/auth_users/plugin.yml: -------------------------------------------------------------------------------- 1 | name: auth_users 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/users.html 6 | version: '0.33' 7 | title: 'Custom users authentication' 8 | icon: users 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | resources: 12 | - resources/js/module.es 13 | - resources/js/routing.es 14 | - resources/js/controllers/index.controller.es 15 | - resources/js/services/users.service.es 16 | - resources/partial/index.html 17 | - ng:ajenti.auth.users 18 | -------------------------------------------------------------------------------- /plugins/auth_users/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.settings 4 | scrypt 5 | -------------------------------------------------------------------------------- /plugins/auth_users/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.auth.users', [ 2 | 'core', 3 | ]); 4 | 5 | angular.module('ajenti.auth.users').run((customization) => { 6 | customization.plugins.auth_users = { 7 | forceUID: null 8 | }; 9 | }); 10 | -------------------------------------------------------------------------------- /plugins/auth_users/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => { 2 | $routeProvider.when('/view/auth-users', { 3 | templateUrl: '/auth_users:resources/partial/index.html', 4 | controller: 'AuthUsersIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/auth_users/resources/js/services/users.service.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.auth.users').service('users', function($http, $q) { 2 | this.load = () => $http.get("/api/auth-users/config").then(response => this.data = response.data); 3 | 4 | this.save = () => 5 | $http.post("/api/auth-users/config", this.data) 6 | 7 | this.getPermissions = (config) => 8 | $http.post("/api/auth-users/permissions", config).then(response => response.data); 9 | 10 | this.data = {}; 11 | 12 | return this; 13 | }); 14 | -------------------------------------------------------------------------------- /plugins/check_certificates/README.md: -------------------------------------------------------------------------------- 1 | # Check certificates plugin 2 | 3 | Test if some certificates are still valid. Usefull when you have to monitor a lot of certificates renew. 4 | -------------------------------------------------------------------------------- /plugins/check_certificates/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import ItemProvider 2 | from .views import Handler 3 | 4 | def init(plugin_manager): 5 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 6 | from .widget import CertWidget -------------------------------------------------------------------------------- /plugins/check_certificates/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/check_certificates/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.check_certificates', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/check_certificates/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.check_certificates').config($routeProvider => { 2 | $routeProvider.when('/view/check_cert/certificates', { 3 | templateUrl: '/check_certificates:resources/partial/index.html', 4 | controller: 'CertIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/core/README.md: -------------------------------------------------------------------------------- 1 | # Core plugin 2 | 3 | This plugin defines all necessary core elements to allow Ajenti to run properly: 4 | 5 | * Default template 6 | * Angular services identity, config, gettext, ... 7 | * Angular directives messagebox, sidebar, dialog, smartprogress, ... 8 | * Angular controllers login, root, navbox, ... 9 | * Default routing and authentication methods 10 | * Load Ajenti config file 11 | * Build resources and template 12 | -------------------------------------------------------------------------------- /plugins/core/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .views.api import * 4 | from .views.config import * 5 | from .views.main import * 6 | from .views.resource_server import * 7 | from .views.push import * 8 | from .views.tasks import * 9 | -------------------------------------------------------------------------------- /plugins/core/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/core/api/__init__.py -------------------------------------------------------------------------------- /plugins/core/api/push.py: -------------------------------------------------------------------------------- 1 | from jadi import service 2 | from aj.util import BroadcastQueue 3 | 4 | 5 | @service 6 | class Push(): 7 | """ 8 | A service providing push messages to the client. 9 | """ 10 | def __init__(self, context): 11 | self.q = BroadcastQueue() 12 | 13 | def register(self): 14 | return self.q.register() 15 | 16 | def push(self, plugin, msg): 17 | """ 18 | Sends a push message to the client. 19 | 20 | :param plugin: routing ID 21 | :param msg: message 22 | """ 23 | self.q.broadcast((plugin, msg)) 24 | -------------------------------------------------------------------------------- /plugins/core/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | setproctitle 3 | -------------------------------------------------------------------------------- /plugins/core/resources/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/core/resources/images/icon.png -------------------------------------------------------------------------------- /plugins/core/resources/js/core/controllers/error.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('core').controller('CoreError404', function($scope, $location) { 2 | $scope.url = $location.$absUrl; 3 | }); 4 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/controllers/index.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('core').controller('CoreIndexController', function($scope, $location, customization, identity, urlPrefix) { 2 | $location.path(customization.plugins.core.startupURL || '/view/dashboard'); 3 | 4 | identity.promise.then(() => { 5 | if (!identity.user) { 6 | location.assign(`${urlPrefix}/view/login/normal`); 7 | } 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/controllers/tasks.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('core').controller('CoreTasksController', ($scope, socket, tasks, identity) => { 2 | $scope.tasks = tasks 3 | }); 4 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/autofocus.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('autofocus', ($timeout) => { 2 | return { 3 | restrict: 'A', 4 | link(scope, element) { 5 | $timeout(() => element[0].focus()); 6 | } 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/datePickerFix.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('datepickerPopup', () => 2 | ({ 3 | restrict: 'EAC', 4 | require: 'ngModel', 5 | link(scope, element, attr, controller) { 6 | controller.$formatters.shift(); 7 | } 8 | }) 9 | ); 10 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/fitToParent.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('fitToParent', () => 2 | ($scope, element, attrs) => { 3 | let parent = element.parent(); 4 | 5 | $(window).resize(() => { 6 | if (angular.isDefined(attrs.fitWidth)) { 7 | element.width(1); 8 | element.width(parent.width()); 9 | } 10 | if (angular.isDefined(attrs.fitHeight)) { 11 | element.height(1); 12 | element.height(parent.height()); 13 | } 14 | }); 15 | } 16 | ); 17 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/keyboardFocus.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('keyboardFocus', () => 2 | ($scope, element, attrs) => 3 | element.bind('keydown', (event) => { 4 | if (event.keyCode === 40) { 5 | element.find('*:focus').first().next().focus(); 6 | event.preventDefault(); 7 | } 8 | if (event.keyCode === 38) { 9 | element.find('*:focus').first().prev().focus(); 10 | event.preventDefault(); 11 | } 12 | }) 13 | ); 14 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/ngEnter.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('ngEnter', () => 2 | ($scope, element, attrs) => 3 | element.bind('keydown keypress', (event) => { 4 | if (event.which === 13) { 5 | $scope.$apply(() => $scope.$eval(attrs.ngEnter)); 6 | event.preventDefault(); 7 | } 8 | }) 9 | ); 10 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/directives/progressSpinner.es: -------------------------------------------------------------------------------- 1 | angular.module('core').directive('progressSpinner', () => 2 | ({ 3 | restrict: 'E', 4 | template: ` 5 | <div> 6 | <div class="one"></div> 7 | <div class="two"></div> 8 | </div>`, 9 | }) 10 | ); 11 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/services/customization.service.es: -------------------------------------------------------------------------------- 1 | angular.module('core').service('customization', function() { 2 | this.plugins = {core: { 3 | extraProfileMenuItems: [] 4 | }}; 5 | return this; 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/services/notify.service.es: -------------------------------------------------------------------------------- 1 | angular.module('core').service('notify', function($location, toaster) { 2 | window.toaster = toaster; 3 | this.info = (title, text) => toaster.pop('info', title, text); 4 | 5 | this.success = (title, text) => toaster.pop('success', title, text); 6 | 7 | this.warning = (title, text) => toaster.pop('warning', title, text); 8 | 9 | this.error = (title, text) => toaster.pop('error', title, text); 10 | 11 | this.custom = (style, title, text, url) => 12 | toaster.pop(style, title, text, 5000, 'trustedHtml', () => $location.path(url)); 13 | 14 | return this; 15 | }); 16 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/services/pageTitle.service.es: -------------------------------------------------------------------------------- 1 | angular.module('core').service('pageTitle', function($rootScope) { 2 | this.set = (expr, scope) => { 3 | if (!scope) { 4 | $rootScope.pageTitle = expr; 5 | } else { 6 | let refresh = () => { 7 | let title = scope.$eval(expr); 8 | if (angular.isDefined(title)) { 9 | $rootScope.pageTitle = title; 10 | } 11 | }; 12 | 13 | scope.$watch(expr, () => refresh()); 14 | refresh(); 15 | } 16 | }; 17 | 18 | return this; 19 | }); 20 | -------------------------------------------------------------------------------- /plugins/core/resources/js/core/services/push.service.es: -------------------------------------------------------------------------------- 1 | angular.module('core').service('push', function($rootScope, $q, $log, $http, socket) { 2 | $rootScope.$on('socket:push', ($event, msg) => { 3 | $log.debug('Push message from', msg.plugin, msg.message); 4 | $rootScope.$broadcast(`push:${msg.plugin}`, msg.message); 5 | }); 6 | 7 | return this; 8 | }); 9 | -------------------------------------------------------------------------------- /plugins/core/resources/partial/404.html: -------------------------------------------------------------------------------- 1 | <div class="container"> 2 | <div class="row" id="404"> 3 | <div> 4 | <h1 translate> 5 | 404 - Page not found 6 | </h1> 7 | <p class="alert alert-danger" translate> 8 | <span> 9 | <i class="fa fa-exclamation-triangle" style="color:red;"></i> 10 | </span> 11 | The URL {{url}} was not found on this server. 12 | </p> 13 | </div> 14 | </div> 15 | </div> 16 | -------------------------------------------------------------------------------- /plugins/core/resources/partial/sidebarTasks.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="CoreTasksController"> 2 | <div class="task-status animate-list" ng:repeat="task in tasks.tasks"> 3 | <div> 4 | <div class="pull-left"> 5 | <progress-spinner></progress-spinner> 6 | </div> 7 | <h5>{{task.name|translate}}</h5> 8 | <smart-progress 9 | animate="true" 10 | max="task.progress.total" 11 | value="task.progress.done" 12 | text="(task.progress.message|translate) || '...'" 13 | ></smart-progress> 14 | </div> 15 | </div> 16 | </div> -------------------------------------------------------------------------------- /plugins/core/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/core/views/__init__.py -------------------------------------------------------------------------------- /plugins/cron/README.md: -------------------------------------------------------------------------------- 1 | # Crontab plugin 2 | 3 | This plugin manages user crontab files. 4 | -------------------------------------------------------------------------------- /plugins/cron/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | 5 | logging.info('extra_crontab.__init__.py: extra_crontab loaded') 6 | -------------------------------------------------------------------------------- /plugins/cron/plugin.yml: -------------------------------------------------------------------------------- 1 | name: cron 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/cron.html 6 | version: '0.7' 7 | title: 'Cron' 8 | icon: 'clock-o' 9 | dependencies: 10 | - !PluginDependency { 11 | plugin_name: core 12 | } 13 | resources: 14 | - 'resources/js/module.es' 15 | - 'resources/js/routing.es' 16 | - 'resources/js/controllers/index.controller.es' 17 | - 'resources/partial/index.html' 18 | - 'ng:ajenti.cron' 19 | -------------------------------------------------------------------------------- /plugins/cron/requirements.txt: -------------------------------------------------------------------------------- 1 | reconfigure 2 | -------------------------------------------------------------------------------- /plugins/cron/resources/js/module.es: -------------------------------------------------------------------------------- 1 | // the module should depend on 'core' to use the stock services & components 2 | angular.module('ajenti.cron', [ 3 | 'core', 4 | ]); 5 | 6 | -------------------------------------------------------------------------------- /plugins/cron/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.cron').config(($routeProvider) => { 2 | $routeProvider.when('/view/cron', { 3 | templateUrl: '/cron:resources/partial/index.html', 4 | controller: 'CronIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/dashboard/README.md: -------------------------------------------------------------------------------- 1 | # Dashboard plugin 2 | 3 | This plugin manages and displays all available widgets registered in the plugins. 4 | It defines a widget interface Widget in order to facilitate the definition and integration of a new widget. 5 | -------------------------------------------------------------------------------- /plugins/dashboard/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .main import * 4 | from .views import * 5 | from .widgets.cpu import * 6 | from .widgets.hostname import * 7 | from .widgets.loadavg import * 8 | from .widgets.memory import * 9 | from .widgets.uptime import * 10 | -------------------------------------------------------------------------------- /plugins/dashboard/api.py: -------------------------------------------------------------------------------- 1 | from jadi import interface 2 | 3 | 4 | @interface 5 | class Widget(): 6 | """ 7 | Base interface for dashboard widgets. 8 | """ 9 | id = None 10 | 11 | name = None 12 | """Display name""" 13 | 14 | template = None 15 | """Angular view template URL""" 16 | 17 | config_template = None 18 | """Configuration dialog template URL""" 19 | 20 | def __init__(self, context): 21 | self.context = context 22 | 23 | def get_value(self, config): 24 | """ 25 | Override this to return the widget value for the given config dict. 26 | """ 27 | raise NotImplementedError 28 | -------------------------------------------------------------------------------- /plugins/dashboard/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/dashboard/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider (SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:general', 15 | 'name': _('Dashboard'), 16 | 'icon': 'bar-chart', 17 | 'url': '/view/dashboard', 18 | 'children': [ 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/dashboard/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.settings 4 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/controllers/hostnameWidget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dashboard').controller('HostnameWidgetController', $scope => { 2 | $scope.$on('widget-update', ($event, id, data) => { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | $scope.hostname = data; 7 | }) 8 | }); 9 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/controllers/loadAverageWidget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dashboard').controller('LoadAverageWidgetController', ($scope) => { 2 | $scope.$on('widget-update', ($event, id, data) => { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | $scope.load = data; 7 | }) 8 | }); 9 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/controllers/memoryWidget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dashboard').controller('MemoryWidgetController', ($scope) => { 2 | $scope.$on('widget-update', ($event, id, data) => { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | $scope.used = data.used; 7 | $scope.total = data.total; 8 | $scope.usage = Math.floor((100 * $scope.used) / $scope.total); 9 | }) 10 | }); 11 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/controllers/uptimeWidget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dashboard').controller('UptimeWidgetController', ($scope) => { 2 | $scope.$on('widget-update', ($event, id, data) => { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | $scope.uptime = data; 7 | }) 8 | }); 9 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => { 2 | $routeProvider.when('/view/dashboard', { 3 | templateUrl: '/dashboard:resources/partial/index.html', 4 | controller: 'DashboardIndexController' 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/js/services/dashboard.service.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dashboard').service('dashboard', function($http, $q) { 2 | this.getAvailableWidgets = () => { 3 | return $http.get("/api/dashboard/widgets").then(response => response.data) 4 | }; 5 | 6 | this.getValues = function(data) { 7 | return $http.post("/api/dashboard/widgets-values", data, {ignoreLoadingBar: true}).then(response => response.data) 8 | }; 9 | 10 | return this; 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/partial/widgets/hostname.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="HostnameWidgetController"> 2 | <div class="widget-header" translate> 3 | Hostname 4 | </div> 5 | <div class="widget-value"> 6 | {{hostname}} 7 | </div> 8 | </div> 9 | -------------------------------------------------------------------------------- /plugins/dashboard/resources/partial/widgets/uptime.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="UptimeWidgetController"> 2 | <div class="widget-header" translate> 3 | Uptime 4 | </div> 5 | <div class="widget-value"> 6 | {{uptime|time}} 7 | </div> 8 | </div> 9 | -------------------------------------------------------------------------------- /plugins/dashboard/widgets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/dashboard/widgets/__init__.py -------------------------------------------------------------------------------- /plugins/dashboard/widgets/cpu.py: -------------------------------------------------------------------------------- 1 | import psutil 2 | from jadi import component 3 | 4 | from aj.plugins.dashboard.api import Widget 5 | 6 | 7 | @component(Widget) 8 | class CPUWidget(Widget): 9 | id = 'cpu' 10 | name = _('CPU usage') 11 | template = '/dashboard:resources/partial/widgets/cpu.html' 12 | 13 | def __init__(self, context): 14 | Widget.__init__(self, context) 15 | 16 | def get_value(self, config): 17 | return [x / 100.0 for x in psutil.cpu_percent(interval=0, percpu=True)] 18 | -------------------------------------------------------------------------------- /plugins/dashboard/widgets/hostname.py: -------------------------------------------------------------------------------- 1 | import platform 2 | from jadi import component 3 | 4 | from aj.plugins.dashboard.api import Widget 5 | 6 | 7 | @component(Widget) 8 | class HostnameWidget(Widget): 9 | id = 'hostname' 10 | name = _('Hostname') 11 | template = '/dashboard:resources/partial/widgets/hostname.html' 12 | 13 | def __init__(self, context): 14 | Widget.__init__(self, context) 15 | 16 | def get_value(self, config): 17 | return platform.node() 18 | -------------------------------------------------------------------------------- /plugins/dashboard/widgets/memory.py: -------------------------------------------------------------------------------- 1 | import psutil 2 | from jadi import component 3 | 4 | from aj.plugins.dashboard.api import Widget 5 | 6 | 7 | @component(Widget) 8 | class MemoryWidget(Widget): 9 | id = 'memory' 10 | name = _('Memory usage') 11 | template = '/dashboard:resources/partial/widgets/memory.html' 12 | 13 | def __init__(self, context): 14 | Widget.__init__(self, context) 15 | 16 | def get_value(self, config): 17 | v = psutil.virtual_memory() 18 | return { 19 | 'used': v.total - v.available, 20 | 'free': v.available, 21 | 'total': v.total 22 | } 23 | -------------------------------------------------------------------------------- /plugins/dashboard/widgets/uptime.py: -------------------------------------------------------------------------------- 1 | import psutil 2 | import time 3 | from jadi import component 4 | 5 | from aj.plugins.dashboard.api import Widget 6 | 7 | 8 | @component(Widget) 9 | class UptimeWidget(Widget): 10 | id = 'uptime' 11 | name = _('Uptime') 12 | template = '/dashboard:resources/partial/widgets/uptime.html' 13 | 14 | def __init__(self, context): 15 | Widget.__init__(self, context) 16 | 17 | def get_value(self, config): 18 | return time.time() - psutil.boot_time() 19 | -------------------------------------------------------------------------------- /plugins/datetime/README.md: -------------------------------------------------------------------------------- 1 | # Datetime plugin 2 | 3 | Manage time zones and time on the server. 4 | -------------------------------------------------------------------------------- /plugins/datetime/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .managers.centos_manager import * 4 | from .managers.debian_manager import * 5 | 6 | 7 | def init(plugin_manager): 8 | import aj 9 | api.TZManager.any(aj.context) 10 | 11 | from .main import ItemProvider # skipcq: PYL-W0611 12 | from .views import Handler # skipcq: PYL-W0611 13 | -------------------------------------------------------------------------------- /plugins/datetime/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/datetime/managers/__init__.py -------------------------------------------------------------------------------- /plugins/datetime/plugin.yml: -------------------------------------------------------------------------------- 1 | name: datetime 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/datetime.html 6 | version: '0.42' 7 | title: 'Date & time' 8 | icon: clock-o 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | resources: 12 | - resources/js/module.es 13 | - resources/js/routing.es 14 | - resources/js/controllers/index.controller.es 15 | - resources/js/services/datetime.service.es 16 | - resources/partial/index.html 17 | - ng:ajenti.datetime 18 | -------------------------------------------------------------------------------- /plugins/datetime/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | pytz -------------------------------------------------------------------------------- /plugins/datetime/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => { 2 | $routeProvider.when('/view/datetime', { 3 | templateUrl: '/datetime:resources/partial/index.html', 4 | controller: 'DateTimeIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/dns_api/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | from .providers.gandi import * 5 | 6 | 7 | logging.info('dns_api.__init__.py: dns_api loaded') 8 | -------------------------------------------------------------------------------- /plugins/dns_api/plugin.yml: -------------------------------------------------------------------------------- 1 | name: dns_api 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | version: '0.3' 6 | title: 'External DNS' 7 | icon: globe 8 | dependencies: 9 | - !PluginDependency { 10 | plugin_name: core 11 | } 12 | resources: 13 | - 'resources/js/module.es' 14 | - 'resources/js/routing.es' 15 | - 'resources/js/controllers/index.controller.es' 16 | - 'resources/partial/index.html' 17 | - 'ng:ajenti.dns_api' 18 | -------------------------------------------------------------------------------- /plugins/dns_api/providers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/dns_api/providers/__init__.py -------------------------------------------------------------------------------- /plugins/dns_api/record.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass 5 | class Record: 6 | name: str 7 | ttl: int 8 | type: str 9 | values: list -------------------------------------------------------------------------------- /plugins/dns_api/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/dns_api/requirements.txt -------------------------------------------------------------------------------- /plugins/dns_api/resources/js/module.es: -------------------------------------------------------------------------------- 1 | // the module should depend on 'core' to use the stock services & components 2 | angular.module('ajenti.dns_api', [ 3 | 'core', 4 | ]); 5 | 6 | -------------------------------------------------------------------------------- /plugins/dns_api/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.dns_api').config(($routeProvider) => { 2 | $routeProvider.when('/view/dns_api', { 3 | templateUrl: '/dns_api:resources/partial/index.html', 4 | controller: 'DnsAPIIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/docker/README.md: -------------------------------------------------------------------------------- 1 | # Docker plugin 2 | 3 | This plugin manages some informations from container and images on a docker host. 4 | -------------------------------------------------------------------------------- /plugins/docker/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | 5 | logging.info('docker.__init__.py: docker loaded') 6 | -------------------------------------------------------------------------------- /plugins/docker/plugin.yml: -------------------------------------------------------------------------------- 1 | name: docker 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/docker.html 6 | version: '0.6' 7 | title: 'Docker' 8 | icon: 'fab fa-docker' 9 | dependencies: 10 | - !PluginDependency { 11 | plugin_name: core 12 | } 13 | resources: 14 | - 'resources/js/module.es' 15 | - 'resources/js/routing.es' 16 | - 'resources/js/controllers/index.controller.es' 17 | - 'resources/partial/index.html' 18 | - 'ng:ajenti.docker' 19 | -------------------------------------------------------------------------------- /plugins/docker/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/docker/requirements.txt -------------------------------------------------------------------------------- /plugins/docker/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.docker', [ 2 | 'core', 3 | ]); 4 | 5 | -------------------------------------------------------------------------------- /plugins/docker/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.docker').config(($routeProvider) => { 2 | $routeProvider.when('/view/docker', { 3 | templateUrl: '/docker:resources/partial/index.html', 4 | controller: 'DockerIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/filemanager/README.md: -------------------------------------------------------------------------------- 1 | # Filemanager plugin 2 | 3 | Plugin to navigate on the server directory tree. 4 | This plugin uses the api of the filesystem plugin. 5 | -------------------------------------------------------------------------------- /plugins/filemanager/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | -------------------------------------------------------------------------------- /plugins/filemanager/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/filemanager/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:tools', 15 | 'name': _('File Manager'), 16 | 'icon': 'folder-o', 17 | 'url': '/view/filemanager/', 18 | 'children': [ 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/filemanager/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.filesystem 4 | -------------------------------------------------------------------------------- /plugins/filemanager/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.filemanager', [ 2 | 'core', 3 | 'flow', 4 | 'ajenti.filesystem', 5 | ]); 6 | -------------------------------------------------------------------------------- /plugins/filesystem/README.md: -------------------------------------------------------------------------------- 1 | # Filesystem plugin 2 | 3 | Provide tools to manage files, directories, upload, ... on the filesystem, and deliver some useful informations about it. 4 | -------------------------------------------------------------------------------- /plugins/filesystem/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .tasks import * 4 | from .views import * 5 | 6 | 7 | def init(plugin_manager): 8 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 9 | from .widget import DiskWidget 10 | -------------------------------------------------------------------------------- /plugins/filesystem/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | "ng-flow": "~2" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /plugins/filesystem/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.auth import PermissionProvider 4 | 5 | 6 | @component(PermissionProvider) 7 | class Permissions (PermissionProvider): 8 | def provide(self): 9 | return [ 10 | { 11 | 'id': 'filesystem:read', 12 | 'name': _('Read from the filesystem'), 13 | 'default': True, 14 | }, 15 | { 16 | 'id': 'filesystem:write', 17 | 'name': _('Write to the filesystem'), 18 | 'default': True, 19 | }, 20 | ] 21 | -------------------------------------------------------------------------------- /plugins/filesystem/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/filesystem/resources/js/controllers/widget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.filesystem').controller('DiskWidgetController', $scope => 2 | $scope.$on('widget-update', function($event, id, data) { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | return $scope.service = data; 7 | } 8 | ) 9 | 10 | ); 11 | 12 | 13 | angular.module('ajenti.filesystem').controller('DiskWidgetConfigController', function($scope, filesystem) { 14 | $scope.services = []; 15 | 16 | return filesystem.mountpoints().then(data => $scope.mountpoints = data); 17 | } 18 | ); 19 | -------------------------------------------------------------------------------- /plugins/filesystem/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.filesystem', [ 2 | 'core', 3 | 'flow', 4 | ]); 5 | -------------------------------------------------------------------------------- /plugins/filesystem/resources/partial/widget.config.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="DiskWidgetConfigController"> 2 | <div> 3 | <label translate>Filesystem</label> 4 | <select ng:model="configuredWidget.config.mountpoint" ng:options="x for x in mountpoints" class="form-control"> 5 | <option value="" translate>All combined</option> 6 | </select> 7 | </div> 8 | </div> 9 | -------------------------------------------------------------------------------- /plugins/fstab/README.md: -------------------------------------------------------------------------------- 1 | # Fstab plugin 2 | 3 | Manipulate the fstab file and show mounted devices. 4 | -------------------------------------------------------------------------------- /plugins/fstab/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | 5 | logging.info('fstab.__init__.py: fstab loaded') 6 | -------------------------------------------------------------------------------- /plugins/fstab/plugin.yml: -------------------------------------------------------------------------------- 1 | name: fstab 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/fstab.html 6 | version: '0.5' 7 | title: 'Fstab' 8 | icon: hdd 9 | 10 | dependencies: 11 | - !PluginDependency { 12 | plugin_name: core 13 | } 14 | resources: 15 | - 'resources/js/module.es' 16 | - 'resources/js/routing.es' 17 | - 'resources/js/controllers/index.controller.es' 18 | - 'resources/partial/index.html' 19 | - 'ng:ajenti.fstab' 20 | -------------------------------------------------------------------------------- /plugins/fstab/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/fstab/requirements.txt -------------------------------------------------------------------------------- /plugins/fstab/resources/js/module.es: -------------------------------------------------------------------------------- 1 | // the module should depend on 'core' to use the stock services & components 2 | angular.module('ajenti.fstab', [ 3 | 'core', 4 | ]); 5 | 6 | -------------------------------------------------------------------------------- /plugins/fstab/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.fstab').config(($routeProvider) => { 2 | $routeProvider.when('/view/fstab', { 3 | templateUrl: '/fstab:resources/partial/index.html', 4 | controller: 'FstabIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/iptables/README.md: -------------------------------------------------------------------------------- 1 | # Ajenti plugin Iptables 2 | 3 | This plugin list the chains and displays the rules of each, with the possibility to delete some rules (may be useful to unban IPs from `fail2ban`). 4 | -------------------------------------------------------------------------------- /plugins/iptables/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | 5 | logging.info('iptables.__init__.py: iptables loaded') 6 | -------------------------------------------------------------------------------- /plugins/iptables/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:software', 15 | 'name': 'Iptables', 16 | 'icon': 'ban', 17 | 'url': '/view/iptables', 18 | 'children': [] 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /plugins/iptables/plugin.yml: -------------------------------------------------------------------------------- 1 | name: iptables 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: http://ajenti.org 5 | version: '0.2' 6 | title: 'iptables' 7 | icon: 8 | dependencies: 9 | - !PluginDependency { 10 | plugin_name: core 11 | } 12 | resources: 13 | - 'resources/js/module.es' 14 | - 'resources/js/routing.es' 15 | - 'resources/js/controllers/index.controller.es' 16 | - 'resources/partial/index.html' 17 | - 'ng:ajenti.iptables' 18 | -------------------------------------------------------------------------------- /plugins/iptables/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/iptables/requirements.txt -------------------------------------------------------------------------------- /plugins/iptables/resources/js/module.es: -------------------------------------------------------------------------------- 1 | // the module should depend on 'core' to use the stock services & components 2 | angular.module('ajenti.iptables', [ 3 | 'core', 4 | ]); 5 | 6 | -------------------------------------------------------------------------------- /plugins/iptables/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.iptables').config(($routeProvider) => { 2 | $routeProvider.when('/view/iptables', { 3 | templateUrl: '/iptables:resources/partial/index.html', 4 | controller: 'IptablesIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/network/README.md: -------------------------------------------------------------------------------- 1 | # Network plugin 2 | 3 | Plugin to get and set network interfaces informations on the system. 4 | -------------------------------------------------------------------------------- /plugins/network/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .managers.centos_manager import * 4 | from .managers.debian_manager import * 5 | from .managers.gentoo_manager import * 6 | from .managers.ubuntu_manager import * 7 | 8 | def init(plugin_manager): 9 | import aj 10 | api.NetworkManager.any(aj.context) 11 | 12 | from .aug import ResolvConfEndpoint # skipcq: PYL-W0611 13 | from .main import ItemProvider # skipcq: PYL-W0611 14 | from .views import Handler # skipcq: PYL-W0611 15 | -------------------------------------------------------------------------------- /plugins/network/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/network/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/network/managers/__init__.py -------------------------------------------------------------------------------- /plugins/network/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.augeas 4 | -------------------------------------------------------------------------------- /plugins/network/resources/js/controllers/dns.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.network').controller('NetworkDNSController', function($scope, notify, augeas, gettext) { 2 | augeas.get('resolv').then(config => $scope.config = config); 3 | 4 | $scope.addNameserver = () => { 5 | $scope.config.insert('nameserver', $scope.newNameserver); 6 | $scope.newNameserver = ''; 7 | }; 8 | 9 | $scope.save = () => 10 | augeas.set('resolv', $scope.config).then(() => { 11 | notify.success(gettext('Saved')) 12 | }, e => { 13 | notify.error(gettext('Could not save'), e.message) 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /plugins/network/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.network', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/network/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => { 2 | $routeProvider.when('/view/network', { 3 | templateUrl: '/network:resources/partial/index.html', 4 | controller: 'NetworkIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/notepad/README.md: -------------------------------------------------------------------------------- 1 | # Notepad plugin 2 | 3 | Provides a frontend to ace editor and permit to edit new or specific files. 4 | File management is done through the plugin filesystem. 5 | -------------------------------------------------------------------------------- /plugins/notepad/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | -------------------------------------------------------------------------------- /plugins/notepad/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/notepad/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:tools', 15 | 'name': _('Notepad'), 16 | 'icon': 'pencil', 17 | 'url': '/view/notepad', 18 | 'children': [ 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/notepad/plugin.yml: -------------------------------------------------------------------------------- 1 | name: notepad 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/notepad.html 6 | version: '0.30' 7 | title: 'Notepad' 8 | icon: pencil 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | - !PluginDependency { plugin_name: ace } 12 | - !PluginDependency { plugin_name: filesystem } 13 | resources: 14 | - resources/js/module.es 15 | - resources/js/routing.es 16 | - resources/js/controllers/index.controller.es 17 | - resources/partial/index.html 18 | - ng:ajenti.notepad 19 | -------------------------------------------------------------------------------- /plugins/notepad/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.ace 3 | ajenti.plugin.core 4 | ajenti.plugin.filesystem 5 | -------------------------------------------------------------------------------- /plugins/notepad/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.notepad', [ 2 | 'core', 3 | 'ajenti.filesystem', 4 | 'ajenti.ace', 5 | ]); 6 | -------------------------------------------------------------------------------- /plugins/notepad/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config(($routeProvider) => { 2 | $routeProvider.when('/view/notepad', { 3 | templateUrl: '/notepad:resources/partial/index.html', 4 | controller: 'NotepadIndexController' 5 | }); 6 | 7 | $routeProvider.when('/view/notepad/:path*', { 8 | templateUrl: '/notepad:resources/partial/index.html', 9 | controller: 'NotepadIndexController' 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/packages/README.md: -------------------------------------------------------------------------------- 1 | # Packages plugin 2 | 3 | Manage the packages installed on the system with various managers (apt, yum, pip). 4 | -------------------------------------------------------------------------------- /plugins/packages/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .main import * 4 | from .views import * 5 | from .tasks import * 6 | 7 | try: 8 | from .managers.apt_manager import * 9 | except ImportError: 10 | pass 11 | 12 | try: 13 | from .managers.yum_manager import * 14 | except ImportError: 15 | pass 16 | 17 | from .managers.pip_manager import * 18 | -------------------------------------------------------------------------------- /plugins/packages/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/packages/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/packages/managers/__init__.py -------------------------------------------------------------------------------- /plugins/packages/plugin.yml: -------------------------------------------------------------------------------- 1 | name: packages 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/packages.html 6 | version: '0.36' 7 | title: 'Packages' 8 | icon: gift 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | - !PluginDependency { plugin_name: terminal } 12 | resources: 13 | - resources/js/module.es 14 | - resources/js/routing.es 15 | - resources/js/controllers/index.controller.es 16 | - resources/js/services/packages.service.es 17 | - resources/partial/index.html 18 | - ng:ajenti.packages 19 | -------------------------------------------------------------------------------- /plugins/packages/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.terminal 4 | jadi>=1.0.3 5 | bs4 6 | requests -------------------------------------------------------------------------------- /plugins/packages/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.packages', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/packages/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => { 2 | $routeProvider.when('/view/packages/:managerId', { 3 | templateUrl: '/packages:resources/partial/index.html', 4 | controller: 'PackagesIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/passwd/README.md: -------------------------------------------------------------------------------- 1 | # Passwd plugin 2 | 3 | Manage user and passwords stored in /etc/shadow. 4 | -------------------------------------------------------------------------------- /plugins/passwd/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .views import * 3 | -------------------------------------------------------------------------------- /plugins/passwd/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/passwd/locale/af/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: af\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Afrikaans\n" 13 | "Language: af_ZA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/app.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: \n" 6 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ar/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ar\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Arabic\n" 13 | "Language: ar_SA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/be/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: be\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Belarusian\n" 13 | "Language: be_BY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/bg/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bg\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Bulgarian\n" 13 | "Language: bg_BG\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/bn/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bn\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Bengali\n" 13 | "Language: bn_BD\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/bs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: bs\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Bosnian\n" 13 | "Language: bs_BA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ca/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ca\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Catalan\n" 13 | "Language: ca_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/cs/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: cs\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Czech\n" 13 | "Language: cs_CZ\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/da/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: da\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Danish\n" 13 | "Language: da_DK\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/de/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: de\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: German\n" 13 | "Language: de_DE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/el/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: el\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Greek\n" 13 | "Language: el_GR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/en/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Content-Type: text/plain; charset=UTF-8\n" 5 | "Content-Transfer-Encoding: 8bit\n" 6 | -------------------------------------------------------------------------------- /plugins/passwd/locale/eo/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: eo\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Esperanto\n" 13 | "Language: eo_UY\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/es-ES/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: es-ES\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Spanish\n" 13 | "Language: es_ES\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/et/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: et\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Estonian\n" 13 | "Language: et_EE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/fa/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fa\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Persian\n" 13 | "Language: fa_IR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/fi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fi\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Finnish\n" 13 | "Language: fi_FI\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/fr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fr\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: French\n" 13 | "Language: fr_FR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/fy-NL/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: fy-NL\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Frisian\n" 13 | "Language: fy_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/he/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: he\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Hebrew\n" 13 | "Language: he_IL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/hr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hr\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Croatian\n" 13 | "Language: hr_HR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/hu/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: hu\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Hungarian\n" 13 | "Language: hu_HU\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/id/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: id\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Indonesian\n" 13 | "Language: id_ID\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/it/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: it\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Italian\n" 13 | "Language: it_IT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ja/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ja\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Japanese\n" 13 | "Language: ja_JP\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ka/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ka\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Georgian\n" 13 | "Language: ka_GE\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ko/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ko\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Korean\n" 13 | "Language: ko_KR\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/lt/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lt\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Lithuanian\n" 13 | "Language: lt_LT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/lv/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: lv\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Latvian\n" 13 | "Language: lv_LV\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/my/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: my\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Burmese\n" 13 | "Language: my_MM\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/nl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: nl\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Dutch\n" 13 | "Language: nl_NL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/no/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: no\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Norwegian\n" 13 | "Language: no_NO\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/pl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pl\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Polish\n" 13 | "Language: pl_PL\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/pt-BR/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-BR\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Portuguese, Brazilian\n" 13 | "Language: pt_BR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/pt-PT/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: pt-PT\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Portuguese\n" 13 | "Language: pt_PT\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/ro/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: ro\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Romanian\n" 13 | "Language: ro_RO\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sk/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sk\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Slovak\n" 13 | "Language: sk_SK\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sl\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Slovenian\n" 13 | "Language: sl_SI\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sr-CS/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr-CS\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Serbian (Latin)\n" 13 | "Language: sr_CS\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sr\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Serbian (Cyrillic)\n" 13 | "Language: sr_SP\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sv-SE/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sv-SE\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Swedish\n" 13 | "Language: sv_SE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/sw/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: sw\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Swahili\n" 13 | "Language: sw_KE\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/th/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: th\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Thai\n" 13 | "Language: th_TH\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/tlh-AA/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tlh-AA\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Klingon\n" 13 | "Language: tlh_AA\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/tr/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tr\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Turkish\n" 13 | "Language: tr_TR\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/tzl/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: tzl\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Talossan\n" 13 | "Language: tzl_TZL\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/vi/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: vi\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Vietnamese\n" 13 | "Language: vi_VN\n" 14 | "PO-Revision-Date: 2023-05-07 10:30\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/zh-CN/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-CN\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Chinese Simplified\n" 13 | "Language: zh_CN\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/locale/zh-TW/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Content-Type: text/plain; charset=UTF-8\n" 4 | "Content-Transfer-Encoding: 8bit\n" 5 | "Project-Id-Version: ajenti\n" 6 | "Plural-Forms: nplurals=1; plural=0;\n" 7 | "X-Crowdin-Project: ajenti\n" 8 | "X-Crowdin-Project-ID: 18127\n" 9 | "X-Crowdin-Language: zh-TW\n" 10 | "X-Crowdin-File: /2.0/passwd.po\n" 11 | "X-Crowdin-File-ID: 34\n" 12 | "Language-Team: Chinese Traditional\n" 13 | "Language: zh_TW\n" 14 | "PO-Revision-Date: 2023-05-07 10:29\n" 15 | 16 | -------------------------------------------------------------------------------- /plugins/passwd/plugin.yml: -------------------------------------------------------------------------------- 1 | name: passwd 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | version: '0.27' 6 | title: 'User DB API' 7 | icon: cog 8 | dependencies: 9 | - !PluginDependency { plugin_name: core } 10 | resources: 11 | - resources/js/module.es 12 | - resources/js/services/passwd.service.es 13 | - ng:ajenti.passwd 14 | -------------------------------------------------------------------------------- /plugins/passwd/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/passwd/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.passwd', [ 2 | 'core' 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/passwd/resources/js/services/passwd.service.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.passwd').service('passwd', function($http, $q) { 2 | this.list = () => { 3 | return $http.get("/api/passwds").then(response => response.data) 4 | }; 5 | 6 | this.set = (user, password) => { 7 | return $http.post("/api/passwd", {user, password}).then(response => response.data) 8 | }; 9 | 10 | return this; 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/plugins/README.md: -------------------------------------------------------------------------------- 1 | # Plugins plugin 2 | 3 | Manage ajenti-panel and all ajenti plugins ( install, remove, upgrade ). 4 | -------------------------------------------------------------------------------- /plugins/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .tasks import * 4 | from .views import * 5 | -------------------------------------------------------------------------------- /plugins/plugins/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/plugins/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:general', 15 | 'name': _('Plugins'), 16 | 'icon': 'th-large', 17 | 'url': '/view/plugins', 18 | 'children': [ 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/plugins/plugin.yml: -------------------------------------------------------------------------------- 1 | name: plugins 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/plugins.html 6 | version: '0.52' 7 | title: 'Plugins' 8 | icon: th-large 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | resources: 12 | - resources/js/module.es 13 | - resources/js/controllers/index.controller.es 14 | - resources/partial/index.html 15 | - ng:ajenti.plugins 16 | -------------------------------------------------------------------------------- /plugins/plugins/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/plugins/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.plugins', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/power/README.md: -------------------------------------------------------------------------------- 1 | # Power plugin 2 | 3 | Plugin to manage power on the system. 4 | -------------------------------------------------------------------------------- /plugins/power/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .views import * 4 | 5 | 6 | def init(plugin_manager): 7 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 8 | from .widget import PowerWidget 9 | -------------------------------------------------------------------------------- /plugins/power/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.dashboard 4 | -------------------------------------------------------------------------------- /plugins/power/resources/js/controllers/widget.controller.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.power').controller('PowerWidgetController', ($scope, services) => { 2 | $scope.$on('widget-update', ($event, id, data) => { 3 | if (id !== $scope.widget.id) { 4 | return; 5 | } 6 | $scope.batteries = data.batteries; 7 | $scope.adapters = data.adapters; 8 | }) 9 | }); 10 | -------------------------------------------------------------------------------- /plugins/power/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.power', [ 2 | 'core', 3 | ]); 4 | 5 | angular.module('ajenti.power').run((customization) => { 6 | customization.plugins.power = {}; 7 | customization.plugins.power.hideBatteries = false; 8 | customization.plugins.power.hideAdapters = false; 9 | }); 10 | -------------------------------------------------------------------------------- /plugins/power/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => 2 | $routeProvider.when('/view/power', { 3 | templateUrl: '/power:resources/partial/index.html', 4 | controller: 'PowerIndexController' 5 | }) 6 | ); 7 | -------------------------------------------------------------------------------- /plugins/power/widget.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | from aj.plugins.dashboard.api import Widget 3 | from aj.plugins.power.api import PowerManager 4 | 5 | 6 | @component(Widget) 7 | class PowerWidget(Widget): 8 | id = 'power' 9 | name = _('Power state') 10 | template = '/power:resources/partial/widget.html' 11 | 12 | def __init__(self, context): 13 | Widget.__init__(self, context) 14 | self.manager = PowerManager.get(self.context) 15 | 16 | def get_value(self, config): 17 | return { 18 | 'batteries': self.manager.get_batteries(), 19 | 'adapters': self.manager.get_adapters(), 20 | } 21 | -------------------------------------------------------------------------------- /plugins/services/README.md: -------------------------------------------------------------------------------- 1 | # Services plugin 2 | 3 | Provide some basic actions (start, restart, ...) on init services like systemd and allow to list all services. 4 | -------------------------------------------------------------------------------- /plugins/services/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .managers.systemd_manager import * 4 | 5 | from .managers.sysv_manager import * 6 | from .main import * 7 | from .views import * 8 | 9 | 10 | def init(plugin_manager): 11 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 12 | from .widget import ServiceWidget 13 | -------------------------------------------------------------------------------- /plugins/services/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/services/managers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/services/managers/__init__.py -------------------------------------------------------------------------------- /plugins/services/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.dashboard 4 | -------------------------------------------------------------------------------- /plugins/services/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.services', [ 2 | 'core' 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/services/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config(($routeProvider) => { 2 | $routeProvider.when('/view/services', { 3 | templateUrl: '/services:resources/partial/index.html', 4 | controller: 'ServicesIndexController' 5 | }); 6 | 7 | $routeProvider.when('/view/services/:managerId', { 8 | templateUrl: '/services:resources/partial/index.html', 9 | controller: 'ServicesIndexController' 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/services/resources/partial/systemd_status.modal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-header"> 2 | <h4>{{service.name}}</h4> 3 | </div> 4 | <div class="modal-body"> 5 | <pre>{{status}}</pre> 6 | </div> 7 | <div class="modal-footer"> 8 | <a ng:click="close()" class="btn btn-default btn-flat" translate>Close</a> 9 | </div> -------------------------------------------------------------------------------- /plugins/session_list/README.md: -------------------------------------------------------------------------------- 1 | # Session list plugin 2 | 3 | Update the session list of connected users to show it with details on the frontend. 4 | -------------------------------------------------------------------------------- /plugins/session_list/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import ItemProvider 2 | from .views import Handler 3 | 4 | def init(plugin_manager): 5 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 6 | from .widget import SessionWidget -------------------------------------------------------------------------------- /plugins/session_list/plugin.yml: -------------------------------------------------------------------------------- 1 | name: session_list 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/session_list.html 6 | version: '0.7' 7 | title: 'Session list' 8 | icon: network-wired 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | resources: 12 | - resources/js/module.es 13 | - resources/js/routing.es 14 | - resources/js/controllers/index.controller.coffee 15 | - resources/js/controllers/widget.controller.es 16 | - resources/partial/index.html 17 | - resources/partial/widget.html 18 | - ng:ajenti.session_list 19 | -------------------------------------------------------------------------------- /plugins/session_list/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | -------------------------------------------------------------------------------- /plugins/session_list/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.session_list', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/session_list/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.session_list').config($routeProvider => { 2 | $routeProvider.when('/view/session_list', { 3 | templateUrl: '/session_list:resources/partial/index.html', 4 | controller: 'SessionListIndexController' 5 | }) 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/session_list/resources/partial/widget.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="SessionWidgetController"> 2 | <div class="widget-header"> 3 | <p translate>Authenticated users</p> 4 | <div> 5 | <p ng:repeat="session in sessions" class="text-primary"> 6 | {{session.identity}} 7 | <span class="pull-right">{{session.client_info.address}}</span> 8 | </p> 9 | </div> 10 | </div> 11 | </div> 12 | -------------------------------------------------------------------------------- /plugins/settings/README.md: -------------------------------------------------------------------------------- 1 | # Settings plugin 2 | 3 | This plugin allows to configure ajenti options and certificates. 4 | -------------------------------------------------------------------------------- /plugins/settings/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .views import * 4 | -------------------------------------------------------------------------------- /plugins/settings/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/settings/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:general', 15 | 'name': _('Settings'), 16 | 'icon': 'cog', 17 | 'url': '/view/settings', 18 | 'children': [ 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /plugins/settings/plugin.yml: -------------------------------------------------------------------------------- 1 | name: settings 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | docs: https://docs.ajenti.org/en/latest/plugins/settings.html 6 | version: '0.34' 7 | title: 'Settings' 8 | icon: wrench 9 | dependencies: 10 | - !PluginDependency { plugin_name: core } 11 | - !PluginDependency { plugin_name: filesystem } 12 | - !PluginDependency { plugin_name: passwd } 13 | resources: 14 | - 'resources/js/module.es' 15 | - 'resources/js/routing.es' 16 | - 'resources/js/controllers/index.controller.es' 17 | - 'resources/partial/index.html' 18 | - 'ng:ajenti.settings' 19 | -------------------------------------------------------------------------------- /plugins/settings/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.filesystem 4 | ajenti.plugin.passwd 5 | -------------------------------------------------------------------------------- /plugins/settings/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.settings', [ 2 | 'core', 3 | 'ajenti.filesystem', 4 | 'ajenti.passwd', 5 | ]); 6 | 7 | angular.module('ajenti.settings').run(customization => 8 | customization.plugins.settings = {} 9 | ); 10 | -------------------------------------------------------------------------------- /plugins/settings/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => 2 | $routeProvider.when('/view/settings', { 3 | templateUrl: '/settings:resources/partial/index.html', 4 | controller: 'SettingsIndexController' 5 | }) 6 | ); 7 | -------------------------------------------------------------------------------- /plugins/softraid/README.md: -------------------------------------------------------------------------------- 1 | # Softraid plugin 2 | 3 | Read and parse the content of /proc/mdstat in order to show the details on the frontend. 4 | 5 | -------------------------------------------------------------------------------- /plugins/softraid/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from .main import ItemProvider 3 | from .views import Handler 4 | 5 | logging.info('softraid.__init__.py: softraid loaded') 6 | -------------------------------------------------------------------------------- /plugins/softraid/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | 3 | from aj.plugins.core.api.sidebar import SidebarItemProvider 4 | 5 | 6 | @component(SidebarItemProvider) 7 | class ItemProvider(SidebarItemProvider): 8 | def __init__(self, context): 9 | pass 10 | 11 | def provide(self): 12 | return [ 13 | { 14 | 'attach': 'category:system', 15 | 'name': 'Softraid', 16 | 'icon': 'hdd', 17 | 'url': '/view/softraid', 18 | 'children': [] 19 | } 20 | ] 21 | 22 | -------------------------------------------------------------------------------- /plugins/softraid/plugin.yml: -------------------------------------------------------------------------------- 1 | name: softraid 2 | author: Arnaud Kientz 3 | email: arnaud@linuxmuster.net 4 | url: https://ajenti.org 5 | version: '0.4' 6 | title: 'Softraid' 7 | icon: hdd 8 | dependencies: 9 | - !PluginDependency { 10 | plugin_name: core 11 | } 12 | resources: 13 | - 'resources/js/module.es' 14 | - 'resources/js/routing.es' 15 | - 'resources/js/controllers/index.controller.es' 16 | - 'resources/partial/index.html' 17 | - 'ng:ajenti.softraid' 18 | -------------------------------------------------------------------------------- /plugins/softraid/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/plugins/softraid/requirements.txt -------------------------------------------------------------------------------- /plugins/softraid/resources/js/module.es: -------------------------------------------------------------------------------- 1 | // the module should depend on 'core' to use the stock services & components 2 | angular.module('ajenti.softraid', [ 3 | 'core', 4 | ]); 5 | 6 | -------------------------------------------------------------------------------- /plugins/softraid/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.softraid').config(($routeProvider) => { 2 | $routeProvider.when('/view/softraid', { 3 | templateUrl: '/softraid:resources/partial/index.html', 4 | controller: 'SoftraidIndexController', 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /plugins/supervisor/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .api import * 3 | from .aug import * 4 | from .main import * 5 | -------------------------------------------------------------------------------- /plugins/supervisor/main.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | from aj.plugins.core.api.sidebar import SidebarItemProvider 3 | 4 | 5 | @component(SidebarItemProvider) 6 | class ItemProvider(SidebarItemProvider): 7 | def __init__(self, context): 8 | self.context = context 9 | 10 | def provide(self): 11 | return [ 12 | { 13 | 'attach': 'category:software', 14 | 'id': 'supervisor', 15 | 'name': _('Supervisor'), 16 | 'icon': 'play', 17 | 'url': '/view/supervisor', 18 | 'children': [], 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /plugins/supervisor/requirements.txt: -------------------------------------------------------------------------------- 1 | aj 2 | ajenti.plugin.core 3 | ajenti.plugin.augeas 4 | ajenti.plugin.services 5 | ajenti.plugin.passwd 6 | pytz -------------------------------------------------------------------------------- /plugins/supervisor/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.supervisor', [ 2 | 'core', 3 | 'ajenti.augeas', 4 | 'ajenti.services', 5 | 'ajenti.passwd', 6 | ]); 7 | -------------------------------------------------------------------------------- /plugins/supervisor/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config($routeProvider => 2 | $routeProvider.when('/view/supervisor', { 3 | templateUrl: '/supervisor:resources/partial/index.html', 4 | controller: 'SupervisorIndexController' 5 | }) 6 | ); 7 | -------------------------------------------------------------------------------- /plugins/terminal/README.md: -------------------------------------------------------------------------------- 1 | # Terminal plugin 2 | 3 | Terminal emulator for ajenti. 4 | -------------------------------------------------------------------------------- /plugins/terminal/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .main import * 3 | from .views import * 4 | 5 | 6 | def init(plugin_manager): 7 | if 'dashboard' in plugin_manager and plugin_manager['dashboard']['imported']: 8 | from .widget import ScriptWidget 9 | -------------------------------------------------------------------------------- /plugins/terminal/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "plugin", 3 | "private": true, 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /plugins/terminal/requirements.txt: -------------------------------------------------------------------------------- 1 | pyte==0.8.0 # Use dicts instead of lists 2 | Pillow 3 | aj 4 | ajenti.plugin.core 5 | ajenti.plugin.ace 6 | -------------------------------------------------------------------------------- /plugins/terminal/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.terminal', [ 2 | 'core', 3 | 'ajenti.ace' 4 | ]); 5 | -------------------------------------------------------------------------------- /plugins/terminal/resources/js/routing.es: -------------------------------------------------------------------------------- 1 | angular.module('core').config(($routeProvider) => { 2 | $routeProvider.when('/view/terminal', { 3 | templateUrl: '/terminal:resources/partial/index.html', 4 | controller: 'TerminalIndexController' 5 | }); 6 | 7 | return $routeProvider.when('/view/terminal/:id', { 8 | templateUrl: '/terminal:resources/partial/view.html', 9 | controller: 'TerminalViewController' 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /plugins/terminal/resources/partial/widget.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="ScriptWidgetController"> 2 | <div class="widget-header" translate> 3 | Script 4 | </div> 5 | <div class="pull-right"> 6 | <a ng:click="run(widget.config)" class="btn btn-default"> 7 | <i class="fa fa-play"></i> <span translate>Run</span> 8 | </a> 9 | </div> 10 | <div class="widget-value"> 11 | {{widget.config.name}} 12 | </div> 13 | </div> 14 | -------------------------------------------------------------------------------- /plugins/terminal/widget.py: -------------------------------------------------------------------------------- 1 | from jadi import component 2 | from aj.plugins.dashboard.api import Widget 3 | 4 | 5 | @component(Widget) 6 | class ScriptWidget(Widget): 7 | id = 'script' 8 | name = _('Script') 9 | template = '/terminal:resources/partial/widget.html' 10 | config_template = '/terminal:resources/partial/widget.config.html' 11 | 12 | def __init__(self, context): 13 | Widget.__init__(self, context) 14 | 15 | def get_value(self, config): 16 | pass 17 | -------------------------------------------------------------------------------- /plugins/traffic/README.md: -------------------------------------------------------------------------------- 1 | # Traffic plugin 2 | 3 | Displays I/O stats for all network interfaces, basically use for the widget on the dashboard. 4 | -------------------------------------------------------------------------------- /plugins/traffic/__init__.py: -------------------------------------------------------------------------------- 1 | # pyflakes: disable-all 2 | from .views import * 3 | from .widget import * 4 | -------------------------------------------------------------------------------- /plugins/traffic/locale/en/LC_MESSAGES/app.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2015-09-18 15:51+0200\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | "Content-Transfer-Encoding: 8bit\n" 8 | 9 | #: plugins/traffic/resources/partial/widget.html:11 10 | #: plugins/traffic/resources/partial/widget.html:22 11 | msgid "/s" 12 | msgstr "" 13 | 14 | #: plugins/traffic/resources/partial/widget.config.html:3 15 | msgid "Interface" 16 | msgstr "" 17 | 18 | #: plugins/traffic/widget.py:11 19 | msgid "Traffic" 20 | msgstr "" 21 | -------------------------------------------------------------------------------- /plugins/traffic/plugin.yml: -------------------------------------------------------------------------------- 1 | name: traffic 2 | author: Ajenti project 3 | email: e@ajenti.org 4 | url: https://ajenti.org 5 | version: '0.18' 6 | title: 'Traffic Widget' 7 | icon: exchange 8 | dependencies: 9 | - !PluginDependency { plugin_name: core } 10 | - !PluginDependency { plugin_name: dashboard } 11 | resources: 12 | - 'resources/js/module.es' 13 | - 'resources/js/controllers/widget.controller.es' 14 | - 'resources/partial/widget.html' 15 | - 'resources/partial/widget.config.html' 16 | - 'ng:ajenti.traffic' 17 | -------------------------------------------------------------------------------- /plugins/traffic/requirements.txt: -------------------------------------------------------------------------------- 1 | upstart-new 2 | aj 3 | ajenti.plugin.core 4 | ajenti.plugin.dashboard 5 | -------------------------------------------------------------------------------- /plugins/traffic/resources/js/module.es: -------------------------------------------------------------------------------- 1 | angular.module('ajenti.traffic', [ 2 | 'core', 3 | ]); 4 | -------------------------------------------------------------------------------- /plugins/traffic/resources/partial/widget.config.html: -------------------------------------------------------------------------------- 1 | <div ng:controller="TrafficWidgetConfigController"> 2 | <div> 3 | <label translate>Interface</label> 4 | <select ng:model="configuredWidget.config.interface" ng:options="interface for interface in interfaces" class="form-control"></select> 5 | </div> 6 | </div> -------------------------------------------------------------------------------- /pylama.ini: -------------------------------------------------------------------------------- 1 | [pylama] 2 | ignore=E501,D103,C901 3 | skip = apps/*/migrations/*,apps/events/*,apps/webapi/* 4 | -------------------------------------------------------------------------------- /requirements-rtd.txt: -------------------------------------------------------------------------------- 1 | cookies 2 | jadi>=1.0.0 3 | passlib 4 | python-catcher 5 | python-daemon 6 | python-exconsole>=0.1.5 7 | requests>=0.12.0 8 | reconfigure>=0.1.41 9 | pyOpenSSL 10 | pyte 11 | pytz 12 | termcolor 13 | pyyaml 14 | -------------------------------------------------------------------------------- /scripts/ajenti.conf: -------------------------------------------------------------------------------- 1 | # Fail2Ban basic filter for ajenti 2 | # 3 | # Author : Arnaud Kientz 4 | 5 | [Definition] 6 | 7 | failregex = ^.* WARNING : Failed login from \w+ at IP : <HOST> 8 | 9 | ignoreregex = 10 | 11 | [Init] 12 | 13 | maxlines = 1 14 | -------------------------------------------------------------------------------- /scripts/ci-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -en 'travis_fold:start:deps.apt\r' 3 | echo Installing packages 4 | sudo python3 -m pip install wheel setuptools 5 | #sudo apt-get install -y python-lxml python-dbus python-lxml python-augeas 6 | echo -en 'travis_fold:end:deps.apt\r' 7 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [bumpversion] 2 | current_version = 2.2.10 3 | commit = True 4 | tag = True 5 | 6 | [bumpversion:file:ajenti-core/aj/__init__.py] 7 | search = __version__ = '{current_version}' 8 | replace = __version__ = '{new_version}' 9 | 10 | [bumpversion:file:ajenti-core/setup.py] 11 | search = {current_version} 12 | replace = {new_version} 13 | 14 | [bumpversion:file:ajenti-panel/setup.py] 15 | search = {current_version} 16 | replace = {new_version} 17 | -------------------------------------------------------------------------------- /tests-karma/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | 4 | -------------------------------------------------------------------------------- /tests-karma/test-main.coffee: -------------------------------------------------------------------------------- 1 | window.__ngModules = [ 2 | 'core' 3 | 'ajenti.augeas' 4 | ] 5 | -------------------------------------------------------------------------------- /tests-karma/tests/core/pageTitle.service.coffee: -------------------------------------------------------------------------------- 1 | describe 'pageTitle service', () -> 2 | it "sets", () -> 3 | inject ($rootScope, pageTitle) -> 4 | pageTitle.set('Test') 5 | $rootScope.$digest() 6 | expect($rootScope.pageTitle).to.equal('Test') 7 | 8 | it "sets from scope", () -> 9 | inject ($rootScope, pageTitle) -> 10 | scope = $rootScope.$new() 11 | scope.fx = () -> 'tes' 12 | pageTitle.set('fx() + "t"', scope) 13 | $rootScope.$digest() 14 | expect($rootScope.pageTitle).to.equal('test') 15 | -------------------------------------------------------------------------------- /tests-karma/tests/core/push.service.coffee: -------------------------------------------------------------------------------- 1 | describe 'push service', () -> 2 | it 'works', () -> 3 | inject ($rootScope, push) -> 4 | @sinon.spy($rootScope, '$broadcast') 5 | msg = {plugin: 'test', message: {}} 6 | $rootScope.$broadcast 'socket:push', msg 7 | $rootScope.$digest() 8 | $rootScope.$broadcast.should.have.been.calledWith('push:test', msg.message) 9 | -------------------------------------------------------------------------------- /tests-karma/tests/core/socket.service.coffee: -------------------------------------------------------------------------------- 1 | describe 'socket service', () -> 2 | it 'sends', () -> 3 | inject ($rootScope, socket) -> 4 | @sinon.stub(socket.socket, 'emit') 5 | data = {} 6 | socket.send('test', data) 7 | $rootScope.$digest() 8 | socket.socket.emit.should.have.been.calledWith('message', {plugin: 'test', data: data}) 9 | -------------------------------------------------------------------------------- /tests-pytest/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajenti/ajenti/33f5fd63af07406b9752d99ac65788ecde70c916/tests-pytest/tests/__init__.py --------------------------------------------------------------------------------