1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/kanboard_ynh.git synced 2024-09-03 19:36:17 +02:00

Update install and update script for v1.0.8

Before : LDAP auth
Now : reverse proxy auth
This commit is contained in:
mbugeia 2014-10-22 21:21:37 +02:00
parent e6f0a222fd
commit edc1a3fb31
9 changed files with 177 additions and 349 deletions

57
.gitignore vendored Normal file
View file

@ -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

17
README.markdown Normal file
View file

@ -0,0 +1,17 @@
Kanboard for Yunohost
============
[Yunohost project](https://yunohost.org/#/)
Kanboard is a simple visual task board web application.
Official website: <http://kanboard.net>
Kanboard v1.0.8
TODO
----
- multi instance
- language choice

View file

@ -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)

View file

@ -1,291 +0,0 @@
<?php
namespace Schema;
use Core\Security;
const VERSION = 21;
function version_21($pdo)
{
$pdo->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()."')
");
}

View file

@ -1,31 +1,53 @@
<?php
// Your Kanboard base URL, example: http://demo.kanboard.net/ (used by email notifications or CLI scripts)
define('KANBOARD_URL', 'http://yuno_url/');
// E-mail address for the "From" header (notifications)
define('MAIL_FROM', 'yuno_email');
// Mail transport to use: "smtp", "sendmail" or "mail" (PHP mail function)
define('MAIL_TRANSPORT', 'mail');
// SMTP configuration to use when the "smtp" transport is chosen
define('MAIL_SMTP_HOSTNAME', '');
define('MAIL_SMTP_PORT', 25);
define('MAIL_SMTP_USERNAME', '');
define('MAIL_SMTP_PASSWORD', '');
define('MAIL_SMTP_ENCRYPTION', ''); // Valid values are "null", "ssl" or "tls"
// Sendmail command to use when the transport is "sendmail"
define('MAIL_SENDMAIL_COMMAND', '/usr/sbin/sendmail -bs');
// Auto-refresh frequency in seconds for the public board view (60 seconds by default)
define('BOARD_PUBLIC_CHECK_INTERVAL', 60);
// Board refresh frequency in seconds (the value 0 disable this feature, 10 seconds by default)
define('BOARD_CHECK_INTERVAL', 10);
// Database driver: sqlite or mysql (sqlite by default)
// Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)
define('RECENT_TASK_PERIOD', 48*60*60);
// Database driver: sqlite, mysql or postgres (sqlite by default)
define('DB_DRIVER', 'mysql');
// Mysql username
define('DB_USERNAME', 'yunouser');
// Mysql/Postgres username
define('DB_USERNAME', 'yuno_dbuser');
// Mysql password
define('DB_PASSWORD', 'yunopdw');
// Mysql/Postgres password
define('DB_PASSWORD', 'yuno_dbpdw');
// Mysql hostname
// Mysql/Postgres hostname
define('DB_HOSTNAME', 'localhost');
// Mysql database name
define('DB_NAME', 'yunouser');
// Mysql/Postgres database name
define('DB_NAME', 'yuno_dbuser');
// Enable LDAP authentication (false by default)
define('LDAP_AUTH', true);
define('LDAP_AUTH', false);
// LDAP server hostname
define('LDAP_SERVER', 'localhost');
define('LDAP_SERVER', '');
// LDAP server port (389 by default)
define('LDAP_PORT', 389);
@ -33,23 +55,27 @@ define('LDAP_PORT', 389);
// By default, require certificate to be verified for ldaps:// style URL. Set to false to skip the verification.
define('LDAP_SSL_VERIFY', true);
// LDAP username to connect with. NULL for anonymous bind (by default).
// LDAP bind type: "anonymous", "user" (use the given user/password from the form) and "proxy" (a specific user to browse the LDAP directory)
define('LDAP_BIND_TYPE', 'anonymous');
// LDAP username to connect with. null for anonymous bind (by default).
// Or for user bind type, you can use a pattern: %s@kanboard.local
define('LDAP_USERNAME', null);
// LDAP password to connect with. NULL for anonymous bind (by default).
// LDAP password to connect with. null for anonymous bind (by default).
define('LDAP_PASSWORD', null);
// LDAP account base, i.e. root of all user account
// Example: ou=people,dc=example,dc=com
define('LDAP_ACCOUNT_BASE', 'ou=users,dc=yunohost,dc=org');
// Example: ou=People,dc=example,dc=com
define('LDAP_ACCOUNT_BASE', '');
// LDAP query pattern to use when searching for a user account
// Example for ActiveDirectory: '(&(objectClass=user)(sAMAccountName=%s))'
// Example for OpenLDAP: 'uid=%s'
define('LDAP_USER_PATTERN', 'uid=%s');
define('LDAP_USER_PATTERN', '');
// Name of an attribute of the user account object which should be used as the full name of the user.
define('LDAP_ACCOUNT_FULLNAME', 'cn');
define('LDAP_ACCOUNT_FULLNAME', 'displayname');
// Name of an attribute of the user account object which should be used as the email of the user.
define('LDAP_ACCOUNT_EMAIL', 'mail');
@ -71,3 +97,15 @@ define('GITHUB_CLIENT_ID', '');
// GitHub client secret key (Copy it from your settings -> 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');

View file

@ -4,17 +4,17 @@ location PATHTOCHANGE {
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 AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
# Include SSOWAT user panel.
include conf.d/yunohost_panel.conf.inc;
}

View file

@ -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" : [
{

View file

@ -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

View file

@ -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