This commit is contained in:
fred 2021-09-18 20:46:58 +02:00
commit c512d8aff3
21 changed files with 874 additions and 252 deletions

3
.gitignore vendored
View File

@ -1 +1,4 @@
__pycache__
www/boris/me
www/boris/swarm

View File

@ -1,4 +1,79 @@
# ASTROPORT/KODI (astrXbian)
# Astroport répare ton internet
## Tout ce qui t'emmerde dans internet
Youtube :
- les suggestions te font perdre un temps fou, mais regarder toutes ces vidéos ne t'apportent que rarement de la valeur, car elle te font tourner en boucle sur du contenu toujours similaire
- le contenu qui diverge de la norme se retrouve censuré. Ça ne dérange pas trop tant que tu es toi-même dans la norme, mais que se passe-t-il lorsque ta pensée devient minoritaire ? Tu ne peux plus partager ton opinion.
- tu es obligé de passer par la page d'accueil pour effectuer une recherche
- tu crées des playlists pour organiser toi-même le contenu, mais parfois une vidéo est supprimé, sans que Youtube te laisse même le titre de la vidéo
- les commentaires, t'exposent souvent à toute la haine d'inconnus, et sont souvent source de désespoir
Facebook :
- le contenu qui remonte est le contenu le plus consensuel : la photo de profil à 50 likes de Cindy
- tu te tapes une pub tous les 4-5 posts
9gag :
- tu y viens pour rire un peu, mais tu te retrouve face à beaucoup de posts à caractère politique, anxiogène ou source de colère
- l'humour des autres n'est pas forcément le tiens, et le contenu qui t'es proposé ne te fait pas forcément marrer
Netflix :
- un peu de contenu intéressant, mais il est noyé dans un océan de médiocrité
- tu n'as accès à rien si tu n'es pas connecté
Spotify :
- l'interface devient de plus en plus source de nuisances, en te proposant de recommander Spotify à des amis par exemple
## Astroport libère ton internet
Astroport remplace tous ces services, en apportant quelques degrés de liberté en plus :
Dans Astroport, le contenu n'est pas filtré par des algorithme, mais par les choix que tu fais de te nourir du contenu partagé par tel ou tel ami.
Si le contenu est trop abondant, tu peux choisir un algorithme pour le filtrer, mais tu restes toujours maître de la façon dont les choses te sont présentées ; tu peux choisir ton interface parmi une quantité d'interfaces déjà codées, ou coder ta propre interface.
Un contenu taggué comme "drôle" a plus de chances de l'être, car il t'es apporté par tes amis, et entre amis, on partage souvent le même sens de l'humour.
## C'est le moment idéal pour libérer internet
Le déploiement massif de la fibre nous fournit la possibilité de revenir au "vrai" internet : un internet pair-à-pair.
Du l'ADSL, avec son débit asymétrique (80ko/s en débit ascendant, en upload), on passe avec la fibre à 80Mo/s.
Il devient donc possible de regarder une vidéo en streaming directement depuis chez ses amis, plutôt que de la récupérer depuis un datacenter inconnu localisé à 400km.
L'apparition et la popularisation des Raspberry Pi rend possible à chacun de se créer son propre petit datacenter de 1 To pour mettre à la disposition de ses amis toute sa vidéothèque. Le Raspberry Pi peut rester allumer en permanence sans faire exploser ta facture électrique ni causer de catastrophe environnementale, puisqu'il a une puissance de l'ordre de 15W. Astroport peut aussi tourner sur un vieux PC de 2005 dont on pensait ne plus jamais pouvoir faire quoi que ce soit.
La France est par ailleurs le terrain idéal pour expérimenter cette façon de partager du contenu, grâce au droit à la copie privée, qui nous autorise à garder pour soi un contenu diffusé par d'autres (à l'époque : enregistrer sur K7 un contenu diffusé à la radio).
## Comment Astroport libère l'internet
Astroport utilise IPFS pour stocker les fichiers.
Ces fichiers sont partagés uniquement avec les gens que vous avez explicitement choisis, et vous recevez du contenu uniquement des personnes en qui vous avez confiance. Cette identification des "amis" se fait pour l'instant via Gchange, mais cela pourrait évoluer.
Les vidéos peuvent être affichées dans différentes interfaces. Astroport en propose pour l'instant deux :
1. Une interface web, personnalisable à loisir grâce aux thèmes
2. Kodi, qui peut s'installer sur une Android TV
## Un modèle économique pour les créateurs et le partage pair-à-pair
À chaque fichier, Astroport associe un porte-monnaie de monnaie libre G1.
Lors de la consultation d'un fichier, un peu de monnaie libre G1 est transmise au noeud qui sert le fichier (vous ou un ami, par exemple), et la monnaie récoltée sera à terme partagée entre le noeud et le créateur du contenu.
Le modèle pair-à-pair, en diminuant les coûts de diffusion, permet d'augmenter la part récupérée par le créateur.
D'un point de vue écologique, le modèle pair-à-pair diminue aussi l'électricité consommée, car le terminal de consultation devient aussi serveur de fichiers, et fait ainsi d'une pierre deux coups. S'ils souhaitent rejoindre ce modèle, les créateurs ne seront plus obligés d'utiliser les datacenters de Netflix pour diffuser leur contenu.
Grâce aux contrats, même Netflix pourra choisir de fermer ses datacenter, pour proposer à tout un chacun de participer à la diffusion de son catalogue, et le rémuner en conséquence.
**Découvrez l'[Internet des gens](https://astroport.com)**

