
Re: Could not locate column in row for column 'user.id'
by Mark Sapiro
On 7/26/20 10:56 AM, Shashikanth Komandoor wrote:
> Hi Team,
>
> I am currently running Mailman 3 with version 3.3.1 and in built postfix
> version 2.10.1-6 on RHEL 7.5 in production environment from the past 2
> months almost.
>
> From the past few days, I found my server is responding to the users
> very slowly and throwing the Server Error page (of course getting the
> required page after multiple refreshes) for almost every click on the
> postorius pages (not yet observed on hyperkitty front end which in fact is
> not so important for me as of now).
>
> During that time, I observed in the mailman.log an error message saying
> "Could not locate column in row for column 'user.id'". The complete
> traceback log is attached with the mail. The error message is generated for
> almost all the lists and all the clicks.
I don't understand what's going on. I suspect some kind of database
corruption, but I don't know what.
The traceback indicates Mailman is getting the Members of a list and in
this process is trying to get the display_name for a member. The
member's subscriber attribute doesn't have a display_name so it is
trying to get is from the member's user attribute so it is trying to get
the user record for the member's email address via
IUserManager.get_user(). This in turn gets the Address record for the
email address and returns it's user attribute.
This leads to the
sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for
column 'user.id'"
error which I don't understand. There is no table with a 'user.id'
column. user.id refers to the id column in the user table which comes
from the user_id column in the address table which should be a reference
to the id column in the user table, not a reference to ay 'user.id' column.
What is your backend database and what is the structure of the address
table in that database. Have you done any kind of direct database query
that might have affected this?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 10 months

