1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/shaarli_ynh.git synced 2024-09-03 20:26:10 +02:00

Add support for multi instances and config at install

This commit is contained in:
Romain Garbage 2017-02-26 18:11:40 +02:00
parent c91c1b6fd9
commit 329c1f774b
9 changed files with 176 additions and 31 deletions

60
conf/config.json.php Normal file
View file

@ -0,0 +1,60 @@
<?php /*
{
"resource": {
"data_dir": "data",
"config": "data\/config.php",
"datastore": "data\/datastore.php",
"ban_file": "data\/ipbans.php",
"updates": "data\/updates.txt",
"log": "data\/log.txt",
"update_check": "data\/lastupdatecheck.txt",
"raintpl_tpl": "tpl\/",
"raintpl_tmp": "tmp\/",
"thumbnails_cache": "cache",
"page_cache": "pagecache"
},
"security": {
"ban_after": 4,
"ban_duration": 1800,
"session_protection_disabled": false,
"open_shaarli": false
},
"general": {
"header_link": "?",
"links_per_page": 20,
"enabled_plugins": [
"qrcode"
],
"timezone": "YNH_TIMEZONE",
"title": "YNH_TITLE"
},
"updates": {
"check_updates": true,
"check_updates_branch": "stable",
"check_updates_interval": 86400
},
"feed": {
"rss_permalinks": true,
"show_atom": false
},
"privacy": {
"default_private_links": YNH_PRIVATE_LINK_BY_DEFAULT,
"hide_public_links": false,
"hide_timestamps": false
},
"thumbnail": {
"enable_thumbnails": true,
"enable_localcache": true
},
"redirector": {
"url": "",
"encode_url": true
},
"plugins": [],
"credentials": {
"login": "YNH_ADMIN",
"salt": "YNH_SALT",
"hash": "YNH_HASH"
}
}
*/ ?>

1
conf/datastore.php Normal file
View file

@ -0,0 +1 @@
<?php /* tVPJbtswEL3nKyYq0F5sSbYcLzSKAnEPDdDATeygSS8BJY0t1hSpkJRTJ/C/dyg5LRqkly6EDuRoljfz3nDWZ4+CxVPOJuzR0isQeTAVrDe17IQFTjiJAd1H9IBFwbmRgoErECo0VisuO1AKJUouhXUdsDXZuyvu70p3c+54yi1CjlJkQtcWMqlVkzJhQW1kc5uwoHCusiyK1sIVdRpmuoxsWy46lI3uxUZ4916PBTnazIjKCa2aDDHZPqOkMASnn5Aew7IQFujb6drAShjroKpTwgKp1puSm00ISw2YCwfaeJjoEErs+Agoa/Jvo6ReCxUeHZGzRG4UFPreV6qpuUO1DmRa2Vq6Zj5SqA28vqu1m35AWUW5zuoSleMec2sH3rqm2jldgl7Ri7BWfI1U6YYA+Ozeg/oqayXczg+40sZhDlsigFK1YUjoBSHk8gkNVEZ/xYx4SHewQGLBCVSw4PXW529IZUFlxJY79JTHrSUzSAYSwZyNWfCe7ktRYkB0kT4GNPnGnaQyZEE/7o26cb/bHwKRQpZBEsbNaXhKvIBKfCDCb92uaqok9GP8034QwtVyFkz3TX7H17aJJlHoCpUl5jIEq1funpsmgOJtQUM4yIeAnIu+mq0P/6gBefsn0tp73T/fhPjZJiQE95x4QBqUA+vq1SoMQ+jCJ5owpiQSKvCrvidxC4IwWEztgQGFLqp8TPRuPEgGaX80SYZZPBkOJq/Sy9G1vS70UnzM7mbVRVrOq1ORmLv+w8PF1eykOD0bfVn25sm38dvfrMSQxrIo6BzD2ZsSOByoboWpldzBzfwKMq6oFwzBy80/fqwAqVu/IJPeX8vk5J/KhDpvuWioeFkew8HZZfqSPP43M/v9dw== */ ?>

