diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c72adf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so +*.pyc + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite +*.sqlite-journal + +# IDE generated files # +###################### +.buildpath +.project +/.settings/ +.idea + +# OS generated files # +###################### +.DS_Store +ehthumbs.db +Icon? +Thumbs.db +*.swp +.*.swp +*~ +*.lock +*.out + +# Vagrant # +########### +.vagrant + +# App specific # +################ +#config.php +#data/files diff --git a/README.markdown b/README.markdown new file mode 100644 index 0000000..021e613 --- /dev/null +++ b/README.markdown @@ -0,0 +1,17 @@ +Kanboard for Yunohost +============ + +[Yunohost project](https://yunohost.org/#/) + +Kanboard is a simple visual task board web application. + +Official website: + +Kanboard v1.0.8 + + +TODO +---- + +- multi instance +- language choice \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8308d1d..0000000 --- a/README.md +++ /dev/null @@ -1,16 +0,0 @@ -kanboard_ynh -============ - -Kanboard for Yunohost - -http://kanboard.net - -TODO - --SSO --force logout --language choice - -KNOW ISSUE - --administrator user don't have all ldap informations (email and name) diff --git a/conf/Mysql.php b/conf/Mysql.php deleted file mode 100644 index 5e54a2b..0000000 --- a/conf/Mysql.php +++ /dev/null @@ -1,291 +0,0 @@ -exec("ALTER TABLE tasks ADD COLUMN creator_id INTEGER DEFAULT '0'"); - $pdo->exec("ALTER TABLE tasks ADD COLUMN date_modification INTEGER DEFAULT '0'"); - $pdo->exec(" - UPDATE users - SET username='yunoadmin', password=NULL, is_ldap_user='1' - WHERE username='admin' - "); -} - -function version_20($pdo) -{ - $pdo->exec("ALTER TABLE users ADD COLUMN github_id VARCHAR(30)"); -} - -function version_19($pdo) -{ - $pdo->exec("ALTER TABLE config ADD COLUMN api_token VARCHAR(255) DEFAULT '".Security::generateToken()."'"); -} - -function version_18($pdo) -{ - $pdo->exec(" - CREATE TABLE task_has_subtasks ( - id INT NOT NULL AUTO_INCREMENT, - title VARCHAR(255), - status INT DEFAULT 0, - time_estimated INT DEFAULT 0, - time_spent INT DEFAULT 0, - task_id INT, - user_id INT, - PRIMARY KEY (id), - FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8" - ); -} - -function version_17($pdo) -{ - $pdo->exec(" - CREATE TABLE task_has_files ( - id INT NOT NULL AUTO_INCREMENT, - name VARCHAR(50), - path VARCHAR(255), - is_image TINYINT(1) DEFAULT 0, - task_id INT, - PRIMARY KEY (id), - FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8" - ); -} - -function version_16($pdo) -{ - $pdo->exec(" - CREATE TABLE project_has_categories ( - id INT NOT NULL AUTO_INCREMENT, - name VARCHAR(255), - project_id INT, - PRIMARY KEY (id), - UNIQUE KEY `idx_project_category` (project_id, name), - FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8" - ); - - $pdo->exec("ALTER TABLE tasks ADD COLUMN category_id INT DEFAULT 0"); -} - -function version_15($pdo) -{ - $pdo->exec("ALTER TABLE projects ADD COLUMN last_modified INT DEFAULT 0"); -} - -function version_14($pdo) -{ - $pdo->exec("ALTER TABLE users ADD COLUMN name VARCHAR(255)"); - $pdo->exec("ALTER TABLE users ADD COLUMN email VARCHAR(255)"); - $pdo->exec("ALTER TABLE users ADD COLUMN google_id VARCHAR(30)"); -} - -function version_13($pdo) -{ - $pdo->exec("ALTER TABLE users ADD COLUMN is_ldap_user TINYINT(1) DEFAULT 0"); -} - -function version_12($pdo) -{ - $pdo->exec(" - CREATE TABLE remember_me ( - id INT NOT NULL AUTO_INCREMENT, - user_id INT, - ip VARCHAR(40), - user_agent VARCHAR(255), - token VARCHAR(255), - sequence VARCHAR(255), - expiration INT, - date_creation INT, - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, - PRIMARY KEY (id) - ) ENGINE=InnoDB CHARSET=utf8" - ); - - $pdo->exec(" - CREATE TABLE last_logins ( - id INT NOT NULL AUTO_INCREMENT, - auth_type VARCHAR(25), - user_id INT, - ip VARCHAR(40), - user_agent VARCHAR(255), - date_creation INT, - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, - PRIMARY KEY (id), - INDEX (user_id) - ) ENGINE=InnoDB CHARSET=utf8" - ); -} - -function version_11($pdo) -{ -} - -function version_10($pdo) -{ -} - -function version_9($pdo) -{ -} - -function version_8($pdo) -{ -} - -function version_7($pdo) -{ -} - -function version_6($pdo) -{ -} - -function version_5($pdo) -{ -} - -function version_4($pdo) -{ -} - -function version_3($pdo) -{ -} - -function version_2($pdo) -{ -} - -function version_1($pdo) -{ - $pdo->exec(" - CREATE TABLE config ( - language CHAR(5) DEFAULT 'en_US', - webhooks_token VARCHAR(255), - timezone VARCHAR(50) DEFAULT 'UTC' - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE users ( - id INT NOT NULL AUTO_INCREMENT, - username VARCHAR(50), - password VARCHAR(255), - is_admin TINYINT DEFAULT 0, - default_project_id INT DEFAULT 0, - PRIMARY KEY (id) - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE projects ( - id INT NOT NULL AUTO_INCREMENT, - name VARCHAR(50) UNIQUE, - is_active TINYINT DEFAULT 1, - token VARCHAR(255), - PRIMARY KEY (id) - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE project_has_users ( - id INT NOT NULL AUTO_INCREMENT, - project_id INT, - user_id INT, - PRIMARY KEY (id), - UNIQUE KEY `idx_project_user` (project_id, user_id), - FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE columns ( - id INT NOT NULL AUTO_INCREMENT, - title VARCHAR(255), - position INT NOT NULL, - project_id INT NOT NULL, - task_limit INT DEFAULT '0', - UNIQUE KEY `idx_title_project` (title, project_id), - PRIMARY KEY (id), - FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE tasks ( - id INT NOT NULL AUTO_INCREMENT, - title VARCHAR(255), - description TEXT, - date_creation INT, - date_completed INT, - date_due INT, - color_id VARCHAR(50), - project_id INT, - column_id INT, - owner_id INT DEFAULT '0', - position INT, - score INT, - is_active TINYINT DEFAULT 1, - PRIMARY KEY (id), - INDEX `idx_task_active` (is_active), - FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, - FOREIGN KEY(column_id) REFERENCES columns(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE comments ( - id INT NOT NULL AUTO_INCREMENT, - task_id INT, - user_id INT, - date INT, - comment TEXT, - PRIMARY KEY (id), - FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE, - FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE actions ( - id INT NOT NULL AUTO_INCREMENT, - project_id INT, - event_name VARCHAR(50), - action_name VARCHAR(50), - PRIMARY KEY (id), - FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - CREATE TABLE action_has_params ( - id INT NOT NULL AUTO_INCREMENT, - action_id INT, - name VARCHAR(50), - value VARCHAR(50), - PRIMARY KEY (id), - FOREIGN KEY(action_id) REFERENCES actions(id) ON DELETE CASCADE - ) ENGINE=InnoDB CHARSET=utf8 - "); - - $pdo->exec(" - INSERT INTO users - (username, password, is_admin) - VALUES ('admin', '".\password_hash('admin', PASSWORD_BCRYPT)."', '1') - "); - - $pdo->exec(" - INSERT INTO config - (webhooks_token) - VALUES ('".Security::generateToken()."') - "); -} diff --git a/conf/config.php b/conf/config.php index 8dd8d19..c8365d2 100644 --- a/conf/config.php +++ b/conf/config.php @@ -1,31 +1,53 @@ Applications -> Developer applications) define('GITHUB_CLIENT_SECRET', ''); + +// Enable/disable the reverse proxy authentication +define('REVERSE_PROXY_AUTH', true); + +// Header name to use for the username +define('REVERSE_PROXY_USER_HEADER', 'REMOTE_USER'); + +// Username of the admin, by default blank +define('REVERSE_PROXY_DEFAULT_ADMIN', 'yuno_admin'); + +// Default domain to use for setting the email address +define('REVERSE_PROXY_DEFAULT_DOMAIN', 'yuno_domain'); diff --git a/conf/nginx.conf b/conf/nginx.conf index 25d520c..12d3efb 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,19 +1,19 @@ location PATHTOCHANGE { - alias ALIASTOCHANGE; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; - try_files $uri $uri/ /index.php?$args; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param AUTH_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - } - + alias ALIASTOCHANGE; + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + index index.php; + client_max_body_size 20M; + try_files $uri $uri/ /index.php?$args; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + } # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; diff --git a/manifest.json b/manifest.json index 451a7c4..efab722 100644 --- a/manifest.json +++ b/manifest.json @@ -5,12 +5,13 @@ "en": "Kanboard is a simple visual task board web application", "fr": "Kanboard est une application web de management de tâches simples" }, + "license": "AGPL 3.0", "developer": { "name": "mbugeia", "email": "maxime.bugeia@gmail.com", "url": "http://kanboard.net/" }, - "multi_instance": "true", + "multi_instance": "false", "arguments": { "install" : [ { diff --git a/scripts/install b/scripts/install index df1a9b4..dd8f2db 100644 --- a/scripts/install +++ b/scripts/install @@ -5,6 +5,9 @@ domain=$1 path=$2 admin=$3 +# Retrieve admin email +email=$(sudo yunohost user info $admin | grep mail: | sed "s/mail: //g") + # Check domain/path availability sudo yunohost app checkurl $domain$path -a kanboard if [[ ! $? -eq 0 ]]; then @@ -22,29 +25,28 @@ sudo yunohost app initdb $db_user -p $db_pwd sudo yunohost app setting kanboard mysqlpwd -v $db_pwd sudo yunohost app setting kanboard adminusername -v $admin - +# final_path=/var/www/kanboard sudo mkdir -p $final_path sudo cp -a ../sources/* $final_path +# Copy and edit config.php sudo cp ../conf/config.php $final_path -sudo sed -i "s/yunopdw/$db_pwd/g" $final_path/config.php -sudo sed -i "s/yunouser/$db_user/g" $final_path/config.php - -# Ajout de l'utilisateur admin -sudo cp ../conf/Mysql.php $final_path/app/Schema -sudo sed -i "s/yunoadmin/$admin/g" $final_path/app/Schema/Mysql.php +sudo sed -i "s/yuno_dbpdw/$db_pwd/g" $final_path/config.php +sudo sed -i "s/yuno_dbuser/$db_user/g" $final_path/config.php +sudo sed -i "s/yuno_admin/$admin/g" $final_path/config.php +sudo sed -i "s/yuno_email/$email/g" $final_path/config.php +sudo sed -i "s/yuno_url/$domain$path/g" $final_path/config.php +sudo sed -i "s/yuno_domain/$domain/g" $final_path/config.php # Set permissions to data directory sudo chown -R www-data:www-data $final_path/data - # Modify Nginx configuration file and copy it to Nginx conf directory sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf* sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf* sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/kanboard.conf - # Reload Nginx and regenerate SSOwat conf sudo service nginx reload sudo yunohost app ssowatconf \ No newline at end of file diff --git a/scripts/upgrade b/scripts/upgrade index 12ca106..91e777a 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,15 +1,35 @@ #!/bin/bash -# Retrieve arguments +# Retrieve settings domain=$(sudo yunohost app setting kanboard domain) path=$(sudo yunohost app setting kanboard path) admin=$(sudo yunohost app setting kanboard adminusername) +email=$(sudo yunohost user info $admin | grep mail: | sed "s/mail: //g") +db_pwd=$(sudo yunohost app setting kanboard mysqlpwd) + +# Use 'kanboard' as database name and user +db_user=kanboard + final_path=/var/www/kanboard sudo cp -a ../sources/* $final_path + +# Copy and edit config.php +sudo cp ../conf/config.php $final_path +sudo sed -i "s/yuno_dbpdw/$db_pwd/g" $final_path/config.php +sudo sed -i "s/yuno_dbuser/$db_user/g" $final_path/config.php +sudo sed -i "s/yuno_admin/$admin/g" $final_path/config.php +sudo sed -i "s/yuno_email/$email/g" $final_path/config.php +sudo sed -i "s/yuno_url/$domain$path/g" $final_path/config.php +sudo sed -i "s/yuno_domain/$domain/g" $final_path/config.php + # Set permissions to data directory sudo chown -R www-data:www-data $final_path/data +# Modify Nginx configuration file and copy it to Nginx conf directory +sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf* +sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf* +sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/kanboard.conf # Reload Nginx and regenerate SSOwat conf sudo service nginx reload