66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
import pytz
|
|
from flask import Blueprint, abort, render_template
|
|
from flask.globals import request
|
|
from flask_login import current_user, login_required
|
|
from flask_migrate import current
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import IntegerField, SelectField, SubmitField
|
|
from wtforms.validators import DataRequired, NumberRange
|
|
from wtforms.widgets import NumberInput
|
|
|
|
from .db import APIKey, db
|
|
|
|
blueprint = Blueprint('settings', __name__)
|
|
|
|
|
|
class SettingsForm(FlaskForm):
|
|
timezone = SelectField(
|
|
'Timezone', choices=list(map(lambda x: (x, x.replace("_", " ")), pytz.all_timezones)),
|
|
validators=[
|
|
DataRequired()
|
|
])
|
|
|
|
start_of_day = IntegerField(
|
|
'Start of day hour',
|
|
widget=NumberInput(min=0, max=23),
|
|
validators=[
|
|
NumberRange(min=0, max=23)
|
|
]
|
|
)
|
|
|
|
submit = SubmitField('Save')
|
|
|
|
|
|
@blueprint.route('/settings', methods=['GET', 'POST'])
|
|
@login_required
|
|
def settings():
|
|
form = SettingsForm(obj=current_user)
|
|
if form.validate_on_submit():
|
|
current_user.timezone = form.timezone.data
|
|
current_user.start_of_day = form.start_of_day.data
|
|
db.session.commit()
|
|
return render_template('settings.html', form=form, success=True)
|
|
|
|
return render_template('settings.html', form=form)
|
|
|
|
|
|
@blueprint.route('/settings/keys', methods=['GET', 'POST'])
|
|
@login_required
|
|
def api_keys():
|
|
apps = [a[0] for a in db.session.query(APIKey.app_name).filter(
|
|
APIKey.user == current_user).group_by(APIKey.app_name).all()]
|
|
keys = {app_name: APIKey.query.filter(
|
|
APIKey.user_id == current_user.id, APIKey.app_name == app_name).all() for app_name in apps}
|
|
return render_template('api_keys.html', apps=sorted(apps), keys=keys)
|
|
|
|
|
|
@blueprint.route('/settings/keys/<key_id>/delete', methods=['GET', 'POST'])
|
|
@login_required
|
|
def api_key_delete(key_id):
|
|
k = APIKey.query.get_or_404(key_id)
|
|
if k.user_id != current_user.id:
|
|
abort(403)
|
|
|
|
if request.method == 'GET':
|
|
return render_template('')
|