Mercurial > wikked
annotate 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 |
rev | line source |
---|---|
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 from flask import request, abort, jsonify |
459
6c8f90e47338
core: Use new import syntax for Flask plugins.
Ludovic Chabant <ludovic@chabant.com>
parents:
451
diff
changeset
|
2 from flask_login import current_user |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 from wikked.web import app, get_wiki |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 from wikked.webimpl import url_from_viewarg |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
5 from wikked.webimpl.decorators import requires_permission |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 from wikked.webimpl.history import ( |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 get_site_history, get_page_history, |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 read_page_rev, diff_page_revs) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 @app.route('/api/site-history') |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
12 @requires_permission('wikihistory') |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 def api_site_history(): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 user = current_user.get_id() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 after_rev = request.args.get('rev') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 result = get_site_history(wiki, user, after_rev=after_rev) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 return jsonify(result) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 @app.route('/api/history/') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 def api_main_page_history(): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 return api_page_history(wiki.main_page_url.lstrip('/')) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 @app.route('/api/history/<path:url>') |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
28 @requires_permission('history') |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 def api_page_history(url): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 user = current_user.get_id() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 url = url_from_viewarg(url) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 result = get_page_history(wiki, user, url) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 return jsonify(result) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 @app.route('/api/revision/<path:url>') |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
38 @requires_permission('history') |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 def api_read_page_rev(url): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 user = current_user.get_id() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 url = url_from_viewarg(url) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 rev = request.args.get('rev') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 if rev is None: |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 abort(400) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 result = read_page_rev(wiki, user, url, rev=rev) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 return jsonify(result) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 @app.route('/api/diff/<path:url>') |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
51 @requires_permission('history') |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 def api_diff_page(url): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 user = current_user.get_id() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 url = url_from_viewarg(url) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 rev1 = request.args.get('rev1') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 rev2 = request.args.get('rev2') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 raw = request.args.get('raw') |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 if rev1 is None: |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 abort(400) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 result = diff_page_revs(wiki, user, url, |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 rev1=rev1, rev2=rev2, raw=raw) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 return jsonify(result) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 @app.route('/api/revert/<path:url>', methods=['POST']) |
451
6cd51ea6dfcf
auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents:
341
diff
changeset
|
67 @requires_permission('revert') |
341
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 def api_revert_page(url): |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 # TODO: only users with write access can revert. |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 if 'rev' not in request.form: |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 abort(400) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 rev = request.form['rev'] |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 author = request.remote_addr |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 if 'author' in request.form and len(request.form['author']) > 0: |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 author = request.form['author'] |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 message = 'Reverted %s to revision %s' % (url, rev) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 if 'message' in request.form and len(request.form['message']) > 0: |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 message = request.form['message'] |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 url = url_from_viewarg(url) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 page_fields = { |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 'rev': rev, |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 'author': author, |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 'message': message |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 } |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 wiki = get_wiki() |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 wiki.revertPage(url, page_fields) |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 result = {'reverted': 1} |
37f426e067c4
Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 return jsonify(result) |