Simplify player membership checks
This commit is contained in:
parent
f6947271a1
commit
81c18b5c7c
|
@ -134,7 +134,7 @@ def command_player_add(args):
|
||||||
from amanuensis.lexicon.manage import add_player
|
from amanuensis.lexicon.manage import add_player
|
||||||
|
|
||||||
# Verify arguments
|
# Verify arguments
|
||||||
if args.user.id in args.lexicon.join.joined:
|
if args.user.in_lexicon(args.lexicon):
|
||||||
logger.error('"{0.username}" is already a player in "{1.name}"'.format(
|
logger.error('"{0.username}" is already a player in "{1.name}"'.format(
|
||||||
args.user, args.lexicon))
|
args.user, args.lexicon))
|
||||||
return -1
|
return -1
|
||||||
|
@ -163,7 +163,7 @@ def command_player_remove(args):
|
||||||
from amanuensis.lexicon.manage import remove_player
|
from amanuensis.lexicon.manage import remove_player
|
||||||
|
|
||||||
# Verify arguments
|
# Verify arguments
|
||||||
if args.user.id not in args.lexicon.join.joined:
|
if not args.user.in_lexicon(args.lexicon):
|
||||||
logger.error('"{0.username}" is not a player in lexicon "{1.name}"'
|
logger.error('"{0.username}" is not a player in lexicon "{1.name}"'
|
||||||
''.format(args.user, args.lexicon))
|
''.format(args.user, args.lexicon))
|
||||||
return -1
|
return -1
|
||||||
|
@ -218,7 +218,7 @@ def command_char_create(args):
|
||||||
from amanuensis.user import UserModel
|
from amanuensis.user import UserModel
|
||||||
|
|
||||||
# Verify arguments
|
# Verify arguments
|
||||||
if args.user.id not in args.lexicon.join.joined:
|
if not args.user.in_lexicon(args.lexicon):
|
||||||
logger.error('"{0.username}" is not a player in lexicon "{1.name}"'
|
logger.error('"{0.username}" is not a player in lexicon "{1.name}"'
|
||||||
''.format(args.user, args.lexicon))
|
''.format(args.user, args.lexicon))
|
||||||
return -1
|
return -1
|
||||||
|
|
|
@ -125,7 +125,7 @@ def get_user_lexicons(user):
|
||||||
return [
|
return [
|
||||||
lexicon
|
lexicon
|
||||||
for lexicon in get_all_lexicons()
|
for lexicon in get_all_lexicons()
|
||||||
if user.id in lexicon.join.joined]
|
if user.in_lexicon(lexicon)]
|
||||||
|
|
||||||
|
|
||||||
def valid_add(lex, player, password=None):
|
def valid_add(lex, player, password=None):
|
||||||
|
|
|
@ -8,6 +8,7 @@ from amanuensis.server.auth import get_bp as get_auth_bp
|
||||||
from amanuensis.server.home import get_bp as get_home_bp
|
from amanuensis.server.home import get_bp as get_home_bp
|
||||||
from amanuensis.server.helpers import register_custom_filters
|
from amanuensis.server.helpers import register_custom_filters
|
||||||
from amanuensis.server.lexicon import get_bp as get_lex_bp
|
from amanuensis.server.lexicon import get_bp as get_lex_bp
|
||||||
|
from amanuensis.user import AnonymousUserModel
|
||||||
|
|
||||||
# Flask app init
|
# Flask app init
|
||||||
static_root = os.path.abspath(get("static_root"))
|
static_root = os.path.abspath(get("static_root"))
|
||||||
|
@ -23,6 +24,7 @@ register_custom_filters(app)
|
||||||
# Flask-Login init
|
# Flask-Login init
|
||||||
login = LoginManager(app)
|
login = LoginManager(app)
|
||||||
login.login_view = 'auth.login'
|
login.login_view = 'auth.login'
|
||||||
|
login.anonymous_user = AnonymousUserModel
|
||||||
|
|
||||||
# Blueprint inits
|
# Blueprint inits
|
||||||
auth_bp = get_auth_bp(login)
|
auth_bp = get_auth_bp(login)
|
||||||
|
|
|
@ -59,7 +59,7 @@ def player_required(route):
|
||||||
"""
|
"""
|
||||||
@wraps(route)
|
@wraps(route)
|
||||||
def player_route(*args, **kwargs):
|
def player_route(*args, **kwargs):
|
||||||
if current_user.id not in g.lexicon.join.joined:
|
if not current_user.in_lexicon(g.lexicon):
|
||||||
flash("You must be a player to view this page")
|
flash("You must be a player to view this page")
|
||||||
return (redirect(url_for('lexicon.contents', name=g.lexicon.name))
|
return (redirect(url_for('lexicon.contents', name=g.lexicon.name))
|
||||||
if g.lexicon.join.public
|
if g.lexicon.join.public
|
||||||
|
@ -76,7 +76,7 @@ def player_required_if_not_public(route):
|
||||||
@wraps(route)
|
@wraps(route)
|
||||||
def player_route(*args, **kwargs):
|
def player_route(*args, **kwargs):
|
||||||
if ((not g.lexicon.join.public)
|
if ((not g.lexicon.join.public)
|
||||||
and current_user.id not in g.lexicon.join.joined):
|
and not current_user.in_lexicon(g.lexicon)):
|
||||||
flash("You must be a player to view this page")
|
flash("You must be a player to view this page")
|
||||||
return redirect(url_for('home.home'))
|
return redirect(url_for('home.home'))
|
||||||
return route(*args, **kwargs)
|
return route(*args, **kwargs)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "page_2col.html" %}
|
{% extends "page_2col.html" %}
|
||||||
{% import 'macros.html' as macros %}
|
{% import 'macros.html' as macros with context %}
|
||||||
{% block title %}Admin | Amanuensis{% endblock %}
|
{% block title %}Admin | Amanuensis{% endblock %}
|
||||||
{% block header %}<h2>Amanuensis - Admin Dashboard</h2>{% endblock %}
|
{% block header %}<h2>Amanuensis - Admin Dashboard</h2>{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "page_1col.html" %}
|
{% extends "page_1col.html" %}
|
||||||
{% import 'macros.html' as macros %}
|
{% import 'macros.html' as macros with context %}
|
||||||
{% block title %}Home | Amanuensis{% endblock %}
|
{% block title %}Home | Amanuensis{% endblock %}
|
||||||
{% block header %}<h2>Amanuensis - Home</h2>{% endblock %}
|
{% block header %}<h2>Amanuensis - Home</h2>{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% macro dashboard_lexicon_item(lexicon, anonymize) %}
|
{% macro dashboard_lexicon_item(lexicon) %}
|
||||||
<div class="dashboard-lexicon-item dashboard-lexicon-{{ lexicon.status() }}">
|
<div class="dashboard-lexicon-item dashboard-lexicon-{{ lexicon.status() }}">
|
||||||
<p>
|
<p>
|
||||||
<span class="dashboard-lexicon-item-title">
|
<span class="dashboard-lexicon-item-title">
|
||||||
|
@ -8,19 +8,28 @@
|
||||||
[{{ lexicon.status().capitalize() }}]
|
[{{ lexicon.status().capitalize() }}]
|
||||||
</p>
|
</p>
|
||||||
<p><i>{{ lexicon.prompt }}</i></p>
|
<p><i>{{ lexicon.prompt }}</i></p>
|
||||||
|
{% if current_user.is_authenticated %}
|
||||||
<p>
|
<p>
|
||||||
{% if anonymize %}
|
{%
|
||||||
Players: {{ lexicon.join.joined|count }}/{{ lexicon.join.max_players }}
|
if current_user.in_lexicon(lexicon)
|
||||||
{% else %}
|
or current_user.is_admin
|
||||||
Editor:
|
%}
|
||||||
{{ lexicon.editor|user_attr('username') }} / Players:
|
Editor: {{ lexicon.editor|user_attr('username') }} /
|
||||||
{% for uid in lexicon.join.joined[:-1] %}
|
Players:
|
||||||
{{ uid|user_attr('username') }},
|
{% for uid in lexicon.join.joined %}
|
||||||
|
{{ uid|user_attr('username') }}{% if not loop.last %}, {% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{{ lexicon.join.joined[-1]|user_attr('username') }}
|
|
||||||
({{ lexicon.join.joined|count }}/{{ lexicon.join.max_players }})
|
({{ lexicon.join.joined|count }}/{{ lexicon.join.max_players }})
|
||||||
|
{% else %}
|
||||||
|
Players: {{ lexicon.join.joined|count }}/{{ lexicon.join.max_players }}
|
||||||
|
{% if lexicon.join.public and lexicon.join.open %}
|
||||||
|
/ <a href="{{ url_for('lexicon.join', name=lexicon.name) }}">
|
||||||
|
Join game
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import re
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from flask_login import UserMixin
|
from flask_login import UserMixin, AnonymousUserMixin
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash
|
from werkzeug.security import generate_password_hash, check_password_hash
|
||||||
|
|
||||||
from amanuensis.errors import (
|
from amanuensis.errors import (
|
||||||
|
@ -64,6 +64,16 @@ class UserModel(UserMixin):
|
||||||
with json_ro(self.config_path) as j:
|
with json_ro(self.config_path) as j:
|
||||||
return check_password_hash(j['password'], pw)
|
return check_password_hash(j['password'], pw)
|
||||||
|
|
||||||
|
def in_lexicon(self, lexicon):
|
||||||
|
return self.id in lexicon.join.joined
|
||||||
|
|
||||||
|
|
||||||
|
class AnonymousUserModel(AnonymousUserMixin):
|
||||||
|
is_admin = False
|
||||||
|
|
||||||
|
def in_lexicon(self, lexicon):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def valid_username(username):
|
def valid_username(username):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue