Browse Source

#723 and #676: user auth settings update, default values

Rafał Pitoń 8 years ago
parent
commit
bf48efb5c5

+ 0 - 14
docs/settings/Database.md

@@ -59,20 +59,6 @@ Forum index Meta Description used as value meta description attribute on forum i
 Forum index title. Can be empty string if not set, in which case `forum_name` should be used instead.
 
 
-## password_complexity
-
-Complexity requirements for new user passwords. It's value is list of strings representing following requirements:
-
-* `case` - mixed case.
-* `alphanumerics` - both digits and letters.
-* `special` - special characters.
-
-
-## password_length_min
-
-Minimal required length of new user passwords.
-
-
 ## post_length_max
 
 Maximal allowed post content length.

+ 4 - 3
misago/conf/migrationutils.py

@@ -2,6 +2,7 @@ from misago.core.cache import cache as default_cache
 
 from .dbsettings import CACHE_KEY
 from .hydrators import dehydrate_value
+from .utils import get_setting_value, has_custom_value
 
 
 def migrate_settings_group(apps, group_fixture, old_group_key=None):
@@ -35,7 +36,7 @@ def migrate_settings_group(apps, group_fixture, old_group_key=None):
     group.setting_set.all().delete()
 
     for order, setting_fixture in enumerate(group_fixture['settings']):
-        old_value = custom_settings_values.pop(setting_fixture['name'], None)
+        old_value = custom_settings_values.pop(setting_fixture['setting'], None)
         migrate_setting(Setting, group, setting_fixture, order, old_value)
 
 
@@ -50,8 +51,8 @@ def get_custom_settings_values(group):
     custom_settings_values = {}
 
     for setting in group.setting_set.iterator():
-        if setting.has_custom_value:
-            custom_settings_values[setting.setting] = setting.value
+        if has_custom_value(setting):
+            custom_settings_values[setting.setting] = get_setting_value(setting)
 
     return custom_settings_values
 

+ 4 - 14
misago/conf/models.py

@@ -1,7 +1,7 @@
 from django.contrib.postgres.fields import JSONField
 from django.db import models
 
-from . import hydrators
+from . import hydrators, utils
 
 
 class SettingsGroupsManager(models.Manager):
@@ -59,22 +59,12 @@ class Setting(models.Model):
 
     @property
     def value(self):
-        if not self.dry_value and self.default_value:
-            return hydrators.hydrate_value(
-                self.python_type, self.default_value)
-        else:
-            return hydrators.hydrate_value(
-                self.python_type, self.dry_value)
+        return utils.get_setting_value(self)
 
     @value.setter
     def value(self, new_value):
-        if new_value is not None:
-            self.dry_value = hydrators.dehydrate_value(
-                self.python_type, new_value)
-        else:
-            self.dry_value = None
-        return self.value
+        return utils.set_setting_value(self, new_value)
 
     @property
     def has_custom_value(self):
-        return self.dry_value and self.dry_value != self.default_value
+        return utils.has_custom_value(self)

+ 23 - 0
misago/conf/utils.py

@@ -0,0 +1,23 @@
+from . import hydrators
+
+
+def get_setting_value(setting):
+    if not setting.dry_value and setting.default_value:
+        return hydrators.hydrate_value(
+            setting.python_type, setting.default_value)
+    else:
+        return hydrators.hydrate_value(
+            setting.python_type, setting.dry_value)
+
+
+def set_setting_value(setting, new_value):
+    if new_value is not None:
+        setting.dry_value = hydrators.dehydrate_value(
+            setting.python_type, new_value)
+    else:
+        setting.dry_value = None
+    return setting.value
+
+
+def has_custom_value(setting):
+    return setting.dry_value and setting.dry_value != setting.default_value

+ 1 - 0
misago/users/context_processors.py

@@ -16,6 +16,7 @@ def user_links(request):
             'USERS_LIST_URL': reverse('misago:users'),
 
             'AUTH_API': reverse('misago:api:auth'),
+            'AUTH_CRITERIA_API': reverse('misago:api:auth-criteria'),
             'USERS_API': reverse('misago:api:user-list'),
 
             'CAPTCHA_API': reverse('misago:api:captcha-question'),

+ 168 - 0
misago/users/migrations/0006_update_settings.py

