1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/hotspot_ynh.git synced 2024-09-03 19:25:53 +02:00

Some stuff

This commit is contained in:
Julien VAUBOURG 2014-11-10 22:27:59 +01:00
parent f2aec38b5b
commit 355986b8d3
6 changed files with 94 additions and 94 deletions

View file

@ -3,19 +3,19 @@
**Warning: work in progress** **Warning: work in progress**
**Warning: currently, there is no checking on input parameters**
Hotspot wifi app for [YunoHost](http://yunohost.org/). Hotspot wifi app for [YunoHost](http://yunohost.org/).
* Broadcast your own Wifi internet access in addition to your self-hosted web services. * Broadcast your own Wifi internet access in addition to your self-hosted web services.
* Without internet access, it's a [PirateBox](https://en.wikipedia.org/wiki/PirateBox). * Without internet access, it's a [PirateBox](https://en.wikipedia.org/wiki/PirateBox).
* With the [VPN Client app for YunoHost](https://github.com/jvaubourg/vpnclient_ynh), it's an encrypted Wifi internet access (eventually with [neutral access](https://en.wikipedia.org/wiki/Net_neutrality), without filters, and with IPv6, depending on your VPN provider). * With the [VPN Client app for YunoHost](https://github.com/jvaubourg/vpnclient_ynh), it's an encrypted Wifi internet access (eventually with [neutral access](https://en.wikipedia.org/wiki/Net_neutrality), without filters, and with IPv6, depending on your VPN provider).
Small computers like [Olimex](https://www.olimex.com) or [Raspberry PI](http://www.raspberrypi.org/) boxes and an USB Wifi dongle like [this one](https://www.olimex.com/Products/USB-Modules/MOD-WIFI-R5370-ANT/) are perfect for a nomade access with low power consumption.
## Features ## Features
* WPA2 encryption * WPA2 encryption
* IPv6 compliant (with a delegated prefix)
* 802.11n if your antenna is compliant * 802.11n if your antenna is compliant
* IPv6 compliant (with a delegated prefix)
* Automatic clients configuration (IPv6 and IPv4) * Automatic clients configuration (IPv6 and IPv4)
* Announce DNS resolvers (IPv6 and IPv4) * Announce DNS resolvers (IPv6 and IPv4)
* Set an IPv6 from your delegated prefix (*prefix::1*) on the server, to use for the AAAA records * Set an IPv6 from your delegated prefix (*prefix::1*) on the server, to use for the AAAA records

View file

@ -12,6 +12,10 @@
# Functions # Functions
## State functions ## State functions
has_ip6delegatedprefix() {
[ "${ynh_ip6_net}" != none ]
}
is_ndproxy_set() { is_ndproxy_set() {
proxy=$(ip -6 neighbour show proxy) proxy=$(ip -6 neighbour show proxy)
[ ! -z "${proxy}" ] [ ! -z "${proxy}" ]
@ -51,9 +55,9 @@ is_dhcpd_running() {
} }
is_running() { is_running() {
is_ndproxy_set && is_nat_set "${new_internet_device}" && is_ip4nataddr_set\ ( has_ip6delegatedprefix && is_ip6addr_set && is_radvd_running && is_ndproxy_set || ! has_ip6delegatedprefix )\
&& is_ip6addr_set && is_forwarding_set && is_hostapd_running\ && is_nat_set "${new_internet_device}" && is_ip4nataddr_set && is_forwarding_set && is_hostapd_running\
&& is_radvd_running && is_dhcpd_running && is_dhcpd_running
} }
## Setters ## Setters
@ -222,7 +226,7 @@ case "$1" in
echo "Starting..." echo "Starting..."
# Set NDP proxy # Set NDP proxy
if ! is_ndproxy_set; then if has_ip6delegatedprefix && ! is_ndproxy_set; then
echo "Set NDP proxy" echo "Set NDP proxy"
set_ndproxy set_ndproxy
fi fi
@ -247,7 +251,7 @@ case "$1" in
fi fi
# Set the ipv6 address # Set the ipv6 address
if ! is_ip6addr_set; then if has_ip6delegatedprefix && ! is_ip6addr_set; then
echo "Set IPv6 address" echo "Set IPv6 address"
set_ip6addr set_ip6addr
fi fi
@ -267,7 +271,7 @@ case "$1" in
# Run radvd # Run radvd
# must be running after hostapd # must be running after hostapd
if ! is_radvd_running; then if has_ip6delegatedprefix && ! is_radvd_running; then
echo "Run radvd" echo "Run radvd"
start_radvd start_radvd
fi fi
@ -286,7 +290,7 @@ case "$1" in
stop) stop)
echo "Stopping..." echo "Stopping..."
if is_ndproxy_set; then if has_ip6delegatedprefix && is_ndproxy_set; then
echo "Unset NDP proxy" echo "Unset NDP proxy"
unset_ndproxy unset_ndproxy
fi fi
@ -301,7 +305,7 @@ case "$1" in
unset_ip4nataddr unset_ip4nataddr
fi fi
if is_ip6addr_set; then if has_ip6delegatedprefix && is_ip6addr_set; then
echo "Unset IPv6 address" echo "Unset IPv6 address"
unset_ip6addr unset_ip6addr
fi fi
@ -316,7 +320,7 @@ case "$1" in
stop_hostapd stop_hostapd
fi fi
if is_radvd_running; then if has_ip6delegatedprefix && is_radvd_running; then
echo "Stop radvd" echo "Stop radvd"
stop_radvd stop_radvd
fi fi
@ -329,6 +333,7 @@ case "$1" in
status) status)
exitcode=0 exitcode=0
if has_ip6delegatedprefix; then
if is_ndproxy_set; then if is_ndproxy_set; then
echo "NDP proxy is correctly set" echo "NDP proxy is correctly set"
else else
@ -336,6 +341,23 @@ case "$1" in
exitcode=1 exitcode=1
fi fi
if is_ip6addr_set; then
echo "IPv6 address is correctly set"
else
echo "IPv6 address is NOT set"
exitcode=1
fi
if is_radvd_running; then
echo "Radvd is running"
else
echo "Radvd is NOT running"
exitcode=1
fi
else
echo "No IPv6 delegated prefix"
fi
if is_nat_set "${new_internet_device}"; then if is_nat_set "${new_internet_device}"; then
echo "NAT is correctly set" echo "NAT is correctly set"
else else
@ -350,13 +372,6 @@ case "$1" in
exitcode=1 exitcode=1
fi fi
if is_ip6addr_set; then
echo "IPv6 address is correctly set"
else
echo "IPv6 address is NOT set"
exitcode=1
fi
if is_forwarding_set; then if is_forwarding_set; then
echo "Forwarding is correctly set" echo "Forwarding is correctly set"
else else
@ -371,13 +386,6 @@ case "$1" in
exitcode=1 exitcode=1
fi fi
if is_radvd_running; then
echo "Radvd is running"
else
echo "Radvd is NOT running"
exitcode=1
fi
if is_dhcpd_running; then if is_dhcpd_running; then
echo "Dhcpd is running" echo "Dhcpd is running"
else else

View file

@ -60,46 +60,10 @@
{ {
"name": "ip6_net", "name": "ip6_net",
"ask": { "ask": {
"en": "Select your IPv6 delegated prefix (netmask number provided must be lesser or equal to 64)", "en": "Select your IPv6 delegated prefix (leave empty if your Internet Service Provider does not give you a delegated prefix, but you will not have IPv6)",
"fr": "Sélectionnez votre préfixe IPv6 délégué (le masque de sous-réseau fourni doit être plus petit ou égal à 64)" "fr": "Sélectionnez votre préfixe IPv6 délégué (laisser vide si votre Fournisseur d'Accès à Internet ne vous donne pas de préfixe délégué, mais vous n'aurez pas d'IPv6)"
}, },
"example": "2001:db8:42::/48" "example": "2001:db8:42::"
},
{
"name": "ip6_dns0",
"ask": {
"en": "Select a first IPv6 DNS resolver",
"fr": "Sélectionnez un premier serveur DNS IPv6"
},
"example": "2001:913::8",
"default": "2001:913::8"
},
{
"name": "ip6_dns1",
"ask": {
"en": "Select a second IPv6 DNS resolver",
"fr": "Sélectionnez un second serveur DNS IPv6"
},
"example": "2001:910:800::40",
"default": "2001:910:800::40"
},
{
"name": "ip4_dns0",
"ask": {
"en": "Select a first IPv4 DNS resolver",
"fr": "Sélectionnez un premier serveur DNS IPv4"
},
"example": "80.67.188.188",
"default": "80.67.188.188"
},
{
"name": "ip4_dns1",
"ask": {
"en": "Select a second IPv4 DNS resolver",
"fr": "Sélectionnez un second serveur DNS IPv4"
},
"example": "80.67.169.12",
"default": "80.67.169.12"
} }
] ]
} }

