65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
|
#!/home/subnixr/.virtualenvs/ciclostile/bin/python3
|
||
|
import os
|
||
|
from flask import Flask, send_from_directory, render_template, request
|
||
|
from flask_httpauth import HTTPDigestAuth
|
||
|
import ciclostile
|
||
|
|
||
|
working_dir = os.getcwd()
|
||
|
|
||
|
target_path, template_path, markdown_path = [
|
||
|
os.path.join(working_dir, folder_name)
|
||
|
for folder_name in ['target', 'templates', 'markdown']
|
||
|
]
|
||
|
|
||
|
app = Flask(__name__)
|
||
|
app.config['SECRET_KEY'] = 'secret key here'
|
||
|
auth = HTTPDigestAuth()
|
||
|
|
||
|
users = {
|
||
|
'admin': 'password',
|
||
|
}
|
||
|
|
||
|
|
||
|
@auth.get_password
|
||
|
def get_pw(username):
|
||
|
if username in users:
|
||
|
return users.get(username)
|
||
|
return None
|
||
|
|
||
|
|
||
|
@app.route('/assets/<path:path>')
|
||
|
def assets(path):
|
||
|
assets_path = os.path.join(target_path, 'assets')
|
||
|
return send_from_directory(assets_path, path)
|
||
|
|
||
|
|
||
|
@app.route('/<string:page_name>')
|
||
|
@app.route('/<string:page_name>.html')
|
||
|
def page(page_name):
|
||
|
return ciclostile.render(page_name, markdown_path, template_path)
|
||
|
|
||
|
|
||
|
@app.route('/<string:page_name>/edit')
|
||
|
@auth.login_required
|
||
|
def edit(page_name):
|
||
|
md_text = ciclostile.read_markdown(page_name, markdown_path)
|
||
|
return render_template('edit.html', **locals())
|
||
|
|
||
|
|
||
|
@app.route('/edit', methods=['POST'])
|
||
|
@auth.login_required
|
||
|
def edit_actions():
|
||
|
page_name = request.form['page_name']
|
||
|
md_text = request.form['md_text']
|
||
|
|
||
|
if request.form['action'] == 'preview':
|
||
|
return ciclostile.render_from_text(md_text, template_path)
|
||
|
|
||
|
if request.form['action'] == 'save':
|
||
|
ciclostile.save(md_text, page_name, markdown_path)
|
||
|
return page(page_name)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
app.run()
|