1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/kiwiirc_ynh.git synced 2024-09-03 19:35:59 +02:00

first working version

This commit is contained in:
Julien Malik 2014-08-27 23:42:00 +02:00
commit 2f3083d9c4
8 changed files with 555 additions and 0 deletions

215
conf/config.js Normal file
View file

@ -0,0 +1,215 @@
var conf = {};
// Run the Kiwi server under a different user/group
conf.user = "kiwiirc";
conf.group = "kiwiirc";
// Log file location
conf.log = "/var/log/ynh-kiwiirc.log";
/*
* Server listen blocks
*/
// Do not edit this line!
conf.servers = [];
// Example server block
conf.servers.push({
port: 7778,
address: "0.0.0.0"
});
// Example SSL server block
//conf.servers.push({
// port: 7777,
// address: "0.0.0.0",
//
// ssl: true,
// ssl_key: "server.key",
// ssl_cert: "cert.pem"
//});
// Network interface for outgoing connections
conf.outgoing_address = {
IPv4: '0.0.0.0'
//IPv6: '::'
};
// Do we want to enable the built in Identd server?
conf.identd = {
enabled: false,
port: 113,
address: "0.0.0.0"
};
// Where the client files are
conf.public_http = "client/";
// Max connections per connection. 0 to disable
conf.max_client_conns = 5;
// Max connections per server. 0 to disable.
// Setting is ignored if:
// - There is a WEBIRC password configured for the server,
// - Kiwi is configured to send the client's ip as a username for the server, or
// - Kiwi is running in restricted server mode.
conf.max_server_conns = 0;
/*
* Default encoding to be used by the server
* As specified and limited to iconv-lite library support.
*/
conf.default_encoding = 'utf8';
/*
* Default GECOS (real name) for IRC connections
* %n will be replaced with the users nick
* %h will be replaced with the users hostname
*/
//conf.default_gecos = 'Web IRC Client';
/*
* Client side plugins
* Array of URLs that will be loaded into the browser when the client first loads up
* See http://github.com/prawnsalad/KiwiIRC/wiki/Client-plugins
*/
conf.client_plugins = [
// "http://server.com/kiwi/plugins/myplugin.html"
];
// Directory to find the server modules
conf.module_dir = "../server_modules/";
// Which modules to load
conf.modules = [];
// WebIRC passwords enabled for this server
conf.webirc_pass = {
//"irc.network.com": "configured_webirc_password",
//"127.0.0.1": "foobar"
};
// Some IRCDs require the clients IP via the username/ident
conf.ip_as_username = [
//"irc.network.com",
//"127.0.0.1"
];
// Whether to verify IRC servers' SSL certificates against built-in well-known certificate authorities
conf.reject_unauthorised_certificates = false;
/*
* Reverse proxy settings
* Reverse proxies that have been reported to work can be found at:
* https://kiwiirc.com/docs/installing/proxies
*/
// Whitelisted HTTP proxies in CIDR format
conf.http_proxies = ["127.0.0.1/32"];
// Header that contains the real-ip from the HTTP proxy
conf.http_proxy_ip_header = "x-forwarded-for";
// Base HTTP path to the KIWI IRC client (eg. /kiwi)
conf.http_base_path = "YNH_BASE_PATH";
/*
* SOCKS (version 5) proxy settings
* This feature is only available on node 0.10.0 and above.
* Do not enable it if you're running 0.8 or below or Bad Things will happen.
*/
conf.socks_proxy = {};
// Enable proxying outbound connections through a SOCKS proxy
conf.socks_proxy.enabled = false;
// Proxy *all* outbound connections through a SOCKS proxy
conf.socks_proxy.all = false;
// Use SOCKS proxy for these hosts only (if conf.sock_proxy.all === false)
conf.socks_proxy.proxy_hosts = [
"irc.example.com"
];
// Host and port for the SOCKS proxy
conf.socks_proxy.address = '127.0.0.1';
conf.socks_proxy.port = 1080;
// Username and password for the SOCKS proxy
// Set user to null to disable password authentication
conf.socks_proxy.user = null;
conf.socks_proxy.pass = null;
// Default quit message
conf.quit_message = "http://www.kiwiirc.com/ - A hand-crafted IRC client";
// Default settings for the client. These may be changed in the browser
conf.client = {
server: 'irc.kiwiirc.com',
port: 6697,
ssl: true,
channel: '#kiwiirc',
channel_key: '',
nick: 'kiwi_?',
settings: {
theme: 'relaxed',
channel_list_style: 'tabs',
scrollback: 250,
show_joins_parts: true,
show_timestamps: false,
use_24_hour_timestamps: true,
mute_sounds: false,
show_emoticons: true,
count_all_activity: true
},
window_title: 'Kiwi IRC'
};
// List of themes available for the user to choose from
conf.client_themes = [
'relaxed',
'mini',
'cli',
'basic'
];
// If set, the client may only connect to this 1 IRC server
//conf.restrict_server = "irc.kiwiirc.com";
//conf.restrict_server_port = 6667;
//conf.restrict_server_ssl = false;
//conf.restrict_server_channel = "#kiwiirc";
//conf.restrict_server_channel_key = "";
//conf.restrict_server_password = "";
//conf.restrict_server_nick = "kiwi_";
/*
* Do not amend the below lines unless you understand the changes!
*/
module.exports.production = conf;

174
conf/init-script Normal file
View file

@ -0,0 +1,174 @@
#! /bin/sh
### BEGIN INIT INFO
# Provides: kiwiirc
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: KiwiIRC Blogging Platform
# Description: KiwiIRC: Just a blogging platform
### END INIT INFO
# Kindly stolen from http://docs.kiwiirc.org/pl/installation/deploy/
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="KiwiIRC"
NAME=ynh-kiwiirc
GHOST_ROOT=/var/www/kiwiirc
GHOST_GROUP=kiwiirc
GHOST_USER=kiwiirc
DAEMON=/usr/bin/node
DAEMON_ARGS="$GHOST_ROOT/server/server.js -f"
PIDFILEDIR=/var/run/yunohost/kiwiirc
PIDFILE=$PIDFILEDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
LOGFILE="/var/log/ynh-kiwiirc.log"
export NODE_ENV=production
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# I like to know what is going on
VERBOSE=yes
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Set up folder structure
mkdir -p $PIDFILEDIR
chown -R $GHOST_USER:$GHOST_GROUP $PIDFILEDIR
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet \
--chuid $GHOST_USER:$GHOST_GROUP --chdir $GHOST_ROOT --background \
--pidfile $PIDFILE --make-pidfile --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet \
--chuid $GHOST_USER:$GHOST_GROUP --chdir $GHOST_ROOT --background \
--pidfile $PIDFILE --make-pidfile --exec /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS >> $LOGFILE 2>&1" \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some dime.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
--pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/3/KILL/5 \
--exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
# #
# # Function that sends a SIGHUP to the daemon/service
# #
# do_reload() {
# #
# # If the daemon can reload its configuration without
# # restarting (for example, when it is sent a SIGHUP),
# # then implement that here.
# #
# start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE \
# --name $NAME
# return 0
# }
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
exit 0

10
conf/logrotate Normal file
View file

@ -0,0 +1,10 @@
YNH_LOGFILE
{
weekly
missingok
rotate 12
notifempty
compress
delaycompress
copytruncate
}

14
conf/nginx.conf Normal file
View file