1
minetest/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
minetest.conf

BIN
minetest/map.sqlite Normal file

Binary file not shown.

View File

@ -0,0 +1,107 @@
enable_damage = false
enable_pvp = false
creative_mode = true
enable_build_where_you_stand = true
# Controls length of day/night cycle.
# Examples:
# 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
# type: int
time_speed = 1
# Name of map generator to be used when creating a new world.
# Creating a world in the main menu will override this.
# Current mapgens in a highly unstable state:
# - The optional floatlands of v7 (disabled by default).
# type: enum values: v7, valleys, carpathian, v5, flat, fractal, singlenode, v6
# mg_name = v7
mg_name = singlenode
# singlenode = que de l'air ; le mod "startanode" permet d'ajouter un cube au spawn
# Player is able to fly without being affected by gravity.
# This requires the "fly" privilege on the server.
# type: bool
free_move = true
# Fast movement (via the "special" key).
# This requires the "fast" privilege on the server.
# type: bool
fast_move = false
# The privileges that new users automatically get.
# See /privs in game for a full list on your server and mod configuration.
# type: string
default_privs = interact, shout, fly, fast
# Privileges that players with basic_privs can grant
# type: string
basic_privs = interact, shout, fly, fast
# Where the map generator stops.
# Please note:
# - Limited to 31000 (setting above has no effect)
# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).
# - Those groups have an offset of -32, -32 nodes from the origin.
# - Only groups which are within the map_generation_limit are generated
# type: int min: 0 max: 31000
#mapgen_limit = 216
mapgen_limit = 31000
# If this is set, players will always (re)spawn at the given position.
# type: string
static_spawnpoint = (0, 0, 0)
# magpen flags
mg_flags = trees,decorations
# mapgen v6
mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes,noflat,trees
mgv6_freq_desert = 0.05
mgv6_freq_beach = 0.95
# Humidity variation for biomes.
# type: noise_params_2d
mgv6_np_humidity = {
offset = 0.5,
scale = 0.5,
spread = (2, 3, 2),
seed = 72384,
octaves = 3,
persistence = 0.50,
lacunarity = 2.0,
flags = eased
}
# Defines tree areas and tree density.
# type: noise_params_2d
mgv6_np_trees = {
offset = 0,
scale = 1,
spread = (2, 3, 2),
seed = 2,
octaves = 4,
persistence = 0.66,
lacunarity = 2.0,
flags = eased
}
# Defines areas with sandy beaches.
# type: noise_params_2d
mgv6_np_beach = {
offset = 0,
scale = 1,
spread = (50, 50, 50),
seed = 59420,
octaves = 3,
persistence = 0.50,
lacunarity = 2.0,
flags = eased
}
secure.trusted_mods = wiki

259
minetest/recreate_world.sh Executable file
View File

