From 60270fd80a55405cc5b4fdd28bde018cea458494 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sat, 7 May 2022 15:12:56 +0200 Subject: [PATCH 01/79] Update manifest.json --- manifest.json | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/manifest.json b/manifest.json index d98ee36..f429514 100644 --- a/manifest.json +++ b/manifest.json @@ -1,25 +1,25 @@ { - "name": "Example app", - "id": "example", + "name": "tinyfilemanager", + "id": "tinyfilemanager", "packaging_format": 1, "description": { "en": "Explain in *a few (10~15) words* the purpose of the app or what it actually does (it is meant to give a rough idea to users browsing a catalog of 100+ apps)", "fr": "Expliquez en *quelques* (10~15) mots l'utilité de l'app ou ce qu'elle fait (l'objectif est de donner une idée grossière pour des utilisateurs qui naviguent dans un catalogue de 100+ apps)" }, - "version": "1.0~ynh1", - "url": "https://example.com", + "version": "2.4.7~ynh1", + "url": "https://tinyfilemanager.github.io/", "upstream": { - "license": "free", - "website": "https://example.com", - "demo": "https://demo.example.com", - "admindoc": "https://yunohost.org/packaging_apps", - "userdoc": "https://yunohost.org/apps", - "code": "https://some.forge.com/example/example" + "license": "GPL-3.0", + "website": "https://tinyfilemanager.github.io/", + "demo": "https://tinyfilemanager.github.io/demo/", + "admindoc": "https://github.com/prasathmani/tinyfilemanager", + "userdoc": "https://github.com/prasathmani/tinyfilemanager", + "code": "https://github.com/prasathmani/tinyfilemanager" }, - "license": "free", + "license": "GPL-3.0", "maintainer": { - "name": "John doe", - "email": "john.doe@example.com" + "name": "Jarod5001", + "email": "" }, "requirements": { "yunohost": ">= 4.3.0" @@ -27,8 +27,7 @@ "multi_instance": true, "services": [ "nginx", - "php7.3-fpm", - "mysql" + "php8.0-fpm" ], "arguments": { "install" : [ @@ -39,8 +38,8 @@ { "name": "path", "type": "path", - "example": "/example", - "default": "/example" + "example": "/tinyfilemanager", + "default": "/tinyfilemanager" }, { "name": "is_public", From 9c4fa50c3bbb0bce7732bf5ced483805850204d2 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 7 May 2022 13:12:59 +0000 Subject: [PATCH 02/79] Auto-update README --- README.md | 41 +++++++++++++++-------------------------- README_fr.md | 30 +++++++++++++++--------------- 2 files changed, 30 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 565d57e..4d3c24a 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,16 @@ -# Packaging your an app, starting from this example - -- Copy this app before working on it, using the ['Use this template'](https://github.com/YunoHost/example_ynh/generate) button on the Github repo. -- Edit the `manifest.json` with app specific info. -- Edit the `install`, `upgrade`, `remove`, `backup`, and `restore` scripts, and any relevant conf files in `conf/`. - - Using the [script helpers documentation.](https://yunohost.org/packaging_apps_helpers) -- Add a `LICENSE` file for the package. -- Edit `doc/DISCLAIMER*.md` -- The `README.md` files are to be automatically generated by https://github.com/YunoHost/apps/tree/master/tools/README-generator - ---- -# Example app for YunoHost +# tinyfilemanager for YunoHost -[![Integration level](https://dash.yunohost.org/integration/example.svg)](https://dash.yunohost.org/appci/app/example) ![](https://ci-apps.yunohost.org/ci/badges/example.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/example.maintain.svg) -[![Install Example app with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=example) +[![Integration level](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) +[![Install tinyfilemanager with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Lire ce readme en français.](./README_fr.md)* -> *This package allows you to install Example app quickly and simply on a YunoHost server. +> *This package allows you to install tinyfilemanager quickly and simply on a YunoHost server. If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview @@ -37,9 +26,9 @@ Some long and extensive description of what the app is and does, lorem ipsum dol - Excepteur sint occaecat cupidatat non proident, sunt in culpa." -**Shipped version:** 1.0~ynh1 +**Shipped version:** 2.4.7~ynh1 -**Demo:** https://demo.example.com +**Demo:** https://tinyfilemanager.github.io/demo/ ## Screenshots @@ -62,22 +51,22 @@ Some long and extensive description of what the app is and does, lorem ipsum dol ## Documentation and resources -* Official app website: https://example.com -* Official user documentation: https://yunohost.org/apps -* Official admin documentation: https://yunohost.org/packaging_apps -* Upstream app code repository: https://some.forge.com/example/example -* YunoHost documentation for this app: https://yunohost.org/app_example -* Report a bug: https://github.com/YunoHost-Apps/example_ynh/issues +* Official app website: https://tinyfilemanager.github.io/ +* Official user documentation: https://github.com/prasathmani/tinyfilemanager +* Official admin documentation: https://github.com/prasathmani/tinyfilemanager +* Upstream app code repository: https://github.com/prasathmani/tinyfilemanager +* YunoHost documentation for this app: https://yunohost.org/app_tinyfilemanager +* Report a bug: https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues ## Developer info -Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/example_ynh/tree/testing). +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing). To try the testing branch, please proceed like that. ``` -sudo yunohost app install https://github.com/YunoHost-Apps/example_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug or -sudo yunohost app upgrade example -u https://github.com/YunoHost-Apps/example_ynh/tree/testing --debug +sudo yunohost app upgrade tinyfilemanager -u https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ``` **More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md index c89de4d..18958ce 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,12 +1,12 @@ -# Example app pour YunoHost +# tinyfilemanager pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/example.svg)](https://dash.yunohost.org/appci/app/example) ![](https://ci-apps.yunohost.org/ci/badges/example.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/example.maintain.svg) -[![Installer Example app avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=example) +[![Niveau d'intégration](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) +[![Installer tinyfilemanager avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Read this readme in english.](./README.md)* *[Lire ce readme en français.](./README_fr.md)* -> *Ce package vous permet d'installer Example app rapidement et simplement sur un serveur YunoHost. +> *Ce package vous permet d'installer tinyfilemanager rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble @@ -22,9 +22,9 @@ Some long and extensive description of what the app is and does, lorem ipsum dol - Excepteur sint occaecat cupidatat non proident, sunt in culpa." -**Version incluse :** 1.0~ynh1 +**Version incluse :** 2.4.7~ynh1 -**Démo :** https://demo.example.com +**Démo :** https://tinyfilemanager.github.io/demo/ ## Captures d'écran @@ -47,22 +47,22 @@ Some long and extensive description of what the app is and does, lorem ipsum dol ## Documentations et ressources -* Site officiel de l'app : https://example.com -* Documentation officielle utilisateur : https://yunohost.org/apps -* Documentation officielle de l'admin : https://yunohost.org/packaging_apps -* Dépôt de code officiel de l'app : https://some.forge.com/example/example -* Documentation YunoHost pour cette app : https://yunohost.org/app_example -* Signaler un bug : https://github.com/YunoHost-Apps/example_ynh/issues +* Site officiel de l'app : https://tinyfilemanager.github.io/ +* Documentation officielle utilisateur : https://github.com/prasathmani/tinyfilemanager +* Documentation officielle de l'admin : https://github.com/prasathmani/tinyfilemanager +* Dépôt de code officiel de l'app : https://github.com/prasathmani/tinyfilemanager +* Documentation YunoHost pour cette app : https://yunohost.org/app_tinyfilemanager +* Signaler un bug : https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues ## Informations pour les développeurs -Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/example_ynh/tree/testing). +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. ``` -sudo yunohost app install https://github.com/YunoHost-Apps/example_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ou -sudo yunohost app upgrade example -u https://github.com/YunoHost-Apps/example_ynh/tree/testing --debug +sudo yunohost app upgrade tinyfilemanager -u https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ``` **Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From d1a75417f3834249b1c523dbad2ad50db3f31453 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:43:38 +0200 Subject: [PATCH 03/79] Create config.php --- conf/config.php | 122 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 conf/config.php diff --git a/conf/config.php b/conf/config.php new file mode 100644 index 0000000..c48025f --- /dev/null +++ b/conf/config.php @@ -0,0 +1,122 @@ + 'Password', 'Username2' => 'Password2', ...) +// Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html +$auth_users = array( + 'yunoadmin' => password_hash('password_here', PASSWORD_DEFAULT), // change yunoadmin and password_here +); + +// Readonly users +// e.g. array('users', 'guest', ...) +$readonly_users = array( + 'user' +); + +// Enable highlight.js (https://highlightjs.org/) on view's page +$use_highlightjs = true; + +// highlight.js style +// for dark theme use 'ir-black' +$highlightjs_style = 'vs'; + +// Enable ace.js (https://ace.c9.io/) on view's page +$edit_files = true; + +// Default timezone for date() and time() +// Doc - http://php.net/manual/en/timezones.php +$default_timezone = 'Etc/UTC'; // UTC + +// Root path for file manager +// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' +$root_path = $_SERVER['DOCUMENT_ROOT']; + +// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' +// Will not working if $root_path will be outside of server document root +$root_url = ''; + +// Server hostname. Can set manually if wrong +$http_host = $_SERVER['HTTP_HOST']; + +// user specific directories +// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) +$directories_users = array(); + +// input encoding for iconv +$iconv_input_encoding = 'UTF-8'; + +// date() format for file modification date +// Doc - https://www.php.net/manual/en/datetime.format.php +$datetime_format = 'd.m.y H:i:s'; + +// Allowed file extensions for create and rename files +// e.g. 'txt,html,css,js' +$allowed_file_extensions = ''; + +// Allowed file extensions for upload files +// e.g. 'gif,png,jpg,html,txt' +$allowed_upload_extensions = ''; + +// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. +// full path, e.g http://example.com/favicon.png +// local path, e.g images/icons/favicon.png +$favicon_path = ''; + +// Files and folders to excluded from listing +// e.g. array('myfile.html', 'personal-folder', '*.php', ...) +$exclude_items = array(''); + +// Online office Docs Viewer +// Availabe rules are 'google', 'microsoft' or false +// google => View documents using Google Docs Viewer +// microsoft => View documents using Microsoft Web Apps Viewer +// false => disable online doc viewer +$online_viewer = 'google'; + +// Sticky Nav bar +// true => enable sticky header +// false => disable sticky header +$sticky_navbar = true; + + +// max upload file size +$max_upload_size_bytes = 5000; + +// Possible rules are 'OFF', 'AND' or 'OR' +// OFF => Don't check connection IP, defaults to OFF +// AND => Connection must be on the whitelist, and not on the blacklist +// OR => Connection must be on the whitelist, or not on the blacklist +$ip_ruleset = 'OFF'; + +// Should users be notified of their block? +$ip_silent = true; + +// IP-addresses, both ipv4 and ipv6 +$ip_whitelist = array( + '127.0.0.1', // local ipv4 + '::1' // local ipv6 +); + +// IP-addresses, both ipv4 and ipv6 +$ip_blacklist = array( + '0.0.0.0', // non-routable meta ipv4 + '::' // non-routable meta ipv6 +); + +?> From a251f2a364a4e16120ceba7df27fa68fd93b87b4 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:45:41 +0200 Subject: [PATCH 04/79] Update app.src --- conf/app.src | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/app.src b/conf/app.src index 17489bf..79cd909 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,6 @@ -SOURCE_URL=url of app's source +SOURCE_URL=https://github.com/prasathmani/tinyfilemanager/archive/refs/tags/2.4.7.tar.gz SOURCE_SUM=sha256 checksum -SOURCE_SUM_PRG=sha256sum +SOURCE_SUM_PRG=b160f069eddd994443d89842ee8a52aa95a983e404398ce22016dc404deed313 SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true SOURCE_FILENAME= From c2107dac0c4030e7a7e4f62c1415b6b29d902c12 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:46:15 +0200 Subject: [PATCH 05/79] Update nginx.conf --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 1f1945c..3429b7c 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -5,7 +5,7 @@ location __PATH__/ { alias __FINALPATH__/ ; ### Example PHP configuration (remove it if not used) - index index.php; + index tinyfilemanager.php; # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file #client_max_body_size 50M; From 684dd105f501e3f2ff65fa698d2bee38f35f6aed Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:57:05 +0200 Subject: [PATCH 06/79] Update nginx.conf --- conf/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 3429b7c..fa1e145 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -5,10 +5,10 @@ location __PATH__/ { alias __FINALPATH__/ ; ### Example PHP configuration (remove it if not used) - index tinyfilemanager.php; + index index.php; # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file - #client_max_body_size 50M; + client_max_body_size 10G; try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { From 2eed958cf40934e7ba0e5ee3287cbf1e1c2cc281 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:58:26 +0200 Subject: [PATCH 07/79] Update php-fpm.conf --- conf/php-fpm.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index ab1a471..b556363 100644 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -419,12 +419,12 @@ chdir = __FINALPATH__ ;php_admin_value[memory_limit] = 32M ; Common values to change to increase file upload limit -; php_admin_value[upload_max_filesize] = 50M -; php_admin_value[post_max_size] = 50M + php_admin_value[upload_max_filesize] = 10G + php_admin_value[post_max_size] = 10G ; php_admin_flag[mail.add_x_header] = Off ; Other common parameters -; php_admin_value[max_execution_time] = 600 -; php_admin_value[max_input_time] = 300 + php_admin_value[max_execution_time] = 3600 + php_admin_value[max_input_time] = 3600 ; php_admin_value[memory_limit] = 256M ; php_admin_flag[short_open_tag] = On From 972a6601896563d013b4000920354564fad838c5 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:58:42 +0200 Subject: [PATCH 08/79] Delete systemd.service --- conf/systemd.service | 45 -------------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 conf/systemd.service diff --git a/conf/systemd.service b/conf/systemd.service deleted file mode 100644 index 31e9da3..0000000 --- a/conf/systemd.service +++ /dev/null @@ -1,45 +0,0 @@ -[Unit] -Description=Small description of the service -After=network.target - -[Service] -Type=simple -User=__APP__ -Group=__APP__ -WorkingDirectory=__FINALPATH__/ -ExecStart=__FINALPATH__/script -StandardOutput=append:/var/log/__APP__/__APP__.log -StandardError=inherit - -# Sandboxing options to harden security -# Depending on specificities of your service/app, you may need to tweak these -# .. but this should be a good baseline -# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html -NoNewPrivileges=yes -PrivateTmp=yes -PrivateDevices=yes -RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 -RestrictNamespaces=yes -RestrictRealtime=yes -DevicePolicy=closed -ProtectSystem=full -ProtectControlGroups=yes -ProtectKernelModules=yes -ProtectKernelTunables=yes -LockPersonality=yes -SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap - -# Denying access to capabilities that should not be relevant for webapps -# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html -CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD -CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE -CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT -CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK -CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM -CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG -CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE -CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW -CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG - -[Install] -WantedBy=multi-user.target From 34c93054f7b22dd9d6755199ba0b554615531918 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:02:23 +0200 Subject: [PATCH 09/79] Update DESCRIPTION.md --- doc/DESCRIPTION.md | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 0685205..694ee24 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,9 +1,37 @@ -Some long and extensive description of what the app is and does, lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +# Tiny File Manager -### Features +[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) +[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) +[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) +[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) +[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) + +> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. + +## Demo + +[Demo](https://tinyfilemanager.github.io/demo/) + + +## Documentation + +Tinyfilemanager is highly documented on the [wiki pages](https://github.com/prasathmani/tinyfilemanager/wiki). + +### :loudspeaker: Features + +- :cd: Open Source, light and extremely simple +- :iphone: Mobile friendly view for touch devices +- :information_source: Basic features likes Create, Delete, Modify, View, Quick Preview, Download, Copy and Move files +- :arrow_double_up: Ajax Upload, Ability to drag & drop, upload from URL, multiple files upload with file extensions filter +- :file_folder: Ability to create folders and files +- :gift: Ability to compress, extract files (`zip`, `tar`) +- :sunglasses: Support user permissions - based on session and each user root folder mapping +- :floppy_disk: Copy direct file URL +- :pencil2: Cloud9 IDE - Syntax highlighting for over `150+` languages, Over `35+` themes with your favorite programming style +- :page_facing_up: Google/Microsoft doc viewer helps you preview `PDF/DOC/XLS/PPT/etc`. 25 MB can be previewed with the Google Drive viewer +- :zap: Backup files and IP blacklist and whitelist +- :mag_right: Search - Search and filter files using `datatable js` +- :file_folder: Exclude folders and files from listing +- :globe_with_meridians: Multi-language(20+) support and for translations `translation.json` is file required +- :bangbang: lots more... -- Ut enim ad minim veniam, quis nostrud exercitation ullamco ; -- Laboris nisi ut aliquip ex ea commodo consequat ; -- Duis aute irure dolor in reprehenderit in voluptate ; -- Velit esse cillum dolore eu fugiat nulla pariatur ; -- Excepteur sint occaecat cupidatat non proident, sunt in culpa." From 3ce313f6daf4e064ef047d34576836fdce7a852b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sun, 8 May 2022 15:02:25 +0000 Subject: [PATCH 10/79] Auto-update README --- README.md | 42 +++++++++++++++++++++++++++++++++++------- README_fr.md | 42 +++++++++++++++++++++++++++++++++++------- 2 files changed, 70 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 4d3c24a..77a20ea 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,43 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -Some long and extensive description of what the app is and does, lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +# Tiny File Manager -### Features +[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) +[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) +[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) +[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) +[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) + +> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. + +## Demo + +[Demo](https://tinyfilemanager.github.io/demo/) + + +## Documentation + +Tinyfilemanager is highly documented on the [wiki pages](https://github.com/prasathmani/tinyfilemanager/wiki). + +### :loudspeaker: Features + +- :cd: Open Source, light and extremely simple +- :iphone: Mobile friendly view for touch devices +- :information_source: Basic features likes Create, Delete, Modify, View, Quick Preview, Download, Copy and Move files +- :arrow_double_up: Ajax Upload, Ability to drag & drop, upload from URL, multiple files upload with file extensions filter +- :file_folder: Ability to create folders and files +- :gift: Ability to compress, extract files (`zip`, `tar`) +- :sunglasses: Support user permissions - based on session and each user root folder mapping +- :floppy_disk: Copy direct file URL +- :pencil2: Cloud9 IDE - Syntax highlighting for over `150+` languages, Over `35+` themes with your favorite programming style +- :page_facing_up: Google/Microsoft doc viewer helps you preview `PDF/DOC/XLS/PPT/etc`. 25 MB can be previewed with the Google Drive viewer +- :zap: Backup files and IP blacklist and whitelist +- :mag_right: Search - Search and filter files using `datatable js` +- :file_folder: Exclude folders and files from listing +- :globe_with_meridians: Multi-language(20+) support and for translations `translation.json` is file required +- :bangbang: lots more... -- Ut enim ad minim veniam, quis nostrud exercitation ullamco ; -- Laboris nisi ut aliquip ex ea commodo consequat ; -- Duis aute irure dolor in reprehenderit in voluptate ; -- Velit esse cillum dolore eu fugiat nulla pariatur ; -- Excepteur sint occaecat cupidatat non proident, sunt in culpa." **Shipped version:** 2.4.7~ynh1 diff --git a/README_fr.md b/README_fr.md index 18958ce..f3d835c 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,15 +11,43 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Vue d'ensemble -Some long and extensive description of what the app is and does, lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +# Tiny File Manager -### Features +[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) +[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) +[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) +[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) +[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) + +> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. + +## Demo + +[Demo](https://tinyfilemanager.github.io/demo/) + + +## Documentation + +Tinyfilemanager is highly documented on the [wiki pages](https://github.com/prasathmani/tinyfilemanager/wiki). + +### :loudspeaker: Features + +- :cd: Open Source, light and extremely simple +- :iphone: Mobile friendly view for touch devices +- :information_source: Basic features likes Create, Delete, Modify, View, Quick Preview, Download, Copy and Move files +- :arrow_double_up: Ajax Upload, Ability to drag & drop, upload from URL, multiple files upload with file extensions filter +- :file_folder: Ability to create folders and files +- :gift: Ability to compress, extract files (`zip`, `tar`) +- :sunglasses: Support user permissions - based on session and each user root folder mapping +- :floppy_disk: Copy direct file URL +- :pencil2: Cloud9 IDE - Syntax highlighting for over `150+` languages, Over `35+` themes with your favorite programming style +- :page_facing_up: Google/Microsoft doc viewer helps you preview `PDF/DOC/XLS/PPT/etc`. 25 MB can be previewed with the Google Drive viewer +- :zap: Backup files and IP blacklist and whitelist +- :mag_right: Search - Search and filter files using `datatable js` +- :file_folder: Exclude folders and files from listing +- :globe_with_meridians: Multi-language(20+) support and for translations `translation.json` is file required +- :bangbang: lots more... -- Ut enim ad minim veniam, quis nostrud exercitation ullamco ; -- Laboris nisi ut aliquip ex ea commodo consequat ; -- Duis aute irure dolor in reprehenderit in voluptate ; -- Velit esse cillum dolore eu fugiat nulla pariatur ; -- Excepteur sint occaecat cupidatat non proident, sunt in culpa." **Version incluse :** 2.4.7~ynh1 From b7d2aa498463288c95db8c538d92663b67ecd06b Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:03:53 +0200 Subject: [PATCH 11/79] Update DISCLAIMER.md --- doc/DISCLAIMER.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index aded581..6ac7f0e 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -1,12 +1,12 @@ -* Any known limitations, constrains or stuff not working, such as (but not limited to): - * requiring a full dedicated domain ? - * architectures not supported ? - * not-working single-sign on or LDAP integration ? - * the app requires an important amount of RAM / disk / .. to install or to work properly - * etc... +## Requirements -* Other infos that people should be aware of, such as: - * any specific step to perform after installing (such as manually finishing the install, specific admin credentials, ...) - * how to configure / administrate the application if it ain't obvious - * upgrade process / specificities / things to be aware of ? - * security considerations ? +- PHP 5.5.0 or higher. +- Fileinfo, iconv, zip, tar and mbstring extensions are strongly recommended. + +## How to use + +:warning: Warning: password is encrypted with password_hash(). to generate new password hash [here](https://tinyfilemanager.github.io/docs/pwd.html) + +To enable/disable authentication set `$use_auth` to true or false. + +:information_source: Rename the `config-sample.php` file into `config.php` to use configuration, it is an additional configuration file, Feel free to remove completely this file and configure "tinyfilemanager.php" as a single file application. From c5a5a58a0722da75629535980b06c3aa5905ca91 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sun, 8 May 2022 15:03:55 +0000 Subject: [PATCH 12/79] Auto-update README --- README.md | 22 +++++++++++----------- README_fr.md | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 77a20ea..0f4300e 100644 --- a/README.md +++ b/README.md @@ -64,18 +64,18 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras ## Disclaimers / important information -* Any known limitations, constrains or stuff not working, such as (but not limited to): - * requiring a full dedicated domain ? - * architectures not supported ? - * not-working single-sign on or LDAP integration ? - * the app requires an important amount of RAM / disk / .. to install or to work properly - * etc... +## Requirements -* Other infos that people should be aware of, such as: - * any specific step to perform after installing (such as manually finishing the install, specific admin credentials, ...) - * how to configure / administrate the application if it ain't obvious - * upgrade process / specificities / things to be aware of ? - * security considerations ? +- PHP 5.5.0 or higher. +- Fileinfo, iconv, zip, tar and mbstring extensions are strongly recommended. + +## How to use + +:warning: Warning: password is encrypted with password_hash(). to generate new password hash [here](https://tinyfilemanager.github.io/docs/pwd.html) + +To enable/disable authentication set `$use_auth` to true or false. + +:information_source: Rename the `config-sample.php` file into `config.php` to use configuration, it is an additional configuration file, Feel free to remove completely this file and configure "tinyfilemanager.php" as a single file application. ## Documentation and resources diff --git a/README_fr.md b/README_fr.md index f3d835c..5ab998a 100644 --- a/README_fr.md +++ b/README_fr.md @@ -60,18 +60,18 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras ## Avertissements / informations importantes -* Any known limitations, constrains or stuff not working, such as (but not limited to): - * requiring a full dedicated domain ? - * architectures not supported ? - * not-working single-sign on or LDAP integration ? - * the app requires an important amount of RAM / disk / .. to install or to work properly - * etc... +## Requirements -* Other infos that people should be aware of, such as: - * any specific step to perform after installing (such as manually finishing the install, specific admin credentials, ...) - * how to configure / administrate the application if it ain't obvious - * upgrade process / specificities / things to be aware of ? - * security considerations ? +- PHP 5.5.0 or higher. +- Fileinfo, iconv, zip, tar and mbstring extensions are strongly recommended. + +## How to use + +:warning: Warning: password is encrypted with password_hash(). to generate new password hash [here](https://tinyfilemanager.github.io/docs/pwd.html) + +To enable/disable authentication set `$use_auth` to true or false. + +:information_source: Rename the `config-sample.php` file into `config.php` to use configuration, it is an additional configuration file, Feel free to remove completely this file and configure "tinyfilemanager.php" as a single file application. ## Documentations et ressources From f1140ab3acfee571da8098a2ef006586dbfc6ff6 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:04:23 +0200 Subject: [PATCH 13/79] Delete example.jpg --- doc/screenshots/example.jpg | Bin 35451 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/screenshots/example.jpg diff --git a/doc/screenshots/example.jpg b/doc/screenshots/example.jpg deleted file mode 100644 index a1efa1a36d593384df59dc13db03fa83b0436d69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35451 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 UE-)&$xd9C0IsX9d#{5|Pe`qLcKmY&$ From 6112f8f615ce18b5d8a60a1486d9f81fd07c373d Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sun, 8 May 2022 15:04:25 +0000 Subject: [PATCH 14/79] Auto-update README --- README.md | 4 ---- README_fr.md | 4 ---- 2 files changed, 8 deletions(-) diff --git a/README.md b/README.md index 0f4300e..aebd742 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,6 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras **Demo:** https://tinyfilemanager.github.io/demo/ -## Screenshots - -![](./doc/screenshots/example.jpg) - ## Disclaimers / important information ## Requirements diff --git a/README_fr.md b/README_fr.md index 5ab998a..d1c6395 100644 --- a/README_fr.md +++ b/README_fr.md @@ -54,10 +54,6 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras **Démo :** https://tinyfilemanager.github.io/demo/ -## Captures d'écran - -![](./doc/screenshots/example.jpg) - ## Avertissements / informations importantes ## Requirements From 5e3916edcc67e1c9d3f95e1be7866b81b9a01f5d Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 16:04:40 +0100 Subject: [PATCH 15/79] Add files via upload --- doc/screenshots/screenshot.gif | Bin 0 -> 213719 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/screenshots/screenshot.gif diff --git a/doc/screenshots/screenshot.gif b/doc/screenshots/screenshot.gif new file mode 100644 index 0000000000000000000000000000000000000000..d44818ffa442fdac36f9cce6c416c53aed807068 GIT binary patch literal 213719 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 z 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 literal 0 HcmV?d00001 From 7c0a73e3d409aa8b87ca12cc461ca9f56fc2f1df Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sun, 8 May 2022 15:04:42 +0000 Subject: [PATCH 16/79] Auto-update README --- README.md | 4 ++++ README_fr.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index aebd742..24da6ee 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,10 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras **Demo:** https://tinyfilemanager.github.io/demo/ +## Screenshots + +![](./doc/screenshots/screenshot.gif) + ## Disclaimers / important information ## Requirements diff --git a/README_fr.md b/README_fr.md index d1c6395..882f87c 100644 --- a/README_fr.md +++ b/README_fr.md @@ -54,6 +54,10 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras **Démo :** https://tinyfilemanager.github.io/demo/ +## Captures d'écran + +![](./doc/screenshots/screenshot.gif) + ## Avertissements / informations importantes ## Requirements From c683c8f6b9b114b61cb79468b2abd1cf60970faf Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:10:56 +0200 Subject: [PATCH 17/79] Update _common.sh --- scripts/_common.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 7e55ac0..12ae092 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,7 +5,8 @@ #================================================= # dependencies used by the app -pkg_dependencies="deb1 deb2 php$YNH_DEFAULT_PHP_VERSION-deb1 php$YNH_DEFAULT_PHP_VERSION-deb2" +# pkg_dependencies="deb1 deb2 php$YNH_DEFAULT_PHP_VERSION-deb1 php$YNH_DEFAULT_PHP_VERSION-deb2" +YNH_PHP_VERSION="8.0" #================================================= # PERSONAL HELPERS From d78e9ac8b3851914e7deda7e5ceb46e7e774c86a Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:29:19 +0200 Subject: [PATCH 18/79] Update install --- scripts/install | 88 ++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/scripts/install b/scripts/install index 97c0584..b5159ff 100755 --- a/scripts/install +++ b/scripts/install @@ -30,6 +30,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD +phpversion=$YNH_PHP_VERSION ### If it's a multi-instance app, meaning it can be installed several times independently ### The id of the app as stated in the manifest is available as $YNH_APP_ID @@ -73,13 +74,15 @@ ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=admin --value=$admin +ynh_app_setting_set --app=$app --key=password --value=$password + #================================================= # STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= -ynh_script_progression --message="Finding an available port..." --time --weight=1 +# ynh_script_progression --message="Finding an available port..." --time --weight=1 ### Use these lines if you have to open a port for the application ### `ynh_find_port` will find the first available port starting from the given port. @@ -87,8 +90,8 @@ ynh_script_progression --message="Finding an available port..." --time --weight= ### - Remove the section "CLOSE A PORT" in the remove script # Find an available port -port=$(ynh_find_port --port=8095) -ynh_app_setting_set --app=$app --key=port --value=$port +# port=$(ynh_find_port --port=8095) +# ynh_app_setting_set --app=$app --key=port --value=$port # Optional: Expose this port publicly # (N.B.: you only need to do this if the app actually needs to expose the port publicly. @@ -101,7 +104,7 @@ ynh_app_setting_set --app=$app --key=port --value=$port #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Installing dependencies..." --time --weight=1 +# ynh_script_progression --message="Installing dependencies..." --time --weight=1 ### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. ### Those deb packages will be installed as dependencies of this package. @@ -111,7 +114,7 @@ ynh_script_progression --message="Installing dependencies..." --time --weight=1 ### - As well as the section "REINSTALL DEPENDENCIES" in the restore script ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script -ynh_install_app_dependencies $pkg_dependencies +# ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER @@ -124,7 +127,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # CREATE A MYSQL DATABASE #================================================= -ynh_script_progression --message="Creating a MySQL database..." --time --weight=1 +# ynh_script_progression --message="Creating a MySQL database..." --time --weight=1 ### Use these lines if you need a database for the application. ### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. @@ -135,10 +138,10 @@ ynh_script_progression --message="Creating a MySQL database..." --time --weight= ### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script ### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script -db_name=$(ynh_sanitize_dbid --db_name=$app) -db_user=$db_name -ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name +# db_name=$(ynh_sanitize_dbid --db_name=$app) +# db_user=$db_name +# ynh_app_setting_set --app=$app --key=db_name --value=$db_name +# ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -163,6 +166,9 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:www-data "$final_path" +# rename tinyfilemanager to index +sudo mv $final_path/tinyfilemanager.php $final_path/index.php + #================================================= # NGINX CONFIGURATION #================================================= @@ -190,7 +196,7 @@ ynh_script_progression --message="Configuring PHP-FPM..." --time --weight=1 ### - And the section "PHP-FPM CONFIGURATION" in the upgrade script # Create a dedicated PHP-FPM config -ynh_add_fpm_config +ynh_add_fpm_config --phpversion=$phpversion #================================================= # SPECIFIC SETUP @@ -201,7 +207,7 @@ ynh_add_fpm_config #================================================= # CREATE DATA DIRECTORY #================================================= -ynh_script_progression --message="Creating a data directory..." --time --weight=1 +# ynh_script_progression --message="Creating a data directory..." --time --weight=1 ### Use these lines if you need to create a directory to store "persistent files" for the application. ### Usually this directory is used to store uploaded files or any file that won't be updated during @@ -211,10 +217,10 @@ ynh_script_progression --message="Creating a data directory..." --time --weight= ### - Remove the section "RESTORE THE DATA DIRECTORY" in the restore script ### - As well as the section "REMOVE DATA DIR" in the remove script -datadir=/home/yunohost.app/$app -ynh_app_setting_set --app=$app --key=datadir --value=$datadir +# datadir=/home/yunohost.app/$app +# ynh_app_setting_set --app=$app --key=datadir --value=$datadir -mkdir -p $datadir +# mkdir -p $datadir # FIXME: this should be managed by the core in the future # Here, as a packager, you may have to tweak the ownerhsip/permissions @@ -222,9 +228,9 @@ mkdir -p $datadir # files in some cases. # But FOR THE LOVE OF GOD, do not allow r/x for "others" on the entire folder - # this will be treated as a security issue. -chmod 750 "$datadir" -chmod -R o-rwx "$datadir" -chown -R $app:www-data "$datadir" +# chmod 750 "$datadir" +# chmod -R o-rwx "$datadir" +# chown -R $app:www-data "$datadir" #================================================= # ADD A CONFIGURATION @@ -243,13 +249,13 @@ ynh_script_progression --message="Adding a configuration file..." --time --weigh ### ### Check the documentation of `ynh_add_config` for more info. -ynh_add_config --template="some_config_file" --destination="$final_path/some_config_file" +ynh_add_config --template="conf/config.php" --destination="$final_path/config.php" # FIXME: this should be handled by the core in the future # You may need to use chmod 600 instead of 400, # for example if the app is expected to be able to modify its own config -chmod 400 "$final_path/some_config_file" -chown $app:$app "$final_path/some_config_file" +chmod 400 "$final_path/config.php" +chown $app:$app "$final_path/config.php" ### For more complex cases where you want to replace stuff using regexes, ### you shoud rely on ynh_replace_string (which is basically a wrapper for sed) @@ -261,7 +267,7 @@ chown $app:$app "$final_path/some_config_file" #================================================= # SETUP SYSTEMD #================================================= -ynh_script_progression --message="Configuring a systemd service..." --time --weight=1 +# ynh_script_progression --message="Configuring a systemd service..." --time --weight=1 ### `ynh_systemd_config` is used to configure a systemd script for an app. ### It can be used for apps that use sysvinit (with adaptation) or systemd. @@ -275,7 +281,7 @@ ynh_script_progression --message="Configuring a systemd service..." --time --wei ### - And the section "SETUP SYSTEMD" in the upgrade script # Create a dedicated systemd config -ynh_add_systemd_config +# ynh_add_systemd_config #================================================= # SETUP APPLICATION WITH CURL @@ -287,16 +293,16 @@ ynh_add_systemd_config ### forms. # Set the app as temporarily public for curl call -ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 +# ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 # Making the app public for curl -ynh_permission_update --permission="main" --add="visitors" +# ynh_permission_update --permission="main" --add="visitors" # Installation with curl -ynh_script_progression --message="Finalizing installation..." --time --weight=1 -ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" +# ynh_script_progression --message="Finalizing installation..." --time --weight=1 +# ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" # Remove the public access -ynh_permission_update --permission="main" --remove="visitors" +# ynh_permission_update --permission="main" --remove="visitors" #================================================= # GENERIC FINALIZATION @@ -319,7 +325,7 @@ ynh_use_logrotate #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 ### `yunohost service add` integrates a service in YunoHost. It then gets ### displayed in the admin interface and through the others `yunohost service` commands. @@ -330,7 +336,7 @@ ynh_script_progression --message="Integrating service in YunoHost..." --time --w ### - As well as the section "INTEGRATE SERVICE IN YUNOHOST" in the restore script ### - And the section "INTEGRATE SERVICE IN YUNOHOST" in the upgrade script -yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" +# yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" ### Additional options starting with 3.8: ### @@ -351,7 +357,7 @@ yunohost service add $app --description="A short description of the app" --log=" #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 ### `ynh_systemd_action` is used to start a systemd service for an app. ### Only needed if you have configure a systemd service @@ -362,39 +368,39 @@ ynh_script_progression --message="Starting a systemd service..." --time --weight ### - And the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the change_url script # Start a systemd service -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" #================================================= # SETUP FAIL2BAN #================================================= -ynh_script_progression --message="Configuring Fail2Ban..." --time --weight=1 +# ynh_script_progression --message="Configuring Fail2Ban..." --time --weight=1 # Create a dedicated Fail2Ban config -ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" +# ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring permissions..." --time --weight=1 +# ynh_script_progression --message="Configuring permissions..." --time --weight=1 # Make app public if necessary -if [ $is_public -eq 1 ] -then +# if [ $is_public -eq 1 ] +# then # Everyone can access the app. # The "main" permission is automatically created before the install script. - ynh_permission_update --permission="main" --add="visitors" -fi +# ynh_permission_update --permission="main" --add="visitors" +# fi ### N.B. : the following extra permissions only make sense if your app ### does have for example an admin interface or an API. # Only the admin can access the admin panel of the app (if the app has an admin panel) -ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin +# ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin # Everyone can access the API part # We don't want to display the tile in the SSO so we put --show_tile="false" # And we don't want the YunoHost admin to be able to remove visitors group to this permission, so we put --protected="true" -ynh_permission_create --permission="api" --url="/api" --allowed="visitors" --show_tile="false" --protected="true" +# ynh_permission_create --permission="api" --url="/api" --allowed="visitors" --show_tile="false" --protected="true" #================================================= # RELOAD NGINX From 567cdfe729a09c1100080a21d7979f8ba3a0b439 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:32:42 +0200 Subject: [PATCH 19/79] Update config.php --- conf/config.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/conf/config.php b/conf/config.php index c48025f..d6b27d2 100644 --- a/conf/config.php +++ b/conf/config.php @@ -20,21 +20,19 @@ $use_auth = true; // Users: array('Username' => 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( - 'yunoadmin' => password_hash('password_here', PASSWORD_DEFAULT), // change yunoadmin and password_here + '__ADMIN__' => password_hash('__PASSWORD__', PASSWORD_DEFAULT), // change yunoadmin and password_here ); // Readonly users // e.g. array('users', 'guest', ...) -$readonly_users = array( - 'user' -); +$readonly_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' -$highlightjs_style = 'vs'; +$highlightjs_style = 'ir-black'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; From bd284dc8df2d0720454fb84dba757767caf0930c Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:38:40 +0200 Subject: [PATCH 20/79] Update app.src --- conf/app.src | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/app.src b/conf/app.src index 79cd909..9972117 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,6 @@ SOURCE_URL=https://github.com/prasathmani/tinyfilemanager/archive/refs/tags/2.4.7.tar.gz -SOURCE_SUM=sha256 checksum -SOURCE_SUM_PRG=b160f069eddd994443d89842ee8a52aa95a983e404398ce22016dc404deed313 +SOURCE_SUM=B160F069EDDD994443D89842EE8A52AA95A983E404398CE22016DC404DEED313 +SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true SOURCE_FILENAME= From 81f659ee403b23c31ecbd7747923ea8a9b9a07dd Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:47:35 +0200 Subject: [PATCH 21/79] Update install --- scripts/install | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index b5159ff..76198ef 100755 --- a/scripts/install +++ b/scripts/install @@ -30,7 +30,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD -phpversion=$YNH_PHP_VERSION +# phpversion=$YNH_PHP_VERSION ### If it's a multi-instance app, meaning it can be installed several times independently ### The id of the app as stated in the manifest is available as $YNH_APP_ID @@ -196,7 +196,8 @@ ynh_script_progression --message="Configuring PHP-FPM..." --time --weight=1 ### - And the section "PHP-FPM CONFIGURATION" in the upgrade script # Create a dedicated PHP-FPM config -ynh_add_fpm_config --phpversion=$phpversion +ynh_add_fpm_config +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # SPECIFIC SETUP From 7ff6422b58e9dedc97b8617abb29cb1665a18a95 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:49:09 +0200 Subject: [PATCH 22/79] Update _common.sh --- scripts/_common.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/_common.sh b/scripts/_common.sh index 12ae092..8d2e6f4 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,6 +7,7 @@ # dependencies used by the app # pkg_dependencies="deb1 deb2 php$YNH_DEFAULT_PHP_VERSION-deb1 php$YNH_DEFAULT_PHP_VERSION-deb2" YNH_PHP_VERSION="8.0" +pkg_dependencies="php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-posix php${YNH_PHP_VERSION}-bz2 php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-memcache php${YNH_PHP_VERSION}-memcached php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-sockets php${YNH_PHP_VERSION}-mcrypt php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-fileinfo php${YNH_PHP_VERSION}-mbstring" #================================================= # PERSONAL HELPERS From 9461312884fd5ee97bb0945e5183fc9cc82f0cd8 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 17:49:42 +0200 Subject: [PATCH 23/79] Update install --- scripts/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 76198ef..cb646e4 100755 --- a/scripts/install +++ b/scripts/install @@ -104,7 +104,7 @@ ynh_app_setting_set --app=$app --key=password --value=$password #================================================= # INSTALL DEPENDENCIES #================================================= -# ynh_script_progression --message="Installing dependencies..." --time --weight=1 +ynh_script_progression --message="Installing dependencies..." --time --weight=1 ### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. ### Those deb packages will be installed as dependencies of this package. @@ -114,7 +114,7 @@ ynh_app_setting_set --app=$app --key=password --value=$password ### - As well as the section "REINSTALL DEPENDENCIES" in the restore script ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script -# ynh_install_app_dependencies $pkg_dependencies +ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER From 1d5dbf00972beef9dc9208159c019b35a90f1dc4 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 18:08:07 +0200 Subject: [PATCH 24/79] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index cb646e4..44651a1 100755 --- a/scripts/install +++ b/scripts/install @@ -250,7 +250,7 @@ ynh_script_progression --message="Adding a configuration file..." --time --weigh ### ### Check the documentation of `ynh_add_config` for more info. -ynh_add_config --template="conf/config.php" --destination="$final_path/config.php" +ynh_add_config --template="../conf/config.php" --destination="$final_path/config.php" # FIXME: this should be handled by the core in the future # You may need to use chmod 600 instead of 400, From 8679a4c3def4f7ba1f502828050893e718bbcb0f Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 18:11:30 +0200 Subject: [PATCH 25/79] Update _common.sh --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 8d2e6f4..24fa731 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ # dependencies used by the app # pkg_dependencies="deb1 deb2 php$YNH_DEFAULT_PHP_VERSION-deb1 php$YNH_DEFAULT_PHP_VERSION-deb2" YNH_PHP_VERSION="8.0" -pkg_dependencies="php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-posix php${YNH_PHP_VERSION}-bz2 php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-memcache php${YNH_PHP_VERSION}-memcached php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-sockets php${YNH_PHP_VERSION}-mcrypt php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-fileinfo php${YNH_PHP_VERSION}-mbstring" +pkg_dependencies="php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-iconv php${YNH_PHP_VERSION}-tar php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-fileinfo php${YNH_PHP_VERSION}-mbstring" #================================================= # PERSONAL HELPERS From a2a3cbe1495fb07d229f99d0fce18ec5ef4889d0 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 18:15:52 +0200 Subject: [PATCH 26/79] Update _common.sh --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 24fa731..628161b 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ # dependencies used by the app # pkg_dependencies="deb1 deb2 php$YNH_DEFAULT_PHP_VERSION-deb1 php$YNH_DEFAULT_PHP_VERSION-deb2" YNH_PHP_VERSION="8.0" -pkg_dependencies="php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-iconv php${YNH_PHP_VERSION}-tar php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-fileinfo php${YNH_PHP_VERSION}-mbstring" +pkg_dependencies="php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-iconv php${YNH_PHP_VERSION}-bz2 php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-fileinfo php${YNH_PHP_VERSION}-mbstring" #================================================= # PERSONAL HELPERS From 4f767b62b6ae19e7293f2d8c9e71b0cb3bb3d491 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 19:34:55 +0200 Subject: [PATCH 27/79] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 44651a1..6615237 100755 --- a/scripts/install +++ b/scripts/install @@ -255,7 +255,7 @@ ynh_add_config --template="../conf/config.php" --destination="$final_path/config # FIXME: this should be handled by the core in the future # You may need to use chmod 600 instead of 400, # for example if the app is expected to be able to modify its own config -chmod 400 "$final_path/config.php" +chmod 600 "$final_path/config.php" chown $app:$app "$final_path/config.php" ### For more complex cases where you want to replace stuff using regexes, From eb5604acf109e684502d43755f042178084799a8 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:11:25 +0200 Subject: [PATCH 28/79] Update config.php --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index d6b27d2..0652f9a 100644 --- a/conf/config.php +++ b/conf/config.php @@ -43,7 +43,7 @@ $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' -$root_path = $_SERVER['DOCUMENT_ROOT']; +$root_path = '/home/; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root From f6b12e2aa728a8b9ba5a081124f3ee3a11cad09a Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:18:49 +0200 Subject: [PATCH 29/79] Update backup --- scripts/backup | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/backup b/scripts/backup index f99225d..b1eaf6a 100755 --- a/scripts/backup +++ b/scripts/backup @@ -30,9 +30,12 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) +password=$(ynh_app_setting_get --app=$app --key=password) +admin=$(ynh_app_setting_get --app=$app --key=admin) +language=$(ynh_app_setting_get --app=$app --key=language) + #================================================= # DECLARE DATA AND CONF FILES TO BACKUP @@ -54,7 +57,7 @@ ynh_backup --src_path="$final_path" # BACKUP THE DATA DIR #================================================= -ynh_backup --src_path="$datadir" --is_big +# ynh_backup --src_path="$datadir" --is_big #================================================= # BACKUP THE NGINX CONFIGURATION @@ -72,8 +75,8 @@ ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" # BACKUP FAIL2BAN CONFIGURATION #================================================= -ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" -ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" +# ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" +# ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" #================================================= # SPECIFIC BACKUP @@ -87,25 +90,25 @@ ynh_backup --src_path="/etc/logrotate.d/$app" # BACKUP SYSTEMD #================================================= -ynh_backup --src_path="/etc/systemd/system/$app.service" +# ynh_backup --src_path="/etc/systemd/system/$app.service" #================================================= # BACKUP VARIOUS FILES #================================================= -ynh_backup --src_path="/etc/cron.d/$app" +# ynh_backup --src_path="/etc/cron.d/$app" -ynh_backup --src_path="/etc/$app/" +# ynh_backup --src_path="/etc/$app/" #================================================= # BACKUP THE MYSQL DATABASE #================================================= -ynh_print_info --message="Backing up the MySQL database..." +# ynh_print_info --message="Backing up the MySQL database..." ### (However, things like MySQL dumps *do* take some time to run, though the ### copy of the generated dump to the archive still happens later) -ynh_mysql_dump_db --database="$db_name" > db.sql +# ynh_mysql_dump_db --database="$db_name" > db.sql #================================================= # END OF SCRIPT From 171c353937adc1e5400837ac4642b2d6fbc60046 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:22:48 +0200 Subject: [PATCH 30/79] Update remove --- scripts/remove | 74 +++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/scripts/remove b/scripts/remove index 29da1fd..f8ef81e 100755 --- a/scripts/remove +++ b/scripts/remove @@ -17,11 +17,11 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -port=$(ynh_app_setting_get --app=$app --key=port) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$db_name +# port=$(ynh_app_setting_get --app=$app --key=port) +# db_name=$(ynh_app_setting_get --app=$app --key=db_name) +# db_user=$db_name final_path=$(ynh_app_setting_get --app=$app --key=final_path) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) +# datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # STANDARD REMOVE @@ -30,19 +30,19 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) -if ynh_exec_warn_less yunohost service status $app >/dev/null -then - ynh_script_progression --message="Removing $app service integration..." --time --weight=1 - yunohost service remove $app -fi +# if ynh_exec_warn_less yunohost service status $app >/dev/null +# then +# ynh_script_progression --message="Removing $app service integration..." --time --weight=1 +# yunohost service remove $app +# fi #================================================= # STOP AND REMOVE SERVICE #================================================= -ynh_script_progression --message="Stopping and removing the systemd service..." --time --weight=1 +# ynh_script_progression --message="Stopping and removing the systemd service..." --time --weight=1 # Remove the dedicated systemd config -ynh_remove_systemd_config +# ynh_remove_systemd_config #================================================= # REMOVE LOGROTATE CONFIGURATION @@ -55,10 +55,10 @@ ynh_remove_logrotate #================================================= # REMOVE THE MYSQL DATABASE #================================================= -ynh_script_progression --message="Removing the MySQL database..." --time --weight=1 +# ynh_script_progression --message="Removing the MySQL database..." --time --weight=1 # Remove a database if it exists, along with the associated user -ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name +# ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name #================================================= # REMOVE APP MAIN DIR @@ -73,11 +73,11 @@ ynh_secure_remove --file="$final_path" #================================================= # Remove the data directory if --purge option is used -if [ "${YNH_APP_PURGE:-0}" -eq 1 ] -then - ynh_script_progression --message="Removing app data directory..." --time --weight=1 - ynh_secure_remove --file="$datadir" -fi +# if [ "${YNH_APP_PURGE:-0}" -eq 1 ] +# then +# ynh_script_progression --message="Removing app data directory..." --time --weight=1 +# ynh_secure_remove --file="$datadir" +# fi #================================================= # REMOVE NGINX CONFIGURATION @@ -87,6 +87,14 @@ ynh_script_progression --message="Removing NGINX web server configuration..." -- # Remove the dedicated NGINX config ynh_remove_nginx_config +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." --time --weight=1 + +# Remove metapackage and its dependencies before removing php-fpm +ynh_remove_app_dependencies + #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= @@ -95,47 +103,39 @@ ynh_script_progression --message="Removing PHP-FPM configuration..." --time --we # Remove the dedicated PHP-FPM config ynh_remove_fpm_config -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies..." --time --weight=1 - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies - #================================================= # CLOSE A PORT #================================================= -if yunohost firewall list | grep -q "\- $port$" -then - ynh_script_progression --message="Closing port $port..." --time --weight=1 - ynh_exec_warn_less yunohost firewall disallow TCP $port -fi +# if yunohost firewall list | grep -q "\- $port$" +# then +# ynh_script_progression --message="Closing port $port..." --time --weight=1 +# ynh_exec_warn_less yunohost firewall disallow TCP $port +# fi #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= -ynh_script_progression --message="Removing Fail2Ban configuration..." --time --weight=1 +# ynh_script_progression --message="Removing Fail2Ban configuration..." --time --weight=1 # Remove the dedicated Fail2Ban config -ynh_remove_fail2ban_config +# ynh_remove_fail2ban_config #================================================= # SPECIFIC REMOVE #================================================= # REMOVE VARIOUS FILES #================================================= -ynh_script_progression --message="Removing various files..." --time --weight=1 +# ynh_script_progression --message="Removing various files..." --time --weight=1 # Remove a cron file -ynh_secure_remove --file="/etc/cron.d/$app" +# ynh_secure_remove --file="/etc/cron.d/$app" # Remove a directory securely -ynh_secure_remove --file="/etc/$app" +# ynh_secure_remove --file="/etc/$app" # Remove the log files -ynh_secure_remove --file="/var/log/$app" +# ynh_secure_remove --file="/var/log/$app" #================================================= # GENERIC FINALIZATION From 658f4b69fb93645523dc1ea67f9020dc43e0c8f2 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:28:38 +0200 Subject: [PATCH 31/79] Update restore --- scripts/restore | 73 ++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/scripts/restore b/scripts/restore index 03432ab..ba115ec 100755 --- a/scripts/restore +++ b/scripts/restore @@ -29,12 +29,16 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) +# path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$db_name +# db_name=$(ynh_app_setting_get --app=$app --key=db_name) +# db_user=$db_name phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) +# datadir=$(ynh_app_setting_get --app=$app --key=datadir) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +password=$(ynh_app_setting_get --app=$app --key=password) +admin=$(ynh_app_setting_get --app=$app --key=admin) +language=$(ynh_app_setting_get --app=$app --key=language) #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -81,11 +85,11 @@ chown -R $app:www-data "$final_path" #================================================= # RESTORE THE DATA DIRECTORY #================================================= -ynh_script_progression --message="Restoring the data directory..." --time --weight=1 +# ynh_script_progression --message="Restoring the data directory..." --time --weight=1 -ynh_restore_file --origin_path="$datadir" --not_mandatory +# ynh_restore_file --origin_path="$datadir" --not_mandatory -mkdir -p $datadir +# mkdir -p $datadir # FIXME: this should be managed by the core in the future # Here, as a packager, you may have to tweak the ownerhsip/permissions @@ -93,25 +97,19 @@ mkdir -p $datadir # files in some cases. # But FOR THE LOVE OF GOD, do not allow r/x for "others" on the entire folder - # this will be treated as a security issue. -chmod 750 "$datadir" -chmod -R o-rwx "$datadir" -chown -R $app:www-data "$datadir" +# chmod 750 "$datadir" +# chmod -R o-rwx "$datadir" +# chown -R $app:www-data "$datadir" -#================================================= -# RESTORE THE PHP-FPM CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the PHP-FPM configuration..." --time --weight=1 - -ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE FAIL2BAN CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the Fail2Ban configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the Fail2Ban configuration..." --time --weight=1 -ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf" -ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf" -ynh_systemd_action --action=restart --service_name=fail2ban +# ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf" +# ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf" +# ynh_systemd_action --action=restart --service_name=fail2ban #================================================= # SPECIFIC RESTORATION @@ -123,31 +121,38 @@ ynh_script_progression --message="Reinstalling dependencies..." --time --weight= # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies +#================================================= +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." --time --weight=1 + +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + #================================================= # RESTORE THE MYSQL DATABASE #================================================= -ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1 +# ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1 -db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) -ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd -ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql +# db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +# ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd +# ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #================================================= # RESTORE VARIOUS FILES #================================================= -ynh_script_progression --message="Restoring various files..." --time --weight=1 +# ynh_script_progression --message="Restoring various files..." --time --weight=1 -ynh_restore_file --origin_path="/etc/cron.d/$app" +# ynh_restore_file --origin_path="/etc/cron.d/$app" -ynh_restore_file --origin_path="/etc/$app/" +# ynh_restore_file --origin_path="/etc/$app/" #================================================= # RESTORE SYSTEMD #================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the systemd configuration..." --time --weight=1 -ynh_restore_file --origin_path="/etc/systemd/system/$app.service" -systemctl enable $app.service --quiet +# ynh_restore_file --origin_path="/etc/systemd/system/$app.service" +# systemctl enable $app.service --quiet #================================================= # RESTORE THE LOGROTATE CONFIGURATION @@ -159,16 +164,16 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 -yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" +# yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" #================================================= # GENERIC FINALIZATION From 55aba69e65adb0b5ba7bf9ef18ba8804e5d95035 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 8 May 2022 20:38:41 +0200 Subject: [PATCH 32/79] Fix config --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index 0652f9a..ba83184 100644 --- a/conf/config.php +++ b/conf/config.php @@ -43,7 +43,7 @@ $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' -$root_path = '/home/; +$root_path = '/home/'; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root From 5a228a8b294e51ccae0645f82b40b057ff7edfc5 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:49:46 +0200 Subject: [PATCH 33/79] Update upgrade --- scripts/upgrade | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index f52658e..8b37948 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,12 +16,13 @@ ynh_script_progression --message="Loading installation settings..." --time --wei app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -language=$(ynh_app_setting_get --app=$app --key=language) -admin=$(ynh_app_setting_get --app=$app --key=admin) final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) +domain=$(ynh_app_setting_get --app=$app --key=domain) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +password=$(ynh_app_setting_get --app=$app --key=password) +admin=$(ynh_app_setting_get --app=$app --key=admin) +language=$(ynh_app_setting_get --app=$app --key=language) #================================================= # CHECK VERSION @@ -54,9 +55,9 @@ ynh_abort_if_errors #================================================= # STOP SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 +# ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # ENSURE DOWNWARD COMPATIBILITY @@ -170,13 +171,13 @@ ynh_script_progression --message="Updating a configuration file..." --time --wei ### The file will automatically be backed-up if it's found to be manually modified (because ### ynh_add_config keeps track of the file's checksum) -ynh_add_config --template="some_config_file" --destination="$final_path/some_config_file" +ynh_add_config --template="../conf/config.php" --destination="$final_path/config.php" # FIXME: this should be handled by the core in the future # You may need to use chmod 600 instead of 400, # for example if the app is expected to be able to modify its own config -chmod 400 "$final_path/some_config_file" -chown $app:$app "$final_path/some_config_file" +chmod 600 "$final_path/config.php" +chown $app:$app "$final_path/config.php" ### For more complex cases where you want to replace stuff using regexes, ### you shoud rely on ynh_replace_string (which is basically a wrapper for sed) @@ -188,10 +189,10 @@ chown $app:$app "$final_path/some_config_file" #================================================= # SETUP SYSTEMD #================================================= -ynh_script_progression --message="Upgrading systemd configuration..." --time --weight=1 +# ynh_script_progression --message="Upgrading systemd configuration..." --time --weight=1 # Create a dedicated systemd config -ynh_add_systemd_config +# ynh_add_systemd_config #================================================= # GENERIC FINALIZATION @@ -206,24 +207,24 @@ ynh_use_logrotate --non-append #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 -yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" +# yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" #================================================= # UPGRADE FAIL2BAN #================================================= -ynh_script_progression --message="Reconfiguring Fail2Ban..." --time --weight=1 +# ynh_script_progression --message="Reconfiguring Fail2Ban..." --time --weight=1 # Create a dedicated Fail2Ban config -ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" +# ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" #================================================= # RELOAD NGINX From 90d0be749f317e5a17d508f3de726ad270ed4ca2 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sun, 8 May 2022 20:57:44 +0200 Subject: [PATCH 34/79] Update manifest.json --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index f429514..ccc2c02 100644 --- a/manifest.json +++ b/manifest.json @@ -3,8 +3,8 @@ "id": "tinyfilemanager", "packaging_format": 1, "description": { - "en": "Explain in *a few (10~15) words* the purpose of the app or what it actually does (it is meant to give a rough idea to users browsing a catalog of 100+ apps)", - "fr": "Expliquez en *quelques* (10~15) mots l'utilité de l'app ou ce qu'elle fait (l'objectif est de donner une idée grossière pour des utilisateurs qui naviguent dans un catalogue de 100+ apps)" + "en": "Web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser.", + "fr": "Gestionnaire de fichiers basé sur le Web et c'est un gestionnaire de fichiers simple, rapide et petit avec un seul fichier, une application Web multilingue pour stocker, télécharger, éditer et gérer des fichiers et des dossiers en ligne via un navigateur Web" }, "version": "2.4.7~ynh1", "url": "https://tinyfilemanager.github.io/", From a1c565a290faaca4253cd5318cf9550ccf2cbd8d Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 14:42:25 +0200 Subject: [PATCH 35/79] Create hash.php --- scripts/hash.php | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 scripts/hash.php diff --git a/scripts/hash.php b/scripts/hash.php new file mode 100644 index 0000000..b74338b --- /dev/null +++ b/scripts/hash.php @@ -0,0 +1,9 @@ + + From bfb6d8c44b4f7cf09470c3dec37aca91a1bf98f5 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 21:24:29 +0200 Subject: [PATCH 36/79] Update check_process --- check_process | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/check_process b/check_process index f41c4c9..7f1870e 100644 --- a/check_process +++ b/check_process @@ -1,8 +1,3 @@ -# See here for more information -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest domain="domain.tld" @@ -11,7 +6,6 @@ language="fr" admin="john" password="1Strong-Password" - port="666" ; Checks pkg_linter=1 setup_sub_dir=1 @@ -20,7 +14,6 @@ setup_private=1 setup_public=1 upgrade=1 - upgrade=1 from_commit=CommitHash backup_restore=1 multi_instance=1 port_already_use=0 @@ -28,7 +21,3 @@ ;;; Options Email= Notification=none -;;; Upgrade options - ; commit=CommitHash - name=Name and date of the commit. - manifest_arg=domain=DOMAIN&path=PATH&is_public=1&language=fr&admin=USER&password=pass&port=666& From bb8b3983815c070896ba27392531a42c3962aaa9 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 21:37:08 +0200 Subject: [PATCH 37/79] Update install --- scripts/install | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/install b/scripts/install index 6615237..dd7e71e 100755 --- a/scripts/install +++ b/scripts/install @@ -30,6 +30,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD +# passhash=php hash.php $password # phpversion=$YNH_PHP_VERSION ### If it's a multi-instance app, meaning it can be installed several times independently From 16afc4d41de79714d97e05a9a00f9f7a0a3c25fd Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 21:39:49 +0200 Subject: [PATCH 38/79] Update install --- scripts/install | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/install b/scripts/install index dd7e71e..e299948 100755 --- a/scripts/install +++ b/scripts/install @@ -209,7 +209,7 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # CREATE DATA DIRECTORY #================================================= -# ynh_script_progression --message="Creating a data directory..." --time --weight=1 +ynh_script_progression --message="Creating a data directory..." --time --weight=1 ### Use these lines if you need to create a directory to store "persistent files" for the application. ### Usually this directory is used to store uploaded files or any file that won't be updated during @@ -219,10 +219,10 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) ### - Remove the section "RESTORE THE DATA DIRECTORY" in the restore script ### - As well as the section "REMOVE DATA DIR" in the remove script -# datadir=/home/yunohost.app/$app -# ynh_app_setting_set --app=$app --key=datadir --value=$datadir +datadir=/home/yunohost.app/$app +ynh_app_setting_set --app=$app --key=datadir --value=$datadir -# mkdir -p $datadir +mkdir -p $datadir # FIXME: this should be managed by the core in the future # Here, as a packager, you may have to tweak the ownerhsip/permissions @@ -230,9 +230,9 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) # files in some cases. # But FOR THE LOVE OF GOD, do not allow r/x for "others" on the entire folder - # this will be treated as a security issue. -# chmod 750 "$datadir" -# chmod -R o-rwx "$datadir" -# chown -R $app:www-data "$datadir" +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:www-data "$datadir" #================================================= # ADD A CONFIGURATION From 3dae9695b932a64342108f87b36cb9dd0e034cdf Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 21:42:38 +0200 Subject: [PATCH 39/79] Update config.php --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index ba83184..dd4b975 100644 --- a/conf/config.php +++ b/conf/config.php @@ -43,7 +43,7 @@ $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' -$root_path = '/home/'; +$root_path = '__DATADIR__'; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root From 3664fd53e65fb5436a8460baa848e2af70ae8c14 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 22:04:07 +0200 Subject: [PATCH 40/79] Update manifest.json --- manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.json b/manifest.json index ccc2c02..99ccda6 100644 --- a/manifest.json +++ b/manifest.json @@ -1,5 +1,5 @@ { - "name": "tinyfilemanager", + "name": "Tiny File Manager", "id": "tinyfilemanager", "packaging_format": 1, "description": { @@ -64,8 +64,8 @@ "name": "password", "type": "password", "help": { - "en": "Use the help field to add an information for the admin about this question.", - "fr": "Utilisez le champ aide pour ajouter une information à l'intention de l'administrateur à propos de cette question." + "en": "Password", + "fr": "Mot de passe" } } ] From 1ed2215768246677e68c1b736cb6c72a03519427 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 9 May 2022 20:04:09 +0000 Subject: [PATCH 41/79] Auto-update README --- README.md | 6 +++--- README_fr.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 24da6ee..7ff107c 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ N.B.: This README was automatically generated by https://github.com/YunoHost/app It shall NOT be edited by hand. --> -# tinyfilemanager for YunoHost +# Tiny File Manager for YunoHost [![Integration level](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) -[![Install tinyfilemanager with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) +[![Install Tiny File Manager with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Lire ce readme en français.](./README_fr.md)* -> *This package allows you to install tinyfilemanager quickly and simply on a YunoHost server. +> *This package allows you to install Tiny File Manager quickly and simply on a YunoHost server. If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview diff --git a/README_fr.md b/README_fr.md index 882f87c..eed7523 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,12 +1,12 @@ -# tinyfilemanager pour YunoHost +# Tiny File Manager pour YunoHost [![Niveau d'intégration](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) -[![Installer tinyfilemanager avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) +[![Installer Tiny File Manager avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Read this readme in english.](./README.md)* *[Lire ce readme en français.](./README_fr.md)* -> *Ce package vous permet d'installer tinyfilemanager rapidement et simplement sur un serveur YunoHost. +> *Ce package vous permet d'installer Tiny File Manager rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble From 6cab03b7bb83caa8c19c4d648ccc012d2971e190 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 22:10:26 +0200 Subject: [PATCH 42/79] Update config.php --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index dd4b975..b8e59fe 100644 --- a/conf/config.php +++ b/conf/config.php @@ -10,7 +10,7 @@ or -Put inside this file all the static configuration you want and forgot to configure "tinyfilemanager.php". ################################################################################################################# */ - +$lang=fr; // Auth with login/password // set true/false to enable/disable it // Is independent from IP white- and blacklisting From a80db75ebfafc242b23cd4cb238f026e86f9b7de Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 9 May 2022 22:59:53 +0100 Subject: [PATCH 43/79] Update config.php --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index b8e59fe..dd4b975 100644 --- a/conf/config.php +++ b/conf/config.php @@ -10,7 +10,7 @@ or -Put inside this file all the static configuration you want and forgot to configure "tinyfilemanager.php". ################################################################################################################# */ -$lang=fr; + // Auth with login/password // set true/false to enable/disable it // Is independent from IP white- and blacklisting From 6cb6e64d88818e06fc7a0ad8db35f3429061572f Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:02:12 +0100 Subject: [PATCH 44/79] Update config.php --- conf/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/config.php b/conf/config.php index dd4b975..8704dc6 100644 --- a/conf/config.php +++ b/conf/config.php @@ -39,7 +39,7 @@ $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php -$default_timezone = 'Etc/UTC'; // UTC +$default_timezone = '__TIMEZONE__'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' From 3def0e6bc410c4b73367b4c514f93f13886ac959 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:18:03 +0100 Subject: [PATCH 45/79] Update install --- scripts/install | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index e299948..1d5c11e 100755 --- a/scripts/install +++ b/scripts/install @@ -30,8 +30,10 @@ is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD +timezone="$(cat /etc/timezone)" + # passhash=php hash.php $password -# phpversion=$YNH_PHP_VERSION +phpversion=$YNH_PHP_VERSION ### If it's a multi-instance app, meaning it can be installed several times independently ### The id of the app as stated in the manifest is available as $YNH_APP_ID @@ -259,6 +261,10 @@ ynh_add_config --template="../conf/config.php" --destination="$final_path/config chmod 600 "$final_path/config.php" chown $app:$app "$final_path/config.php" +ynh_replace_string --match_string='$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}';' + --replace_string='$CONFIG = '{"lang":"$language","error_reporting":false,"show_hidden":true,"hide_Cols":false,"calc_folder":false,"theme":"light"}';' + --target_file="$final_path/index.php" + ### For more complex cases where you want to replace stuff using regexes, ### you shoud rely on ynh_replace_string (which is basically a wrapper for sed) ### When doing so, you also need to manually call ynh_store_file_checksum @@ -311,7 +317,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP LOGROTATE #================================================= -ynh_script_progression --message="Configuring log rotation..." --time --weight=1 +#ynh_script_progression --message="Configuring log rotation..." --time --weight=1 ### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. ### Use this helper only if there is effectively a log file for this app. @@ -322,7 +328,7 @@ ynh_script_progression --message="Configuring log rotation..." --time --weight=1 ### - And the section "SETUP LOGROTATE" in the upgrade script # Use logrotate to manage application logfile(s) -ynh_use_logrotate +# ynh_use_logrotate #================================================= # INTEGRATE SERVICE IN YUNOHOST From a08cfd1a6f8d2b1d2ede7be9f8d9f3465ea47333 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:22:41 +0100 Subject: [PATCH 46/79] Update install --- scripts/install | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/install b/scripts/install index 1d5c11e..d88b80f 100755 --- a/scripts/install +++ b/scripts/install @@ -261,10 +261,6 @@ ynh_add_config --template="../conf/config.php" --destination="$final_path/config chmod 600 "$final_path/config.php" chown $app:$app "$final_path/config.php" -ynh_replace_string --match_string='$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}';' - --replace_string='$CONFIG = '{"lang":"$language","error_reporting":false,"show_hidden":true,"hide_Cols":false,"calc_folder":false,"theme":"light"}';' - --target_file="$final_path/index.php" - ### For more complex cases where you want to replace stuff using regexes, ### you shoud rely on ynh_replace_string (which is basically a wrapper for sed) ### When doing so, you also need to manually call ynh_store_file_checksum From eacb12fad7d7bd780f3982888829ae39fd09749c Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:25:08 +0100 Subject: [PATCH 47/79] Update backup --- scripts/backup | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/backup b/scripts/backup index b1eaf6a..c8f2b3a 100755 --- a/scripts/backup +++ b/scripts/backup @@ -30,11 +30,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -password=$(ynh_app_setting_get --app=$app --key=password) -admin=$(ynh_app_setting_get --app=$app --key=admin) -language=$(ynh_app_setting_get --app=$app --key=language) #================================================= @@ -57,7 +53,7 @@ ynh_backup --src_path="$final_path" # BACKUP THE DATA DIR #================================================= -# ynh_backup --src_path="$datadir" --is_big +ynh_backup --src_path="$datadir" --is_big #================================================= # BACKUP THE NGINX CONFIGURATION @@ -84,7 +80,7 @@ ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" # BACKUP LOGROTATE #================================================= -ynh_backup --src_path="/etc/logrotate.d/$app" +# ynh_backup --src_path="/etc/logrotate.d/$app" #================================================= # BACKUP SYSTEMD From 415cf5eb87430e8c2d59d2fc353381f9f08e0e94 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:26:41 +0100 Subject: [PATCH 48/79] Update remove --- scripts/remove | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/remove b/scripts/remove index f8ef81e..b461cf8 100755 --- a/scripts/remove +++ b/scripts/remove @@ -21,7 +21,7 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) # db_name=$(ynh_app_setting_get --app=$app --key=db_name) # db_user=$db_name final_path=$(ynh_app_setting_get --app=$app --key=final_path) -# datadir=$(ynh_app_setting_get --app=$app --key=datadir) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # STANDARD REMOVE @@ -47,10 +47,10 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= -ynh_script_progression --message="Removing logrotate configuration..." --time --weight=1 +# ynh_script_progression --message="Removing logrotate configuration..." --time --weight=1 # Remove the app-specific logrotate config -ynh_remove_logrotate +# ynh_remove_logrotate #================================================= # REMOVE THE MYSQL DATABASE From 4b4ce4163e6bfab56f1b719dbdfa156b540fb4f9 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:28:53 +0100 Subject: [PATCH 49/79] Update restore --- scripts/restore | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/scripts/restore b/scripts/restore index ba115ec..1aad0d0 100755 --- a/scripts/restore +++ b/scripts/restore @@ -34,11 +34,8 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) # db_name=$(ynh_app_setting_get --app=$app --key=db_name) # db_user=$db_name phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -# datadir=$(ynh_app_setting_get --app=$app --key=datadir) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) -password=$(ynh_app_setting_get --app=$app --key=password) -admin=$(ynh_app_setting_get --app=$app --key=admin) -language=$(ynh_app_setting_get --app=$app --key=language) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) + #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -85,11 +82,11 @@ chown -R $app:www-data "$final_path" #================================================= # RESTORE THE DATA DIRECTORY #================================================= -# ynh_script_progression --message="Restoring the data directory..." --time --weight=1 +ynh_script_progression --message="Restoring the data directory..." --time --weight=1 -# ynh_restore_file --origin_path="$datadir" --not_mandatory +ynh_restore_file --origin_path="$datadir" --not_mandatory -# mkdir -p $datadir +mkdir -p $datadir # FIXME: this should be managed by the core in the future # Here, as a packager, you may have to tweak the ownerhsip/permissions @@ -97,9 +94,9 @@ chown -R $app:www-data "$final_path" # files in some cases. # But FOR THE LOVE OF GOD, do not allow r/x for "others" on the entire folder - # this will be treated as a security issue. -# chmod 750 "$datadir" -# chmod -R o-rwx "$datadir" -# chown -R $app:www-data "$datadir" +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:www-data "$datadir" #================================================= @@ -157,9 +154,9 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the logrotate configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the logrotate configuration..." --time --weight=1 -ynh_restore_file --origin_path="/etc/logrotate.d/$app" +# ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # INTEGRATE SERVICE IN YUNOHOST From cb4b61853a043386b4df908eface7d4e356d650c Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:35:53 +0100 Subject: [PATCH 50/79] Update manifest.json --- manifest.json | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/manifest.json b/manifest.json index 99ccda6..41903c3 100644 --- a/manifest.json +++ b/manifest.json @@ -12,7 +12,7 @@ "license": "GPL-3.0", "website": "https://tinyfilemanager.github.io/", "demo": "https://tinyfilemanager.github.io/demo/", - "admindoc": "https://github.com/prasathmani/tinyfilemanager", + "admindoc": "https://github.com/prasathmani/tinyfilemanager/wiki", "userdoc": "https://github.com/prasathmani/tinyfilemanager", "code": "https://github.com/prasathmani/tinyfilemanager" }, @@ -46,16 +46,6 @@ "type": "boolean", "default": true }, - { - "name": "language", - "type": "string", - "ask": { - "en": "Choose the application language", - "fr": "Choisissez la langue de l'application" - }, - "choices": ["fr", "en"], - "default": "fr" - }, { "name": "admin", "type": "user" From f1c1f1a4394ec505047baaf4ba2e0dc3deb7746d Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 16 May 2022 20:36:00 +0000 Subject: [PATCH 51/79] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7ff107c..b3c762b 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ To enable/disable authentication set `$use_auth` to true or false. * Official app website: https://tinyfilemanager.github.io/ * Official user documentation: https://github.com/prasathmani/tinyfilemanager -* Official admin documentation: https://github.com/prasathmani/tinyfilemanager +* Official admin documentation: https://github.com/prasathmani/tinyfilemanager/wiki * Upstream app code repository: https://github.com/prasathmani/tinyfilemanager * YunoHost documentation for this app: https://yunohost.org/app_tinyfilemanager * Report a bug: https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues diff --git a/README_fr.md b/README_fr.md index eed7523..e61b122 100644 --- a/README_fr.md +++ b/README_fr.md @@ -77,7 +77,7 @@ To enable/disable authentication set `$use_auth` to true or false. * Site officiel de l'app : https://tinyfilemanager.github.io/ * Documentation officielle utilisateur : https://github.com/prasathmani/tinyfilemanager -* Documentation officielle de l'admin : https://github.com/prasathmani/tinyfilemanager +* Documentation officielle de l'admin : https://github.com/prasathmani/tinyfilemanager/wiki * Dépôt de code officiel de l'app : https://github.com/prasathmani/tinyfilemanager * Documentation YunoHost pour cette app : https://yunohost.org/app_tinyfilemanager * Signaler un bug : https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues From b2dd6a17db57c426bcc8729f9cdce82a0013cd17 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:36:45 +0100 Subject: [PATCH 52/79] Update check_process --- check_process | 1 - 1 file changed, 1 deletion(-) diff --git a/check_process b/check_process index 7f1870e..bb6f46e 100644 --- a/check_process +++ b/check_process @@ -3,7 +3,6 @@ domain="domain.tld" path="/path" is_public=1 - language="fr" admin="john" password="1Strong-Password" ; Checks From 10a5be184f902a718be1eb6a17be21ff9598d2ed Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:38:06 +0100 Subject: [PATCH 53/79] Update install --- scripts/install | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install b/scripts/install index d88b80f..ab6ad57 100755 --- a/scripts/install +++ b/scripts/install @@ -27,7 +27,6 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD timezone="$(cat /etc/timezone)" From 70c87768d0ac03a6d3714ba45e42e2997d814a4b Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:38:44 +0100 Subject: [PATCH 54/79] Update install --- scripts/install | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install b/scripts/install index ab6ad57..ad6bfc8 100755 --- a/scripts/install +++ b/scripts/install @@ -74,7 +74,6 @@ ynh_script_progression --message="Storing installation settings..." --time --wei ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=admin --value=$admin ynh_app_setting_set --app=$app --key=password --value=$password From 346f35a928400165fba0724e2eb9bd4ed2bd5234 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:48:25 +0100 Subject: [PATCH 55/79] Update install --- scripts/install | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/scripts/install b/scripts/install index ad6bfc8..4e61df7 100755 --- a/scripts/install +++ b/scripts/install @@ -57,7 +57,7 @@ app=$YNH_APP_INSTANCE_NAME ### Use the execution time, given by --time, to estimate the weight of a step. ### A common way to do it is to set a weight equal to the execution time in second +1. ### The execution time is given for the duration since the previous call. So the weight should be applied to this previous call. -ynh_script_progression --message="Validating installation parameters..." --time --weight=1 +ynh_script_progression --message="Validating installation parameters..." --weight=1 ### If the app uses NGINX as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". ### If the app provides an internal web server (or uses another application server such as uWSGI), the final path should be "/opt/yunohost/$app" @@ -70,7 +70,7 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_script_progression --message="Storing installation settings..." --time --weight=1 +ynh_script_progression --message="Storing installation settings..." --weight=1 ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url @@ -83,7 +83,7 @@ ynh_app_setting_set --app=$app --key=password --value=$password #================================================= # FIND AND OPEN A PORT #================================================= -# ynh_script_progression --message="Finding an available port..." --time --weight=1 +# ynh_script_progression --message="Finding an available port..." --weight=1 ### Use these lines if you have to open a port for the application ### `ynh_find_port` will find the first available port starting from the given port. @@ -99,13 +99,13 @@ ynh_app_setting_set --app=$app --key=password --value=$password # If you do this and the app doesn't actually need you are CREATING SECURITY HOLES IN THE SERVER !) # Open the port -# ynh_script_progression --message="Configuring firewall..." --time --weight=1 +# ynh_script_progression --message="Configuring firewall..." --weight=1 # ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Installing dependencies..." --time --weight=1 +ynh_script_progression --message="Installing dependencies..." --weight=1 ### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. ### Those deb packages will be installed as dependencies of this package. @@ -120,7 +120,7 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Configuring system user..." --time --weight=1 +ynh_script_progression --message="Configuring system user..." --weight=1 # Create a system user ynh_system_user_create --username=$app --home_dir="$final_path" @@ -128,7 +128,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # CREATE A MYSQL DATABASE #================================================= -# ynh_script_progression --message="Creating a MySQL database..." --time --weight=1 +# ynh_script_progression --message="Creating a MySQL database..." --weight=1 ### Use these lines if you need a database for the application. ### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. @@ -147,7 +147,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_script_progression --message="Setting up source files..." --time --weight=1 +ynh_script_progression --message="Setting up source files..." --weight=1 ### `ynh_setup_source` is used to install an app from a zip or tar.gz file, ### downloaded from an upstream source, like a git repository. @@ -173,7 +173,7 @@ sudo mv $final_path/tinyfilemanager.php $final_path/index.php #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configuring NGINX web server..." --time --weight=1 +ynh_script_progression --message="Configuring NGINX web server..." --weight=1 ### `ynh_add_nginx_config` will use the file conf/nginx.conf @@ -183,7 +183,7 @@ ynh_add_nginx_config #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring PHP-FPM..." --time --weight=1 +ynh_script_progression --message="Configuring PHP-FPM..." --weight=1 ### `ynh_add_fpm_config` is used to set up a PHP config. ### You can remove it if your app doesn't use PHP. @@ -209,7 +209,7 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # CREATE DATA DIRECTORY #================================================= -ynh_script_progression --message="Creating a data directory..." --time --weight=1 +ynh_script_progression --message="Creating a data directory..." --weight=1 ### Use these lines if you need to create a directory to store "persistent files" for the application. ### Usually this directory is used to store uploaded files or any file that won't be updated during @@ -237,7 +237,7 @@ chown -R $app:www-data "$datadir" #================================================= # ADD A CONFIGURATION #================================================= -ynh_script_progression --message="Adding a configuration file..." --time --weight=1 +ynh_script_progression --message="Adding a configuration file..." --weight=1 ### You can add specific configuration files. ### @@ -269,7 +269,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP SYSTEMD #================================================= -# ynh_script_progression --message="Configuring a systemd service..." --time --weight=1 +# ynh_script_progression --message="Configuring a systemd service..." --weight=1 ### `ynh_systemd_config` is used to configure a systemd script for an app. ### It can be used for apps that use sysvinit (with adaptation) or systemd. @@ -295,12 +295,12 @@ chown $app:$app "$final_path/config.php" ### forms. # Set the app as temporarily public for curl call -# ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 +# ynh_script_progression --message="Configuring SSOwat..." --weight=1 # Making the app public for curl # ynh_permission_update --permission="main" --add="visitors" # Installation with curl -# ynh_script_progression --message="Finalizing installation..." --time --weight=1 +# ynh_script_progression --message="Finalizing installation..." --weight=1 # ynh_local_curl "/INSTALL_PATH" "key1=value1" "key2=value2" "key3=value3" # Remove the public access @@ -311,7 +311,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP LOGROTATE #================================================= -#ynh_script_progression --message="Configuring log rotation..." --time --weight=1 +#ynh_script_progression --message="Configuring log rotation..." --weight=1 ### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. ### Use this helper only if there is effectively a log file for this app. @@ -327,7 +327,7 @@ chown $app:$app "$final_path/config.php" #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 ### `yunohost service add` integrates a service in YunoHost. It then gets ### displayed in the admin interface and through the others `yunohost service` commands. @@ -359,7 +359,7 @@ chown $app:$app "$final_path/config.php" #================================================= # START SYSTEMD SERVICE #================================================= -# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --weight=1 ### `ynh_systemd_action` is used to start a systemd service for an app. ### Only needed if you have configure a systemd service @@ -375,7 +375,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP FAIL2BAN #================================================= -# ynh_script_progression --message="Configuring Fail2Ban..." --time --weight=1 +# ynh_script_progression --message="Configuring Fail2Ban..." --weight=1 # Create a dedicated Fail2Ban config # ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" @@ -383,7 +383,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP SSOWAT #================================================= -# ynh_script_progression --message="Configuring permissions..." --time --weight=1 +# ynh_script_progression --message="Configuring permissions..." --weight=1 # Make app public if necessary # if [ $is_public -eq 1 ] @@ -407,7 +407,7 @@ chown $app:$app "$final_path/config.php" #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading NGINX web server..." --time --weight=1 +ynh_script_progression --message="Reloading NGINX web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload @@ -415,4 +415,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" --time --last +ynh_script_progression --message="Installation of $app completed" --last From 36cacc87b9bd5d1d60bcdb26a682532231e6579f Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:50:25 +0100 Subject: [PATCH 56/79] Update upgrade --- scripts/upgrade | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 8b37948..fe6a24a 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,7 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -39,7 +39,7 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --time --weight=1 +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=1 # Backup the current version of the app ynh_backup_before_upgrade @@ -55,14 +55,14 @@ ynh_abort_if_errors #================================================= # STOP SYSTEMD SERVICE #================================================= -# ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 +# ynh_script_progression --message="Stopping a systemd service..." --weight=1 # ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --time --weight=1 +ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 # # N.B. : the followings setting migrations snippets are provided as *EXAMPLES* @@ -105,7 +105,7 @@ fi #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --time --weight=1 +ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 # Create a dedicated user (if not existing) ynh_system_user_create --username=$app --home_dir="$final_path" @@ -116,7 +116,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading source files..." --time --weight=1 + ynh_script_progression --message="Upgrading source files..." --weight=1 # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" @@ -135,7 +135,7 @@ chown -R $app:www-data "$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading NGINX web server configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=1 # Create a dedicated NGINX config ynh_add_nginx_config @@ -143,14 +143,14 @@ ynh_add_nginx_config #================================================= # UPGRADE DEPENDENCIES #================================================= -ynh_script_progression --message="Upgrading dependencies..." --time --weight=1 +ynh_script_progression --message="Upgrading dependencies..." --weight=1 ynh_install_app_dependencies $pkg_dependencies #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading PHP-FPM configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading PHP-FPM configuration..." --weight=1 # Create a dedicated PHP-FPM config ynh_add_fpm_config @@ -164,7 +164,7 @@ ynh_add_fpm_config #================================================= # UPDATE A CONFIG FILE #================================================= -ynh_script_progression --message="Updating a configuration file..." --time --weight=1 +ynh_script_progression --message="Updating a configuration file..." --weight=1 ### Same as during install ### @@ -189,7 +189,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP SYSTEMD #================================================= -# ynh_script_progression --message="Upgrading systemd configuration..." --time --weight=1 +# ynh_script_progression --message="Upgrading systemd configuration..." --weight=1 # Create a dedicated systemd config # ynh_add_systemd_config @@ -199,7 +199,7 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP LOGROTATE #================================================= -ynh_script_progression --message="Upgrading logrotate configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 # Use logrotate to manage app-specific logfile(s) ynh_use_logrotate --non-append @@ -207,21 +207,21 @@ ynh_use_logrotate --non-append #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 # yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= -# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --weight=1 # ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" #================================================= # UPGRADE FAIL2BAN #================================================= -# ynh_script_progression --message="Reconfiguring Fail2Ban..." --time --weight=1 +# ynh_script_progression --message="Reconfiguring Fail2Ban..." --weight=1 # Create a dedicated Fail2Ban config # ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login" @@ -229,7 +229,7 @@ ynh_use_logrotate --non-append #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading NGINX web server..." --time --weight=1 +ynh_script_progression --message="Reloading NGINX web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload @@ -237,4 +237,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" --time --last +ynh_script_progression --message="Upgrade of $app completed" --last From 4e3468b9e6fccf18251e2c05b3fd046a5078aca7 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:51:05 +0100 Subject: [PATCH 57/79] Update remove --- scripts/remove | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/scripts/remove b/scripts/remove index b461cf8..6220f82 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,7 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -32,14 +32,14 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) # if ynh_exec_warn_less yunohost service status $app >/dev/null # then -# ynh_script_progression --message="Removing $app service integration..." --time --weight=1 +# ynh_script_progression --message="Removing $app service integration..." --weight=1 # yunohost service remove $app # fi #================================================= # STOP AND REMOVE SERVICE #================================================= -# ynh_script_progression --message="Stopping and removing the systemd service..." --time --weight=1 +# ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 # Remove the dedicated systemd config # ynh_remove_systemd_config @@ -47,7 +47,7 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= -# ynh_script_progression --message="Removing logrotate configuration..." --time --weight=1 +# ynh_script_progression --message="Removing logrotate configuration..." --weight=1 # Remove the app-specific logrotate config # ynh_remove_logrotate @@ -55,7 +55,7 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # REMOVE THE MYSQL DATABASE #================================================= -# ynh_script_progression --message="Removing the MySQL database..." --time --weight=1 +# ynh_script_progression --message="Removing the MySQL database..." --weight=1 # Remove a database if it exists, along with the associated user # ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name @@ -63,7 +63,7 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_script_progression --message="Removing app main directory..." --time --weight=1 +ynh_script_progression --message="Removing app main directory..." --weight=1 # Remove the app directory securely ynh_secure_remove --file="$final_path" @@ -75,14 +75,14 @@ ynh_secure_remove --file="$final_path" # Remove the data directory if --purge option is used # if [ "${YNH_APP_PURGE:-0}" -eq 1 ] # then -# ynh_script_progression --message="Removing app data directory..." --time --weight=1 +# ynh_script_progression --message="Removing app data directory..." --weight=1 # ynh_secure_remove --file="$datadir" # fi #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Removing NGINX web server configuration..." --time --weight=1 +ynh_script_progression --message="Removing NGINX web server configuration..." --weight=1 # Remove the dedicated NGINX config ynh_remove_nginx_config @@ -90,7 +90,7 @@ ynh_remove_nginx_config #================================================= # REMOVE DEPENDENCIES #================================================= -ynh_script_progression --message="Removing dependencies..." --time --weight=1 +ynh_script_progression --message="Removing dependencies..." --weight=1 # Remove metapackage and its dependencies before removing php-fpm ynh_remove_app_dependencies @@ -98,7 +98,7 @@ ynh_remove_app_dependencies #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Removing PHP-FPM configuration..." --time --weight=1 +ynh_script_progression --message="Removing PHP-FPM configuration..." --weight=1 # Remove the dedicated PHP-FPM config ynh_remove_fpm_config @@ -109,14 +109,14 @@ ynh_remove_fpm_config # if yunohost firewall list | grep -q "\- $port$" # then -# ynh_script_progression --message="Closing port $port..." --time --weight=1 +# ynh_script_progression --message="Closing port $port..." --weight=1 # ynh_exec_warn_less yunohost firewall disallow TCP $port # fi #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= -# ynh_script_progression --message="Removing Fail2Ban configuration..." --time --weight=1 +# ynh_script_progression --message="Removing Fail2Ban configuration..." --weight=1 # Remove the dedicated Fail2Ban config # ynh_remove_fail2ban_config @@ -126,7 +126,7 @@ ynh_remove_fpm_config #================================================= # REMOVE VARIOUS FILES #================================================= -# ynh_script_progression --message="Removing various files..." --time --weight=1 +# ynh_script_progression --message="Removing various files..." --weight=1 # Remove a cron file # ynh_secure_remove --file="/etc/cron.d/$app" @@ -142,7 +142,7 @@ ynh_remove_fpm_config #================================================= # REMOVE DEDICATED USER #================================================= -ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1 +ynh_script_progression --message="Removing the dedicated system user..." --weight=1 # Delete a system user ynh_system_user_delete --username=$app @@ -151,4 +151,4 @@ ynh_system_user_delete --username=$app # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" --time --last +ynh_script_progression --message="Removal of $app completed" --last From 22c7e348ceeb8538f5f458244e767ded59b81d09 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Mon, 16 May 2022 21:51:45 +0100 Subject: [PATCH 58/79] Update restore --- scripts/restore | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/restore b/scripts/restore index 1aad0d0..fa82f3b 100755 --- a/scripts/restore +++ b/scripts/restore @@ -24,7 +24,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -40,7 +40,7 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= -ynh_script_progression --message="Validating restoration parameters..." --time --weight=1 +ynh_script_progression --message="Validating restoration parameters..." --weight=1 test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " @@ -50,14 +50,14 @@ test ! -d $final_path \ #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the NGINX web server configuration..." --time --weight=1 +ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1 ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RECREATE THE DEDICATED USER #================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --time --weight=1 +ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 # Create the dedicated user (if not existing) ynh_system_user_create --username=$app --home_dir="$final_path" @@ -65,7 +65,7 @@ ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # RESTORE THE APP MAIN DIR #================================================= -ynh_script_progression --message="Restoring the app main directory..." --time --weight=1 +ynh_script_progression --message="Restoring the app main directory..." --weight=1 ynh_restore_file --origin_path="$final_path" @@ -82,7 +82,7 @@ chown -R $app:www-data "$final_path" #================================================= # RESTORE THE DATA DIRECTORY #================================================= -ynh_script_progression --message="Restoring the data directory..." --time --weight=1 +ynh_script_progression --message="Restoring the data directory..." --weight=1 ynh_restore_file --origin_path="$datadir" --not_mandatory @@ -102,7 +102,7 @@ chown -R $app:www-data "$datadir" #================================================= # RESTORE FAIL2BAN CONFIGURATION #================================================= -# ynh_script_progression --message="Restoring the Fail2Ban configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=1 # ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf" # ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf" @@ -113,7 +113,7 @@ chown -R $app:www-data "$datadir" #================================================= # REINSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1 +ynh_script_progression --message="Reinstalling dependencies..." --weight=1 # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies @@ -121,14 +121,14 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the PHP-FPM configuration..." --time --weight=1 +ynh_script_progression --message="Restoring the PHP-FPM configuration..." --weight=1 ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE THE MYSQL DATABASE #================================================= -# ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1 +# ynh_script_progression --message="Restoring the MySQL database..." --weight=1 # db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) # ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd @@ -137,7 +137,7 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE VARIOUS FILES #================================================= -# ynh_script_progression --message="Restoring various files..." --time --weight=1 +# ynh_script_progression --message="Restoring various files..." --weight=1 # ynh_restore_file --origin_path="/etc/cron.d/$app" @@ -146,7 +146,7 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE SYSTEMD #================================================= -# ynh_script_progression --message="Restoring the systemd configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 # ynh_restore_file --origin_path="/etc/systemd/system/$app.service" # systemctl enable $app.service --quiet @@ -154,21 +154,21 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= -# ynh_script_progression --message="Restoring the logrotate configuration..." --time --weight=1 +# ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1 # ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= -# ynh_script_progression --message="Integrating service in YunoHost..." --time --weight=1 +# ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 # yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= -# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --weight=1 # ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" @@ -177,7 +177,7 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." --time --weight=1 +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." --weight=1 ynh_systemd_action --service_name=php$phpversion-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload @@ -186,4 +186,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" --time --last +ynh_script_progression --message="Restoration completed for $app" --last From bdd9704fd3d3a8845cafb31d4d970476cf451da8 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:49:45 +0200 Subject: [PATCH 59/79] Update manifest.json --- manifest.json | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/manifest.json b/manifest.json index 41903c3..d742a18 100644 --- a/manifest.json +++ b/manifest.json @@ -40,23 +40,6 @@ "type": "path", "example": "/tinyfilemanager", "default": "/tinyfilemanager" - }, - { - "name": "is_public", - "type": "boolean", - "default": true - }, - { - "name": "admin", - "type": "user" - }, - { - "name": "password", - "type": "password", - "help": { - "en": "Password", - "fr": "Mot de passe" - } } ] } From 644766e828e4e6b18b90ddbe1cb311c4c1d4901a Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:50:37 +0200 Subject: [PATCH 60/79] Update config.php --- conf/config.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/conf/config.php b/conf/config.php index 8704dc6..b2f24de 100644 --- a/conf/config.php +++ b/conf/config.php @@ -14,14 +14,13 @@ or // Auth with login/password // set true/false to enable/disable it // Is independent from IP white- and blacklisting -$use_auth = true; +$use_auth = false; // Login user name and password // Users: array('Username' => 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( - '__ADMIN__' => password_hash('__PASSWORD__', PASSWORD_DEFAULT), // change yunoadmin and password_here -); + ); // Readonly users // e.g. array('users', 'guest', ...) From 23d982bea599c0d54c90321e2f0b5cbc95456706 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:51:49 +0200 Subject: [PATCH 61/79] Update backup --- scripts/backup | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup b/scripts/backup index c8f2b3a..27be528 100755 --- a/scripts/backup +++ b/scripts/backup @@ -31,6 +31,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= From 910bd70ebaf10bf6d3c3857a1c0a899dc17360be Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:53:28 +0200 Subject: [PATCH 62/79] Update install --- scripts/install | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/install b/scripts/install index 4e61df7..75bc027 100755 --- a/scripts/install +++ b/scripts/install @@ -26,9 +26,6 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH -is_public=$YNH_APP_ARG_IS_PUBLIC -admin=$YNH_APP_ARG_ADMIN -password=$YNH_APP_ARG_PASSWORD timezone="$(cat /etc/timezone)" # passhash=php hash.php $password @@ -74,8 +71,6 @@ ynh_script_progression --message="Storing installation settings..." --weight=1 ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=admin --value=$admin -ynh_app_setting_set --app=$app --key=password --value=$password #================================================= From 541e11c3809028a25f8e1d7eb62656e599b9242f Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:54:31 +0200 Subject: [PATCH 63/79] Update remove --- scripts/remove | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scripts/remove b/scripts/remove index 6220f82..d1dbc30 100755 --- a/scripts/remove +++ b/scripts/remove @@ -17,9 +17,6 @@ ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -# port=$(ynh_app_setting_get --app=$app --key=port) -# db_name=$(ynh_app_setting_get --app=$app --key=db_name) -# db_user=$db_name final_path=$(ynh_app_setting_get --app=$app --key=final_path) datadir=$(ynh_app_setting_get --app=$app --key=datadir) @@ -73,11 +70,11 @@ ynh_secure_remove --file="$final_path" #================================================= # Remove the data directory if --purge option is used -# if [ "${YNH_APP_PURGE:-0}" -eq 1 ] -# then -# ynh_script_progression --message="Removing app data directory..." --weight=1 -# ynh_secure_remove --file="$datadir" -# fi + if [ "${YNH_APP_PURGE:-0}" -eq 1 ] + then + ynh_script_progression --message="Removing app data directory..." --weight=1 + ynh_secure_remove --file="$datadir" + fi #================================================= # REMOVE NGINX CONFIGURATION From 968e35f128c7abcdbf9aafc4b0830ad7802ac7c4 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:55:36 +0200 Subject: [PATCH 64/79] Update restore --- scripts/restore | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index fa82f3b..97f91ae 100755 --- a/scripts/restore +++ b/scripts/restore @@ -31,8 +31,6 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) # path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) -# db_name=$(ynh_app_setting_get --app=$app --key=db_name) -# db_user=$db_name phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) datadir=$(ynh_app_setting_get --app=$app --key=datadir) From 6dcd89c7865e3330a01cb1463e57ccfc3f01e81a Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 17:57:21 +0200 Subject: [PATCH 65/79] Update upgrade --- scripts/upgrade | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index fe6a24a..a91c8b0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,11 +18,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -password=$(ynh_app_setting_get --app=$app --key=password) -admin=$(ynh_app_setting_get --app=$app --key=admin) -language=$(ynh_app_setting_get --app=$app --key=language) #================================================= # CHECK VERSION @@ -199,10 +195,10 @@ chown $app:$app "$final_path/config.php" #================================================= # SETUP LOGROTATE #================================================= -ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 +# ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 # Use logrotate to manage app-specific logfile(s) -ynh_use_logrotate --non-append +# ynh_use_logrotate --non-append #================================================= # INTEGRATE SERVICE IN YUNOHOST From a0a48d20673898f9491f63955c08cdc42f0ea493 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Tue, 17 May 2022 18:03:51 +0200 Subject: [PATCH 66/79] Update check_process --- check_process | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/check_process b/check_process index bb6f46e..88e33db 100644 --- a/check_process +++ b/check_process @@ -2,16 +2,14 @@ ; Manifest domain="domain.tld" path="/path" - is_public=1 - admin="john" - password="1Strong-Password" + is_public=0 ; Checks pkg_linter=1 setup_sub_dir=1 setup_root=1 setup_nourl=0 setup_private=1 - setup_public=1 + setup_public=0 upgrade=1 backup_restore=1 multi_instance=1 From fdaa5b1b91d71ed8e1f97a55a3c5a24ef082a2fe Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 15:55:45 +0200 Subject: [PATCH 67/79] Update upgrade --- scripts/upgrade | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index a91c8b0..c1153fc 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -81,23 +81,6 @@ ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 ### If nobody installed your app before 4.1, ### then you may safely remove these lines -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -if ! ynh_permission_exists --permission="admin"; then - # Create the required permissions - ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin -fi - -# Create a permission if needed -if ! ynh_permission_exists --permission="api"; then - ynh_permission_create --permission="api" --url="/api" --allowed="visitors" --show_tile="false" --protected="true" -fi - #================================================= # CREATE DEDICATED USER #================================================= From 1a5cdd52d91dcc703d6c6669f232c4851e07ca3b Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 16:05:22 +0200 Subject: [PATCH 68/79] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 75bc027..87e7c72 100755 --- a/scripts/install +++ b/scripts/install @@ -163,7 +163,7 @@ chmod -R o-rwx "$final_path" chown -R $app:www-data "$final_path" # rename tinyfilemanager to index -sudo mv $final_path/tinyfilemanager.php $final_path/index.php +mv $final_path/tinyfilemanager.php $final_path/index.php #================================================= # NGINX CONFIGURATION From 743765aad5e3165973e3671586ac33dabbd2d52b Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 16:07:13 +0200 Subject: [PATCH 69/79] Update manifest.json --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index d742a18..f88d236 100644 --- a/manifest.json +++ b/manifest.json @@ -3,8 +3,8 @@ "id": "tinyfilemanager", "packaging_format": 1, "description": { - "en": "Web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser.", - "fr": "Gestionnaire de fichiers basé sur le Web et c'est un gestionnaire de fichiers simple, rapide et petit avec un seul fichier, une application Web multilingue pour stocker, télécharger, éditer et gérer des fichiers et des dossiers en ligne via un navigateur Web" + "en": "Web based file manager and it is a simple, fast and small file manager, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser.", + "fr": "C'est un gestionnaire de fichiers simple, rapide et petit, une application Web multilingue pour stocker, télécharger, éditer et gérer des fichiers et des dossiers en ligne via un navigateur Web" }, "version": "2.4.7~ynh1", "url": "https://tinyfilemanager.github.io/", From e777baa9427caf59a7c9409ad8d3fd6ea4a54381 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 16:08:11 +0200 Subject: [PATCH 70/79] Update LICENSE --- LICENSE | 676 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 673 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index 7d1e40b..94a9ed0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,674 @@ -File containing the license of your package. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 -More information here: -https://yunohost.org/packaging_apps_guidelines#yep-1-3 + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From c035aab7465736f8f046d37793ea360fc14a56e1 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 16:09:20 +0200 Subject: [PATCH 71/79] Delete config_panel.toml.example --- config_panel.toml.example | 295 -------------------------------------- 1 file changed, 295 deletions(-) delete mode 100644 config_panel.toml.example diff --git a/config_panel.toml.example b/config_panel.toml.example deleted file mode 100644 index c6bccd8..0000000 --- a/config_panel.toml.example +++ /dev/null @@ -1,295 +0,0 @@ - -## Config panel are available from webadmin > Apps > YOUR_APP > Config Panel Button -## Those panels let user configure some params on their apps using a friendly interface, -## and remove the need to manually edit files from the command line. - -## From a packager perspective, this .toml is coupled to the scripts/config script, -## which may be used to define custom getters/setters. However, most use cases -## should be covered automagically by the core, thus it may not be necessary -## to define a scripts/config at all! - -## ----------------------------------------------------------------------------- -## IMPORTANT: In accordance with YunoHost's spirit, please keep things simple and -## do not overwhelm the admin with tons of misunderstandable or advanced settings. -## ----------------------------------------------------------------------------- - -## The top level describe the entire config panels screen. - -## The version is a required property. -## Here a small reminder to associate config panel version with YunoHost version -## | Config | YNH | Config panel small change log | -## | ------ | --- | ------------------------------------------------------- | -## | 0.1 | 3.x | 0.1 config script not compatible with YNH >= 4.3 | -## | 1.0 | 4.3.x | The new config panel system with 'bind' property | -version = "1.0" - -## (optional) i18n property let you internationalize questions, however this feature -## is only available in core configuration panel (like yunohost domain config). -## So in app config panel this key is ignored for now, but you can internationalize -## by using a lang dictionary (see property name bellow) -# i18n = "prefix_translation_key" - -################################################################################ -#### ABOUT PANELS -################################################################################ - -## The next level describes web admin panels -## You have to choose an ID for each panel, in this example the ID is "main" -## Keep in mind this ID will be used in CLI to refer to your question, so choose -## something short and meaningfull. -## In the webadmin, each panel corresponds to a distinct tab / form -[main] - -## Define the label for your panel -## Internationalization works similarly to the 'description' and 'ask' questions in the manifest -# name.en = "Main configuration" -# name.fr = "Configuration principale" - -## (optional) If you need to trigger a service reload-or-restart after the user -## change a question in this panel, you can add your service in the list. -services = ["__APP__"] -# or services = ["nginx", "__APP__"] to also reload-or-restart nginx - -## (optional) This help properties is a short help displayed on the same line -## than the panel title but not displayed in the tab. -# help = "" - - ############################################################################ - #### ABOUT SECTIONS - ############################################################################ - - ## A panel is composed of one or several sections. - ## - ## Sections are meant to group questions together when they correspond to - ## a same subtopic. This impacts the rendering in terms of CLI prompts - ## and HTML forms - ## - ## You should choose an ID for your section, and prefix it with the panel ID - ## (Be sure to not make a typo in the panel ID, which would implicitly create - ## an other entire panel) - ## - ## We use the context of pepettes_ynh as an example, - ## which is a simple donation form app written in python, - ## and for which the admin will want to edit the configuration - [main.customization] - - ## (optional) Defining a proper title for sections is not mandatory - ## and depends on the exact rendering you're aiming for the CLI / webadmin - name = "" - - ## (optional) This help properties is a short help displayed on the same line - ## than the section title, meant to provide additional details - # help = "" - - ## (optional) As for panel, you can specify to trigger a service - ## reload-or-restart after the user change a question in this section. - ## This property is added to the panel property, it doesn't deactivate it. - ## So no need to replicate, the service list from panel services property. - # services = [] - - ## (optional) By default all questions are optionals, but you can specify a - ## default behaviour for question in the section - optional = false - - ## (optional) It's also possible with the 'visible' property to only - ## display the section depending on the user's answers to previous questions. - ## - ## Be careful that the 'visible' property should only refer to **previous** questions - ## Hence, it should not make sense to have a "visible" property on the very first section. - ## - ## Also, keep in mind that this feature only works in the webadmin and not in CLI - ## (therefore a user could be prompted in CLI for a question that may not be relevant) - # visible = true - - ######################################################################## - #### ABOUT QUESTIONS - ######################################################################## - - ## A section is compound of one or several questions. - - ## --------------------------------------------------------------------- - ## IMPORTANT: as for panel and section you have to choose an ID, but this - ## one should be unique in all this document, even if the question is in - ## an other panel. - ## --------------------------------------------------------------------- - - ## You can use same questions types and properties than in manifest.yml - ## install part. However, in YNH 4.3, a lot of change has been made to - ## extend availables questions types list. - ## See: TODO DOC LINK - - [main.customization.project_name] - - ## (required) The ask property is equivalent to the ask property in - ## the manifest. However, in config panels, questions are displayed on the - ## left side and therefore have less space to be rendered. Therefore, - ## it is better to use a short question, and use the "help" property to - ## provide additional details if necessary. - ask.en = "Name of the project" - - ## (required) The type property indicates how the question should be - ## displayed, validated and managed. Some types have specific properties. - ## - ## Types available: string, boolean, number, range, text, password, path - ## email, url, date, time, color, select, domain, user, tags, file. - ## - ## For a complete list with specific properties, see: TODO DOC LINK - type = "string" - - ######################################################################## - #### ABOUT THE BIND PROPERTY - ######################################################################## - - ## (recommended) 'bind' property is a powerful feature that let you - ## configure how and where the data will be read, validated and written. - - ## By default, 'bind property is in "settings" mode, it means it will - ## **only** read and write the value in application settings file. - ## bind = "settings" - - ## However, settings usually correspond to key/values in actual app configurations - ## Hence, a more useful mode is to have bind = ":FILENAME". In that case, YunoHost - ## will automagically find a line with "KEY=VALUE" in FILENAME - ## (with the adequate separator between KEY and VALUE) - ## - ## YunoHost will then use this value for the read/get operation. - ## During write/set operations, YunoHost will overwrite the value - ## in **both** FILENAME and in the app's settings.yml - - ## Configuration file format supported: yaml, toml, json, ini, env, php, - ## python. The feature probably works with others formats, but should be tested carefully. - - ## Note that this feature only works with relatively simple cases - ## such as `KEY: VALUE`, but won't properly work with - ## complex data structures like multilin array/lists or dictionnaries. - ## It also doesn't work with XML format, custom config function call, php define(), ... - - ## More info on TODO - # bind = ":/var/www/__APP__/settings.py" - - - ## By default, bind = ":FILENAME" will use the question ID as KEY - ## ... but the question ID may sometime not be the exact KEY name in the configuration file. - ## - ## In particular, in pepettes, the python variable is 'name' and not 'project_name' - ## (c.f. https://github.com/YunoHost-Apps/pepettes_ynh/blob/5cc2d3ffd6529cc7356ff93af92dbb6785c3ab9a/conf/settings.py##L11 ) - ## - ## In that case, the key name can be specified before the column ':' - - bind = "name:/var/www/__APP__/settings.py" - - ## --------------------------------------------------------------------- - ## IMPORTANT: other 'bind' mode exists: - ## - ## bind = "FILENAME" (with no column character before FILENAME) - ## may be used to bind to the **entire file content** (instead of a single KEY/VALUE) - ## This could be used to expose an entire configuration file, or binary files such as images - ## For example: - ## bind = "/var/www/__APP__/img/logo.png" - ## - ## bind = "null" can be used to disable reading / writing in settings. - ## This creates sort of a "virtual" or "ephemeral" question which is not related to any actual setting - ## In this mode, you are expected to define custom getter/setters/validators in scripts/config: - ## - ## getter: get__QUESTIONID() - ## setter: set__QUESTIONID() - ## validator: validate__QUESTIONID() - ## - ## You can also specify a common getter / setter / validator, with the - ## function 'bind' mode, for example here it will try to run - ## get__array_settings() first. - # bind = "array_settings()" - ## --------------------------------------------------------------------- - - ## --------------------------------------------------------------------- - ## IMPORTANT: with the exception of bind=null questions, - ## question IDs should almost **always** correspond to an app setting - ## initialized / reused during install/upgrade. - ## Not doing so may result in inconsistencies between the config panel mechanism - ## and the use of ynh_add_config - ## --------------------------------------------------------------------- - - ######################################################################## - #### OTHER GENERIC PROPERTY FOR QUESTIONS - ######################################################################## - - ## (optional) An help text for the question - help = "Fill the name of the project which will received donation" - - ## (optional) An example display as placeholder in web form - # example = "YunoHost" - - ## (optional) set to true in order to redact the value in operation logs - # redact = false - - ## (optional) A validation pattern - ## --------------------------------------------------------------------- - ## IMPORTANT: your pattern should be between simple quote, not double. - ## --------------------------------------------------------------------- - pattern.regexp = '^\w{3,30}$' - pattern.error = "The name should be at least 3 chars and less than 30 chars. Alphanumeric chars are accepted" - - ## Note: visible and optional properties are also available for questions - - - [main.customization.contact_url] - ask = "Contact url" - type = "url" - example = "mailto: contact@example.org" - help = "mailto: accepted" - pattern.regexp = '^mailto:[^@]+@[^@]+|https://$' - pattern.error = "Should be https or mailto:" - bind = ":/var/www/__APP__/settings.py" - - [main.customization.logo] - ask = "Logo" - type = "file" - accept = ".png" - help = "Fill with an already resized logo" - bind = "__FINALPATH__/img/logo.png" - - [main.customization.favicon] - ask = "Favicon" - type = "file" - accept = ".png" - help = "Fill with an already sized favicon" - bind = "__FINALPATH__/img/favicon.png" - - - [main.stripe] - name = "Stripe general info" - optional = false - - # The next alert is overwrited with a getter from the config script - [main.stripe.amount] - ask = "Donation in the month : XX € - type = "alert" - style = "success" - - [main.stripe.publishable_key] - ask = "Publishable key" - type = "string" - redact = true - help = "Indicate here the stripe publishable key" - bind = ":/var/www/__APP__/settings.py" - - [main.stripe.secret_key] - ask = "Secret key" - type = "string" - redact = true - help = "Indicate here the stripe secret key" - bind = ":/var/www/__APP__/settings.py" - - [main.stripe.prices] - ask = "Prices ID" - type = "tags" - help = """\ - Indicates here the prices ID of donation products you created in stripe interfaces. \ - Go on [Stripe products](https://dashboard.stripe.com/products) to create those donation products. \ - Fill it tag with 'FREQUENCY/CURRENCY/PRICE_ID' \ - FREQUENCY: 'one_time' or 'recuring' \ - CURRENCY: 'EUR' or 'USD' \ - PRICE_ID: ID from stripe interfaces starting with 'price_' \ - """ - pattern.regexp = '^(one_time|recuring)/(EUR|USD)/price_.*$' - pattern.error = "Please respect the format describe in help text for each price ID" From e6dbe93df1c07451a4ffa97c81e27f99d075e63b Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Wed, 18 May 2022 16:09:36 +0200 Subject: [PATCH 72/79] Delete sources directory --- sources/extra_files/app/.gitignore | 2 -- sources/patches/.gitignore | 2 -- 2 files changed, 4 deletions(-) delete mode 100644 sources/extra_files/app/.gitignore delete mode 100644 sources/patches/.gitignore diff --git a/sources/extra_files/app/.gitignore b/sources/extra_files/app/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/sources/extra_files/app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] diff --git a/sources/patches/.gitignore b/sources/patches/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/sources/patches/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] From 38c05fbcc426732011ea03d91f249efa7a296c50 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Thu, 19 May 2022 12:54:14 +0100 Subject: [PATCH 73/79] Update upgrade --- scripts/upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upgrade b/scripts/upgrade index c1153fc..9d943d6 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -19,6 +19,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +path_url=$(ynh_app_setting_get --app=$app --key=path) #================================================= # CHECK VERSION From af0d54754339d2bdb5b6ab8e3d83a37f1698c5fb Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Thu, 19 May 2022 12:56:55 +0100 Subject: [PATCH 74/79] Update change_url --- scripts/change_url | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index 495b7eb..5e6f63a 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -72,9 +72,9 @@ fi #================================================= # STOP SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 +# ynh_script_progression --message="Stopping a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" #================================================= # MODIFY URL IN NGINX CONF @@ -116,9 +116,9 @@ fi #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --time --weight=1 +# ynh_script_progression --message="Starting a systemd service..." --time --weight=1 -ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" +# ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" #================================================= # RELOAD NGINX From 13e174f47954c3a1d138c6eeb9522876fe0e8b54 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Thu, 19 May 2022 22:38:33 +0100 Subject: [PATCH 75/79] Update upgrade --- scripts/upgrade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index 9d943d6..f785c7d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -20,6 +20,8 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) path_url=$(ynh_app_setting_get --app=$app --key=path) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) + #================================================= # CHECK VERSION From 0cc6a2426dae369402d90e3d95361894a55c1ce7 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sat, 28 May 2022 23:06:58 +0200 Subject: [PATCH 76/79] fix timezone missing --- scripts/upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upgrade b/scripts/upgrade index f785c7d..713d959 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -21,6 +21,7 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) path_url=$(ynh_app_setting_get --app=$app --key=path) datadir=$(ynh_app_setting_get --app=$app --key=datadir) +timezone="$(cat /etc/timezone)" #================================================= From 0ecfc052496b65266d4f7eb1db9333785b995351 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 28 May 2022 21:07:00 +0000 Subject: [PATCH 77/79] Auto-update README --- README.md | 21 +++++++++++---------- README_fr.md | 27 ++++++++++++++++----------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index b3c762b..47117cc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Tiny File Manager for YunoHost -[![Integration level](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![Working status](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) [![Install Tiny File Manager with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Lire ce readme en français.](./README_fr.md)* @@ -60,7 +60,7 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras ## Screenshots -![](./doc/screenshots/screenshot.gif) +![Screenshot of Tiny File Manager](./doc/screenshots/screenshot.gif) ## Disclaimers / important information @@ -79,22 +79,23 @@ To enable/disable authentication set `$use_auth` to true or false. ## Documentation and resources -* Official app website: https://tinyfilemanager.github.io/ -* Official user documentation: https://github.com/prasathmani/tinyfilemanager -* Official admin documentation: https://github.com/prasathmani/tinyfilemanager/wiki -* Upstream app code repository: https://github.com/prasathmani/tinyfilemanager -* YunoHost documentation for this app: https://yunohost.org/app_tinyfilemanager -* Report a bug: https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues +* Official app website: +* Official user documentation: +* Official admin documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: ## Developer info Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug or sudo yunohost app upgrade tinyfilemanager -u https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index e61b122..ab25d93 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,10 +1,14 @@ + + # Tiny File Manager pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/tinyfilemanager.svg)](https://dash.yunohost.org/appci/app/tinyfilemanager) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/tinyfilemanager.maintain.svg) [![Installer Tiny File Manager avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=tinyfilemanager) *[Read this readme in english.](./README.md)* -*[Lire ce readme en français.](./README_fr.md)* > *Ce package vous permet d'installer Tiny File Manager rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* @@ -56,7 +60,7 @@ Tinyfilemanager is highly documented on the [wiki pages](https://github.com/pras ## Captures d'écran -![](./doc/screenshots/screenshot.gif) +![Capture d'écran de Tiny File Manager](./doc/screenshots/screenshot.gif) ## Avertissements / informations importantes @@ -75,22 +79,23 @@ To enable/disable authentication set `$use_auth` to true or false. ## Documentations et ressources -* Site officiel de l'app : https://tinyfilemanager.github.io/ -* Documentation officielle utilisateur : https://github.com/prasathmani/tinyfilemanager -* Documentation officielle de l'admin : https://github.com/prasathmani/tinyfilemanager/wiki -* Dépôt de code officiel de l'app : https://github.com/prasathmani/tinyfilemanager -* Documentation YunoHost pour cette app : https://yunohost.org/app_tinyfilemanager -* Signaler un bug : https://github.com/YunoHost-Apps/tinyfilemanager_ynh/issues +* Site officiel de l'app : +* Documentation officielle utilisateur : +* Documentation officielle de l'admin : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ou sudo yunohost app upgrade tinyfilemanager -u https://github.com/YunoHost-Apps/tinyfilemanager_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file +**Plus d'infos sur le packaging d'applications :** From 0f2d87543cc6e933a265c8f46863c3f3e77225e7 Mon Sep 17 00:00:00 2001 From: jarod5001 <68397534+jarod5001@users.noreply.github.com> Date: Sat, 28 May 2022 23:11:39 +0200 Subject: [PATCH 78/79] Update DESCRIPTION.md --- doc/DESCRIPTION.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 694ee24..d59988d 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,12 +1,6 @@ # Tiny File Manager -[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) -[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) -[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) -[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) -[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) - -> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. +TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. ## Demo From 36935610d7e45581b581bc8d7c8f982aec44a5c3 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 28 May 2022 21:11:41 +0000 Subject: [PATCH 79/79] Auto-update README --- README.md | 8 +------- README_fr.md | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 47117cc..70db93a 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in # Tiny File Manager -[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) -[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) -[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) -[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) -[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) - -> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. +TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. ## Demo diff --git a/README_fr.md b/README_fr.md index ab25d93..10be674 100644 --- a/README_fr.md +++ b/README_fr.md @@ -17,13 +17,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour # Tiny File Manager -[![Live demo](https://img.shields.io/badge/Live-Demo-brightgreen.svg?style=flat-square)](https://tinyfilemanager.github.io/demo/) -[![Live demo](https://img.shields.io/badge/Help-Docs-lightgrey.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/wiki) -[![GitHub Release](https://img.shields.io/github/release/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/releases) -[![GitHub License](https://img.shields.io/github/license/prasathmani/tinyfilemanager.svg?style=flat-square)](https://github.com/prasathmani/tinyfilemanager/blob/master/LICENSE) -[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani) - -> TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. +TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. ## Demo