Re: Hyperkitty 403 Forbidden Error
by Phil Thompson
On 07/08/2019 17:04, Abhilash Raj wrote:
> On Wed, Aug 7, 2019, at 8:41 AM, Phil Thompson wrote:
>> On 06/08/2019 09:48, Phil Thompson wrote:
>> > On 06/08/2019 03:38, Abhilash Raj wrote:
>> >> On Mon, Aug 5, 2019, at 10:06 AM, Phil Thompson wrote:
>> >>> I'm in the process of setting up mailman3. The only problem I seem to
>> >>> be
>> >>> having is getting Hyperkitty to archive messages. Rather than the
>> >>> authorisation problems people have previously asked about on the
>> >>> list, I
>> >>> am getting a 403 error...
>> >>>
>> >>> Aug 05 15:38:40 2019 (10229) HyperKitty failure on
>> >>> http://localhost/mailman3/hyperkitty/api/mailman/urls:
>> >>> <html><title>Forbidden</title><body>
>> >>> <h1>Access is forbidden</h1></body></html> (403)
>> >>> Aug 05 15:38:58 2019 (10222) HyperKitty failure on
>> >>> http://localhost/mailman3/hyperkitty/api/mailman/archive:
>> >>> <html><title>Forbidden</title><body>
>> >>> <h1>Access is forbidden</h1></body></html> (403)
>> >>>
>> >>> Any suggestions would be appreciated.
>> >>
>> >> How did you install Hyperkitty?
>> >
>> > On Ubuntu...
>> >
>> > apt-get install mailman3-full
>> >
>> >> You probably need to the set the API key correctly in both Core and
>> >> Hyperkitty.
>> >>
>> >> Have you looked at documentation here[1]?
>> >>
>> >> [1]:
>> >> https://hyperkitty.readthedocs.io/en/latest/install.html#connecting-to-mail…
>> >>
>> >> Note that the MAILMAN_ARCHIVER_KEY = "value" (this value should be in
>> >> quotes, single or double, doesn't matter) in your settings.py for Web
>> >> (Django) should be same as the `api_key : value` (without quotes here
>> >> in hyperkitty.cfg config file).
>> >
>> > That's all correct. I'm familiar with the authorisation issues that
>> > other people have had.
>> >
>> > The only thing I'm doing differently (as far as I am aware) is that
>> > I'm using a URL prefixed with /mailman3 which is stripped off in my
>> > nginx configuration...
>> >
>> > # mailman3.
>> > location /mailman3/ {
>> > uwsgi_pass unix:/run/mailman3/web/uwsgi.sock;
>> > include uwsgi_params;
>> > uwsgi_param SERVER_ADDR $server_addr;
>> > uwsgi_modifier1 30;
>> > uwsgi_param SCRIPT_NAME /mailman3;
>> > }
>> >
>> > location /mailman3/static {
>> > alias /var/lib/mailman3/web/static;
>> > }
>> >
>> > location /mailman3/static/favicon.ico {
>> > alias /var/lib/mailman3/web/static/postorius/img/favicon.ico;
>> > }
>> >
>> > ...but I don't see this affecting the mailman to Hyperkitty
>> > communication. Posting to lists and the Postorius and Hyperkitty
>> > frontends seem to work fine.
>>
>> I have now fixed the 403 error (by setting MAILMAN_ARCHIVER_FROM to my
>> public IP address). However I now get a 400 Bad Request error.
>>
>> I have traced this to the archive() function in
>> hyperkitty/views/mailman.py which is expect a POST but is actually
>> getting a GET, specifically...
>>
>> GET '/mailman3/hyperkitty/api/mailman/archive?key=...'
>>
>> ...which seems to be a fairly fundamental problem.
>>
>> Again, any suggestions would be welcome.
>
> It should be sending POST request to archive emails[1]. How did you
> grab the above request? Was it from logs?
Yes, I added DEBUG=True in mailman-web.py and captured the HTML from
mailman.log.
> Do you have anything else in the logs? There should be something in
> the Mailman Core or web logs should have something.
There's nothing useful in the core log.
There are 3 preceding entries in the web log...
GET /mailman3/hyperkitty/api/mailman/urls?mlist=...&key=...
GET /mailman3/hyperkitty/api/mailman/urls?mlist=...&msgid=...&key=...
GET /mailman3/hyperkitty/api/mailman/urls?mlist=...&msgid=...&key=...
There is one item in the spool directory.
These were all (apparently) successful. It seems odd that the last two
entries were identical.
Phil
5 years, 10 months

Re: Unable to retrieve <800 members of Mailman list through Curl command
by Abhilash Raj
Hi,
thanks,
Abhilash Raj
On Wed, Jan 20, 2021 at 17:58, Shashikanth Komandoor
<shashikanth.komandoor(a)gmail.com> wrote:
> Hi Team,
>
> I am currently running Mailman 3 with version 3.3.1 and in
> built
> postfix version 2.10.1-6 on RHEL 7.5 with PostgreSQL 11.7 version with
> default values. I am almost running 2000 lists with 128 GB RAM and 24
> Cores
> on a single VM and on which all the mailman 3 components are running.
>
> It is observed for most of the lists having members more
> than
> 500 is displaying "Mailman REST API not available. Please restart
> Mailman
> Core" message on the postorius window and on running the CURL command
> over
> REST API of Mailman it is reaching the time limit 30 seconds and
> showing
> the below error.
This is a known issue with the Members API. You can use pagination[1]
to get the list of Members in batches instead of all in a single
request. I'd say a page size of 200~ should be fine, but you should try
out on your server and adjust the size.
[1]:
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
You can also use the command line to run `mailman members
ant.example.com` to get a list of Members for the list.
Abhilash
>
>
>
> *curl: (52) Empty reply from serverNo JSON object could be decoded*
>
> The same behavior is observed on browsing the held
> messages for
> few lists either through the browser or through CURL and REST API.
>
> How to resolve this issue ? What other details I can
> provide to
> make you get an idea ?
> --
> Thanks & Regards,
> Shashi Kanth.K
> 9052671936
>
>
>
>
> <<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campai…>>
> Virus-free.
> www.avast.com <http://www.avast.com/>
> <<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campai…>>
> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> <mailto:mailman-users@mailman3.org>
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> <mailto:mailman-users-leave@mailman3.org>
> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
4 years, 4 months

Re: I did something stupid. Can i back out of it?
by William Oliver
On Sat, 2022-02-19 at 12:03 -0800, Mark Sapiro wrote:
> On 2/19/22 08:33, William Oliver wrote:
> >
> > So... I run a small mailinglist using mailman3 that has been
> > workiing
> > great for a couple of months. Last week, all my users from gmail
> > got
> > kicked off because gmail decided that the list messages were
> > "unsolicited email". I didn't find out about it until the users
> > hit
> > their mailman3 bounce limit. I *thought* would be seeing all the
> > bounce messages, but apparently not. I didn't see any config
> > settings
> > for "see all the bounce messages" so i thought to myself, "Self,
> > well
> > maybe that's because my mailinglist username doesn't have a
> > mailbox in
> > /home/listname".
>
>
> Assuming your Mailman core version is 3.3.5 and Postorius is 1.3.6,
> you
> will see settings like `Notify owner on bounce increment`, ` Notify
> owner on disable` and `Notify owner on removal` under `Bounce
> Processing`. Presumable you did get the notification of removal, so
> delivery to the owner works. Are the increment and disable (or maybe
> just disable if your versions are older) notices set to Yes?
Found it. Thanks.
>
>
> > So, I decided to try that. I created /home/listname/Maildir/* and
> > logged in as fplist to see if it would put mail there. In order to
> > log
> > in as listname, I gave the user listname a password.
>
>
> Can't you just reverse those steps. I.e. remove /home/listname/ and
> remove the listname user?
>
Well, that was my inclination, but I didn't know if I needed to have a
user by the name of listname. I was afraid that if I just deleted the
user "listname" it would cause even more problems.
I had created that user back when I was using another mailinglist
package -- a Joomla plugin (that doesn't work nearly as well as
mailman3). I was afraid to just type in "userdel -r" in case mailman3
needed a "real" user...
So, I can just kill the listname user altogether?
billo
3 years, 3 months

hyperkitty: "incorrect string value" for botched utf-8 encoding
by thoralf
hi,
my hyperkitty installation (3.2.1 from debian buster) started to act up
recently with
(1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x82\\x0AA...' for
column `mailman3web`.`hyperkitty_email`.`content` at row 1")
for every new mail that is about to be archived, i'll quote the full
error mail at the end of this mail.
i traced the issue to a slighty smiling face (aka u+1f642) in this
rather interestingly encoded email:
[…]
Content-Type: multipart/mixed;
boundary="===============2457401976140816263=="
--===============2457401976140816263==
Content-Type: multipart/alternative; boundary="5ecb6fd9_327b23c6_2042"
--5ecb6fd9_327b23c6_2042
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
kann halt NIE am mittwoch. viel spass =F0=9F=99=82
[…]
--5ecb6fd9_327b23c6_2042
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<html xmlns=3D=22http://www.w3.org/1999/xhtml=22>
[…]
<div dir=3D=22auto=22>kann halt NIE am mittwoch. viel spass =F0=9F=99=82<=
/div>
--5ecb6fd9_327b23c6_2042--
[…]
--===============2457401976140816263==--
… which still lingers around in
/var/lib/mailman3/archives/hyperkitty/spool .
is this to be expected, or might it be a good idea to amend mailman3 /
hyperkitty to deal with this more gracefully?
thank you & with kind regards,
t.
---
Internal Server Error: /hyperkitty/api/mailman/archive
OperationalError at /hyperkitty/api/mailman/archive
(1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x82\\x0AA...' for
column `mailman3web`.`hyperkitty_email`.`content` at row 1")
Request Method: POST
Request URL: https://redacted
Django Version: 1.11.28
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
Server time: Mon, 25 May 2020 13:26:09 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback:
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
The above exception ((1366, "Incorrect string value:
'\\xF0\\x9F\\x99\\x82\\x0AA...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")) was the direct
cause of the following exception:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py"
in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
187. response =
self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
185. response = wrapped_callback(request,
*callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/http.py" in
inner
40. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in
_decorator
69. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py" in
wrapped_view
58. return view_func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in archive
115. add_to_list(mlist_fqdn, msg)
File "/usr/lib/python3/dist-packages/hyperkitty/lib/incoming.py" in
add_to_list
151. email.save()
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save
808. force_update=force_update,
update_fields=update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save_base
838. updated = self._save_table(raw, cls, force_insert,
force_update, using, update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in
_save_table
924. result = self._do_insert(cls._base_manager, using,
fields, update_pk, raw)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in _do_insert
963. using=using, raw=raw)
File "/usr/lib/python3/dist-packages/django/db/models/manager.py" in
manager_method
85. return getattr(self.get_queryset(), name)(*args,
**kwargs)
File "/usr/lib/python3/dist-packages/django/db/models/query.py" in _insert
1079. return
query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py"
in execute_sql
1112. cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/lib/python3/dist-packages/django/utils/six.py" in reraise
685. raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
Exception Type: OperationalError at /hyperkitty/api/mailman/archive
Exception Value: (1366, "Incorrect string value:
'\\xF0\\x9F\\x99\\x82\\x0AA...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")
Request information:
USER: AnonymousUser
GET:
key = 'redacted'
POST:
mlist = 'redacted'
FILES:
message = <InMemoryUploadedFile: message.txt ()>
COOKIES: No cookie data
META:
CONTENT_LENGTH = '6223'
CONTENT_TYPE = 'multipart/form-data;
boundary=4cd93acbb8c0c45d7bd46fdf1d6a31fa'
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTPS = 'on'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'lists.bing-bong.de'
HTTP_USER_AGENT = 'python-requests/2.21.0'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PATH_INFO = '/hyperkitty/api/mailman/archive'
QUERY_STRING = 'key=redacted'
REMOTE_ADDR = '78.47.218.110'
REMOTE_PORT = '36358'
REQUEST_METHOD = 'POST'
REQUEST_SCHEME = 'https'
REQUEST_URI = 'redacted'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost/hyperkitty/api/mailman/archive'
SCRIPT_NAME = ''
SERVER_ADDR = '78.47.218.110'
SERVER_ADMIN = 'admin(a)bing-bong.de'
SERVER_NAME = 'lists.bing-bong.de'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.38 (Debian) Server at
lists.bing-bong.de Port 443</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.38 (Debian)'
SSL_TLS_SNI = 'lists.bing-bong.de'
uwsgi.core = 1
uwsgi.node = b'bing-bong'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f2ae6af2d68>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'mm3admin(a)bing-bong.de'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f2ae8341f28>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'),
('text/x-scss', 'sassc -t compressed {infile} {outfile}'),
('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailman3web', 'USER': 'mailman3web', 'PASSWORD':
'********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS':
{'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME':
None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)bing-bong.de'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'bing-bong.de'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'),
('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn',
'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'),
('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'),
('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au',
'Australian English'), ('en-gb', 'British English'), ('eo',
'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni',
'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et',
'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'),
('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish
Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr',
'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is',
'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'),
('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'),
('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk',
'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr',
'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne',
'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os',
'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru',
'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'),
('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'),
('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'),
('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk',
'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans',
'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.RotatingFileHandler', 'filename':
'/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '78.47.218.110',
'2a01:4f8:c17:567::2/64')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://lists.bing-bong.de/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)bing-bong.de'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
5 years

Re: Emergency Moderation
by Allan Hansen
> On May 24, 2020, at 11:34 , Mark Sapiro <mark(a)msapiro.net> wrote:
>
> On 5/24/20 10:59 AM, Allan Hansen wrote:
>> In the MM3 settings there is an option to ‘Hold for moderation’ when members or non-members post to the list.
>> I use that for the same cases where in MM2 I switched a list to ‘Emergency Moderation.’
>
>
> If you imported your MM 2.1 lists with `mailman import21`, `emergency`
> was set appropriately for the imported list and should be working to
> hold posts regardless of other settings.
Not sure what is the difference between ‘emergency moderation’ and ‘Hold for moderation.’ It appears redundant.
>
>
>> My own current top-of-the-list issues:
>>
>> A bug: Moderators can’t see/edit the list of members even when allowed to by list setting.
>
> The visibility issue is <https://gitlab.com/mailman/postorius/-/issues/369>.
>
> Editing membership beyond what could be done via the admindb interface
> (i.e. clearing a moderated poster's mod flag) was never allowed for a
> moderator in MM 2.1.
>
> In MM 3, a moderator can set a member's moderation when handling a held
> post. Do you think a non-owner moderator should be able to make other
> changes to a member?
I can only speak for my own application of MM3:
Desiring consistency between the lists, I don’t want to turn all the moderators into owners who can change list settings.
Many of my moderators keep asking me to see the list of members and to subscribe and remove members. I end up
servicing those requests. So...
a. Moderators should be able to unsubscribe and subscribe members.
b. Moderators should be able to set the member’s moderation status.
c. Moderators should not be able to see/modify any other member settings.
>
>
>> A feature request: Member changing email address on all lists he/she belongs to, without involving moderators.
>
>
> This is <https://gitlab.com/mailman/postorius/-/issues/399> and we're
> working on it.
Awesome!!!!
Thank you,
Allan
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
5 years

Re: Removing a mail addresses and users
by Abhijith PA
Hi Mark,
On 11/06/20 1:16 am, Mark Sapiro wrote:
> On 6/10/20 10:23 AM, Abhijith PA via Mailman-users wrote:
>> Hello.
>>
>> I tried to remove random email address signing ups (which I signed up
>> while testing) via admin panel. After removing I tried to sign up again,
>> but I am getting,
>>
>> 'A user is already registered with this e-mail address'
>
> You removed the user's subscription from the list, but you didn't remove
> the user from the system.
>
> Mailman3 has a concept of `user` which didn't exist in Mailman 2.1.
> User's have addresses and a user or one of the user's addresses can
> belong to a list with one or more roles (non-member, member, moderator
> or owner)
In my case these user signups were just to test postorious. These mail
accounts didn't subscribed to anything.
>> Combing through the database, I found auth_user table in mailman3web db
>> still contain those mail address. How to wipe email address entirely
>> from the db so I can signup again without the 'forget password' method
>
> There are a couple of things. If you log in to the web UI as a django
> superuser, you can go to the django admin UI -> Users section and delete
> the User, but I think that will only delete the web user and not delete
> the user from Mailman core.
>
> You can also log in to the web UI as the user and go to
> <https://lists.mailman3.org/user-profile/delete>, but that again only
> deletes the web user, and if you could do that, you could just subscribe
> once you're logged in, so I assume that's what you want to avoid.
>
> I don't think there is a way for a user as opposed to a site admin to
> delete her user record from Mailman core and even for a site admin,
> there's no way in Postorius to delete a user from core. It has to be
> done via REST
> <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…>
> or `mailman shell`.
>
Thanks for the link, let me try that out.
--abhijith
5 years

UnicodeEncodeError: 'ascii' codec can't encode character
by Marvin Gülker
Hi,
I've accidentally sent from an unregisted address to one of my lists.
Mailman correctly held the message back for moderation, but when I go to
the page for held messages in postorios, I receive a 500 error. I've
included an except from the log below. To me, it looks as if it errors
on processing my last name (which has a non-ascii character in it).
This is Postorius 1.1.2 on Ubuntu 18.04 LTS from the repos. I've
searched on the tracker for the problem and found one ticket[1], but it
has something with logging so I suppose this is a different problem.
Ideas? And how do I discard the message without access to the held
messages page?
Python version is 3.6.8.
Log excerpt:
Dec 09 13:21:04 2019 (3090) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3.6/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 214, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 215, in falcon.api.API.__call__ (falcon/api.c:2872)
File "falcon/api.py", line 189, in falcon.api.API.__call__ (falcon/api.c:2419)
File "/usr/lib/python3/dist-packages/mailman/rest/post_moderation.py", line 167, in on_get
resource = self._make_collection(request)
File "/usr/lib/python3/dist-packages/mailman/rest/helpers.py", line 159, in _make_collection
for resource in collection]
File "/usr/lib/python3/dist-packages/mailman/rest/helpers.py", line 159, in <listcomp>
for resource in collection]
File "/usr/lib/python3/dist-packages/mailman/rest/post_moderation.py", line 157, in _resource_as_dict
resource = self._make_resource(request.id)
File "/usr/lib/python3/dist-packages/mailman/rest/post_moderation.py", line 78, in _make_resource
resource['msg'] = msg.as_string()
File "/usr/lib/python3.6/email/message.py", line 158, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.6/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/lib/python3.6/email/generator.py", line 181, in _write
self._dispatch(msg)
File "/usr/lib/python3.6/email/generator.py", line 214, in _dispatch
meth(msg)
File "/usr/lib/python3.6/email/generator.py", line 243, in _handle_text
msg.set_payload(payload, charset)
File "/usr/lib/python3.6/email/message.py", line 315, in set_payload
payload = payload.encode(charset.output_charset)
UnicodeEncodeError: 'ascii' codec can't encode character '\ufffd' in position 269: ordinal not in range(128)
Dec 09 13:21:04 2019 (3090) 127.0.0.1 - - "GET /3.0/lists/tsc-devel(a)lists.secretchronicles.org/held?count=10&page=1 HTTP/1.1" 500 59
--
Blog: https://mg.guelker.eu
5 years, 6 months

Run 'manage.py makemigrations' to make new migrations
by christopher.claus@tgcamberg1848.de
Hello together,
at startup of my docker-container with mailman 0.4.3 i got some warnings to apply some data-model-migrations. I´m very unfamilar with python and django and be not sure how to handle it. Are these warnings from mailman and should i migrate the data-model (and how)? Or should i ignore these message for keeping mailman in a safe state?
Best regards,
chrclaus
System check identified some issues:
WARNINGS:
django_mailman3.MailDomain: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the DjangoMailman3Config.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
django_mailman3.Profile: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the DjangoMailman3Config.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Attachment: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Email: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Favorite: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.LastView: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.MailingList: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Profile: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tag: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tagging: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Thread: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.ThreadCategory: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Vote: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the HyperKittyConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
postorius.EmailTemplate: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the PostoriusConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes, django_mailman3, django_q, hyperkitty, postorius, sessions, sites, socialaccount
Running migrations:
No migrations to apply.
Your models in app(s): 'postorius' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
2 years, 11 months

Re: Turn off social logins?
by Stephen J. Turnbull
Note: I've changed the order of sentences from Torge's post to fit my
responses.
Torge Riedel writes:
> I do agree, same here on my side. Lot's of my users are very
> "sensitive" to social media and don't want see them here.
This is the first I've heard of this. Obviously it's fairly
widespread; *please* speak up if anyone have similar issues that we
haven't addressed. AFAIK all of the currently active Mailman
developers believe that social auth is a GoodThang[tm], so we're
unlikely to DTRT as you see it without your help.
> I need to migrate from mailman2 to mailman3 and was wondering why
> social accounts are enabled by default
By default Mailman 3 is social media: you have a profile, you can be
searched in the indicies of the archives, and so on. The large auth
providers provide more secure authentication, and a lot of convenience
for users who have such accounts already. They also take some
administrative burden off the list and site managers when people lose
their passwords and forget what their subscription address is, and
similar scenarios. Clearly, these are not universally-valued
features, but I think that they justify the current defaults.
> and are difficult to disable.
They're easy enough to disable (easy to recognize and just add a hash
character in front), since you have to edit settings_local.py to
install anyway. If you're using a packaged version and the package
configuration utility doesn't handle it, there's nothing we can do
about it. The distro will have to deal with that.
It should be better documented, I imagine (haven't checked yet).
> I propose something like an additional setting listing the enabled
> social accounts.
Do you mean in the Postorius administration interface? If so, do you
want it by-site, by-domain, or by-list? ("You" is everybody who wants
to disable social auth, not just Torge!)
If you mean in settings_local.py, I suggested something similar
earlier. It's not obvious it would be easy to do (sometimes these
things are order-dependent, though that's bad practice).
> And if the admin is setting this to an empty value in the
> settings_local.py everything is disabled
Because the settings are a Python module, this is the way
settings_local.py works anyway. That's why Mark suggested editing
INSTALLED_APPS.
6 years, 4 months