edumfa / edumfa Goto Github PK
View Code? Open in Web Editor NEWUp-to-date multifactor authentication for academic institutions.
Home Page: https://edumfa.io
License: GNU Affero General Public License v3.0
Up-to-date multifactor authentication for academic institutions.
Home Page: https://edumfa.io
License: GNU Affero General Public License v3.0
What did you try to achieve?
Add a user when using SQLite-based sqlresolver
{ "userid" : "id", "username": "username" }
Set EDUMFA_LOGLEVEL = logging.DEBUG in edumfa.cfg and take a look at the edumfa.log!
If appropriate, attach the log file or paste relevant portions.
[2024-07-06 09:38:24,993][2631823][140511362746176][INFO][edumfa.lib.resolvers.SQLIdResolver:590] using the connect string sqlite:////etc/edumfa/uio.db
[2024-07-06 09:38:28,529][2631823][140511362746176][INFO][edumfa.lib.usercache:110] Deleted 0 entries from the user cache (resolver='sqlite', username=None, expired=None)
[2024-07-06 09:38:30,648][2631823][140511362746176][ERROR][edumfa.lib.user:744] AttributeError("'NoneType' object has no attribute 'columns'")
[2024-07-06 09:38:51,319][2631823][140511362746176][ERROR][edumfa.lib.resolvers.SQLIdResolver:348] Could not get the user ID: AttributeError("'NoneType' object has no attribute 'columns'")
[2024-07-06 09:38:51,379][2631823][140511362746176][INFO][edumfa.lib.resolvers.SQLIdResolver:630] Insert new user with attributes {'username': 'francisaugusto'}
[2024-07-06 09:38:51,380][2631823][140511362746176][ERROR][edumfa.app:838] Exception on /user/ [POST]
Traceback (most recent call last):
File "/opt/edumfa/lib/python3.9/site-packages/flask/app.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
File "/opt/edumfa/lib/python3.9/site-packages/flask/app.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/edumfa/lib/python3.9/site-packages/flask/app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/edumfa/lib/python3.9/site-packages/flask/app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/api/auth.py", line 408, in decorated_function
return f(*args, **kwargs)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/api/lib/prepolicy.py", line 134, in policy_wrapper
return wrapped_function(*args, **kwds)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/lib/event.py", line 100, in event_wrapper
f_result = func(*args, **kwds)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/api/user.py", line 284, in create_user_api
r = create_user(resolvername, attributes, password=password)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/lib/log.py", line 148, in log_wrapper
return func(*args, **kwds)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/lib/user.py", line 575, in create_user
uid = y.add_user(attributes)
File "/opt/edumfa/lib/python3.9/site-packages/edumfa/lib/resolvers/SQLIdResolver.py", line 631, in add_user
r = self.session.execute(insert(self.TABLE).values(**kwargs))
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/_dml_constructors.py", line 82, in insert
return Insert(table)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/dml.py", line 1213, in __init__
super().__init__(table)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/dml.py", line 987, in __init__
self.table = coercions.expect(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/coercions.py", line 396, in expect
resolved = impl._literal_coercion(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/coercions.py", line 604, in _literal_coercion
self._raise_for_expected(element, argname)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/coercions.py", line 693, in _raise_for_expected
super()._raise_for_expected(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/sql/coercions.py", line 518, in _raise_for_expected
raise exc.ArgumentError(msg, code=code) from err
sqlalchemy.exc.ArgumentError: subject table for an INSERT, UPDATE or DELETE expected, got None.
[2024-07-06 09:41:44,239][2631823][140511362746176][ERROR][edumfa.lib.resolvers.SQLIdResolver:348] Could not get the user ID: AttributeError("'NoneType' object has no attribute 'columns'")
Maybe this is also a problem with the broken db migration. But I don't know.
import sys
sys.stdout = sys.stderr
from edumfa.app import create_app
# Now we can select the config file:
application = create_app(config_name="production", config_file="/etc/edumfa/pi.cfg")
if __name__ == "__main__":
application.run(host="0.0.0.1)
2. /opt/edumfa/venv/bin/uwsgi --http :8000 --master -b 32768 -p 4 --wsgi-file edumfaapp.py
But the table exists:
mysql> select * from config;
+-------------------------------+-------------------------------------------------------------+--------+---------------------------------+
| Key | Value | Type | Description |
+-------------------------------+-------------------------------------------------------------+--------+---------------------------------+
| __timestamp__ | 1710767325 | | config timestamp. last changed. |
| email.tls | 0 | | |
| hotp.hashlib | sha1 | public | |
| radius.dictfile | /etc/privacyidea/dictionary | | |
| remote.verify_ssl_certificate | 0 | | |
| sms.Provider | privacyidea.lib.smsprovider.HttpSMSProvider.HttpSMSProvider | | |
| totp.hashlib | sha1 | public | |
| totp.timeShift | 0 | | |
| totp.timeStep | 30 | public | |
| totp.timeWindow | 180 | public | |
+-------------------------------+-------------------------------------------------------------+--------+---------------------------------+
10 rows in set (0,00 sec)
Here is interesting, that the values aren't changed.
See Logs.
Traceback (most recent call last):
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: config
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 1948, in full_dispatch_request
rv = self.preprocess_request()
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 2242, in preprocess_request
rv = func()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/webui/login.py", line 70, in before_request
g.client_ip = get_client_ip(request, get_from_config(SYSCONF.OVERRIDECLIENT))
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/log.py", line 148, in log_wrapper
return func(*args, **kwds)
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 364, in get_from_config
config_object = get_config_object()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 344, in get_config_object
store['config_object'] = shared_config.reload_and_clone()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 197, in reload_and_clone
self._reload_from_db()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 100, in _reload_from_db
db_ts = Config.query.filter_by(Key=EDUMFA_TIMESTAMP).first()
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2824, in first
return self.limit(1)._iter().first()
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2916, in _iter
result = self.session.execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1714, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
return connection._execute_clauseelement(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement
ret = self._execute_context(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context
self._handle_dbapi_exception(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception
util.raise_(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: config
[SQL: SELECT config."Key" AS "config_Key", config."Value" AS "config_Value", config."Type" AS "config_Type", config."Description" AS "config_Description"
FROM config
WHERE config."Key" = ?
LIMIT ? OFFSET ?]
[parameters: ('__timestamp__', 1, 0)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask/app.py", line 1879, in handle_exception
server_error = handler(server_error)
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/api/before_after.py", line 410, in internal_error
g.audit_object.log({"info": str(error)})
AttributeError: 'NoneType' object has no attribute 'log'
A passkey registration on Windows (regardless of the browser) delivers too much information for eduMFA.
In detail it delivers the unexpected credProtect
extension.
Generate a policy using edumfa-manage from a file
Call "edumfa-manage policy create -f file.ini default default default" where file.ini is a config file for a policy according to specifications
The command should accept the argument -f and generate the policy
received error "TypeError: create() got an unexpected keyword argument 'f'" and no policy was created
In edumfa\commands\manage\policy.py changed definition and mentions of filename
to f
e.g.
def create(name, scope, action, filename):
to
def create(name, scope, action, f):
exit 0
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_ v1.4.0
++ Stamping DB to 4f32a4e1bf33
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_ v1.4.0
++ Upgrading DB schema.
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_ v1.4.0
Running online
Good. Column tokeninfo already exists.
Good. Column priority already exists.
Good. Column adminrealm already exists.
Good. Column revoked already exists.
Good. Column locked already exists.
(MySQLdb.OperationalError) (1050, "Table 'smtpserver' already exists")
[SQL:
CREATE TABLE smtpserver (
id INTEGER NOT NULL AUTO_INCREMENT,
identifier VARCHAR(255) NOT NULL,
server VARCHAR(255) NOT NULL,
port INTEGER,
username VARCHAR(255),
password VARCHAR(255),
sender VARCHAR(255),
tls BOOL,
description VARCHAR(2000),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
(MySQLdb.OperationalError) (1050, "Table 'passwordreset' already exists")
[SQL:
CREATE TABLE passwordreset (
id INTEGER NOT NULL AUTO_INCREMENT,
recoverycode VARCHAR(255) NOT NULL,
username VARCHAR(64) NOT NULL,
realm VARCHAR(64) NOT NULL,
resolver VARCHAR(64),
email VARCHAR(255),
timestamp DATETIME(6),
expiration DATETIME(6),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
(MySQLdb.OperationalError) (1050, "Table 'radiusserver' already exists")
[SQL:
CREATE TABLE radiusserver (
id INTEGER NOT NULL AUTO_INCREMENT,
identifier VARCHAR(255) NOT NULL,
server VARCHAR(255) NOT NULL,
port INTEGER,
secret VARCHAR(255),
description VARCHAR(2000),
PRIMARY KEY (id),
UNIQUE (identifier)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Good. Table 'radiusserver' already exists.
(MySQLdb.OperationalError) (1050, "Table 'eventhandler' already exists")
[SQL:
CREATE TABLE eventhandler (
id INTEGER NOT NULL AUTO_INCREMENT,
ordering INTEGER NOT NULL,
event VARCHAR(255) NOT NULL,
handlermodule VARCHAR(255) NOT NULL,
`condition` VARCHAR(1024),
action VARCHAR(1024),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Table already exists
(MySQLdb.OperationalError) (1050, "Table 'smsgateway' already exists")
[SQL:
CREATE TABLE smsgateway (
id INTEGER NOT NULL AUTO_INCREMENT,
identifier VARCHAR(255) NOT NULL,
description VARCHAR(1024),
providermodule VARCHAR(1024) NOT NULL,
PRIMARY KEY (id),
UNIQUE (identifier)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Table already exists
(MySQLdb.OperationalError) (1050, "Table 'eventhandlercondition' already exists")
[SQL:
CREATE TABLE eventhandlercondition (
id INTEGER NOT NULL AUTO_INCREMENT,
eventhandler_id INTEGER,
`Key` VARCHAR(255) NOT NULL,
`Value` VARCHAR(2000),
comparator VARCHAR(255),
PRIMARY KEY (id),
FOREIGN KEY(eventhandler_id) REFERENCES eventhandler (id),
CONSTRAINT ehcix_1 UNIQUE (eventhandler_id, `Key`)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Table already exists
(MySQLdb.OperationalError) (1050, "Table 'clientapplication' already exists")
[SQL:
CREATE TABLE clientapplication (
id INTEGER NOT NULL AUTO_INCREMENT,
ip VARCHAR(255) NOT NULL,
hostname VARCHAR(255),
clienttype VARCHAR(255) NOT NULL,
lastseen DATETIME(6),
PRIMARY KEY (id),
CONSTRAINT caix UNIQUE (ip, clienttype)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Table subscription exists
(MySQLdb.OperationalError) (1050, "Table 'subscription' already exists")
[SQL:
CREATE TABLE subscription (
id INTEGER NOT NULL AUTO_INCREMENT,
application VARCHAR(30),
for_name VARCHAR(50) NOT NULL,
for_address VARCHAR(128),
for_email VARCHAR(128) NOT NULL,
for_phone VARCHAR(50) NOT NULL,
for_url VARCHAR(80),
for_comment VARCHAR(255),
by_name VARCHAR(50) NOT NULL,
by_email VARCHAR(128) NOT NULL,
by_address VARCHAR(128),
by_phone VARCHAR(50),
by_url VARCHAR(80),
date_from DATETIME(6),
date_till DATETIME(6),
num_users INTEGER,
num_tokens INTEGER,
num_clients INTEGER,
level VARCHAR(30),
signature VARCHAR(640),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
pidea_audit table obviously already exists.
(MySQLdb.OperationalError) (1050, "Table 'pidea_audit' already exists")
[SQL:
CREATE TABLE pidea_audit (
id INTEGER NOT NULL AUTO_INCREMENT,
date DATETIME(6),
signature VARCHAR(620),
action VARCHAR(50),
success INTEGER,
serial VARCHAR(20),
token_type VARCHAR(12),
user VARCHAR(20),
realm VARCHAR(20),
administrator VARCHAR(20),
action_detail VARCHAR(50),
info VARCHAR(50),
privacyidea_server VARCHAR(255),
client VARCHAR(50),
loglevel VARCHAR(12),
clearance_level VARCHAR(12),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
column resolver in pidea_audit obviously already exists.
(MySQLdb.OperationalError) (1060, "Duplicate column name 'resolver'")
[SQL: ALTER TABLE pidea_audit ADD COLUMN resolver VARCHAR(50)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Good. Columns name and active already exist.
Could not add column 'check_all_resolvers'
(MySQLdb.OperationalError) (1060, "Duplicate column name 'check_all_resolvers'")
[SQL: ALTER TABLE policy ADD COLUMN check_all_resolvers BOOL]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add index in table pidea_audit.
(MySQLdb.OperationalError) (1061, "Duplicate key name 'ix_pidea_audit_user'")
[SQL: CREATE INDEX ix_pidea_audit_user ON pidea_audit (user)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add index to 'challenge.serial'
(MySQLdb.OperationalError) (1061, "Duplicate key name 'ix_challenge_serial'")
[SQL: CREATE INDEX ix_challenge_serial ON challenge (serial)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not create table 'usercache'.
(MySQLdb.OperationalError) (1050, "Table 'usercache' already exists")
[SQL:
CREATE TABLE usercache (
id INTEGER NOT NULL AUTO_INCREMENT,
username VARCHAR(64),
resolver VARCHAR(120),
user_id VARCHAR(320),
timestamp DATETIME(6),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
## Schema seems already to be oracle compatible.
(MySQLdb.OperationalError) (1091, "Can't DROP 'ix_clientapplication_id'; check that column/key exists")
[SQL:
DROP INDEX ix_clientapplication_id ON clientapplication]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
## Unnecessary columns in table usercache obviously do not exist anymore.
(MySQLdb.OperationalError) (1091, "Can't DROP 'realm'; check that column/key exists")
[SQL: ALTER TABLE usercache DROP COLUMN realm]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add table 'authcache' - probably already exists!
(MySQLdb.OperationalError) (1050, "Table 'authcache' already exists")
[SQL:
CREATE TABLE authcache (
id INTEGER NOT NULL AUTO_INCREMENT,
first_auth DATETIME(6),
last_auth DATETIME(6),
username VARCHAR(64),
resolver VARCHAR(120),
realm VARCHAR(120),
client_ip VARCHAR(40),
user_agent VARCHAR(120),
authentication VARCHAR(64),
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Can not create table 'privacyideaserver'. It probably already exists
(MySQLdb.OperationalError) (1050, "Table 'privacyideaserver' already exists")
[SQL:
CREATE TABLE privacyideaserver (
id INTEGER NOT NULL AUTO_INCREMENT,
identifier VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
tls BOOL,
description VARCHAR(2000),
PRIMARY KEY (id),
UNIQUE (identifier)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add retries and timeout to radiusserver
(MySQLdb.OperationalError) (1060, "Duplicate column name 'retries'")
[SQL: ALTER TABLE radiusserver ADD COLUMN retries INTEGER]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add column 'smtpserver.timeout'
(MySQLdb.OperationalError) (1060, "Duplicate column name 'timeout'")
[SQL: ALTER TABLE smtpserver ADD COLUMN timeout INTEGER]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not create table eventcounter. Probably already exists!
(MySQLdb.OperationalError) (1050, "Table 'eventcounter' already exists")
[SQL:
CREATE TABLE eventcounter (
counter_name VARCHAR(80) NOT NULL,
counter_value INTEGER,
PRIMARY KEY (counter_name)
)
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add column 'priority' to table 'policy'.
(MySQLdb.OperationalError) (1060, "Duplicate column name 'priority'")
[SQL: ALTER TABLE policy ADD COLUMN priority INTEGER NOT NULL DEFAULT '1']
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add tables for periodic tasks!
(MySQLdb.OperationalError) (1050, "Table 'periodictask' already exists")
[SQL:
CREATE TABLE periodictask (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
active BOOL NOT NULL,
`interval` VARCHAR(256) NOT NULL,
nodes VARCHAR(256) NOT NULL,
taskmodule VARCHAR(256) NOT NULL,
ordering INTEGER NOT NULL,
last_update DATETIME(6) NOT NULL,
PRIMARY KEY (id),
UNIQUE (name)
)ROW_FORMAT=DYNAMIC
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add table for monitoring stats!
(MySQLdb.OperationalError) (1050, "Table 'monitoringstats' already exists")
[SQL:
CREATE TABLE monitoringstats (
id INTEGER NOT NULL AUTO_INCREMENT,
timestamp DATETIME(6) NOT NULL,
stats_key VARCHAR(128) NOT NULL,
stats_value INTEGER NOT NULL,
PRIMARY KEY (id),
CONSTRAINT msix_1 UNIQUE (timestamp, stats_key)
)ROW_FORMAT=DYNAMIC
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
position column in eventhandler table obviously already exists.
(MySQLdb.OperationalError) (1060, "Duplicate column name 'position'")
[SQL: ALTER TABLE eventhandler ADD COLUMN position VARCHAR(10)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Creation of periodictasklastrun and periodictaskoption with shortened columns failed: OperationalError('(MySQLdb.OperationalError) (1050, "Table \'periodictasklastrun\' already exists")')
This is expected behavior if they were already present.
Successfully shortened columns of periodictasklastrun and periodictaskoption.
Adding of column "policies" in table pidea_audit failed: OperationalError('(MySQLdb.OperationalError) (1060, "Duplicate column name \'policies\'")')
This is expected behavior if this column already exists.
Adding of column "used_login" in table usercache failed: OperationalError('(MySQLdb.OperationalError) (1060, "Duplicate column name \'used_login\'")')
This is expected behavior if this column already exists.
Can not create table 'tokenowner'. It probably already exists
(MySQLdb.OperationalError) (1050, "Table 'tokenowner' already exists")
[SQL:
CREATE TABLE tokenowner (
id INTEGER NOT NULL AUTO_INCREMENT,
token_id INTEGER,
resolver VARCHAR(120),
user_id VARCHAR(320),
realm_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(realm_id) REFERENCES realm (id),
FOREIGN KEY(token_id) REFERENCES token (id)
)ROW_FORMAT=DYNAMIC
]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Failed to migrate token assignment data!
(MySQLdb.OperationalError) (1054, "Unknown column 'token.resolver' in 'field list'")
[SQL: SELECT token.id AS token_id, token.serial AS token_serial, token.resolver AS token_resolver, token.resolver_type AS token_resolver_type, token.user_id AS token_user_id
FROM token
WHERE token.user_id != %s AND token.user_id IS NOT NULL]
[parameters: ('',)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add column 'smtpserver.enqueue_job'
(MySQLdb.OperationalError) (1060, "Duplicate column name 'enqueue_job'")
[SQL: ALTER TABLE smtpserver ADD COLUMN enqueue_job BOOL NOT NULL DEFAULT false]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
No admin policy active. No need to create 'tokenlist' action.
Could not create table policycondition: OperationalError('(MySQLdb.OperationalError) (1050, "Table \'policycondition\' already exists")')
No admin policy active. No need to create 'periodictask_read,mresolverread,edumfaserver_read,radiusserver_read,smtpserver_read,eventhandling_read,policyread,resolverread,caconnectorread,smsgateway_read,statistics_read,configread' action.
Failed to add 'node' column to 'clientapplication' table
(MySQLdb.OperationalError) (1060, "Duplicate column name 'node'")
[SQL: ALTER TABLE clientapplication ADD COLUMN node VARCHAR(255) NOT NULL DEFAULT 'localnode']
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Adding of column "adminuser" in table policy failed: OperationalError('(MySQLdb.OperationalError) (1060, "Duplicate column name \'adminuser\'")')
This is expected behavior if this column already exists.
Adding of column "pinode" in table policy failed: OperationalError('(MySQLdb.OperationalError) (1060, "Duplicate column name \'pinode\'")')
This is expected behavior if this column already exists.
Could not add duration and startdate to the table pidea_audit.
(MySQLdb.OperationalError) (1060, "Duplicate column name 'duration'")
[SQL: ALTER TABLE pidea_audit ADD COLUMN duration DATETIME(6)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Good. Column adminrealm already exists.
Could not add table 'userattribute'.
(MySQLdb.OperationalError) (1050, "Table 'customuserattribute' already exists")
[SQL:
CREATE TABLE customuserattribute (
id INTEGER NOT NULL AUTO_INCREMENT,
user_id VARCHAR(320),
resolver VARCHAR(120),
realm_id INTEGER,
`Key` VARCHAR(255) NOT NULL,
`Value` TEXT,
`Type` VARCHAR(100),
PRIMARY KEY (id),
FOREIGN KEY(realm_id) REFERENCES realm (id)
)
]
sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1054, "Unknown column 'policy.edumfanode' in 'field list'")
[SQL: SELECT policy.id AS policy_id, policy.active AS policy_active, policy.check_all_resolvers AS policy_check_all_resolvers, policy.name AS policy_name, policy.scope AS policy_scope, policy.action AS policy_action, policy.realm AS policy_realm, policy.adminrealm AS policy_adminrealm, policy.adminuser AS policy_adminuser, policy.resolver AS policy_resolver, policy.edumfanode AS policy_edumfanode, policy.user AS policy_user, policy.client AS policy_client, policy.time AS policy_time, policy.priority AS policy_priority, policycondition_1.id AS policycondition_1_id, policycondition_1.policy_id AS policycondition_1_policy_id, policycondition_1.section AS policycondition_1_section, policycondition_1.`Key` AS `policycondition_1_Key`, policycondition_1.comparator AS policycondition_1_comparator, policycondition_1.`Value` AS `policycondition_1_Value`, policycondition_1.active AS policycondition_1_active
FROM policy LEFT OUTER JOIN policycondition AS policycondition_1 ON policy.id = policycondition_1.policy_id ORDER BY policycondition_1.id]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Could not add column 'retry_if_failed'
(MySQLdb.OperationalError) (1060, "Duplicate column name 'retry_if_failed'")
[SQL: ALTER TABLE periodictask ADD COLUMN retry_if_failed BOOL NOT NULL DEFAULT true]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
[]
Traceback (most recent call last):
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
self.dialect.do_execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 179, in execute
res = self._query(mogrified_query)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 330, in _query
db.query(q)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/connections.py", line 257, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (1054, "Unknown column 'policy.edumfanode' in 'field list'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/edumfa/venv/bin/edumfa-manage", line 1718, in <module>
manager.run()
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask_script/__init__.py", line 417, in run
result = self.handle(argv[0], argv[1:])
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask_script/__init__.py", line 386, in handle
res = handle(*args, **config)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask_migrate/__init__.py", line 96, in wrapped
f(*args, **kwargs)
File "/opt/edumfa/venv/lib/python3.10/site-packages/flask_migrate/__init__.py", line 271, in upgrade
command.upgrade(config, revision, sql=sql, tag=tag)
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/command.py", line 403, in upgrade
script.run_env()
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/script/base.py", line 583, in run_env
util.load_python_file(self.dir, "env.py")
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
module = load_module_py(module_id, path)
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/util/pyfiles.py", line 113, in load_module_py
spec.loader.exec_module(module) # type: ignore
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/opt/edumfa/eduMFA/migrations/env.py", line 110, in <module>
run_migrations_online()
File "/opt/edumfa/eduMFA/migrations/env.py", line 100, in run_migrations_online
context.run_migrations()
File "<string>", line 8, in run_migrations
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/runtime/environment.py", line 948, in run_migrations
self.get_context().run_migrations(**kw)
File "/opt/edumfa/venv/lib/python3.10/site-packages/alembic/runtime/migration.py", line 627, in run_migrations
step.migration_fn(**kw)
File "/opt/edumfa/eduMFA/migrations/versions/fa07bd604a75.py", line 24, in upgrade
pols = P.list_policies(scope=SCOPE.ENROLL,
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/log.py", line 148, in log_wrapper
return func(*args, **kwds)
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/policy.py", line 508, in list_policies
reduced_policies = self.policies
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/policy.py", line 430, in policies
return get_config_object().policies
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 344, in get_config_object
store['config_object'] = shared_config.reload_and_clone()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 197, in reload_and_clone
self._reload_from_db()
File "/opt/edumfa/venv/lib/python3.10/site-packages/edumfa/lib/config.py", line 145, in _reload_from_db
for pol in Policy.query.all():
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2773, in all
return self._iter().all()
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2916, in _iter
result = self.session.execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1717, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
return connection._execute_clauseelement(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement
ret = self._execute_context(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context
self._handle_dbapi_exception(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception
util.raise_(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
self.dialect.do_execute(
File "/opt/edumfa/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 179, in execute
res = self._query(mogrified_query)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 330, in _query
db.query(q)
File "/opt/edumfa/venv/lib/python3.10/site-packages/MySQLdb/connections.py", line 257, in query
_mysql.connection.query(self, query)
At the moment WebAuthN Tokens are created with a hard coded display string. We should replace it by a configurable version.
Is your feature request related to a problem? Please describe.
The change of the docs theme is a quality of life improvement. It may add following features which makes browsing docs more pleasant:
Describe the solution you'd like
There are multiple Themes available at sphinx-themes.org/. I think Furo might be one of the best ones available.
furo
needs to be added as a dependencyconf.py
furo
needs to be set as a themeIs your feature request related to a problem? Please describe.
Problem: If a user sees multiple MFA tokens in their list, it is hard to tell which is which. This can be a problem if, for instance, they have two different tokens on two different devices and one of them gets lost. They now want to invalidate the token stored on the lost device (meaning delete it in eduMFA), but in order to do that, they must know which token that is.
Describe the solution you'd like
Proposed solution: store a user-supplied name (like, e.g. "on my work iPad") and the creation date with each token and show these in the list of tokens. This akin to GitLab showing the user, among other things, a token name and a creation date in their list of access tokens, so they can clearly distinguish different tokens.
Describe alternatives you've considered
None.
Additional context
Screenshot from Gitlab:
For eduMFA developers. Describe and document the development plans:
Describe what needs to be achieved and how the scenario looks like
If sensible use a checklist to check, which requirements have been covered by your implementation!
Describe your implementation plans - what you are exactly going to implement. Use references/link to the existing code
Cover the following aspects:
Describe the database table that will be added. Define the name
of the table and the names of the columns
.
Define, if you need to add a DB migration script.
Describe what needs to be implemented, preferably also in which files.
Use example code of what you plan to implement:
new_feature = [ x.name for x in some_return_values if x.id > 0 ]
In the TODO section you can add all steps that need to be implemented
USE CHECKLISTS, THESE WILL BE VISIBLE AS TASKS!
name
in models.py
prepolicy
Use further checkboxes for
I run edumfa-schema-upgrade eduMFA/migrations/
and got this error message:
sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1054, "Unknown column 'policy.edumfanode' in 'field list'") [SQL: SELECT policy.id AS policy_id, policy.active AS policy_active, policy.check_all_resolvers AS policy_check_all_resolvers, policy.name AS policy_name, policy.scope AS policy_scope, policy.action AS policy_action, policy.realm AS policy_realm, policy.adminrealm AS policy_adminrealm, policy.adminuser AS policy_adminuser, policy.resolver AS policy_resolver, policy.edumfanode AS policy_edumfanode, policy.user AS policy_user, policy.client AS policy_client, policy.time AS policy_time, policy.priority AS policy_priority, policycondition_1.id AS policycondition_1_id, policycondition_1.policy_id AS policycondition_1_policy_id, policycondition_1.section AS policycondition_1_section, policycondition_1.
KeyAS
policycondition_1_Key, policycondition_1.comparator AS policycondition_1_comparator, policycondition_1.
ValueAS
policycondition_1_Value, policycondition_1.active AS policycondition_1_active FROM policy LEFT OUTER JOIN policycondition AS policycondition_1 ON policy.id = policycondition_1.policy_id ORDER BY policycondition_1.id] (Background on this error at: https://sqlalche.me/e/14/e3q8)
Access the documentation
See the documentation
404 errors
Password is not right encoded with local checkpin
What do you think, how the system should have worked?
Please fix encoding and never show cleartextpassword in Logfile
What did actually happen?
Set EDUMFA_LOGLEVEL = logging.DEBUG in edumfa.cfg and take a look at the edumfa.log!
If appropriate, attach the log file or paste relevant portions.
[INFO][edumfa.lib.eventhandler.tokenhandler:568] Action change failcounter requires serial number. But no serial number could be found in request <Request 'http://127.0.0.1/validate/check?user=USERID&realm=REALM&pass=somesigns%somesigns' [GET]>.
[INFO][edumfa.lib.user:420] User 'USERID' from realm 'REALM' tries to authenticate
[WARNING][edumfa.lib.resolvers.LDAPIdResolver:368] failed to check password for 'USERID'/'cn=USERID,dc=uni-bamberg,dc=de': Exception('Wrong credentials')
[INFO][edumfa.lib.user:432] user User(login='USERID', realm='REALM', resolver='RESOLVERNAME') failed to authenticate.
Installation of eduMFA 2.1.0 on AlmaLinux 9 for migration from privacyidea
$ python3 -m venv --upgrade-deps /opt/edumfa/
$ . /opt/edumfa/bin/activate
$ pip install -r https://raw.githubusercontent.com/eduMFA/eduMFA/v2.1.0/requirements.txt
$ pip install edumfa
Using converted, working privacyidea configuration:
# cd /etc/edumfa/
# mv pi.cfg edumfa.cfg
# sed -i -e '/^user/ s/=pi$/=edumfa/' mysql.cnf
# sed -i -e '/^#\?PI_/ s/PI_/EDUMFA_/' -e 's/\/privacyidea/\/edumfa/g' -e '/SQLALCHEMY_DATABASE_URI/ s/\/pi/\/edumfa/g' edumfa.cfg
No errors.
(edumfa) [edumfa@idp9a-test ~]$ edumfa-manage help
Can not import grpc modules.
...
I see that error on every command.
$ edumfa-schema-upgrade /opt/edumfa/lib/edumfa/migrations
Can not import grpc modules.
...
Traceback (most recent call last):
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
...
pymysql.err.OperationalError: (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
The above exception was the direct cause of the following exception:
...
Of course, the database is configured correctly and I can connect to the database without problems using mariadb using the database server, user name, database name and password from the configuration file.
$ mariadb -h mdb.example.com -u edumfa -p edumfa
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
...
I think part of the grpc error problem is
"import eduMFA" instead of "import edumfa". I am not sure if the error is related to the connection issue.There is nothing in the log file. The full traceback above is:
(edumfa) [edumfa@idp9a-test ~]$ edumfa-schema-upgrade /opt/edumfa/lib/edumfa/migrations
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_\ v2.1.0
Traceback (most recent call last):
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/edumfa/bin/edumfa-manage", line 8, in <module>
sys.exit(cli())
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask/cli.py", line 386, in decorator
return ctx.invoke(f, *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/cli.py", line 229, in current
_current(directory, verbose)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
f(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 251, in current
command.current(config, verbose=verbose)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/command.py", line 632, in current
script.run_env()
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/script/base.py", line 582, in run_env
util.load_python_file(self.dir, "env.py")
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
module = load_module_py(module_id, path)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 113, in load_module_py
spec.loader.exec_module(module) # type: ignore
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 110, in <module>
run_migrations_online()
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 91, in run_migrations_online
connection = engine.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3276, in connect
return self._connection_cls(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 148, in __init__
Connection._handle_dbapi_exception_noconnection(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 2440, in _handle_dbapi_exception_noconnection
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
++ Stamping DB to 4f32a4e1bf33
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_\ v2.1.0
Traceback (most recent call last):
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/edumfa/bin/edumfa-manage", line 8, in <module>
sys.exit(cli())
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask/cli.py", line 386, in decorator
return ctx.invoke(f, *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/cli.py", line 249, in stamp
_stamp(directory, revision, sql, tag, purge)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
f(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 259, in stamp
command.stamp(config, revision, sql=sql, tag=tag, purge=purge)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/command.py", line 699, in stamp
script.run_env()
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/script/base.py", line 582, in run_env
util.load_python_file(self.dir, "env.py")
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
module = load_module_py(module_id, path)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 113, in load_module_py
spec.loader.exec_module(module) # type: ignore
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 110, in <module>
run_migrations_online()
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 91, in run_migrations_online
connection = engine.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3276, in connect
return self._connection_cls(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 148, in __init__
Connection._handle_dbapi_exception_noconnection(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 2440, in _handle_dbapi_exception_noconnection
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
++ Upgrading DB schema.
Can not import grpc modules.
_ __ __ ______
| | | \/ | ____/\
___ __| |_ _| \ / | |__ / \
/ _ \/ _` | | | | |\/| | __/ /\ \
| __/ (_| | |_| | | | | | / ____ \
\___|\__,_|\__,_|_| |_|_|/_/ \_\ v2.1.0
Running online
Traceback (most recent call last):
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/edumfa/bin/edumfa-manage", line 8, in <module>
sys.exit(cli())
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask/cli.py", line 386, in decorator
return ctx.invoke(f, *args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/cli.py", line 154, in upgrade
_upgrade(directory, revision, sql, tag, x_arg)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
f(*args, **kwargs)
File "/opt/edumfa/lib64/python3.9/site-packages/flask_migrate/__init__.py", line 200, in upgrade
command.upgrade(config, revision, sql=sql, tag=tag)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/command.py", line 406, in upgrade
script.run_env()
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/script/base.py", line 582, in run_env
util.load_python_file(self.dir, "env.py")
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
module = load_module_py(module_id, path)
File "/opt/edumfa/lib64/python3.9/site-packages/alembic/util/pyfiles.py", line 113, in load_module_py
spec.loader.exec_module(module) # type: ignore
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 110, in <module>
run_migrations_online()
File "/opt/edumfa/lib/edumfa/migrations/env.py", line 91, in run_migrations_online
connection = engine.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3276, in connect
return self._connection_cls(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 148, in __init__
Connection._handle_dbapi_exception_noconnection(
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 2440, in _handle_dbapi_exception_noconnection
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/base.py", line 3300, in raw_connection
return self.pool.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 712, in checkout
rec = pool._do_get()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/impl.py", line 308, in _do_get
return self._create_connection()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 390, in _create_connection
return _ConnectionRecord(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 674, in __init__
self.__connect()
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 901, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/pool/base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/sqlalchemy/engine/default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 361, in __init__
self.connect()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 669, in connect
self._request_authentication()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 957, in _request_authentication
auth_packet = self._read_packet()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/opt/edumfa/lib64/python3.9/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'edumfa'@'idp9a-test.example.com' (using password: YES)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Is your feature request related to a problem? Please describe.
User interfase in the Web UI needs a separate field for entering the MFA token. That is a usabilty problem. Enter the TOTP behind the password into Password field is unusual and is reason for user mistakes.
Describe the solution you'd like
Implementation a separated field for totp token.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Add any other context or screenshots, that might help us to better understand your idea, your need and your circumstances.
For eduMFA developers. Describe and document the development plans:
Describe what needs to be achieved and how the scenario looks like
If sensible use a checklist to check, which requirements have been covered by your implementation!
Describe your implementation plans - what you are exactly going to implement. Use references/link to the existing code
Cover the following aspects:
Describe the database table that will be added. Define the name
of the table and the names of the columns
.
Define, if you need to add a DB migration script.
Describe what needs to be implemented, preferably also in which files.
Use example code of what you plan to implement:
new_feature = [ x.name for x in some_return_values if x.id > 0 ]
In the TODO section you can add all steps that need to be implemented
USE CHECKLISTS, THESE WILL BE VISIBLE AS TASKS!
name
in models.py
prepolicy
Use further checkboxes for
Using passkeys triggers a error/warning message. This has no real impact on the usability of passkeys themself but should be fixed.
[2024-03-18 09:47:38,134][162][140073668225920][ERROR][edumfa.api.lib.postpolicy:351] There was no acceptable client mode in the multi-challenge list. The preferred client mode is set to "interactive". Please check Your policy (['interactive', 'webauthn', 'poll', 'u2f']). Error: list index out of range
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
Warning
These dependencies are deprecated:
Datasource | Name | Replacement PR? |
---|---|---|
npm | angular |
|
npm | angular-sanitize |
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
deploy/docker-compose-example.yml
Dockerfile
python 3.12-slim-bookworm
python 3.12-slim-bookworm
.github/workflows/bandit.yml
actions/checkout v4
shundor/python-bandit-scan v1.0
.github/workflows/codeql.yml
actions/checkout v4
github/codeql-action v3
github/codeql-action v3
.github/workflows/codespell.yml
actions/checkout v4
codespell-project/actions-codespell v2
.github/workflows/docker.yml
actions/checkout v4
docker/setup-qemu-action v3
docker/setup-buildx-action v3
docker/login-action v3
docker/metadata-action v5
docker/build-push-action v6
.github/workflows/greetings.yml
.github/workflows/python-dist.yml
actions/checkout v4
actions/setup-python v5
softprops/action-gh-release v2
.github/workflows/python.yml
actions/checkout v4
dorny/paths-filter v3
actions/checkout v4
actions/setup-python v5
actions/cache v4
codecov/codecov-action v4
ubuntu 22.04
.github/workflows/release.yml
actions/checkout v4
actions/setup-python v5
actions/upload-artifact v4
.github/workflows/ubuntu.yml
actions/checkout v4
actions/checkout v4
ubuntu 22.04
ubuntu 20.04
edumfa/static/package.json
angular 1.8.3
angular-gettext 2.4.2
angular-hotkeys 1.7.0
angular-inform 0.0.19
angular-sanitize 1.8.3
angular-ui-bootstrap 2.5.6
angular-ui-router 1.0.30
bootstrap 3.4.1
isteven-angular-multiselect 4.0.0
jquery 3.6.0
ng-file-upload 12.2.13
ng-idle 1.3.2
doc/requirements.txt
furo ==2024.7.18
docutils ==0.21.2
imagesize ==1.4.1
packaging ==24.1
pyenchant ==3.2.2
Pygments ==2.18.0
snowballstemmer ==2.2.0
Sphinx ==7.4.6
sphinxcontrib-applehelp ==1.0.8
sphinxcontrib-devhelp ==1.0.6
sphinxcontrib-htmlhelp ==2.0.5
sphinxcontrib-httpdomain ==1.8.1
sphinxcontrib-jsmath ==1.0.1
sphinxcontrib-qthelp ==1.0.7
sphinxcontrib-serializinghtml ==1.1.10
sphinxcontrib-spelling ==8.0.0
sphinx-copybutton ==0.5.2
sphinx-inline-tabs ==2023.4.21
requirements-hsm.txt
PyKCS11 ==1.5.16
requirements-kerberos.txt
gssapi ==1.8.3
requirements.txt
alembic ==1.13.2
argon2-cffi ==23.1.0
argon2-cffi-bindings ==21.2.0
async-timeout ==4.0.3
babel ==2.15.0
bcrypt ==4.1.3
beautifulsoup4 ==4.12.3
blinker ==1.8.2
cachetools ==5.4.0
cbor2 ==5.6.4
certifi ==2024.7.4
cffi ==1.16.0
charset-normalizer ==3.3.2
click ==8.1.7
configobj ==5.0.8
croniter ==2.0.7
cryptography ==42.0.8
defusedxml ==0.7.1
flask ==3.0.3
flask-babel ==4.0.0
flask-migrate ==4.0.7
flask-sqlalchemy ==3.1.1
flask-versioned ==0.9.4.post20101221
google-auth ==2.32.0
grpcio ==1.64.1
huey ==2.5.1
idna ==3.7
importlib-metadata ==8.0.0
itsdangerous ==2.2.0
jinja2 ==3.1.4
ldap3 ==2.9.1
lxml ==5.2.2
mako ==1.3.5
markupsafe ==2.1.5
netaddr ==1.3.0
passlib ==1.7.4
pyasn1 ==0.6.0
pyasn1-modules ==0.4.0
pycparser ==2.22
pydash ==8.0.1
pyjwt ==2.8.0
pymysql ==1.1.1
pyopenssl ==24.1.0
pyrad ==2.4
python-dateutil ==2.9.0.post0
python-gnupg ==0.5.2
pytz ==2024.1
pyyaml ==6.0.1
redis ==5.0.7
requests ==2.32.3
rsa ==4.9
segno ==1.6.1
six ==1.16.0
smpplib ==2.2.3
soupsieve ==2.5
sqlalchemy ==2.0.31
typing-extensions ==4.12.2
urllib3 ==2.2.2
werkzeug ==3.0.3
zipp ==3.19.2
setuptools ==70.3.0
setup.py
Flask-Babel ==4.0.0
Flask-Migrate ==4.0.7
Flask-SQLAlchemy ==3.1.1
Flask-Versioned ==0.9.4-20101221
Flask ==3.0.3
PyJWT ==2.8.0
PyMySQL ==1.1.1
PyYAML ==6.0.1
SQLAlchemy ==2.0.31
argon2_cffi ==23.1.0
beautifulsoup4 ==4.12.3
cbor2 ==5.6.4
configobj ==5.0.8
croniter ==2.0.7
cryptography ==42.0.8
defusedxml ==0.7.1
google-auth ==2.32.0
grpcio ==1.64.1
huey ==2.5.1
importlib_metadata ==8.0.0
ldap3 ==2.9.1
lxml ==5.2.2
netaddr ==1.3.0
passlib ==1.7.4
pyOpenSSL ==24.1.0
pydash ==8.0.1
pyrad ==2.4
python-dateutil ==2.9.0.post0
python-gnupg ==0.5.2
requests ==2.32.3
segno ==1.6.1
smpplib ==2.2.3
typing-extensions ==4.12.2
pyasn1 ==0.6.0
urllib3 ==2.2.2
Pallets-Sphinx-Themes ==2.1.3
Sphinx ==7.4.6
sphinxcontrib-httpdomain ==1.8.1
sphinxcontrib-plantuml ==0.30
sphinxcontrib-spelling ==8.0.0
mock ==5.1.0
pytest ==8.2.2
pytest-cov ==5.0.0
responses ==0.25.3
testfixtures ==8.3.0
psycopg2 ==2.9.9
PyKCS11 ==1.5.16
gssapi ==1.8.3
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.