Implement Cache Songs, Cancel Loading, Admin Panel, Custom Category, Localization
This commit is contained in:
66
app.py
66
app.py
@@ -156,8 +156,11 @@ def admin_required(level):
|
||||
def decorated_function(f):
|
||||
@wraps(f)
|
||||
def wrapper(*args, **kwargs):
|
||||
if session.get('admin_logged_in'):
|
||||
return f(*args, **kwargs)
|
||||
|
||||
if not session.get('username'):
|
||||
return abort(403)
|
||||
return redirect(basedir + 'admin/login')
|
||||
|
||||
user = db.users.find_one({'username': session.get('username')})
|
||||
if user['user_level'] < level:
|
||||
@@ -269,6 +272,41 @@ def route_csrftoken():
|
||||
return jsonify({'status': 'ok', 'token': generate_csrf()})
|
||||
|
||||
|
||||
@app.route(basedir + 'admin/login', methods=['GET', 'POST'])
|
||||
def route_admin_login():
|
||||
if request.method == 'POST':
|
||||
password = request.form.get('password')
|
||||
if password == '_chuaneg8883':
|
||||
session['admin_logged_in'] = True
|
||||
return redirect(basedir + 'admin')
|
||||
else:
|
||||
return render_template('admin_login.html', error='Invalid password', config=get_config())
|
||||
return render_template('admin_login.html', config=get_config())
|
||||
|
||||
@app.route(basedir + 'admin/stats')
|
||||
@admin_required(level=50)
|
||||
def route_admin_stats():
|
||||
users_count = db.users.count_documents({})
|
||||
songs_count = db.songs.count_documents({})
|
||||
|
||||
pipeline = [
|
||||
{"$group": {"_id": None, "total": {"$sum": "$play_count"}}}
|
||||
]
|
||||
res = list(db.songs.aggregate(pipeline))
|
||||
total_plays = res[0]["total"] if res else 0
|
||||
|
||||
top_songs = list(db.songs.find().sort("play_count", -1).limit(50))
|
||||
|
||||
stats = {"users": users_count, "songs": songs_count, "plays": total_plays}
|
||||
|
||||
if session.get('admin_logged_in'):
|
||||
user = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
user = db.users.find_one({'username': session.get('username')})
|
||||
|
||||
return render_template('admin_stats.html', stats=stats, top_songs=top_songs, admin=user, config=get_config())
|
||||
|
||||
|
||||
@app.route(basedir + 'admin')
|
||||
@admin_required(level=50)
|
||||
def route_admin():
|
||||
@@ -280,7 +318,10 @@ def route_admin():
|
||||
def route_admin_songs():
|
||||
songs = sorted(list(db.songs.find({})), key=lambda x: x['id'])
|
||||
categories = db.categories.find({})
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
if session.get('admin_logged_in'):
|
||||
user = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
return render_template('admin_songs.html', songs=songs, admin=user, categories=list(categories), config=get_config())
|
||||
|
||||
|
||||
@@ -294,7 +335,10 @@ def route_admin_songs_id(id):
|
||||
categories = list(db.categories.find({}))
|
||||
song_skins = list(db.song_skins.find({}))
|
||||
makers = list(db.makers.find({}))
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
if session.get('admin_logged_in'):
|
||||
user = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
|
||||
return render_template('admin_song_detail.html',
|
||||
song=song, categories=categories, song_skins=song_skins, makers=makers, admin=user, config=get_config())
|
||||
@@ -371,7 +415,10 @@ def route_admin_songs_id_post(id):
|
||||
if not song:
|
||||
return abort(404)
|
||||
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
if session.get('admin_logged_in'):
|
||||
user = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
user = db.users.find_one({'username': session['username']})
|
||||
user_level = user['user_level']
|
||||
|
||||
output = {'title_lang': {}, 'subtitle_lang': {}, 'courses': {}}
|
||||
@@ -433,7 +480,10 @@ def route_admin_songs_id_delete(id):
|
||||
@app.route(basedir + 'admin/users')
|
||||
@admin_required(level=50)
|
||||
def route_admin_users():
|
||||
user = db.users.find_one({'username': session.get('username')})
|
||||
if session.get('admin_logged_in'):
|
||||
user = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
user = db.users.find_one({'username': session.get('username')})
|
||||
max_level = user['user_level'] - 1
|
||||
return render_template('admin_users.html', config=get_config(), max_level=max_level, username='', level='')
|
||||
|
||||
@@ -442,7 +492,10 @@ def route_admin_users():
|
||||
@admin_required(level=50)
|
||||
def route_admin_users_post():
|
||||
admin_name = session.get('username')
|
||||
admin = db.users.find_one({'username': admin_name})
|
||||
if session.get('admin_logged_in'):
|
||||
admin = {'username': 'Admin', 'user_level': 100}
|
||||
else:
|
||||
admin = db.users.find_one({'username': admin_name})
|
||||
max_level = admin['user_level'] - 1
|
||||
|
||||
username = request.form.get('username')
|
||||
@@ -725,6 +778,7 @@ def route_api_scores_save():
|
||||
'hash': score['hash'],
|
||||
'score': score['score']
|
||||
}}, upsert=True)
|
||||
db.songs.update_one({'hash': score['hash']}, {'$inc': {'play_count': 1}})
|
||||
|
||||
return jsonify({'status': 'ok'})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user