-
Notifications
You must be signed in to change notification settings - Fork 0
/
fwiki.py
119 lines (87 loc) · 3.74 KB
/
fwiki.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from flask import Flask, request, render_template, redirect, g, url_for
from markupsafe import Markup, escape
import sqlite3 as sqlite
import markdown
import database
app = Flask(__name__)
import config
@app.route('/', defaults={ 'title' : 'Main_Page' })
@app.route('/<title>')
def route_article(title):
title = title.replace('_', ' ')
if not database.init():
return error(app.config['db_err_title'], app.config['db_err_msg']), 503
article = database.fetch('SELECT * FROM articles WHERE title = ? AND revision = 0', [title])
database.close()
if article != None:
return render_template('article.html', title=title, content=article['content'])
else:
return render_template('article.html', title=title, content='There is currently no text on this page')
@app.route('/<title>/revisions', defaults={ 'rev' : "list" })
@app.route('/<title>/revisions/<rev>')
def route_revisions(title, rev):
title = title.replace('_', ' ')
if not database.init():
return error(app.config['db_err_title'], app.config['db_err_msg']), 503
if not database.fetch('SELECT 1 from articles WHERE title = ?', [title]):
return redirect('/%s' % title)
if rev == "list":
revisions = database.fetch_all('SELECT * FROM articles WHERE title = ?', [title])
return render_template('revision.html', rev="list", title=title, revisions=revisions)
elif rev != 0:
article = database.fetch('SELECT * FROM articles WHERE title = ? AND revision = ?', [title, rev])
return render_template('revision.html', rev=rev, title=title, content=article['content'])
else:
return redirect('/%s' % title)
@app.route('/<title>/edit')
def route_edit(title):
title = title.replace('_', ' ')
if not database.init():
return error(app.config['s_db_title'], app.config['s_db_msg']), 503
article = database.fetch('SELECT * FROM articles WHERE title = ?', [escape(title)])
database.close()
if article != None:
return render_template('edit.html', title=article['title'], id=article['id'], content=article['content'])
else:
return render_template('edit.html', title=title, id=0, content='')
@app.route('/do/edit', methods=['POST'])
def route_do_edit():
title = form('title')
id = int(form('id'))
content = form('content')
hpot = form('email')
if title is None or id is None or content is None or hpot is not "":
return 'Error'
if app.config['locked']:
if form('pass') != app.config['pass']:
return redirect('/')
if not database.init():
return error(app.config['db_err_title'], app.config['db_err_msg']), 503
if id == 0:
database.query('INSERT INTO articles VALUES(NULL, ?, ?, 0)', [escape(title), escape(content)])
else:
database.query("UPDATE articles SET revision = 1 WHERE title=?", [title])
database.query("INSERT INTO articles VALUES(NULL, ?, ?, 0)", [escape(title), escape(content)])
database.close()
return redirect(url_for('route_article', title=title))
@app.route('/random')
def route_random():
database.init()
row = database.fetch("SELECT title FROM articles WHERE title!='Main Page' ORDER BY RANDOM() LIMIT 1")
database.close()
if row != None:
title = row['title'].replace(' ', '_')
return redirect('/' + title)
else:
return redirect('/')
def form(name):
if not name in request.form:
return None
return request.form[name]
def error(error, message):
return render_template('error.html', error=error, message=message)
def static_url(file):
return url_for('static', filename=file)
@app.context_processor
def util_processor():
return dict(markdown_parse=markdown.markdown, static_url=static_url)