@@ -0,0 +1,168 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-02-05 14:34
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+from misago.conf.migrationutils import migrate_settings_group, delete_settings_cache
+
+
+_ = lambda x: x
+
+
+def update_users_settings(apps, schema_editor):
+    migrate_settings_group(apps,{
+        'key': 'users',
+        'name': _("Users"),
+        'description': _("Those settings control user accounts default behaviour and features availability."),
+        'settings': (
+            {
+                'setting': 'account_activation',
+                'name': _("New accounts activation"),
+                'legend': _("New accounts"),
+                'value': 'none',
+                'form_field': 'select',
+                'field_extra': {
+                    'choices': (
+                        ('none', _("No activation required")),
+                        ('user', _("Activation token sent to User")),
+                        ('admin', _("Activation by administrator")),
+                        ('closed', _("Don't allow new registrations"))
+                    )
+                },
+                'is_public': True,
+            },
+            {
+                'setting': 'username_length_min',
+                'name': _("Minimum length"),
+                'description': _("Minimum allowed username length."),
+                'legend': _("User names"),
+                'python_type': 'int',
+                'default_value': 3,
+                'field_extra': {
+                    'min_value': 2,
+                    'max_value': 20,
+                },
+            },
+            {
+                'setting': 'username_length_max',
+                'name': _("Maximum length"),
+                'description': _("Maximum allowed username length."),
+                'python_type': 'int',
+                'default_value': 14,
+                'field_extra': {
+                    'min_value': 2,
+                    'max_value': 20,
+                },
+            },
+            {
+                'setting': 'allow_custom_avatars',
+                'name': _("Allow custom avatars"),
+                'legend': _("Avatars"),
+                'description': _("Turning this option off will forbid "
+                                 "forum users from using avatars from "
+                                 "outside forums. Good for forums "
+                                 "adressed at young users."),
+                'python_type': 'bool',
+                'value': True,
+                'form_field': 'yesno',
+            },
+            {
+                'setting': 'default_avatar',
+                'name': _("Default avatar"),
+                'value': 'gravatar',
+                'form_field': 'select',
+                'field_extra': {
+                    'choices': (
+                        ('dynamic', _("Individual")),
+                        ('gravatar', _("Gravatar")),
+                        ('gallery', _("Random avatar from gallery")),
+                    ),
+                },
+            },
+            {
+                'setting': 'default_gravatar_fallback',
+                'name': _("Fallback for default gravatar"),
+                'description': _("Select which avatar to use when user "
+                                 "has no gravatar associated with his "
+                                 "e-mail address."),
+                'value': 'dynamic',
+                'form_field': 'select',
+                'field_extra': {
+                    'choices': (
+                        ('dynamic', _("Individual")),
+                        ('gallery', _("Random avatar from gallery")),
+                    ),
+                },
+            },
+            {
+                'setting': 'avatar_upload_limit',
+                'name': _("Maximum size of uploaded avatar"),
+                'description': _("Enter maximum allowed file size "
+                                 "(in KB) for avatar uploads"),
+                'python_type': 'int',
+                'default_value': 1536,
+                'field_extra': {
+                    'min_value': 0,
+                },
+                'is_public': True,
+            },
+            {
+                'setting': 'signature_length_max',
+                'name': _("Maximum length"),
+                'legend': _("Signatures"),
+                'description': _("Maximum allowed signature length."),
+                'python_type': 'int',
+                'default_value': 256,
+                'field_extra': {
+                    'min_value': 10,
+                    'max_value': 5000,
+                },
+                'is_public': True,
+            },
+            {
+                'setting': 'subscribe_start',
+                'name': _("Started threads"),
+                'legend': _("Default subscriptions settings"),
+                'value': 'watch_email',
+                'form_field': 'select',
+                'field_extra': {
+                    'choices': (
+                        ('no', _("Don't watch")),
+                        ('watch', _("Put on watched threads list")),
+                        ('watch_email', _("Put on watched threads "
+                                          "list and e-mail user when "
+                                          "somebody replies")),
+                    ),
+                },
+            },
+            {
+                'setting': 'subscribe_reply',
+                'name': _("Replied threads"),
+                'value': 'watch_email',
+                'form_field': 'select',
+                'field_extra': {
+                    'choices': (
+                        ('no', _("Don't watch")),
+                        ('watch', _("Put on watched threads list")),
+                        ('watch_email', _("Put on watched threads "
+                                          "list and e-mail user when "
+                                          "somebody replies")),
+                    ),
+                },
+            },
+        )
+    })
+
+    delete_settings_cache()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('misago_users', '0005_dj_19_update'),
+    ]
+
+    operations = [
+        migrations.RunPython(update_users_settings),
+    ]