7
conf/gen_hash.php Normal file
View file

@ -0,0 +1,7 @@
<?php
echo sha1($argv[1].$argv[2].$argv[3]);
?>

10
conf/ipbans.php Normal file
View file

@ -0,0 +1,10 @@
<?php
$GLOBALS['IPBANS']=array (
'FAILURES' =>
array (
),
'BANS' =>
array (
),
);
?>

1
conf/lastupdatecheck.txt Normal file
View file

@ -0,0 +1 @@
0.7.0 */

0
conf/log.txt Normal file
View file

1
conf/updates.txt Normal file
View file

@ -0,0 +1 @@
updateMethodMergeDeprecatedConfigFile;updateMethodRenameDashTags;updateMethodConfigToJson;updateMethodEscapeUnescapedConfig;updateMethodDatastoreIds

View file

@ -2,6 +2,9 @@
"name": "Shaarli",
"id": "shaarli",
"packaging_format": 1,
"requirements": {
"yunohost": ">> 2.3.15"
},
"description": {
"en": "The personal, minimalist, super-fast, no-database delicious clone",
"fr": "Clone de delicious, rapide, simple et sans base de données."
@ -11,7 +14,7 @@
},
"url": "https://github.com/shaarli/Shaarli",
"version": "0.8.3",
"multi_instance": "false",
"multi_instance": "true",
"arguments": {
"install" : [
{
@ -34,7 +37,7 @@
"default": "/shaarli"
},
{
"name": "public",
"name": "is_public",
"ask": {
"en": "Is it a public Shaarli site ?",
"fr": "Est-ce un site Shaarli public ?"
@ -68,6 +71,14 @@
"fr": "Administrateur"
},
"example": "test"
},
{
"name": "password",
"type": "password",
"ask": {
"en": "Define password for Shaarli user",
"fr": "Définissez le mot de passe de l'utilisateur Shaarli"
}
}
]
}

View file

