Giter Site home page Giter Site logo

rseichter / automx2 Goto Github PK

View Code? Open in Web Editor NEW
60.0 8.0 18.0 1.83 MB

Mail User Agent (email client) configuration made easy

License: GNU General Public License v3.0

Python 89.33% Mako 0.39% Shell 8.42% Makefile 1.85%
autoconfig autodiscover mobileconfig automx automx2

automx2's Introduction

automx2: Mail User Agent (email client) configuration made easy

automx2 makes configuring email accounts easy. It unites methods for automated mailbox configuration from Apple's Mobileconfig, Microsoft's Autodiscover and Mozilla's Autoconfig in one tool. automx2 is successor to automx. It has been designed to be easier to setup, easier to configure and easier to use.

Copyright

automx2 is Copyright © 2019-2024 Ralph Seichter. automx2 is licensed under the GNU General Public License V3 or later. The project is hosted on GitHub in the rseichter/automx2 repository and published on PyPI.org.

Documentation

Detailed documentation is available in HTML, PDF and other formats.

Contributing

To avoid copyright issues, I do not currently accept code contributions. I hope that this will change at some point in the future, but for now, please refrain from opening merge requests.

However, submitting ideas, suggestions and bug reports in the form of GitHub issues is welcome. Please refer to this blog article for an explanation on why issues are a good method to share and discuss ideas.

Sponsorship

It is possible to sponsor specific new features. Please contact me via email to discuss this in detail.

automx2's People

Contributors

patrickbenkoetter avatar rseichter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

automx2's Issues

autodiscover <SSL>off</SSL> always returned for mail servers

Using release 2021.3.1 on Ubuntu Server 20.04 I am finding that all mail server autodiscover requests contain the following value in their XML response:

<SSL>off</SSL>

This is regardless of setting the column socket_type to SSL in table server, as shown in the examples. By way of database verification, autoconfig returns <socketType>SSL</socketType> for the same server.

I believe this to be an error here:

SubElement(element, 'SSL').text = self.on_off('SSL' == server.authentication)

Which should read:

SubElement(element, 'SSL').text = self.on_off('SSL' == server.socket_type)

This appears to then correctly provision accounts using SSL via the autodiscover protocol.

Support for custom database formats

I use PostfixAdmin to manage the domains and accounts on my mail server, so I need automx2 to be able to query its database. The previous version and alternatives like email-autoconf supported arbitrary database formats by allowing you to provide a query, but this is missing in automx2. Any chance we can get support for something like that, which is far from an edge use cage?

MySQLdb.IntegrityError: Cannot add or update a child row: a foreign key constraint fails

File used to populate the MariaDB database: https://github.com/rseichter/automx2/blob/master/contrib/seed-example.json
Getting the same error whether I use mysqlclient or pymysql.