View file

@ -7,10 +7,6 @@ wifi_ssid=${3}
wifi_passphrase=${4} wifi_passphrase=${4}
wifi_device=${5} wifi_device=${5}
ip6_net=${6} ip6_net=${6}
ip6_dns0=${7}
ip6_dns1=${8}
ip4_dns0=${9}
ip4_dns1=${10}
# Check arguments # Check arguments
# TODO # TODO
@ -29,11 +25,15 @@ sudo apt-get --assume-yes --force-yes install hostapd radvd isc-dhcp-server ipta
sudo apt-get --assume-yes --force-yes install sipcalc sudo apt-get --assume-yes --force-yes install sipcalc
# Compute extra arguments # Compute extra arguments
if [ -z "${ip6_net}" ]; then
ip6_net=none
ip6_addr=none
else
ip6_expanded_net=$(sipcalc "${ip6_net}" | grep Expanded | awk '{ print $NF; }') ip6_expanded_net=$(sipcalc "${ip6_net}" | grep Expanded | awk '{ print $NF; }')
ip6_net=$(sipcalc "${ip6_net}" | grep Compressed | awk '{ print $NF; }') ip6_net=$(sipcalc "${ip6_net}" | grep Compressed | awk '{ print $NF; }')
ip6_addr=$(echo "$(echo "${ip6_expanded_net}" | cut -d: -f1-7):1") ip6_addr=$(echo "$(echo "${ip6_expanded_net}" | cut -d: -f1-7):1")
ip6_addr=$(sipcalc "${ip6_addr}" | grep Compressed | awk '{ print $NF; }') ip6_addr=$(sipcalc "${ip6_addr}" | grep Compressed | awk '{ print $NF; }')
ip4_nat_prefix=10.0.242 fi
# Save arguments # Save arguments
sudo yunohost app setting hotspot wifi_ssid -v "${wifi_ssid}" sudo yunohost app setting hotspot wifi_ssid -v "${wifi_ssid}"
@ -43,11 +43,11 @@ sudo yunohost app setting hotspot wifi_channel -v 6
sudo yunohost app setting hotspot wifi_n -v 0 sudo yunohost app setting hotspot wifi_n -v 0
sudo yunohost app setting hotspot ip6_addr -v "${ip6_addr}" sudo yunohost app setting hotspot ip6_addr -v "${ip6_addr}"
sudo yunohost app setting hotspot ip6_net -v "${ip6_net}" sudo yunohost app setting hotspot ip6_net -v "${ip6_net}"
sudo yunohost app setting hotspot ip6_dns0 -v "${ip6_dns0}" sudo yunohost app setting hotspot ip6_dns0 -v 2001:913::8
sudo yunohost app setting hotspot ip6_dns1 -v "${ip6_dns1}" sudo yunohost app setting hotspot ip6_dns1 -v 2001:910:800::12
sudo yunohost app setting hotspot ip4_dns0 -v "${ip4_dns0}" sudo yunohost app setting hotspot ip4_dns0 -v 80.67.188.188
sudo yunohost app setting hotspot ip4_dns1 -v "${ip4_dns1}" sudo yunohost app setting hotspot ip4_dns1 -v 80.67.169.12
sudo yunohost app setting hotspot ip4_nat_prefix -v "${ip4_nat_prefix}" sudo yunohost app setting hotspot ip4_nat_prefix -v 10.0.242
# Copy confs # Copy confs
sudo install -b -o root -g root -m 0644 ../conf/hostapd.conf.tpl /etc/hostapd/ sudo install -b -o root -g root -m 0644 ../conf/hostapd.conf.tpl /etc/hostapd/
@ -113,10 +113,12 @@ sudo yunohost service start php5-fpm
sudo service nginx reload sudo service nginx reload
# Remove IPv6 address set if there is a VPN installed # Remove IPv6 address set if there is a VPN installed
if [ "${ip6_addr}" != none ]; then
sudo ip -6 address show dev tun0 2> /dev/null | grep -q "${ip6_addr}/" sudo ip -6 address show dev tun0 2> /dev/null | grep -q "${ip6_addr}/"
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
sudo ip address delete "${ip6_addr}/128" dev tun0 &> /dev/null sudo ip address delete "${ip6_addr}/128" dev tun0 &> /dev/null
fi fi
fi
sudo yunohost service add ynh-hotspot sudo yunohost service add ynh-hotspot
sudo yunohost service enable ynh-hotspot sudo yunohost service enable ynh-hotspot

