view wikked/api/history.py @ 459:6c8f90e47338

core: Use new import syntax for Flask plugins.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 30 Sep 2018 21:38:44 -0700
parents 6cd51ea6dfcf
children
line wrap: on
line source

from flask import request, abort, jsonify
from flask_login import current_user
from wikked.web import app, get_wiki
from wikked.webimpl import url_from_viewarg
from wikked.webimpl.decorators import requires_permission
from wikked.webimpl.history import (
        get_site_history, get_page_history,
        read_page_rev, diff_page_revs)


@app.route('/api/site-history')
@requires_permission('wikihistory')
def api_site_history():
    wiki = get_wiki()
    user = current_user.get_id()
    after_rev = request.args.get('rev')
    result = get_site_history(wiki, user, after_rev=after_rev)
    return jsonify(result)


@app.route('/api/history/')
def api_main_page_history():
    wiki = get_wiki()
    return api_page_history(wiki.main_page_url.lstrip('/'))


@app.route('/api/history/<path:url>')
@requires_permission('history')
def api_page_history(url):
    wiki = get_wiki()
    user = current_user.get_id()
    url = url_from_viewarg(url)
    result = get_page_history(wiki, user, url)
    return jsonify(result)


@app.route('/api/revision/<path:url>')
@requires_permission('history')
def api_read_page_rev(url):
    wiki = get_wiki()
    user = current_user.get_id()
    url = url_from_viewarg(url)
    rev = request.args.get('rev')
    if rev is None:
        abort(400)
    result = read_page_rev(wiki, user, url, rev=rev)
    return jsonify(result)


@app.route('/api/diff/<path:url>')
@requires_permission('history')
def api_diff_page(url):
    wiki = get_wiki()
    user = current_user.get_id()
    url = url_from_viewarg(url)
    rev1 = request.args.get('rev1')
    rev2 = request.args.get('rev2')
    raw = request.args.get('raw')
    if rev1 is None:
        abort(400)
    result = diff_page_revs(wiki, user, url,
                            rev1=rev1, rev2=rev2, raw=raw)
    return jsonify(result)


@app.route('/api/revert/<path:url>', methods=['POST'])
@requires_permission('revert')
def api_revert_page(url):
    # TODO: only users with write access can revert.
    if 'rev' not in request.form:
        abort(400)
    rev = request.form['rev']

    author = request.remote_addr
    if 'author' in request.form and len(request.form['author']) > 0:
        author = request.form['author']

    message = 'Reverted %s to revision %s' % (url, rev)
    if 'message' in request.form and len(request.form['message']) > 0:
        message = request.form['message']

    url = url_from_viewarg(url)
    page_fields = {
            'rev': rev,
            'author': author,
            'message': message
            }
    wiki = get_wiki()
    wiki.revertPage(url, page_fields)
    result = {'reverted': 1}
    return jsonify(result)