@ -0,0 +1,259 @@
#!/bin/sh
MINETEST_PATH=/home/pi/.minetest
WORLD_NAME=astroport
WORLD_PATH=$MINETEST_PATH/worlds/$WORLD_NAME
rm -rf $WORLD_PATH
mkdir $WORLD_PATH
cp map.sqlite $WORLD_PATH/
echo "
gameid = minetest
auth_backend = sqlite3
player_backend = sqlite3
backend = sqlite3
" > $WORLD_PATH/world.mt
cd ~/.zen/astrXbian/minetest
cat ./minetest-common.conf > /home/pi/.minetest/worlds/astroport/minetest.conf
echo "
server_name = Astroport "$XZUID"
# Message of the day displayed to players connecting.
# type: string
motd = Bienvenue sur l'Astroport \""$XZUID"\". Un petit cube auto-hébergé par son heureux propriétaire.
server_description = Astroport
# Domain name of server, to be displayed in the serverlist.
# type: string
#server_address = astroport.com
# Homepage of server, to be displayed in the serverlist.
# type: string
#server_url = https://astroport.com
# Automatically report to the serverlist.
# type: bool
server_announce = false
# Network port to listen (UDP).
# This value will be overridden when starting from the main menu.
# type: int
port = 30001
# The network interface that the server listens on.
# type: string
# bind_address =
" >> /home/pi/.minetest/worlds/astroport/minetest.conf
#########################################################################################
#
# SystemD
#
#########################################################################################
MINETEST_LOG_FILE=/var/log/minetest/minetest-astroport.log
sudo touch $MINETEST_LOG_FILE
sudo chown pi:games $MINETEST_LOG_FILE
chmod 664 $MINETEST_LOG_FILE
echo "
[Unit]
Description=Minetest multiplayer server minetest.conf server config
Documentation=man:minetestserver(6)
After=network.target
RequiresMountsFor=/var/games/minetest-server
[Service]
Restart=on-failure
User=pi
Group=games
ExecStart=/usr/lib/minetest/minetestserver --port 30001 --world /home/pi/.minetest/worlds/astroport --config /home/pi/.minetest/worlds/astroport/minetest.conf --logfile /var/log/minetest/minetest-astroport.log
StandardOutput=null
[Install]
WantedBy=multi-user.target
" >> $WORLD_PATH/systemd.service
sudo systemctl enable $WORLD_PATH/systemd.service
sudo systemctl start astroport-minetest.service
#########################################################################################
#
# MODS
#
#########################################################################################
mkdir $WORLD_PATH/worldmods
if [ ! -d $MINETEST_PATH/mods ]; then
mkdir $MINETEST_PATH/mods
fi
# ## mg - Experimental Mapgen for Minetest
#
# if [ ! -d $MINETEST_PATH/mods/mg-master ]; then
#
# if [ ! -f $MINETEST_PATH/mods/mg.zip ]; then
# wget https://github.com/minetest-mods/mg/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/mg.zip
# fi
#
# unzip $MINETEST_PATH/mods/mg.zip -d $MINETEST_PATH/mods
# fi
#
# cp -r $MINETEST_PATH/mods/mg-master $WORLD_PATH/worldmods
## startanode
#
# if [ ! -d $MINETEST_PATH/mods/startanode-master ]; then
#
# if [ ! -f $MINETEST_PATH/mods/startanode.zip ]; then
# wget https://github.com/minetest-mods/startanode/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/startanode.zip
# fi
#
# unzip $MINETEST_PATH/mods/startanode.zip -d $MINETEST_PATH/mods
# fi
#
# cp -r $MINETEST_PATH/mods/startanode-master $WORLD_PATH/worldmods
## Spawnbuilder
#
# spawnBuilderLocation=`find $MINETEST_PATH/mods -type d -name spawnbuilder`
# if [ -z $spawnBuilderLocation ]; then
#
# if [ ! -f $MINETEST_PATH/mods/spawnbuilder.zip ]; then
# wget https://repo.or.cz/minetest_spawnbuilder.git/snapshot/1.1.0.zip -O $MINETEST_PATH/mods/spawnbuilder.zip
# fi
#
# unzip $MINETEST_PATH/mods/spawnbuilder.zip -d $MINETEST_PATH/mods/spawnbuilder/
# fi
#
# mkdir $WORLD_PATH/worldmods/spawnbuilder
# cp -r $MINETEST_PATH/mods/spawnbuilder/minetest_spawnbuilder-*/* $WORLD_PATH/worldmods/spawnbuilder
#
# echo "
# #Side length of the surface area of the spawn platform
# #If the number is odd, the platform will be centered at spawn.
# #Using a width lower than 3 is not recommended.
# spawnbuilder_width (Spawn platform width) int 5 1
# " > $WORLD_PATH/worldmods/spawnbuilder/mod.conf
## Unified inventory mod
if [ ! -d $MINETEST_PATH/mods/unified_inventory-master ]; then
if [ ! -f $MINETEST_PATH/mods/unified_inventory.zip ]; then
wget https://github.com/minetest-mods/unified_inventory/archive/master.zip -O $MINETEST_PATH/mods/unified_inventory.zip
fi
unzip $MINETEST_PATH/mods/unified_inventory.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/unified_inventory-master $WORLD_PATH/worldmods
## Spawn mod
if [ ! -d $MINETEST_PATH/mods/spawn_command-master ]; then
if [ ! -f $MINETEST_PATH/mods/spawn_command.zip ]; then
wget https://github.com/minetest-mods/spawn_command/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/spawn_command.zip
fi
unzip $MINETEST_PATH/mods/spawn_command.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/spawn_command-master $WORLD_PATH/worldmods
## Jukebok mod
if [ ! -d $MINETEST_PATH/mods/jukebox-master ]; then
if [ ! -f $MINETEST_PATH/mods/jukebox.zip ]; then
wget https://github.com/minetest-mods/jukebox/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/jukebox.zip
fi
unzip $MINETEST_PATH/mods/jukebox.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/jukebox-master $WORLD_PATH/worldmods
## xdecor mod
if [ ! -d $MINETEST_PATH/mods/xdecor-master ]; then
if [ ! -f $MINETEST_PATH/mods/xdecor.zip ]; then
wget https://github.com/minetest-mods/xdecor/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/xdecor.zip
fi
unzip $MINETEST_PATH/mods/xdecor.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/xdecor-master $WORLD_PATH/worldmods
## Display modpack
if [ ! -d $MINETEST_PATH/mods/display_modpack-master ]; then
if [ ! -f $MINETEST_PATH/mods/display_modpack.zip ]; then
wget https://github.com/pyrollo/display_modpack/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/display_modpack.zip
fi
unzip $MINETEST_PATH/mods/display_modpack.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/display_modpack-master $WORLD_PATH/worldmods
## Letters
if [ ! -d $MINETEST_PATH/mods/letters-master ]; then
if [ ! -f $MINETEST_PATH/mods/letters.zip ]; then
wget https://github.com/minetest-mods/letters/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/letters.zip
fi
unzip $MINETEST_PATH/mods/letters.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/letters-master $WORLD_PATH/worldmods
## mydoors
if [ ! -d $MINETEST_PATH/mods/mydoors-master ]; then
if [ ! -f $MINETEST_PATH/mods/mydoors.zip ]; then
wget https://github.com/minetest-mods/mydoors/archive/refs/heads/master.zip -O $MINETEST_PATH/mods/mydoors.zip
fi
unzip $MINETEST_PATH/mods/mydoors.zip -d $MINETEST_PATH/mods
fi
cp -r $MINETEST_PATH/mods/mydoors-master $WORLD_PATH/worldmods

