diff --git a/nyaa/forms.py b/nyaa/forms.py index 6a6508a..bd681ae 100644 --- a/nyaa/forms.py +++ b/nyaa/forms.py @@ -257,6 +257,14 @@ class UploadForm(FlaskForm): bencoded_info_dict=bencoded_info_dict) +class UserForm(FlaskForm): + user_class = DisabledSelectField('Change User Class') + + def validate_user_class(form, field): + if not field.data: + raise ValidationError('Please select a proper user class') + + class TorrentFileData(object): """Quick and dirty class to pass data from the validator""" diff --git a/nyaa/models.py b/nyaa/models.py index 34fac59..2f512e4 100644 --- a/nyaa/models.py +++ b/nyaa/models.py @@ -356,6 +356,15 @@ class User(db.Model): def is_admin(self): return self.level is UserLevelType.ADMIN or self.level is UserLevelType.SUPERADMIN + @property + def is_superadmin(self): + return self.level is UserLevelType.SUPERADMIN + + @property + def is_trusted(self): + return self.level is UserLevelType.TRUSTED + + # class Session(db.Model): # __tablename__ = 'sessions' # diff --git a/nyaa/routes.py b/nyaa/routes.py index 51a7dd3..99d5308 100644 --- a/nyaa/routes.py +++ b/nyaa/routes.py @@ -275,13 +275,42 @@ def home(rss): rss_filter=rss_query_string) -@app.route('/user/') +@app.route('/user/', methods=['GET', 'POST']) def view_user(user_name): user = models.User.by_username(user_name) if not user: flask.abort(404) + if flask.g.user: + admin = flask.g.user.is_admin + superadmin = flask.g.user.is_superadmin + else: + admin = False + superadmin = False + + form = forms.UserForm() + form.user_class.choices = _create_user_class_choices() + if flask.request.method == 'POST' and form.validate(): + selection = form.user_class.data + + if selection == 'regular': + user.level = models.UserLevelType.REGULAR + elif selection == 'trusted': + user.level = models.UserLevelType.TRUSTED + db.session.add(user) + db.session.commit() + + return flask.redirect('/user/' + user.username) + + level = 'Regular' + if user.is_admin: + level = 'Moderator' + if user.is_superadmin: # check this second because user can be admin AND superadmin + level = 'Administrator' + elif user.is_trusted: + level = 'Trusted' + term = flask.request.args.get('q') sort = flask.request.args.get('s') order = flask.request.args.get('o') @@ -309,12 +338,17 @@ def view_user(user_name): query = search(**query_args) rss_query_string = _generate_query_string(term, category, quality_filter, user_name) + return flask.render_template('user.html', + form=form, torrent_query=query, search=query_args, user=user, user_page=True, - rss_filter=rss_query_string) + rss_filter=rss_query_string, + level=level, + admin=admin, + superadmin=superadmin) @app.template_filter('rfc822') @@ -629,6 +663,13 @@ def send_verification_email(to_address, activ_link): server.quit() +def _create_user_class_choices(): + choices = [('regular', 'Regular')] + if flask.g.user and flask.g.user.is_superadmin: + choices.append(('trusted', 'Trusted')) + return choices + + #################################### STATIC PAGES #################################### @app.route('/rules', methods=['GET']) def site_rules(): diff --git a/nyaa/templates/profile.html b/nyaa/templates/profile.html index 2e6e659..e4a50bd 100644 --- a/nyaa/templates/profile.html +++ b/nyaa/templates/profile.html @@ -3,7 +3,17 @@ {% block body %} {% from "_formhelpers.html" import render_field %} -

Edit Profile

+{% if g.user %} +

My Account

+
+

ID: {{g.user.id}}

+

Account created on: {{g.user.created_time}}

+

Email address: {{g.user.email}}

+

User class: {{level}}

+
+{% endif %} + +

Edit Profile

{{ form.csrf_token }} diff --git a/nyaa/templates/user.html b/nyaa/templates/user.html index bcf48f7..1db2303 100644 --- a/nyaa/templates/user.html +++ b/nyaa/templates/user.html @@ -1,6 +1,28 @@ {% extends "layout.html" %} {% block title %}{{ user.username }} :: {{ config.SITE_NAME }}{% endblock %} {% block body %} +{% from "_formhelpers.html" import render_field %} + +{% if superadmin %} +

User Information

+

ID: {{user.id}}

+

Account created on: {{user.created_time}}

+

Email address: {{user.email}}

+

User class: {{level}}

+ + {{ form.csrf_token }} +
+
+ {{ render_field(form.user_class, class_='form-control')}} +
+
+
+
+ +
+
+
+{% endif %}

Browsing {{user.username}}'s torrents