View file

@ -8,8 +8,11 @@ function moulinette_set($var, $value) {
return exec("sudo yunohost app setting hotspot ".escapeshellarg($var)." -v ".escapeshellarg($value)); return exec("sudo yunohost app setting hotspot ".escapeshellarg($var)." -v ".escapeshellarg($value));
} }
function restart_service() { function stop_service() {
exec('sudo service ynh-hotspot stop'); exec('sudo service ynh-hotspot stop');
}
function start_service() {
exec('sudo service ynh-hotspot start', $output, $retcode); exec('sudo service ynh-hotspot start', $output, $retcode);
return $retcode; return $retcode;
@ -32,13 +35,16 @@ dispatch('/', function() {
} }
} }
$ip6_net = moulinette_get('ip6_net');
$ip6_net = ($ip6_net == 'none') ? '' : $ip6_net;
set('wifi_ssid', moulinette_get('wifi_ssid')); set('wifi_ssid', moulinette_get('wifi_ssid'));
set('wifi_passphrase', moulinette_get('wifi_passphrase')); set('wifi_passphrase', moulinette_get('wifi_passphrase'));
set('wifi_channel', moulinette_get('wifi_channel')); set('wifi_channel', moulinette_get('wifi_channel'));
set('wifi_n', moulinette_get('wifi_n')); set('wifi_n', moulinette_get('wifi_n'));
set('wifi_device', $wifi_device); set('wifi_device', $wifi_device);
set('wifi_device_list', $devs_list); set('wifi_device_list', $devs_list);
set('ip6_net', moulinette_get('ip6_net')); set('ip6_net', $ip6_net);
set('ip6_dns0', moulinette_get('ip6_dns0')); set('ip6_dns0', moulinette_get('ip6_dns0'));
set('ip6_dns1', moulinette_get('ip6_dns1')); set('ip6_dns1', moulinette_get('ip6_dns1'));
set('ip4_nat_prefix', moulinette_get('ip4_nat_prefix')); set('ip4_nat_prefix', moulinette_get('ip4_nat_prefix'));
@ -49,19 +55,31 @@ dispatch('/', function() {
}); });
dispatch_put('/settings', function() { dispatch_put('/settings', function() {
$ip6_net = empty($_POST['ip6_net']) ? 'none' : $_POST['ip6_net'];
stop_service();
moulinette_set('wifi_ssid', $_POST['wifi_ssid']); moulinette_set('wifi_ssid', $_POST['wifi_ssid']);
moulinette_set('wifi_passphrase', $_POST['wifi_passphrase']); moulinette_set('wifi_passphrase', $_POST['wifi_passphrase']);
moulinette_set('wifi_channel', $_POST['wifi_channel']); moulinette_set('wifi_channel', $_POST['wifi_channel']);
moulinette_set('wifi_n', isset($_POST['wifi_n']) ? 1 : 0); moulinette_set('wifi_n', isset($_POST['wifi_n']) ? 1 : 0);
moulinette_set('wifi_device', $_POST['wifi_device']); moulinette_set('wifi_device', $_POST['wifi_device']);
moulinette_set('ip6_net', $_POST['ip6_net']); moulinette_set('ip6_net', $ip6_net);
moulinette_set('ip6_dns0', $_POST['ip6_dns0']); moulinette_set('ip6_dns0', $_POST['ip6_dns0']);
moulinette_set('ip6_dns1', $_POST['ip6_dns1']); moulinette_set('ip6_dns1', $_POST['ip6_dns1']);
moulinette_set('ip4_nat_prefix', $_POST['ip4_nat_prefix']); moulinette_set('ip4_nat_prefix', $_POST['ip4_nat_prefix']);
moulinette_set('ip4_dns0', $_POST['ip4_dns0']); moulinette_set('ip4_dns0', $_POST['ip4_dns0']);
moulinette_set('ip4_dns1', $_POST['ip4_dns1']); moulinette_set('ip4_dns1', $_POST['ip4_dns1']);
$retcode = restart_service(); # TODO: format ip6_net
if($ip6_net == 'none') {
moulinette_set('ip6_addr', 'none');
} else {
$ip6_addr = "${ip6_net}1";
moulinette_set('ip6_addr', $ip6_addr);
}
$retcode = start_service();
if($retcode == 0) { if($retcode == 0) {
flash('success', T_('Configuration updated and service successfully reloaded')); flash('success', T_('Configuration updated and service successfully reloaded'));

View file

@ -80,15 +80,23 @@
</div> </div>
<div style="padding: 14px 14px 0 10px"> <div style="padding: 14px 14px 0 10px">
<?php if(empty($ip6_net)): ?>
<div class="alert alert-dismissible alert-warning fade in" style="margin: 2px 2px 17px" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<strong><?= T_('Notice') ?>:</strong> <?= T_("Currently, your wifi clients don't have IPv6 and it's a very bad thing. Ask your Internet Service Provider an IPv6 delegated prefix, or") ?>
<a href="http://db.ffdn.org" class="alert-link"><?= T_('change providers') ?></a> !</span>
</div>
<?php endif; ?>
<div class="form-group"> <div class="form-group">
<label for="ip6_net" class="col-sm-3 control-label"><?= T_('Delegated IPv6 subnet') ?></label> <label for="ip6_net" class="col-sm-3 control-label"><?= T_('Delegated prefix') ?></label>
<div class="col-sm-9"> <div class="col-sm-9">
<input type="text" class="form-control" name="ip6_net" id="ip6_net" placeholder="2001:db8:42::/48" value="<?= $ip6_net ?>" /> <input type="text" class="form-control" name="ip6_net" id="ip6_net" placeholder="2001:db8:42::" value="<?= $ip6_net ?>" />
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ip6_dns0" class="col-sm-3 control-label"><?= T_('Frist DNS resolver') ?></label> <label for="ip6_dns0" class="col-sm-3 control-label"><?= T_('First DNS resolver') ?></label>
<div class="col-sm-9"> <div class="col-sm-9">
<input type="text" class="form-control" name="ip6_dns0" id="ip6_dns0" placeholder="2001:913::8" value="<?= $ip6_dns0 ?>" /> <input type="text" class="form-control" name="ip6_dns0" id="ip6_dns0" placeholder="2001:913::8" value="<?= $ip6_dns0 ?>" />
</div> </div>