@ -1,12 +1,38 @@
#!/bin/bash
# causes the shell to exit if any subcommand or pipeline returns a non-zero status
set -e
# This is 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
# The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...)
# The app instance name is available as $YNH_APP_INSTANCE_NAME
# - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample
# - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2
# - ynhexample__{N} for the subsequent installations, with N=3,4, ...
# The app instance name is probably what you are interested the most, since this is
# guaranteed to be unique. This is a good unique identifier to define installation path,
# db names, ...
app=$YNH_APP_INSTANCE_NAME
# Retrieve arguments
domain=$1
path=$2
is_public=$3
title=$4
privatelinkbydefault=$5
admin=$6
domain=$YNH_APP_ARG_DOMAIN
path=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN
is_public=$YNH_APP_ARG_IS_PUBLIC
title=$YNH_APP_ARG_TITLE
privatelinkbydefault=$YNH_APP_ARG_PRIVATELINKBYDEFAULT
password=$YNH_APP_ARG_PASSWORD
# <TODO: cleaning>
## Retrieve arguments
#domain=$1
#path=$2
#is_public=$3
#title=$4
#privatelinkbydefault=$5
#admin=$6
# </TODO>
# Load common variables and helpers
source ./_common.sh
@ -17,10 +43,10 @@ if [[ ! $? -eq 0 ]]; then
echo "Error : the chosen admin user does not exist"
exit 1
fi
sudo yunohost app setting shaarli admin -v $admin
sudo yunohost app setting $app admin -v $admin
# Check domain/path availability
sudo yunohost app checkurl $domain$path -a shaarli
sudo yunohost app checkurl $domain$path -a $app
if [[ ! $? -eq 0 ]]; then
exit 1
fi
@ -29,53 +55,81 @@ fi
sudo apt-get install php5-cli -y -qq
# Copy files to the right place
app_home_path=/home/yunohost.app/shaarli
final_path=/var/www/shaarli
app_home_path=/home/yunohost.app/$app
final_path=/var/www/$app
sudo mkdir -p $final_path
# Download and extract in /var/www
extract_shaarli
sudo mkdir -p $app_home_path/data
sudo mkdir -p $app_home_path/cache
sudo mkdir -p $app_home_path/pagecache
sudo mkdir -p $app_home_path/tmp
sudo mkdir -p $app_home_path/conf
sudo chown -R www-data: $app_home_path
# <TODO: cleaning>
#sudo mkdir -p $app_home_path/data
#sudo mkdir -p $app_home_path/cache
#sudo mkdir -p $app_home_path/pagecache
#sudo mkdir -p $app_home_path/tmp
#sudo mkdir -p $app_home_path/conf
#sudo chown -R www-data: $app_home_path
# </TODO>
# generate the salt
salt=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p')
# generate the hash with the password
password_hash=$(php ../conf/gen_hash.php $password $admin $salt)
# set the proper value for substitution
if [ $privatelinkbydefault = "No" ]; then
privatelinkbydefault_php=false
else
privatelinkbydefault_php=true
fi
sudo sed -i "s@YNH_SALT@$salt@g" ../conf/init_config.php
sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/init_config.php
sudo sed -i "s@YNH_TITLE@$title@g" ../conf/init_config.php
sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/init_config.php
sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/init_config.php
# Prepare the configuration file
sudo sed -i "s@YNH_SALT@$salt@g" ../conf/config.json.php
sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/config.json.php
sudo sed -i "s@YNH_HASH@$password_hash@g" ../conf/config.json.php
sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/config.json.php
sudo sed -i "s@YNH_TITLE@$title@g" ../conf/config.json.php
sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/config.json.php
sudo cp ../conf/options.php $app_home_path/data/options.php
sudo cp ../conf/init_config.php $app_home_path/data/config.php
sudo php ../conf/init_config_user.php $(sudo yunohost user list --json | python ../conf/user_list.py)
# <TODO: cleaning>
#sudo sed -i "s@YNH_SALT@$salt@g" ../conf/init_config.php
#sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/init_config.php
#sudo sed -i "s@YNH_TITLE@$title@g" ../conf/init_config.php
#sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/init_config.php
#sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/init_config.php
#
#sudo cp ../conf/options.php $app_home_path/data/options.php
#sudo cp ../conf/init_config.php $app_home_path/data/config.php
#sudo php ../conf/init_config_user.php $(sudo yunohost user list --json | python ../conf/user_list.py)
# </TODO>
# Populate the data directory of the shaarli instance
sudo cp ../conf/config.json.php $final_path/data
sudo cp ../conf/datastore.php $final_path/data
sudo cp ../conf/ipbans.php $final_path/data
sudo cp ../conf/lastupdatecheck.txt $final_path/data
sudo cp ../conf/log.txt $final_path/data
sudo cp ../conf/updates.txt $final_path/data
sudo find $final_path -type f | xargs sudo chmod 644
sudo find $final_path -type d | xargs sudo chmod 755
#sudo chown -R root: $final_path
sudo find $app_home_path -type f | xargs sudo chmod 600
sudo find $app_home_path -type d | xargs sudo chmod 700
sudo chown -R www-data: $app_home_path
# <TODO: cleaning>
#sudo find $app_home_path -type f | xargs sudo chmod 600
#sudo find $app_home_path -type d | xargs sudo chmod 700
#sudo chown -R www-data: $app_home_path
# </TODO>
# Modify Nginx configuration file and copy it to Nginx conf directory
sudo sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf
sudo sed -i "s@YNH_ALIAS@$final_path@g" ../conf/nginx.conf
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/shaarli.conf
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
# Reload Nginx and regenerate SSOwat conf
if [ $is_public = "Yes" ]; then
sudo yunohost app setting shaarli unprotected_uris -v "/"
sudo yunohost app setting $app unprotected_uris -v "/"
fi
sudo service nginx reload
sudo yunohost app ssowatconf