@ -0,0 +1,14 @@
location YNH_LOCATION {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:7778YNH_LOCATION;
proxy_redirect default;
# Websocket support (from version 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

46
manifest.json Normal file
View file

@ -0,0 +1,46 @@
{
"name": "KiwiIRC",
"id": "kiwiirc",
"description": {
"en": "Web IRC client",
"fr": "Client Web pour IRC"
},
"developer": {
"name": "Julien Malik",
"email": "julien.malik@paraiso.me",
"url": "https://kiwiirc.com/"
},
"multi_instance": "false",
"arguments": {
"install" : [
{
"name": "domain",
"ask": {
"en": "Choose a domain for KiwiIRC",
"fr": "Choisissez un domaine pour KiwiIRC"
},
"example": "domain.org"
},
{
"name": "path",
"ask": {
"en": "Choose a path for KiwiIRC",
"fr": "Choisissez un path pour KiwiIRC"
},
"example": "/irc",
"default": "/irc"
},
{
"name": "public_site",
"ask": {
"en": "Is it a public KiwiIRC site ?",
"fr": "Est-ce un site public ?"
},
"choices": ["Yes", "No"],
"default": "Yes"
}
]
}
}

77
scripts/install Normal file
View file

@ -0,0 +1,77 @@
#!/bin/bash
# Retrieve arguments
domain=$1
path=$2
is_public=$3
# Check domain/path availability
sudo yunohost app checkurl $domain$path -a kiwiirc
if [[ ! $? -eq 0 ]]; then
exit 1
fi
echo "Install dependencies..."
sudo apt-get update
sudo apt-get install nodejs-legacy npm -y
version=de1607bf1e9ba4429a10f895a6ec45c54daa3161
echo "Downloading KiwiIRC $version..."
mkdir ../tmp
sudo wget -O ../tmp/kiwiirc-$version.tar.gz "https://github.com/prawnsalad/KiwiIRC/archive/de1607bf1e9ba4429a10f895a6ec45c54daa3161.tar.gz"
echo "Deploying source files..."
cd ../tmp && tar xvzf ../tmp/kiwiirc-$version.tar.gz && cd ../scripts
final_path=/var/www/kiwiirc
sudo mkdir -p $final_path
sudo useradd -d $final_path kiwiirc
sudo cp -r ../tmp/KiwiIRC-$version/* $final_path
#sudo cp ../conf/npm-shrinkwrap.json $final_path
sudo chown -R kiwiirc: $final_path
echo "Installing KiwiIRC with NPM..."
sudo su --shell /bin/bash --command "cd $final_path && npm install --production --registry http://registry.npmjs.org" kiwiirc
echo "Cleaning up install tree..."
sudo rm -rf $final_path/.npm
echo "Deploying configuration..."
sed -i "s@YNH_BASE_PATH@${path}@g" ../conf/config.js
sudo cp ../conf/config.js $final_path/config.js
sudo chown kiwiirc: $final_path/config.js
sudo chmod 644 $final_path/config.js
echo "Post install step... building client side"
sudo su --shell /bin/bash --command "cd $final_path && node $final_path/server/server.js build" kiwiirc
echo "Setting up init script..."
logfile=/var/log/ynh-kiwiirc.log
sudo touch $logfile
sudo chown kiwiirc: $logfile
sed -i "s@YNH_FINALPATH@$final_path@g" ../conf/init-script
sed -i "s@YNH_LOGFILE@$logfile@g" ../conf/init-script
sudo cp ../conf/init-script /etc/init.d/ynh-kiwiirc
sudo chmod +x /etc/init.d/ynh-kiwiirc
sudo update-rc.d ynh-kiwiirc defaults
sudo service ynh-kiwiirc start
sudo yunohost service add ynh-kiwiirc -l $logfile
echo "Setting up logrotate configuration..."
sed -i "s@YNH_LOGFILE@$logfile@g" ../conf/logrotate
sudo cp ../conf/logrotate /etc/logrotate.d/ynh-kiwiirc
echo "Nginx configuration..."
sed -i "s@YNH_LOCATION@$path@g" ../conf/nginx.conf
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/kiwiirc.conf
if [ $is_public = "Yes" ]; then
sudo yunohost app setting kiwiirc skipped_uris -v "/"
fi
sudo yunohost app setting kiwiirc is_public -v $is_public
echo "Reloading Nginx (sso enabled)..."
sudo service nginx reload
sudo yunohost app ssowatconf
echo "Success !"

15
scripts/remove Normal file
View file

@ -0,0 +1,15 @@
#!/bin/bash
domain=$(sudo yunohost app setting kiwiirc domain)
sudo service ynh-kiwiirc stop
sudo update-rc.d ynh-kiwiirc remove
sudo rm /etc/init.d/ynh-kiwiirc
sudo yunohost service remove ynh-kiwiirc
sudo rm -f /etc/nginx/conf.d/$domain.d/kiwiirc.conf
sudo rm -f /var/log/ynh-kiwiirc.log
sudo rm -rf /var/run/yunohost/kiwiirc
sudo rm -f /etc/logrotate.d/ynh-kiwiirc
# remove user so that it does not hold resource
sudo userdel --remove kiwiirc

4
scripts/upgrade Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
echo "TODO"
exit 1