3
minetest/start_server.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
/usr/lib/minetest/minetestserver --port 30001 --world /home/pi/.minetest/worlds/astroport --config /home/pi/.minetest/worlds/astroport/minetest.conf

39
nginx.conf Normal file
View File

@ -0,0 +1,39 @@
server {
root /home/pi/.zen/astrXbian/www/boris;
listen 80 default_server;
server_name _;
# This section can be copied into an existing default setup
location / {
allow all;
index index.php index.html index.htm;
location ~ \.php {
try_files $uri index.php =404;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_read_timeout 1800;
}
error_page 404 = /error/404.html;
try_files $uri $uri/ =404;
location ~ /albumart/* {
expires -1s;
}
}
location /ipfs {
proxy_pass http://127.0.0.1:8181;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /ipns {
proxy_pass http://127.0.0.1:8181;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

View File

@ -1,6 +1,8 @@
<?php
define('HOST', 'tube.copylaradio.com');
define('STATION_NAME', exec('cat ../../../ipfs/.12D*/_xbian.zuid'));
define('HOST', 'astroport');
define('THEME', 'astroport');
/*

View File

@ -1,104 +0,0 @@
:root {
--pink: hsl(338.5, 72.8%, 36.1%);
--canard: hsl(200.8, 100%, 9.6%);
}
body {
background: #121212;
color: white;
margin: 0;
padding: 0;
font-family: Roboto,sans-serif;
}
header {
background: var(--canard);
overflow: hidden;
margin-bottom: 2rem;
}
header * {
font-size: 1.5rem;
padding: 0.5rem;
margin: 0;
color: var(--pink);
text-decoration: none;
}
header span {
color: white;
}
main {
width: 80%;
margin: auto;
}
#videosList {
display: grid;
grid-gap: 1rem 1rem;
grid-auto-flow: row;
grid-template-columns: 322px 322px 322px;
list-style: none;
margin: 0;
padding: 0;
}
#videosList li {
background: var(--canard);
border-color: var(--pink);
border-radius: 0.25rem;
border-width: 1px;
border-style: solid;
overflow: hidden;
}
#videosList .video-title {
padding: 0.5rem 1rem;
}
.video-title,
.video-title a,
.video-title a:visited {
color: white;
font-weight: bold;
text-decoration: none;
}
article {
border-radius: 0.25rem;
background: hsl(200.8, 100%, 9.6%);
width: 58.3%;
margin: auto;
overflow: hidden;
}
article video {
width: 100%;
max-height: 50vh;
background: black;
}
article .video-title {
font-weight: bold;
padding: 1rem 1rem;
font-size: 1.25rem;
margin: 0;
}

1
www/boris/crowdbunker.css Symbolic link
View File

@ -0,0 +1 @@
styles/crowdbunker/style.css

View File

@ -6,7 +6,7 @@
########################################################################
PREFIX="$1"
FILTER="$2"
[[ $PREFIX == "" ]] && PREFIX="Y"
[[ $PREFIX == "" ]] && PREFIX="*"
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) && [[ ! $YOU ]] && echo "ipfs NOT RUNNING. EXIT" && exit 1
# Filter no ipns link

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -0,0 +1,117 @@
:root {
--rouge: hsl(0, 98.8%, 33.5%);
--noir-fonce: hsl(0, 30%, 2.1%);
--noir-moyen: hsl(0, 15%, 3.1%);
--noir-clair: hsl(0, 5%, 7.1%);
}
body {
background: var(--noir-fonce);
color: white;
margin: 0;
padding: 0;
font-family: Roboto,sans-serif;
}
header {
background: var(--noir-clair);
overflow: hidden;
margin-bottom: 2rem;
}
header * {
font-size: 1.5rem;
padding: 0.5rem;
margin: 0;
color: var(--rouge);
text-decoration: none;
}
header span {
color: white;
}
main {
width: 80%;
margin: auto;
}
#videosList {
display: grid;
grid-gap: 1rem 1rem;
grid-auto-flow: row;
grid-template-columns: 322px 322px 322px;
list-style: none;
margin: 0;
padding: 0;
}
#videosList li {
background: var(--noir-clair);
border-color: var(--rouge);
border-radius: 0.25rem;
border-width: 1px;
border-style: solid;
overflow: hidden;
}
#videosList .video-title {
padding: 0.5rem 1rem;
}
.video-title,
.video-title a,
.video-title a:visited {
color: white;
font-weight: bold;
text-decoration: none;
}
article {
border-radius: 0.25rem;
background: var(--noir-clair);
width: 58.3%;
margin: auto;
overflow: hidden;
}
article video {
width: 100%;
max-height: 50vh;
background: black;
}
article .video-title {
font-weight: bold;
padding: 1rem 1rem;
font-size: 1.25rem;
margin: 0;
}
footer {
display: none;
}
#successMsg {
opacity: 0;
transition: opacity 1s;
}

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,104 @@
:root {
--pink: hsl(338.5, 72.8%, 36.1%);
--canard: hsl(200.8, 100%, 9.6%);
}
body {
background: #121212;
color: white;
margin: 0;
padding: 0;
font-family: Roboto,sans-serif;
}
header {
background: var(--canard);
overflow: hidden;
margin-bottom: 2rem;
}
header * {
font-size: 1.5rem;
padding: 0.5rem;
margin: 0;
color: var(--pink);
text-decoration: none;
}
header span {
color: white;
}
main {
width: 80%;
margin: auto;
}
#videosList {
display: grid;
grid-gap: 1rem 1rem;
grid-auto-flow: row;
grid-template-columns: 322px 322px 322px;
list-style: none;
margin: 0;
padding: 0;
}
#videosList li {
background: var(--canard);
border-color: var(--pink);
border-radius: 0.25rem;
border-width: 1px;
border-style: solid;
overflow: hidden;
}
#videosList .video-title {
padding: 0.5rem 1rem;
}
.video-title,
.video-title a,
.video-title a:visited {
color: white;
font-weight: bold;
text-decoration: none;
}
article {
border-radius: 0.25rem;
background: var(--canard);
width: 58.3%;
margin: auto;
overflow: hidden;
}
article video {
width: 100%;
max-height: 50vh;
background: black;
}
article .video-title {
font-weight: bold;
padding: 1rem 1rem;
font-size: 1.25rem;
margin: 0;
}

View File

@ -4,30 +4,43 @@ require_once('functions.php');
$videosList = array();
exec("/bin/bash -c './get_astrxbian_index.sh'", $videos);
// echo '<pre>'; var_dump($videos); echo '</pre>';
// echo shell_exec('whoami'); // Pour savoir quel utilisateur système exécute les scripts PHP
$videos = array_reverse($videos);
// ## film;MDan5TDuT-0;;Le Manuel de Survie en Dictature v1.1 au format papier;;["onelove"];k51qzi5uqu5dl0hnglpzumjezep2avacrtbx7i15v91elcxac4cpd8290kl1hq;720p;/ipfs/QmZp63RXhLm6QASmw1t2R8fu5waSJFmyW7cmdVNxyuJXzg/MDan5TDuT-0_Le%20Manuel%20de%20Survie%20en%20Dictature%20v1.1%20au%20format%20papier.mp4
foreach ($videos as $v) {
list($a, $youtubeID, $c, $videoName, $e, $src, $h, $quality, $videoURI) = explode(";", $v);
list($category, $videoID, $p3, $videoName, $p5, $src, $p7, $definition, $videoURI) = explode(";", $v);
$videoURL = 'https://'. HOST. $videoURI;
$videoEco = 'https://'. HOST. '/ipns/' . $h;
$videoEco = '/ipns/' . $p7;
$mimeType = guessTypeFromFilename($videoURI);
if ($mimeType == 'video/mp4') {
switch ($category) {
case 'youtube':
$thumbURL = sprintf(YOUTUBE_THUMB, $videoID);
break;
case 'film':
$thumbURL = 'styles/astroport/logo.png';
break;
}
$videosList[] = [
'thumbURL' => $thumbURL,
'category' => $category,
'mime' => $mimeType,
'url' => $videoURL,
'eco' => $videoEco,
'uri' => $videoURI,
'name' => $videoName,
'youtubeID' => $youtubeID
'youtubeID' => $videoID
];
}
@ -37,22 +50,22 @@ foreach ($videos as $v) {
?><!DOCTYPE html>
<html>
<head>
<title>Astroport/School: WWW/IPFS - Interfaces et API - </title>
<link rel="stylesheet" href="crowdbunker.css" type="text/css" />
<link rel="icon" type="image/png" href="./astrocrowdbunker.png" />
<title>Astroport "<?php echo STATION_NAME; ?></title>
<link rel="stylesheet" href="styles/<?php echo THEME; ?>/style.css" type="text/css" />
<link rel="icon" type="image/png" href="./styles/<?php echo THEME; ?>/logo.png" />
</head>
<body>
<header>
<h1>
<span><a href="https://git.p2p.legal/axiom-team/astrXbian/src/branch/master/www/boris">~/.zen/AstXbian/www/boris</a></span> × <span><a href="/ipfs/QmbmjSBWVNSSjJsMmCeFuFtQiuWyGg6iUGLRyvK7TUkFN8">Voir le code de la page</a></span>
<a href="youtube.php">Astroport "<span><?php echo STATION_NAME; ?></span>"</a>
</h1>
</header>
<h2>
<span>le code est libre</span> × <span>voyez le évoluer</span>
</h2>
<main>
<?php
// echo '<pre>'; var_dump($videosList); echo '</pre>';
echo '<ul id="videosList">';
foreach ($videosList as $video) {
@ -63,12 +76,12 @@ foreach ($videosList as $video) {
echo '
<a href="'. $href .'">
<img src="'. sprintf(YOUTUBE_THUMB, $video['youtubeID']) . '" alt="'. $video['name'] . '" />
<a href="'. $video['eco'] .'">
<img src="'. $video['thumbURL'] . '" alt="'. $video['name'] . '" />
</a>
<p class="video-title">
<a href="'. $video['eco'] .'">
<a href="'. $href .'">
' . $video['name'] . '
</a>
</p>';
@ -80,6 +93,13 @@ echo '</ul>';
?>
</main>
<footer>
<p>
<span>le code est libre</span> × <span>voyez le évoluer</span>
</p>
<p>
<span><a href="https://git.p2p.legal/axiom-team/astrXbian/src/branch/master/www/boris">~/.zen/AstXbian/www/boris</a></span> × <span><a href="/ipfs/QmbmjSBWVNSSjJsMmCeFuFtQiuWyGg6iUGLRyvK7TUkFN8">Voir le code de la page</a></span>
</p>
</footer>
</body>
</html>

View File

@ -2,22 +2,23 @@
require_once('functions.php');
require_once('conf.php');
$videoURL = 'https://'. HOST. htmlentities($_GET['uri']);
//$videoURL = 'http://'. HOST;
$videoURL = htmlentities($_GET['uri']);
$videoName = htmlentities(urldecode($_GET['name']));
$videoMIME = htmlentities($_GET['mime']);
?><!DOCTYPE html>
<html>
<head>
<title>AstroCrowdBuster</title>
<link rel="stylesheet" href="crowdbunker.css" type="text/css" />
<link rel="icon" type="image/png" href="/astrocrowdbunker.png" />
<title><?php echo $videoName; ?> - Astroport "<?php echo STATION_NAME; ?></title>
<link rel="stylesheet" href="styles/<?php echo THEME; ?>/style.css" type="text/css" />
<link rel="icon" type="image/png" href="./styles/<?php echo THEME; ?>/logo.png" />
</head>
<body>
<header>
<h6>
<a href="youtube.php"><span>Astroport</span> × <span>Crowdbunker</span></a>
<a href="youtube.php">Astroport "<span><?php echo STATION_NAME; ?></span>"</a>
</h6>
</header>

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
<title>${TITLE} in Astroport</title>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content="7;URL=http://astroport/ipns/${IPNSLINK}/${G1PUB}/">
<link rel='stylesheet' href='/styles/astroport/style.css' type='text/css' />
<link rel='icon' type='image/png' href='/styles/astroport/logo.png' />
</head>
<body>
<header>
<h6>
<a href='/'><span>ASTROPORT</span> <q>${XZUID}</q></a>
</h6>
</header>
<main>
<article>
<h1>${TITLE}</h1>
<p>Lancement de la video dans 7 secondes...</p>
<p class="pubkey-and-copy-button">
Ce fichier vous est servi par une station amie. Faites lui un don pour la remercier&nbsp;:
<input type="text" id="pubkey" readonly value="${G1PUB}" />
<button id="copy">Tip !</button>
</p>
<p id="successMsg">
La clef de la station amie est maintenant copiée dans le presse-papier. Vous pouvez la coller dans le client Ğ1 de votre choix (Cesium par exemple) afin de faire votre don 😉
</p>
<script>
function copy() {
var copyText = document.querySelector("input#pubkey");
copyText.select();
document.execCommand("copy");
var successMsg = document.querySelector("#successMsg");
successMsg.style.opacity = "1";
var copyButton = document.querySelector("button#copy");
copyButton.style.animation = "none";
}
document.querySelector("button#copy").addEventListener("click", copy);
</script>
</article>
</main>
</body>
</html>

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<title>${TITLE} in Astroport</title>
<meta charset="UTF-8">
<link rel='stylesheet' href='/styles/astroport/style.css' type='text/css' />
<link rel='icon' type='image/png' href='/styles/astroport/logo.png' />
</head>
<body>
<header>
<h6>
<a href='http://astroport/'><span>ASTROPORT</span> <q>${XZUID}</q></a>
</h6>
</header>
<main>
<article>
<video autoplay="autoplay" controls>
<source src="/ipfs/${IPFSREPFILEID}/${URLENCODE_FILE_NAME}">
<a href="/ipfs/${IPFSREPFILEID}/${URLENCODE_FILE_NAME}">${TITLE}</a>
</video>
<h1 class="video-title">
${TITLE}
</h1>
</article>
</main>
</body>
</html>

View File

@ -86,40 +86,13 @@ do
### IPNS LINK CAN EVOLVE (REFRESH EVERY 12 H TO MAINTAIN ALIVE IN THE SWARM) # TODO : Use templating
### This index.html is ipns link root, 1st welcome page for MEDIAKEY -> *** Redirect to CONTRACTS processing HERE ***
echo "<!DOCTYPE html>
<html>
<head>
<title>$TITLE in Astroport</title>
<meta charset=\"UTF-8\">
<link rel='stylesheet' href='/ipfs/QmPC5MTqt4do7emMUV4z7feYbjSGoX4kdDYVKB6jU3rEKk/crowdbunker.css' type='text/css' />
<link rel='icon' type='image/png' href='/ipfs/QmPn3KpF4vNSkdXdk3eiWUVfNoUiCYfiGWxG1Zh9asjhKs/astrocrowdbunker.png' />
<script type='text/javascript' src='/g1scan_fichiers/adapter.js'></script>
<script type='text/javascript' src='/g1scan_fichiers/vue.js'></script>
<script type='text/javascript' src='/ipfs/QmcmuVxnsxpupW5Es7ipgdK6KrG8SCgqFXMKeaBsHyJQct/instascan.js'></script>
</head>
<body>
<header>
<h6>
<a href='https://astroport.com'><span>ASTROPORT</span> × <span> ${mediakey}</span></a>
</h6>
</header>
<main>
<article><h2>$TITLE</h2>
<div class='preview-container'>
<video id='preview' autoplay='autoplay' style='transform: scaleX(-1);' class='active'></video>
</div>
<br>Recevez de la JUNE. Scannez le QRCODE d'un simple G1 portefeuille (<a href='https://cesium.app'>Votre portefeuille est GRATUIT</a>)<br>
<h1 class='video-title'><a href='https://tube.copylaradio.com/ipns/$IPNSLINK/${G1PUB}/'>Cliquez ici pour lancer la lecture streaming de cette vidéo</a></h1>
</article>
</main>
<center><br>Astroport Video Club & Datacenter décentralisé. P2P Libre & Légal.<br>
<br>Voici le lien Gchange de la Station qui a ajouté ce média. Un DON = Merci
<br><a target='tube' href=\"https://www.gchange.fr/#/app/user/${G1PUB}/\"><img src=\"https://g1sms.fr/g1barre/image.php?pubkey=${G1PUB}&target=1000&title=Un%20DON%20Merci%20$XZUID&node=g1.duniter.org&start_date=2021-06-21&display_pubkey=true&display_qrcode=true&progress_color=ff07a4\"></a></center>
<script type='text/javascript' src='/g1scan_fichiers/app.js'></script>
</body>
</html>" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/index.html
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step2.html \
| sed "s/\${IPNSLINK}/$IPNSLINK/g" \
| sed "s/\${XZUID}/$XZUID/g" \
| sed "s/\${G1PUB}/$G1PUB/g" \
| sed "s/\${TITLE}/$TITLE/g" \
> ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/index.html
########################################################################
### Scenario are G1PUB subdivized. Thus each friend can establish own contract
@ -142,40 +115,13 @@ do
[[ "$FILETYPE" == "mkv" ]] && MIMETYPE="video/x-matroska"
[[ "$FILETYPE" == "mp3" ]] && MIMETYPE="audio/mpeg" && HTMLTAG="audio"
echo "<!DOCTYPE html>
<html>
<head>
<title>$TITLE in Astroport served by $G1PUB</title>
<meta charset=\"UTF-8\">
<link rel='stylesheet' href='/ipfs/QmPC5MTqt4do7emMUV4z7feYbjSGoX4kdDYVKB6jU3rEKk/crowdbunker.css' type='text/css' />
<link rel='icon' type='image/png' href='/ipfs/QmPn3KpF4vNSkdXdk3eiWUVfNoUiCYfiGWxG1Zh9asjhKs/astrocrowdbunker.png' />
</head>
<body>
<header>
<h5>
<a href=\"https://copylaradio.com\"><span>CopyLaRadio : Joignez vous aux %MAKER de Stations Astroport</span></a>
</h5>
<h6>
<a href='https://www.gchange.fr/#/app/market/lg?q=astroport'><span>astrXbian</span> × <span> en DEMO sur Gchange</span></a>
</h6>
</header>
<main>
<article>
<$HTMLTAG controls>
<source src=\"$TUBELINK\" type=\"$MIMETYPE\">
</$HTMLTAG>
<h1 class='video-title'><a href=\"$LOCALTUBELINK\">$TITLE $MIMETYPE (Conservez OFFLINE)</a></h1>
<h1 class='video-title'><a target='copylaradio' href='https://www.copylaradio.com/makers''>Recrutement Astrocrew! Offres de Stage, Job - Astroport - Exploration P2P</a> ?</h1>
</article>
</main>
<center><br>Ce media possède un G1 portefeuille avec lequel il paye son hébergement.
<br>Voici les dons reçus par (${mediakey}). Ce média vous plait? Flashez ce QRCode.<br>
<br>
<br><img src=\"https://g1sms.fr/g1barre/image.php?pubkey=${MEDIAPUBKEY}&target=1000&title=DONS%20${mediakey}&node=g1.duniter.org&start_date=2021-06-21&display_pubkey=true&display_qrcode=true&progress_color=ff07a4\">
<br><img width=222 src=\"https://tube.copylaradio.com/ipns/$IPNSLINK/QR.png\"><br>${MEDIAPUBKEY} = ${ZENBALANCE} ZEN
<br><br>Le Zen est un Token de la G1 (1G1 = 100ZEN)</center>
</body>
</html>" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step3.html \
| sed "s/\${TITLE}/$TITLE/g" \
| sed "s/\${XZUID}/$XZUID/g" \
| sed "s/\${IPFSREPFILEID}/$IPFSREPFILEID/g" \
| sed "s/\${URLENCODE_FILE_NAME}/$URLENCODE_FILE_NAME/g" \
> ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/index.html
if [[ "$source" == "YOUTUBE" ]]
then

View File

@ -294,63 +294,28 @@ rm /tmp/.ipfsid
IPNSLINK=$(ipfs key list -l | grep ${MEDIAKEY} | cut -d ' ' -f 1)
## FIRST REDIRECT PAGE ${MEDIAKEY}/index.html
# https://tube.copylaradio.com/ipns/$IPNSLINK
echo "<!DOCTYPE html>
<html>
<head>
<title>$TITLE in Astroport</title>
<meta charset=\"UTF-8\">
<meta http-equiv=\"Refresh\" content=\"10;URL=https://tube.copylaradio.com/ipns/$IPNSLINK/${G1PUB}/\">
<link rel='stylesheet' href='/crowdbunker.css' type='text/css' />
<link rel='icon' type='image/png' href='/astrocrowdbunker.png' />
</head>
<body>
<header>
<h6>
<a href='https://astroport.com'><span>ASTROPORT</span> × <span> DEMO</span></a>
</h6>
</header>
<main>
<article><h2>$TITLE</h2>
<a href=\"$LOCALTUBELINK\">LECTURE LOCALHOST</a>!<br><br>Lancement de la video dans 10 secondes ...<br>
<h1 class='video-title'>Ce service est disponible sur <a href='https://copylaradio.com'>astrXbian</a> BETA Live TEstNET</h1>
</article>
</main>
<center><br>Démonstration Streaming du Datacenter P2P Libre et Légal.<br>
<br>Les dons au portefeuille du Media (${MEDIAKEY}) rapportent à son Auteur, et payent son hébergement.
<br>
<br><a target='tube' href=\"https://www.gchange.fr/#/app/user/${G1PUB}/\"><img width=222 src=\"https://tube.copylaradio.com/ipns/$IPNSLINK/QR.png\"></a></center>
</body>
</html>" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/index.html
#envsubst < ./www/boris/youtube_watch_step2.html > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/index.html
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step2.html \
| sed "s/\${IPNSLINK}/$IPNSLINK/g" \
| sed "s/\${XZUID}/$XZUID/g" \
| sed "s/\${G1PUB}/$G1PUB/g" \
| sed "s/\${TITLE}/$TITLE/g" \
> ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/index.html
## SECOND REDIRECT PAGE ${MEDIAKEY}/${G1PUB}/index.html
# https://tube.copylaradio.com/ipns/$IPNSLINK/${G1PUB}/
echo "<!DOCTYPE html>
<html>
<head>
<title>$TITLE in Astroport</title>
<meta charset=\"UTF-8\">
<meta http-equiv=\"Refresh\" content=\"10;URL=http://127.0.0.1:8181/ipfs/$IPFSREPFILEID/$URLENCODE_FILE_NAME\">
<link rel='stylesheet' href='/crowdbunker.css' type='text/css' />
<link rel='icon' type='image/png' href='/astrocrowdbunker.png' />
</head>
<body>
<header>
<h5>
<a href=\"http://127.0.0.1:8181/ipfs/$IPFSREPFILEID/$URLENCODE_FILE_NAME\"><span>Lien direct qui fonctionne depuis votre Station Astroport/KODI</span></a>!
</h5>
</header>
<main>
<article><h2>$TITLE</h2>
<br>Accédez immédiatement à cette vidéo depuis votre station Astroport/KODI ...<br>
<h1 class='video-title'>Essayez <a href='https://copylaradio.com'>astrXbian</a> Le BETA Live TEstNET Astroport</h1>
</article>
</main>
<center><br>Service Video Club / Datacenter P2P Libre et Légal.<br>
<br>Les dons au portefeuille du Media (${MEDIAKEY}) rapportent à son Auteur, et payent son hébergement.
<br>
<br><a target='tube' href=\"https://www.gchange.fr/#/app/user/${G1PUB}/\"><img width=222 src=\"https://tube.copylaradio.com/ipns/$IPNSLINK/QR.png\"></a></center>
</body>
</html>" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/index.html
#envsubst < ../www/boris/youtube_watch_step3.html > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/index.html
cat /home/$YOU/.zen/astrXbian/www/boris/youtube_watch_step3.html \
| sed "s/\${TITLE}/$TITLE/g" \
| sed "s/\${XZUID}/$XZUID/g" \
| sed "s/\${IPFSREPFILEID}/$IPFSREPFILEID/g" \
| sed "s/\${URLENCODE_FILE_NAME}/$URLENCODE_FILE_NAME/g" \
> ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/index.html
# echo "<meta http-equiv=\"Refresh\" content=\"0;URL=http://127.0.0.1:8181/ipfs/$IPFSREPFILEID/$URLENCODE_FILE_NAME\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${MEDIAKEY}/${G1PUB}/index.html
########################################################################
## MODIFY INTO "./zen/ipns_TAG_refresh.sh" (add crypto/contracts there)