Quantcast
Channel: AFPy's Planet
Viewing all articles
Browse latest Browse all 3409

[hautefeuille] Publier instantanément un wiki local sur internet grâce à Bottle Python et le protocole XML-RPC

$
0
0

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 (http://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.

Modules utilisés

Nous utiliserons 4 modules pour réaliser cette tâche :

  • dokuwikixmlrpc est le module qui implémente l’interface XML-RPC de Dokuwiki,
  • bottle comme module enveloppant pour notre application orientée web,
  • import subprocess pour lancer les commandes,
  • import shlex comme analyseur syntaxique.

Architecture physique proposée [2]

pictures/dokuwiki_schema.png

Captures

La version publique

pictures/wiki.png

La version locale

pictures/public.png

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.

Viewing all articles
Browse latest Browse all 3409

Trending Articles