oct. 26 16:02:01 arch-server python[1828451]: Exception on /initdb/ [POST]
oct. 26 16:02:01 arch-server python[1828451]: Traceback (most recent call last):
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1880, in _execute_context
oct. 26 16:02:01 arch-server python[1828451]:     self.dialect.do_executemany(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 193, in do_executemany
oct. 26 16:02:01 arch-server python[1828451]:     rowcount = cursor.executemany(statement, parameters)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 230, in executemany
oct. 26 16:02:01 arch-server python[1828451]:     return self._do_execute_many(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 266, in _do_execute_many
oct. 26 16:02:01 arch-server python[1828451]:     rows += self.execute(sql + postfix)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 206, in execute
oct. 26 16:02:01 arch-server python[1828451]:     res = self._query(query)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 319, in _query
oct. 26 16:02:01 arch-server python[1828451]:     db.query(q)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/connections.py", line 254, in query
oct. 26 16:02:01 arch-server python[1828451]:     _mysql.connection.query(self, query)
oct. 26 16:02:01 arch-server python[1828451]: MySQLdb.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`automx2`.`domain`, CONSTRAINT `domain_ibfk_1` FOREIGN KEY (`provider_id`) REFERENCES `provider` (`id`))')
oct. 26 16:02:01 arch-server python[1828451]: The above exception was the direct cause of the following exception:
oct. 26 16:02:01 arch-server python[1828451]: Traceback (most recent call last):
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app
oct. 26 16:02:01 arch-server python[1828451]:     response = self.full_dispatch_request()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request
oct. 26 16:02:01 arch-server python[1828451]:     rv = self.handle_user_exception(e)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request
oct. 26 16:02:01 arch-server python[1828451]:     rv = self.dispatch_request()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request
oct. 26 16:02:01 arch-server python[1828451]:     return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/views.py", line 107, in view
oct. 26 16:02:01 arch-server python[1828451]:     return current_app.ensure_sync(self.dispatch_request)(**kwargs)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/flask/views.py", line 188, in dispatch_request
oct. 26 16:02:01 arch-server python[1828451]:     return current_app.ensure_sync(meth)(**kwargs)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/automx2/views/initdb.py", line 57, in post
oct. 26 16:02:01 arch-server python[1828451]:     return self.init_db(request.json)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/automx2/views/initdb.py", line 42, in init_db
oct. 26 16:02:01 arch-server python[1828451]:     populate_db(data)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/automx2/database.py", line 163, in populate_db
oct. 26 16:02:01 arch-server python[1828451]:     populate_with_dict(data_source)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/automx2/database.py", line 135, in populate_with_dict
oct. 26 16:02:01 arch-server python[1828451]:     sid = Server.query.count()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 3167, in count
oct. 26 16:02:01 arch-server python[1828451]:     return self._from_self(col).enable_eagerloads(False).scalar()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2892, in scalar
oct. 26 16:02:01 arch-server python[1828451]:     ret = self.one()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2869, in one
oct. 26 16:02:01 arch-server python[1828451]:     return self._iter().one()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2907, in _iter
oct. 26 16:02:01 arch-server python[1828451]:     result = self.session.execute(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1662, in execute
oct. 26 16:02:01 arch-server python[1828451]:     ) = compile_state_cls.orm_pre_session_exec(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 312, in orm_pre_session_exec
oct. 26 16:02:01 arch-server python[1828451]:     session._autoflush()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2259, in _autoflush
oct. 26 16:02:01 arch-server python[1828451]:     util.raise_(e, with_traceback=sys.exc_info()[2])
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
oct. 26 16:02:01 arch-server python[1828451]:     raise exception
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2248, in _autoflush
oct. 26 16:02:01 arch-server python[1828451]:     self.flush()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3429, in flush
oct. 26 16:02:01 arch-server python[1828451]:     self._flush(objects)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3568, in _flush
oct. 26 16:02:01 arch-server python[1828451]:     with util.safe_reraise():
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
oct. 26 16:02:01 arch-server python[1828451]:     compat.raise_(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
oct. 26 16:02:01 arch-server python[1828451]:     raise exception
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3529, in _flush
oct. 26 16:02:01 arch-server python[1828451]:     flush_context.execute()
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
oct. 26 16:02:01 arch-server python[1828451]:     rec.execute(self)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
oct. 26 16:02:01 arch-server python[1828451]:     util.preloaded.orm_persistence.save_obj(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 245, in save_obj
oct. 26 16:02:01 arch-server python[1828451]:     _emit_insert_statements(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1097, in _emit_insert_statements
oct. 26 16:02:01 arch-server python[1828451]:     c = connection._execute_20(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_20
oct. 26 16:02:01 arch-server python[1828451]:     return meth(self, args_10style, kwargs_10style, execution_options)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 333, in _execute_on_connection
oct. 26 16:02:01 arch-server python[1828451]:     return connection._execute_clauseelement(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement
oct. 26 16:02:01 arch-server python[1828451]:     ret = self._execute_context(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context
oct. 26 16:02:01 arch-server python[1828451]:     self._handle_dbapi_exception(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception
oct. 26 16:02:01 arch-server python[1828451]:     util.raise_(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
oct. 26 16:02:01 arch-server python[1828451]:     raise exception
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1880, in _execute_context
oct. 26 16:02:01 arch-server python[1828451]:     self.dialect.do_executemany(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 193, in do_executemany
oct. 26 16:02:01 arch-server python[1828451]:     rowcount = cursor.executemany(statement, parameters)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 230, in executemany
oct. 26 16:02:01 arch-server python[1828451]:     return self._do_execute_many(
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 266, in _do_execute_many
oct. 26 16:02:01 arch-server python[1828451]:     rows += self.execute(sql + postfix)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 206, in execute
oct. 26 16:02:01 arch-server python[1828451]:     res = self._query(query)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 319, in _query
oct. 26 16:02:01 arch-server python[1828451]:     db.query(q)
oct. 26 16:02:01 arch-server python[1828451]:   File "/srv/http/automx2/.venv/lib/python3.10/site-packages/MySQLdb/connections.py", line 254, in query
oct. 26 16:02:01 arch-server python[1828451]:     _mysql.connection.query(self, query)
oct. 26 16:02:01 arch-server python[1828451]: sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
oct. 26 16:02:01 arch-server python[1828451]: (MySQLdb.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`automx2`.`domain`, CONSTRAINT `domain_ibfk_1` FOREIGN KEY (`provider_id`) REFERENCES `provider` (`id`))')
oct. 26 16:02:01 arch-server python[1828451]: [SQL: INSERT INTO domain (id, name, provider_id, ldapserver_id) VALUES (%s, %s, %s, %s)]
oct. 26 16:02:01 arch-server python[1828451]: [parameters: ((0, 'example.com', 0, None), (1, 'example.net', 0, None), (2, 'example.org', 0, None))]
oct. 26 16:02:01 arch-server python[1828451]: (Background on this error at: https://sqlalche.me/e/14/gkpj)
oct. 26 16:02:01 arch-server python[1828451]: 127.0.0.1 - - [26/Oct/2022 16:02:01] "POST /initdb/ HTTP/1.1" 500 -

how to do wildcard domains

Hello

I have traditionally written my own autodiscovery.xml manually. But your project seems very convenient, so I wanted to give it a try.

have a very simple setup with a single provider, single imap and singe smtp for multiple domains.
it works when i enter a specific domain in domains table, But i do not understand how to map all domains ever queried on the server to a single provider/server set. basically a wildcard using %EMAILDOMAIN% as the domain part.

MS Outlook: which version and OS works for autodiscover?

Hello!

Could you specify which version of MS Outlook (version and OS) supports the autodiscover protocol with automx2?
Or which one did you test and it works?

Does it really support Outlook 2016 (Windows I guess)? https://rseichter.github.io/automx2/#autodiscover
I mean when you log the requests, it does seem they do expect an Exchange ActiveSync response by automx2 from that URL: https://prod-autodetect.outlookmobile.com/detect.

Thanks,

HLFH

Add support for third Autodiscover.xml possible URL

When looking at the code, it seems there is only two URL supported for the Autodiscover.xml file

MSOFT_ALTERNATE_ROUTE = '/AutoDiscover/AutoDiscover.xml'
MSOFT_CONFIG_ROUTE = '/autodiscover/autodiscover.xml'

There is a third URL which microsoft use: '/Autodiscover/Autodiscover.xml'

Said URL seems to be the default when using the EAS validation tool on Microsoft website here: https://testconnectivity.microsoft.com/tests/Eas/input

Confirmed by my Nginx logs:

[17/Jan/2022:13:51:36 -0500] "POST /AutoDiscover/Autodiscover.xml HTTP/1.1" 404 138 "-" "Microsoft-Server-ActiveSync/12.0+(TestExchangeConnectivity.com)"

Dav Server support documentation & non-LDAP user info.

Hi Ralph,

I have been exploring Automx2, and have it running in foreground with MariaDB back-end for the moment.
It responds as expected, but I have realised that it needs to query an LDAP server for the verified user info.

I cannot tell if the recent DAV support is meant to be an alternate to LDAP, or provide some other functionality, as there is little info in the documentation regarding DAV support.

I have a Postfix/Dovecot mail server with MariaDB back-end for user info and SOGo for webmail (including DAV).
So I'd like to explore the possibilities / feasibility of supporting a MariaDB user base or using cardDav somehow.

Thank you,
Rob.

contrib/sqlite-generate.sh is only good for one domain

In trying to get automx2 setup for several domains, I quickly noticed that sqlite-generate.sh wipes each table as it goes to add each entry.

DELETE FROM provider;
DELETE FROM ldapserver;
DELETE FROM server;
DELETE FROM domain;
DELETE FROM server_domain;

As I was only doing this for a very few domains, I changed around the deletes to be specific to the domain and server it rows at hand:

ie:
DELETE FROM domain where name = '${DOMAIN}';

Documentation around installation + running is not working well for Debian 12 setup

Howdy,

I'm following the documentation in HTML format at https://rseichter.github.io/automx2/

I've followed the steps in getting automx2 installed - last step of "pip install automx2" is successful.

I've created a configuration file at ~/.automx2.conf as per the next section.

The next section, 7.3, has one redirecting in the documentation to find out how to run automx2, so off to section 9 I go. I can see that both the OpenRC script and the Systemd scripts would fail as written, since there is no system-wide flask, it was just installed in the user's account as a dependency for automx2. So, other installation work would have to be done to make either init script type function as written.

However, to try and test running it manually as the user, it is suggested to:

.venv/scripts/flask.sh run --host=127.0.0.1 --port=4243

First, there is no .venv/scripts/flask.sh.

There is, however, .venv/bin/flask. So let's try that:


$ which flask
/home/automx/.venv/bin/flask
$flask run --host=127.0.0.1 --port=4243
sage: flask run [OPTIONS]
Try 'flask run --help' for help.

Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.

So.... what are we supposed to be doing here to get it to run?

Missing files on fresh install ?

I'm trying to install automx2 but I'm having issues. I'm not really familiar with python virtual env but just after installing, I can't find the files to launch the local default instance of automx2.

My python version is 3.8.10 under Ubuntu 20.04.

I've setup the .venv folder using setupvenv.sh and it seems I can "enter" it and install automx2 via pip correctly

root@prd-mail:/opt/automx2# ll
total 16
drwxr-xr-x  3 root root 4096 Jan 14 15:29 ./
drwxr-xr-x 15 root root 4096 Jan 14 15:29 ../
-rwxr--r--  1 root root  417 Jan 14 15:29 setupvenv.sh*
drwxr-xr-x  7 root root 4096 Jan 14 15:29 .venv/
root@prd-mail:/opt/automx2# source .venv/bin/activate
(.venv) root@prd-mail:/opt/automx2# pip install automx2
Requirement already satisfied: automx2 in ./.venv/lib/python3.8/site-packages (2021.6)
Requirement already satisfied: ldap3>=2.6 in ./.venv/lib/python3.8/site-packages (from automx2) (2.9.1)
Requirement already satisfied: Flask>=1.1.1 in ./.venv/lib/python3.8/site-packages (from automx2) (2.0.2)
Requirement already satisfied: Flask-SQLAlchemy>=2.4.1 in ./.venv/lib/python3.8/site-packages (from automx2) (2.5.1)
Requirement already satisfied: Flask-Migrate>=2.5.2 in ./.venv/lib/python3.8/site-packages (from automx2) (3.1.0)
Requirement already satisfied: click>=7.1.2 in ./.venv/lib/python3.8/site-packages (from Flask>=1.1.1->automx2) (8.0.3)
Requirement already satisfied: itsdangerous>=2.0 in ./.venv/lib/python3.8/site-packages (from Flask>=1.1.1->automx2) (2.0.1)
Requirement already satisfied: Werkzeug>=2.0 in ./.venv/lib/python3.8/site-packages (from Flask>=1.1.1->automx2) (2.0.2)
Requirement already satisfied: Jinja2>=3.0 in ./.venv/lib/python3.8/site-packages (from Flask>=1.1.1->automx2) (3.0.3)
Requirement already satisfied: alembic>=0.7 in ./.venv/lib/python3.8/site-packages (from Flask-Migrate>=2.5.2->automx2) (1.7.5)
Requirement already satisfied: SQLAlchemy>=0.8.0 in ./.venv/lib/python3.8/site-packages (from Flask-SQLAlchemy>=2.4.1->automx2) (1.4.29)
Requirement already satisfied: pyasn1>=0.4.6 in ./.venv/lib/python3.8/site-packages (from ldap3>=2.6->automx2) (0.4.8)
Requirement already satisfied: Mako in ./.venv/lib/python3.8/site-packages (from alembic>=0.7->Flask-Migrate>=2.5.2->automx2) (1.1.6)
Requirement already satisfied: importlib-metadata in ./.venv/lib/python3.8/site-packages (from alembic>=0.7->Flask-Migrate>=2.5.2->automx2) (4.10.0)
Requirement already satisfied: importlib-resources in ./.venv/lib/python3.8/site-packages (from alembic>=0.7->Flask-Migrate>=2.5.2->automx2) (5.4.0)
Requirement already satisfied: MarkupSafe>=2.0 in ./.venv/lib/python3.8/site-packages (from Jinja2>=3.0->Flask>=1.1.1->automx2) (2.0.1)
Requirement already satisfied: greenlet!=0.4.17 in ./.venv/lib/python3.8/site-packages (from SQLAlchemy>=0.8.0->Flask-SQLAlchemy>=2.4.1->automx2) (1.1.2)
Requirement already satisfied: zipp>=0.5 in ./.venv/lib/python3.8/site-packages (from importlib-metadata->alembic>=0.7->Flask-Migrate>=2.5.2->automx2) (3.7.0)
(.venv) root@prd-mail:/opt/automx2#

Now the next part is the one I'm having trouble with. I'm trying to launch automx2 from the shell just to confirm that it runs correctly.
The thing is according to the doc it seems I don't need to enter the venv again to launch it ?

The doc says to launch it like so:
contrib/flask.sh run --host=127.0.0.1 --port=4243

but my install folder does not have a contrib folder:

drwxr-xr-x  3 root root 4096 Jan 14 15:29 ./
drwxr-xr-x 15 root root 4096 Jan 14 15:29 ../
-rwxr--r--  1 root root  417 Jan 14 15:29 setupvenv.sh*
drwxr-xr-x  7 root root 4096 Jan 14 15:29 .venv/

No matter what I do I'm not able to start automx2

root@prd-mail:/opt/automx2# contrib/flask.sh run --host=127.0.0.1 --port=4243
-bash: contrib/flask.sh: No such file or directory
root@prd-mail:/opt/automx2# source .venv/bin/activate
(.venv) root@prd-mail:/opt/automx2# contrib/flask.sh run --host=127.0.0.1 --port=4243
-bash: contrib/flask.sh: No such file or directory

I'm I missing something or is there some steps missing from the doc ?
Thanks !

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.