Contexte : RPC, le protocole des vieux cons [1]
Parfois, on dispose d’un wiki sur son réseau local et l’on souhaiterait pouvoir publier publiquement certains articles plutôt que d’autres. On aimerait éviter également installer un autre gestionnaire de contenu pour animer le site public.
Les avantages sont de pouvoir publier aléatoirement certains articles sans s’occuper d’une gestion des droits et de la sécurité du wiki s’il avait été exposé publiquement à internet.
Je vous propose donc, à travers cet article, d’utiliser les fonctions XML-RPC disponibles avec le wiki Dokuwiki. Ces fonctions d’appels de procédures distantes (fr.wikipedia.org/wiki/Remote_procedure_call) sont disponibles sur la plupart des wikis, blogs et CMS les plus répandus.
Pour l’application frontale publique, nous utiliserons l’excellent micro framework Bottle Python, qui dispose d’une bonne documentation. Il permettra de comprendre rapidement le code sans s’encombrer de concepts inutiles et/ou trop abstraits inhérents à certains frameworks plus complets.
Code de l’exemple
Listing:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'julien@hautefeuille.eu'
__version__ = '0.1'
__license__ = 'BSD'
import bottle
import subprocess
import shlex
TITLE_SITE = "Le Jardinet"
COPYRIGHT = TITLE_SITE + """ - Site à vocation informatique en perpétuelle reconstruction"""
def get_audit():
cmdl = "python dokuwikixmlrpc.py -u bottle -w"
cmdl = cmdl + "https://192.168.0.3/wiki/ -p lemotdepasse --html"
cmdl = cmdl + " attaque_de_reseaux_wifi_wep"
cmdl.encode('ascii')
args = shlex.split(cmdl)
process = subprocess.Popen(args, shell=False,stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
com = process.communicate()
return com[0]
def get_python():
cmdl = "python dokuwikixmlrpc.py -u bottle -w"
cmdl = cmdl + "https://192.168.0.3/wiki/ -p lemotdepasse --html"
cmdl = cmdl + " python"
cmdl.encode('ascii')
args = shlex.split(cmdl)
process = subprocess.Popen(args, shell=False,stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
com = process.communicate()
return com[0]
def get_diy():
cmdl = "python dokuwikixmlrpc.py -u bottle -w"
cmdl = cmdl + "https://192.168.0.3/wiki/ -p lemotdepasse --html"
cmdl = cmdl + " electronique_bricolage_diy"
cmdl.encode('ascii')
args = shlex.split(cmdl)
process = subprocess.Popen(args, shell=False,stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
com = process.communicate()
return com[0]
@bottle.route('/')
@bottle.view('mainview')
def index():
return dict(title=TITLE_SITE, copyright=COPYRIGHT,audit=get_audit(), python=get_python(), diy=get_diy())
if "__main__" == __name__:
bottle.run(host='localhost', port=8080, server='cherrypy')
[1] | Vieux cons dont je fais partie ;) |
[2] | Comme toute architecture, elle est soumise aux compromis. |