diff --git a/.dockerignore b/.dockerignore index ac3ce9c2f..da809c15f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,6 +2,7 @@ build dist frontend/node_modules modoboa.egg-info +docker/mariadb .tox diff --git a/.gitignore b/.gitignore index 31a3fa9ed..750781646 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ node_modules /static/dist /frontend/webpack-stats.json /frontend/src/translations.json -/frontend/.__mf__temp/ +/frontend/.__mf__temp/ # TOX stuff test_project/modoboa.db @@ -43,3 +43,4 @@ test_project/media # Docker docker/collections docker/redis +docker/mariadb diff --git a/docker-compose.yml b/docker-compose.yml index dbb56a62d..84262f28a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,17 @@ services: LDAP_ADMIN_PASSWORD: test profiles: [ldap] + mariadb: + image: mariadb:10 + restart: unless-stopped + environment: + MARIADB_ROOT_PASSWORD: Password1000 + MARIADB_DATABASE: amavis + + volumes: + - ./docker/mariadb:/var/lib/mysql + profiles: [amavis] + rq: build: context: . @@ -104,6 +115,19 @@ services: depends_on: - api + amavis: + container_name: modoboa_amavis + restart: unless-stopped + build: + context: . + dockerfile: docker/Dockerfile.amavis.dev + profiles: [amavis] + ports: + - 9998:9998 + volumes: + - ./docker/amavis_config/amavisd.conf:/etc/amavisd.conf + command: amavisd debug + dovecot: container_name: modoboa_dovecot restart: unless-stopped diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 84410fbc9..71d868a2f 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -9,25 +9,26 @@ FROM base AS build RUN apk add --update openssl librrd python3-dev libffi-dev \ gcc g++ musl-dev libxml2-dev libxslt-dev \ - libressl-dev jpeg-dev rrdtool-dev file make \ + openssl-dev jpeg-dev rrdtool-dev file make \ gettext freetype-dev cairo-dev cargo git \ - openldap-dev \ + mariadb-dev openldap-dev \ && rm -rf /var/cache/apk/* RUN python3 -m venv $VIRTUAL_ENV WORKDIR /tmp COPY . /tmp RUN python -m pip install -U pip pip-tools ruff RUN pip-compile --output-file=requirements.txt pyproject.toml +RUN pip-compile --extra=mysql --output-file=mysql-requirements.txt pyproject.toml RUN pip-compile --extra=ldap --output-file=ldap-requirements.txt pyproject.toml RUN pip-compile --extra=dev --output-file=dev-requirements.txt pyproject.toml RUN pip-compile --extra=test --output-file=test-requirements.txt pyproject.toml -RUN pip install -r requirements.txt -r ldap-requirements.txt -r test-requirements.txt -r dev-requirements.txt +RUN pip install -r requirements.txt -r mysql-requirements.txt -r ldap-requirements.txt -r test-requirements.txt -r dev-requirements.txt FROM base AS run COPY docker/doveadm /usr/local/bin RUN chmod +x /usr/local/bin/doveadm COPY --from=build $VIRTUAL_ENV $VIRTUAL_ENV -RUN apk add --no-cache --update openssl librrd libxslt libjpeg libressl git rrdtool libmagic sudo sqlite libldap \ +RUN apk add --no-cache --update openssl librrd libxslt libjpeg libressl git rrdtool libmagic sudo sqlite libldap mariadb-connector-c \ && rm -rf /var/cache/apk/* RUN mkdir /code WORKDIR /code diff --git a/frontend/src/api/amavis.js b/frontend/src/api/amavis.js new file mode 100644 index 000000000..4091cc559 --- /dev/null +++ b/frontend/src/api/amavis.js @@ -0,0 +1,42 @@ +import repository from './repository' + +export default { + getQuarantineContent(params) { + return repository.get('/amavis/quarantine/', { params }) + }, + releaseSelection(data) { + return repository.post('/amavis/quarantine/release_selection/', data) + }, + releaseMessage(mailid, data) { + return repository.post(`/amavis/quarantine/${mailid}/release/`, data) + }, + deleteSelection(data) { + return repository.post('/amavis/quarantine/delete_selection/', data) + }, + deleteMessage(mailid, data) { + return repository.post(`/amavis/quarantine/${mailid}/delete/`, data) + }, + markMessageSelection(data) { + return repository.post('/amavis/quarantine/mark_selection/', data) + }, + getMessageContent(mailid, rcpt, secretId) { + const params = { rcpt } + if (secretId) { + params.secret_id = secretId + } + return repository.get(`/amavis/quarantine/${mailid}/`, { params }) + }, + getMessageHeaders(mailid, rcpt, secretId) { + const params = { rcpt } + if (secretId) { + params.secret_id = secretId + } + return repository.get(`/amavis/quarantine/${mailid}/headers/`, { params }) + }, + getDomainPolicy(domainId) { + return repository.get(`/amavis/policies/${domainId}/`) + }, + updateDomainPolicy(domainId, data) { + return repository.patch(`/amavis/policies/${domainId}/`, data) + }, +} diff --git a/frontend/src/api/notifications.js b/frontend/src/api/notifications.js new file mode 100644 index 000000000..063a79cb4 --- /dev/null +++ b/frontend/src/api/notifications.js @@ -0,0 +1,7 @@ +import repository from './repository' + +export default { + getNotifications() { + return repository.get('/notifications/') + }, +} diff --git a/frontend/src/components/admin/domains/DomainEditForm.vue b/frontend/src/components/admin/domains/DomainEditForm.vue index 4f8bffc77..ed9dee532 100644 --- a/frontend/src/components/admin/domains/DomainEditForm.vue +++ b/frontend/src/components/admin/domains/DomainEditForm.vue @@ -172,7 +172,7 @@ - diff --git a/frontend/src/components/admin/domains/DomainPolicyForm.vue b/frontend/src/components/admin/domains/DomainPolicyForm.vue new file mode 100644 index 000000000..94559fb33 --- /dev/null +++ b/frontend/src/components/admin/domains/DomainPolicyForm.vue @@ -0,0 +1,168 @@ + + + diff --git a/frontend/src/components/admin/domains/form_steps/DomainPolicyForm.vue b/frontend/src/components/admin/domains/form_steps/DomainPolicyForm.vue new file mode 100644 index 000000000..31f8a8720 --- /dev/null +++ b/frontend/src/components/admin/domains/form_steps/DomainPolicyForm.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/src/components/quarantine/QuarantineList.vue b/frontend/src/components/quarantine/QuarantineList.vue new file mode 100644 index 000000000..4a111dccd --- /dev/null +++ b/frontend/src/components/quarantine/QuarantineList.vue @@ -0,0 +1,424 @@ + + + + + diff --git a/frontend/src/components/shared/NavBar.vue b/frontend/src/components/shared/NavBar.vue index 6c46969b5..26cec305f 100644 --- a/frontend/src/components/shared/NavBar.vue +++ b/frontend/src/components/shared/NavBar.vue @@ -49,9 +49,6 @@ :title="item.text" :prepend-icon="item.icon" > -