Compare commits
145 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3d538d4f14 | ||
|
7969e7116d | ||
|
4f58f2caee | ||
|
263baa81c0 | ||
|
092890b6ab | ||
|
db7d7ea288 | ||
|
452daf5d5e | ||
|
d373164e13 | ||
|
cd7715fa0e | ||
|
af9c3a8565 | ||
|
dd6b8c44a4 | ||
|
499273dbb7 | ||
|
6612b892b7 | ||
|
89cea31475 | ||
|
872fa07213 | ||
|
36e4ee7738 | ||
|
a139eb9bce | ||
|
7166696aa2 | ||
|
71db83efce | ||
|
7ae7f25580 | ||
|
5d14baa43a | ||
|
141b397c82 | ||
|
fd853cfc6f | ||
|
63f718178e | ||
|
74baf20feb | ||
|
958112af6b | ||
|
08d0f9448e | ||
|
7bcc8bd3a2 | ||
|
714511b0a8 | ||
|
c9700773f4 | ||
|
2229f87d9b | ||
|
d360503443 | ||
|
838182a8b4 | ||
|
967cfedbb3 | ||
|
a36645a282 | ||
|
3368a70f88 | ||
|
cd1715ba52 | ||
|
0bc2a16093 | ||
|
a21b3cd606 | ||
|
1c479684fc | ||
|
c9dbc7c7b7 | ||
|
c41dc9d8c0 | ||
|
1db5841424 | ||
|
e53b068902 | ||
|
2bd436dfd8 | ||
|
d13be25f45 | ||
|
6efd9dc5f9 | ||
|
1edd4012e4 | ||
|
4390c9855a | ||
|
4d53216c05 | ||
|
040206859f | ||
|
d06119a21d | ||
|
c27ad97287 | ||
|
b1658c0f83 | ||
|
05b8609073 | ||
|
552f09f48a | ||
|
97df5c3b9c | ||
|
8d9102aa08 | ||
|
33e5ad2b5c | ||
|
998cb642a9 | ||
|
07ac195fea | ||
|
f79cac3292 | ||
|
7a20a9941e | ||
|
24cc960379 | ||
|
353df6413f | ||
|
b68eae16e5 | ||
|
9a812edee4 | ||
|
43d2a6e135 | ||
|
5839e22796 | ||
|
ee844c81d2 | ||
|
b6cb3b026c | ||
|
df33ebb2a0 | ||
|
d2a6838958 | ||
|
96b8054e6b | ||
|
dfdd2dadb4 | ||
|
d0528b7883 | ||
|
f40e682800 | ||
|
f4dc01d1ec | ||
|
187ddedf96 | ||
|
5613134fed | ||
|
e454ed4e39 | ||
|
1e2125653e | ||
|
835a726d2a | ||
|
0539cc6d8c | ||
|
549ff7d100 | ||
|
456b528785 | ||
|
003a6342a5 | ||
|
fb10764167 | ||
|
9e1554f5c7 | ||
|
42c82be8f5 | ||
|
76ec0e888b | ||
|
892c99fa23 | ||
|
28da482ef2 | ||
|
936f07336c | ||
|
224a59ab4b | ||
|
6c5ab7800e | ||
|
7e26a2ab98 | ||
|
4e6c398c8c | ||
|
d4e829465b | ||
|
1ade37312e | ||
|
372e381a85 | ||
|
374cc64601 | ||
|
1cf25572a3 | ||
|
ba45f70a30 | ||
|
5e56566de6 | ||
|
a2ccf7ef03 | ||
|
654dbf8198 | ||
|
53a5254897 | ||
|
c433daf024 | ||
|
fd7269d455 | ||
|
b375e6a250 | ||
|
48589d20e2 | ||
|
be9cbcf5ac | ||
|
b04faddac4 | ||
|
e925187dda | ||
|
06f380a17a | ||
|
67882414e1 | ||
|
2b149fb8ea | ||
|
3166bd5df5 | ||
|
e911452d0c | ||
|
deac5ad2fe | ||
|
f097267bcd | ||
|
161130c116 | ||
|
a03b8f28ae | ||
|
bb9ae02ccc | ||
|
880a68d563 | ||
|
d52323df2d | ||
|
769e08843b | ||
|
7692685122 | ||
|
b820096656 | ||
|
a0c09af67e | ||
|
eddaf7a975 | ||
|
bdd8b4a5ab | ||
|
98bc947d00 | ||
|
24275ffdbf | ||
|
5541f84c3c | ||
|
4907f702c8 | ||
|
412e1188b0 | ||
|
6d6b673cf2 | ||
|
a1ffaae3d5 | ||
|
f3f6fb8908 | ||
|
a1a96bfabb | ||
|
c520f21d28 | ||
|
b1314bd9a3 | ||
|
6521ccd425 |
60
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
60
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@@ -1,60 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🐞 Bug Report
|
|
||||||
about: Report a reproducible bug for mailcow. (NOT to be used for support questions.)
|
|
||||||
labels: bug
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please DO NOT delete this template or use it for support questions.
|
|
||||||
You are welcome to visit us on our community channels listed at https://mailcow.github.io/mailcow-dockerized-docs/#community-support
|
|
||||||
For official support, please check https://mailcow.github.io/mailcow-dockerized-docs/#commercial-support
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Prior to placing the issue, please check following:** *(fill out each checkbox with an `X` once done)*
|
|
||||||
- [ ] I understand that not following or deleting the below instructions will result in immediate closure and/or deletion of my issue.
|
|
||||||
- [ ] I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
|
|
||||||
- [ ] I have understood that answers are voluntary and community-driven, and not commercial support.
|
|
||||||
- [ ] I have verified that my issue has not been already answered in the past. I also checked previous [issues](https://github.com/mailcow/mailcow-dockerized/issues).
|
|
||||||
|
|
||||||
## Summary
|
|
||||||
<!--
|
|
||||||
This should be a clear and concise description of what the bug is. What EXACTLY does happen?
|
|
||||||
If applicable, add screenshots to help explain your problem. Very useful for bugs in mailcow UI.
|
|
||||||
Write your detailed description below.
|
|
||||||
|
|
||||||
Also mention on which commit/date your mailcow instance was last updated.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Logs
|
|
||||||
<!--
|
|
||||||
Please take a look at the [official documentation](https://mailcow.github.io/mailcow-dockerized-docs/debug-logs/) and post the last
|
|
||||||
few lines of logs, when the error occurs. For example, docker container logs of affected containers.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Reproduction
|
|
||||||
<!--
|
|
||||||
It is really helpful to know how exactly you are able to reproduce the reported issue.
|
|
||||||
Have you tried to fix the issue? What did you try?
|
|
||||||
What are the exact steps to get the above described behavior?
|
|
||||||
Screenshots can be added, if helpful. Add the text below.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## System information
|
|
||||||
<!--
|
|
||||||
In this stage we would kindly ask you to attach general system information about your setup.
|
|
||||||
Please carefully read the questions and instructions below.
|
|
||||||
-->
|
|
||||||
|
|
||||||
| Question | Answer |
|
|
||||||
| --- | --- |
|
|
||||||
| My operating system | I_DO_REPLY_HERE |
|
|
||||||
| Is Apparmor, SELinux or similar active? | I_DO_REPLY_HERE |
|
|
||||||
| Virtualization technlogy (KVM, VMware, Xen, etc - **LXC and OpenVZ are not supported** | I_DO_REPLY_HERE |
|
|
||||||
| Server/VM specifications (Memory, CPU Cores) | I_DO_REPLY_HERE |
|
|
||||||
| Docker Version (`docker version`) | I_DO_REPLY_HERE |
|
|
||||||
| Docker-Compose Version (`docker-compose version`) | I_DO_REPLY_HERE |
|
|
||||||
| Reverse proxy (custom solution) | I_DO_REPLY_HERE |
|
|
||||||
|
|
||||||
- Output of `git diff origin/master`, any other changes to the code? If so, **please post them**.
|
|
||||||
- All third-party firewalls and custom iptables rules are unsupported. *Please check the Docker docs about how to use Docker with your own ruleset*. Nevertheless, iptabels output can help us to help you: `iptables -L -vn`, `ip6tables -L -vn`, `iptables -L -vn -t nat` and `ip6tables -L -vn -t nat`.
|
|
||||||
- DNS problems? Please run `docker exec -it $(docker ps -qf name=acme-mailcow) dig +short stackoverflow.com @172.22.1.254` (set the IP accordingly, if you changed the internal mailcow network) and post the output.
|
|
95
.github/ISSUE_TEMPLATE/Bug_report.yml
vendored
Normal file
95
.github/ISSUE_TEMPLATE/Bug_report.yml
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
name: 🐞 Bug Report
|
||||||
|
description: Report a reproducible bug for mailcow. (NOT to be used for support questions.)
|
||||||
|
labels: ["bug"]
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Contribution guidelines
|
||||||
|
description: Please read the contribution guidelines before proceeding.
|
||||||
|
options:
|
||||||
|
- label: I've read the [contribution guidelines](https://github.com/mailcow/mailcow-dockerized/blob/master/CONTRIBUTING.md) and wholeheartedly agree
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: I've found a bug and checked that ...
|
||||||
|
description: Prior to placing the issue, please check following:** *(fill out each checkbox with an `X` once done)*
|
||||||
|
options:
|
||||||
|
- label: ... I understand that not following the below instructions will result in immediate closure and/or deletion of my issue.
|
||||||
|
required: true
|
||||||
|
- label: ... I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
|
||||||
|
required: true
|
||||||
|
- label: ... I have understood that answers are voluntary and community-driven, and not commercial support.
|
||||||
|
required: true
|
||||||
|
- label: ... I have verified that my issue has not been already answered in the past. I also checked previous [issues](https://github.com/mailcow/mailcow-dockerized/issues).
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: Please provide a brief description of the bug in 1-2 sentences. If applicable, add screenshots to help explain your problem. Very useful for bugs in mailcow UI.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Logs
|
||||||
|
description: Please take a look at the [official documentation](https://mailcow.github.io/mailcow-dockerized-docs/debug-logs/) and post the last few lines of logs, when the error occurs. For example, docker container logs of affected containers. This will be automatically formatted into code, so no need for backticks.
|
||||||
|
render: bash
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Please describe the steps to reproduce the bug. Screenshots can be added, if helpful.
|
||||||
|
placeholder: |-
|
||||||
|
1. ...
|
||||||
|
2. ...
|
||||||
|
3. ...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: System information
|
||||||
|
description: In this stage we would kindly ask you to attach general system information about your setup.
|
||||||
|
value: |-
|
||||||
|
| Question | Answer |
|
||||||
|
| --- | --- |
|
||||||
|
| My operating system | I_DO_REPLY_HERE |
|
||||||
|
| Is Apparmor, SELinux or similar active? | I_DO_REPLY_HERE |
|
||||||
|
| Virtualization technology (KVM, VMware, Xen, etc - **LXC and OpenVZ are not supported** | I_DO_REPLY_HERE |
|
||||||
|
| Server/VM specifications (Memory, CPU Cores) | I_DO_REPLY_HERE |
|
||||||
|
| Docker version (`docker version`) | I_DO_REPLY_HERE |
|
||||||
|
| docker-compose version (`docker-compose version`) | I_DO_REPLY_HERE |
|
||||||
|
| mailcow version (```git describe --tags `git rev-list --tags --max-count=1` ```) | I_DO_REPLY_HERE |
|
||||||
|
| Reverse proxy (custom solution) | I_DO_REPLY_HERE |
|
||||||
|
|
||||||
|
Output of `git diff origin/master`, any other changes to the code? If so, **please post them**:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
|
||||||
|
All third-party firewalls and custom iptables rules are unsupported. **Please check the Docker docs about how to use Docker with your own ruleset**. Nevertheless, iptabels output can help us to help you:
|
||||||
|
iptables -L -vn:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
|
||||||
|
ip6tables -L -vn:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
|
||||||
|
iptables -L -vn -t nat:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
|
||||||
|
ip6tables -L -vn -t nat:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
|
||||||
|
DNS problems? Please run `docker exec -it $(docker ps -qf name=acme-mailcow) dig +short stackoverflow.com @172.22.1.254` (set the IP accordingly, if you changed the internal mailcow network) and post the output:
|
||||||
|
```
|
||||||
|
YOUR OUTPUT GOES HERE
|
||||||
|
```
|
||||||
|
validations:
|
||||||
|
required: true
|
29
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
29
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
@@ -1,29 +0,0 @@
|
|||||||
---
|
|
||||||
name: 💡 Feature Request
|
|
||||||
about: Suggest an idea for mailcow.
|
|
||||||
labels: enhancement
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please note that the mailcow team and its contributors do have finite
|
|
||||||
resources and that we can not work on all filed feature requests.
|
|
||||||
|
|
||||||
However making us aware about certain ideas can help us improving
|
|
||||||
mailcow together.
|
|
||||||
|
|
||||||
We're also happy to help you getting a specific feature implemented.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Summary
|
|
||||||
|
|
||||||
A clear and concise description of what the problem is.
|
|
||||||
For example: I'm always frustrated when [...]
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
What are you about to solve or improve with this idea?
|
|
||||||
What would be the benefit for most users?
|
|
||||||
|
|
||||||
## Additional context
|
|
||||||
|
|
||||||
Add any other context or screenshots about the feature request.
|
|
20
.github/ISSUE_TEMPLATE/Feature_request.yml
vendored
Normal file
20
.github/ISSUE_TEMPLATE/Feature_request.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
name: 💡 Feature Request
|
||||||
|
description: Suggest an idea for mailcow.
|
||||||
|
labels: ["enhancement"]
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Summary
|
||||||
|
description: Please describe your idea in a reasonable amount of detail.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Motivation
|
||||||
|
description: Please describe how your idea would benefit you and other users.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context or screenshots about the feature request.
|
@@ -14,7 +14,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Mark/Close Stale Issues and Pull Requests 🗑️
|
- name: Mark/Close Stale Issues and Pull Requests 🗑️
|
||||||
uses: actions/stale@v4
|
uses: actions/stale@v5.0.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.STALE_ACTION_PAT }}
|
repo-token: ${{ secrets.STALE_ACTION_PAT }}
|
||||||
days-before-stale: 60
|
days-before-stale: 60
|
||||||
|
@@ -1,4 +1,7 @@
|
|||||||
# mailcow: dockerized - 🐮 + 🐋 = 💕
|
# mailcow: dockerized - 🐮 + 🐋 = 💕
|
||||||
|
|
||||||
|
## We stand with 🇺🇦
|
||||||
|
|
||||||
[](https://drone.mailcow.email/mailcow/mailcow-dockerized) [](https://drone.mailcow.email/mailcow/mailcow-dockerized) [](https://translate.mailcow.email/engage/mailcow-dockerized/)
|
[](https://drone.mailcow.email/mailcow/mailcow-dockerized) [](https://drone.mailcow.email/mailcow/mailcow-dockerized) [](https://translate.mailcow.email/engage/mailcow-dockerized/)
|
||||||
[](https://twitter.com/mailcow_email)
|
[](https://twitter.com/mailcow_email)
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
|
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
|
@@ -1,60 +1,15 @@
|
|||||||
FROM debian:bullseye-slim
|
FROM clamav/clamav:0.105.0_base
|
||||||
|
|
||||||
LABEL maintainer "André Peters <andre.peters@servercow.de>"
|
LABEL maintainer "André Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
ARG CLAMAV=0.103.5
|
RUN apk upgrade --no-cache \
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
&& apk add --update --no-cache \
|
||||||
ca-certificates \
|
|
||||||
zlib1g-dev \
|
|
||||||
libcurl4-openssl-dev \
|
|
||||||
libncurses5-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libpcre2-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libssl-dev \
|
|
||||||
build-essential \
|
|
||||||
libjson-c-dev \
|
|
||||||
curl \
|
|
||||||
bash \
|
|
||||||
wget \
|
|
||||||
tzdata \
|
|
||||||
dnsutils \
|
|
||||||
rsync \
|
rsync \
|
||||||
dos2unix \
|
bind-tools \
|
||||||
netcat \
|
bash
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
|
||||||
&& wget -O - https://www.clamav.net/downloads/production/clamav-${CLAMAV}.tar.gz | tar xfvz - \
|
|
||||||
&& cd clamav-${CLAMAV} \
|
|
||||||
&& ./configure \
|
|
||||||
--prefix=/usr \
|
|
||||||
--libdir=/usr/lib \
|
|
||||||
--sysconfdir=/etc/clamav \
|
|
||||||
--mandir=/usr/share/man \
|
|
||||||
--infodir=/usr/share/info \
|
|
||||||
--disable-llvm \
|
|
||||||
--with-user=clamav \
|
|
||||||
--with-group=clamav \
|
|
||||||
--with-dbdir=/var/lib/clamav \
|
|
||||||
--enable-clamdtop \
|
|
||||||
--enable-bigstack \
|
|
||||||
--with-pcre \
|
|
||||||
&& make -j4 \
|
|
||||||
&& make install \
|
|
||||||
&& make clean \
|
|
||||||
&& cd .. && rm -rf clamav-${CLAMAV} \
|
|
||||||
&& apt-get -y --auto-remove purge build-essential \
|
|
||||||
&& apt-get -y purge zlib1g-dev \
|
|
||||||
libncurses5-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libpcre2-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libjson-c-dev \
|
|
||||||
&& addgroup --system --gid 700 clamav \
|
|
||||||
&& adduser --system --no-create-home --home /var/lib/clamav --uid 700 --gid 700 --disabled-login clamav \
|
|
||||||
&& rm -rf /tmp/* /var/tmp/*
|
|
||||||
|
|
||||||
COPY clamd.sh ./
|
COPY clamd.sh ./
|
||||||
COPY tini /sbin/tini
|
RUN chmod +x /sbin/tini
|
||||||
|
|
||||||
|
ENTRYPOINT []
|
||||||
CMD ["/sbin/tini", "-g", "--", "/clamd.sh"]
|
CMD ["/sbin/tini", "-g", "--", "/clamd.sh"]
|
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
|
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
FROM debian:buster-slim
|
FROM debian:bullseye-slim
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG DOVECOT=2.3.17.1
|
ARG DOVECOT=2.3.18
|
||||||
ENV LC_ALL C
|
ENV LC_ALL C
|
||||||
ENV GOSU_VERSION 1.12
|
ENV GOSU_VERSION 1.14
|
||||||
|
|
||||||
# Add groups and users before installing Dovecot to not break compatibility
|
# Add groups and users before installing Dovecot to not break compatibility
|
||||||
RUN groupadd -g 5000 vmail \
|
RUN groupadd -g 5000 vmail \
|
||||||
@@ -89,7 +89,7 @@ RUN groupadd -g 5000 vmail \
|
|||||||
&& chmod +x /usr/local/bin/gosu \
|
&& chmod +x /usr/local/bin/gosu \
|
||||||
&& gosu nobody true \
|
&& gosu nobody true \
|
||||||
&& apt-key adv --fetch-keys https://repo.dovecot.org/DOVECOT-REPO-GPG \
|
&& apt-key adv --fetch-keys https://repo.dovecot.org/DOVECOT-REPO-GPG \
|
||||||
&& echo "deb https://repo.dovecot.org/ce-${DOVECOT}/debian/buster buster main" > /etc/apt/sources.list.d/dovecot.list \
|
&& echo "deb https://repo.dovecot.org/ce-${DOVECOT}/debian/bullseye bullseye main" > /etc/apt/sources.list.d/dovecot.list \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get -y --no-install-recommends install \
|
&& apt-get -y --no-install-recommends install \
|
||||||
dovecot-lua \
|
dovecot-lua \
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -166,11 +166,17 @@ while ($row = $sth->fetchrow_arrayref()) {
|
|||||||
$success = 1;
|
$success = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$update = $dbh->prepare("UPDATE imapsync SET returned_text = ?, success = ?, exit_status = ? WHERE id = ?");
|
$keep_job_active = 1;
|
||||||
|
if (defined $exit_status && $exit_status eq "EXIT_AUTHENTICATION_FAILURE_USER1") {
|
||||||
|
$keep_job_active = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$update = $dbh->prepare("UPDATE imapsync SET returned_text = ?, success = ?, exit_status = ?, active = ? WHERE id = ?");
|
||||||
$update->bind_param( 1, ${stdout} );
|
$update->bind_param( 1, ${stdout} );
|
||||||
$update->bind_param( 2, ${success} );
|
$update->bind_param( 2, ${success} );
|
||||||
$update->bind_param( 3, ${exit_status} );
|
$update->bind_param( 3, ${exit_status} );
|
||||||
$update->bind_param( 4, ${id} );
|
$update->bind_param( 4, ${keep_job_active} );
|
||||||
|
$update->bind_param( 5, ${id} );
|
||||||
$update->execute();
|
$update->execute();
|
||||||
} catch {
|
} catch {
|
||||||
$update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync', success = 0 WHERE id = ?");
|
$update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync', success = 0 WHERE id = ?");
|
||||||
|
@@ -161,7 +161,7 @@ try:
|
|||||||
attrs = json.loads(attrs.decode('utf-8'))
|
attrs = json.loads(attrs.decode('utf-8'))
|
||||||
if attrs['quarantine_notification'] not in ('hourly', 'daily', 'weekly'):
|
if attrs['quarantine_notification'] not in ('hourly', 'daily', 'weekly'):
|
||||||
continue
|
continue
|
||||||
if last_notification == 0 or (last_notification + time_trans[attrs['quarantine_notification']]) < time_now:
|
if last_notification == 0 or (last_notification + time_trans[attrs['quarantine_notification']]) <= time_now:
|
||||||
print("Notifying %s: Considering %d new items in quarantine (policy: %s)" % (record['rcpt'], record['counter'], attrs['quarantine_notification']))
|
print("Notifying %s: Considering %d new items in quarantine (policy: %s)" % (record['rcpt'], record['counter'], attrs['quarantine_notification']))
|
||||||
notify_rcpt(record['rcpt'], record['counter'], record['quarantine_acl'], attrs['quarantine_category'])
|
notify_rcpt(record['rcpt'], record['counter'], record['quarantine_acl'], attrs['quarantine_category'])
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
@version: 3.19
|
@version: 3.28
|
||||||
@include "scl.conf"
|
@include "scl.conf"
|
||||||
options {
|
options {
|
||||||
chain_hostnames(off);
|
chain_hostnames(off);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
@version: 3.19
|
@version: 3.28
|
||||||
@include "scl.conf"
|
@include "scl.conf"
|
||||||
options {
|
options {
|
||||||
chain_hostnames(off);
|
chain_hostnames(off);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
ENV XTABLES_LIBDIR /usr/lib/xtables
|
ENV XTABLES_LIBDIR /usr/lib/xtables
|
||||||
|
@@ -94,7 +94,7 @@ def refreshF2bregex():
|
|||||||
f2bregex = {}
|
f2bregex = {}
|
||||||
f2bregex[1] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
|
f2bregex[1] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
|
||||||
f2bregex[2] = 'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
|
f2bregex[2] = 'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
|
||||||
f2bregex[3] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed'
|
f2bregex[3] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'
|
||||||
f2bregex[4] = 'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
|
f2bregex[4] = 'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
|
||||||
f2bregex[5] = 'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
|
f2bregex[5] = 'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
|
||||||
f2bregex[6] = '-login: Disconnected \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
|
f2bregex[6] = '-login: Disconnected \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
@@ -8,9 +8,9 @@ RUN apk add --virtual .build-deps gcc musl-dev python3-dev libffi-dev openssl-de
|
|||||||
&& apk add --update --no-cache python3 py3-pip openssl tzdata libmagic \
|
&& apk add --update --no-cache python3 py3-pip openssl tzdata libmagic \
|
||||||
&& pip3 install --upgrade pip \
|
&& pip3 install --upgrade pip \
|
||||||
&& pip3 install --upgrade asyncio python-magic \
|
&& pip3 install --upgrade asyncio python-magic \
|
||||||
&& pip3 install --upgrade https://github.com/HeinleinSupport/oletools/archive/master.zip \
|
&& pip3 install --upgrade https://github.com/decalage2/oletools/archive/master.zip \
|
||||||
&& apk del .build-deps
|
&& apk del .build-deps
|
||||||
# && sed -i 's/decompress_stream(bytearray(compressed_code))/bytes2str(decompress_stream(bytearray(compressed_code)))/g' /usr/lib/python3.8/site-packages/oletools/olevba.py
|
# && sed -i 's/template_injection_detected = True/template_injection_detected = False/g' /usr/lib/python3.9/site-packages/oletools/olevba.py
|
||||||
|
|
||||||
ADD olefy.py /app/
|
ADD olefy.py /app/
|
||||||
|
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
FROM php:8.0-fpm-alpine3.14
|
FROM php:8.0-fpm-alpine3.16
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
ENV APCU_PECL 5.1.20
|
ENV APCU_PECL 5.1.21
|
||||||
ENV IMAGICK_PECL 3.5.1
|
ENV IMAGICK_PECL 3.7.0
|
||||||
# Mailparse is pulled from master branch
|
# Mailparse is pulled from master branch
|
||||||
#ENV MAILPARSE_PECL 3.0.2
|
#ENV MAILPARSE_PECL 3.0.2
|
||||||
ENV MEMCACHED_PECL 3.1.5
|
ENV MEMCACHED_PECL 3.2.0
|
||||||
ENV REDIS_PECL 5.3.4
|
ENV REDIS_PECL 5.3.7
|
||||||
|
|
||||||
RUN apk add -U --no-cache autoconf \
|
RUN apk add -U --no-cache autoconf \
|
||||||
aspell-dev \
|
aspell-dev \
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM debian:buster-slim
|
FROM debian:bullseye-slim
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
@version: 3.19
|
@version: 3.28
|
||||||
@include "scl.conf"
|
@include "scl.conf"
|
||||||
options {
|
options {
|
||||||
chain_hostnames(off);
|
chain_hostnames(off);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
@version: 3.19
|
@version: 3.28
|
||||||
@include "scl.conf"
|
@include "scl.conf"
|
||||||
options {
|
options {
|
||||||
chain_hostnames(off);
|
chain_hostnames(off);
|
||||||
|
@@ -21,7 +21,8 @@ RUN apt-get update && apt-get install -y \
|
|||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& mkdir -p /run/rspamd \
|
&& mkdir -p /run/rspamd \
|
||||||
&& chown _rspamd:_rspamd /run/rspamd \
|
&& chown _rspamd:_rspamd /run/rspamd \
|
||||||
&& echo 'alias ll="ls -la --color"' >> ~/.bashrc
|
&& echo 'alias ll="ls -la --color"' >> ~/.bashrc \
|
||||||
|
&& sed -i 's/#analysis_keyword_table > 0/analysis_cat_table.macro_exist == "M"/g' /usr/share/rspamd/lualib/lua_scanners/oletools.lua
|
||||||
|
|
||||||
COPY settings.conf /etc/rspamd/settings.conf
|
COPY settings.conf /etc/rspamd/settings.conf
|
||||||
COPY metadata_exporter.lua /usr/share/rspamd/plugins/metadata_exporter.lua
|
COPY metadata_exporter.lua /usr/share/rspamd/plugins/metadata_exporter.lua
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
|
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.15
|
FROM alpine:3.16
|
||||||
LABEL maintainer "André Peters <andre.peters@servercow.de>"
|
LABEL maintainer "André Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
@@ -47,6 +47,14 @@ server {
|
|||||||
return 301 $client_req_scheme_nc://$host/remote.php/dav;
|
return 301 $client_req_scheme_nc://$host/remote.php/dav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location = /.well-known/webfinger {
|
||||||
|
return 301 $client_req_scheme_nc://$host/index.php/.well-known/webfinger;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /.well-known/nodeinfo {
|
||||||
|
return 301 $client_req_scheme_nc://$host/index.php/.well-known/nodeinfo;
|
||||||
|
}
|
||||||
|
|
||||||
location ^~ /.well-known/acme-challenge/ {
|
location ^~ /.well-known/acme-challenge/ {
|
||||||
default_type "text/plain";
|
default_type "text/plain";
|
||||||
root /web;
|
root /web;
|
||||||
|
@@ -65,7 +65,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/api/v1/(.*)$ {
|
location ~ ^/api/v1/(.*)$ {
|
||||||
try_files $uri $uri/ /json_api.php?query=$1;
|
try_files $uri $uri/ /json_api.php?query=$1&$args;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ^~ /.well-known/acme-challenge/ {
|
location ^~ /.well-known/acme-challenge/ {
|
||||||
@@ -163,7 +163,9 @@
|
|||||||
proxy_connect_timeout 75;
|
proxy_connect_timeout 75;
|
||||||
proxy_send_timeout 3600;
|
proxy_send_timeout 3600;
|
||||||
proxy_read_timeout 3600;
|
proxy_read_timeout 3600;
|
||||||
proxy_buffers 64 256k;
|
proxy_buffer_size 128k;
|
||||||
|
proxy_buffers 64 512k;
|
||||||
|
proxy_busy_buffers_size 512k;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Host $http_host;
|
||||||
@@ -197,6 +199,9 @@
|
|||||||
proxy_set_header x-webobjects-server-name $server_name;
|
proxy_set_header x-webobjects-server-name $server_name;
|
||||||
proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;
|
proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;
|
||||||
proxy_set_header x-webobjects-server-port $server_port;
|
proxy_set_header x-webobjects-server-port $server_port;
|
||||||
|
proxy_buffer_size 128k;
|
||||||
|
proxy_buffers 64 512k;
|
||||||
|
proxy_busy_buffers_size 512k;
|
||||||
proxy_send_timeout 3600;
|
proxy_send_timeout 3600;
|
||||||
proxy_read_timeout 3600;
|
proxy_read_timeout 3600;
|
||||||
client_body_buffer_size 128k;
|
client_body_buffer_size 128k;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
opcache.enable=1
|
opcache.enable=1
|
||||||
opcache.enable_cli=1
|
opcache.enable_cli=1
|
||||||
opcache.interned_strings_buffer=8
|
opcache.interned_strings_buffer=16
|
||||||
opcache.max_accelerated_files=10000
|
opcache.max_accelerated_files=10000
|
||||||
opcache.memory_consumption=128
|
opcache.memory_consumption=128
|
||||||
opcache.save_comments=1
|
opcache.save_comments=1
|
||||||
|
@@ -1,53 +1,63 @@
|
|||||||
# Whitelist generated by Postwhite v3.4 on Sun Dec 15 21:16:19 CET 2019
|
# Whitelist generated by Postwhite v3.4 on Mon 21 Mar 2022 06:50:26 PM CET
|
||||||
# https://github.com/stevejenkins/postwhite/
|
# https://github.com/stevejenkins/postwhite/
|
||||||
# 1928 total rules
|
# 1898 total rules
|
||||||
2a00:1450:4000::/36 permit
|
2a00:1450:4000::/36 permit
|
||||||
2a01:111:f400::/48 permit
|
2a01:111:f400::/48 permit
|
||||||
2a01:111:f403::/48 permit
|
2a01:111:f403::/48 permit
|
||||||
|
2a01:4180:4050:0400::/64 permit
|
||||||
|
2a01:4180:4050:0800::/64 permit
|
||||||
|
2a01:4180:4051:0400::/64 permit
|
||||||
|
2a01:4180:4051:0800::/64 permit
|
||||||
2a02:a60:0:5::/64 permit
|
2a02:a60:0:5::/64 permit
|
||||||
2c0f:fb50:4000::/36 permit
|
2c0f:fb50:4000::/36 permit
|
||||||
3.93.157.0/24 permit
|
|
||||||
8.20.114.31 permit
|
8.20.114.31 permit
|
||||||
8.25.194.0/23 permit
|
8.25.194.0/23 permit
|
||||||
8.25.196.0/23 permit
|
8.25.196.0/23 permit
|
||||||
8.39.54.0/23 permit
|
8.39.54.0/23 permit
|
||||||
8.40.222.0/23 permit
|
8.40.222.0/23 permit
|
||||||
8.45.169.0/24 permit
|
|
||||||
12.130.86.238 permit
|
12.130.86.238 permit
|
||||||
|
13.70.32.43 permit
|
||||||
|
13.72.50.45 permit
|
||||||
|
13.74.143.28 permit
|
||||||
13.77.161.179 permit
|
13.77.161.179 permit
|
||||||
|
13.78.233.182 permit
|
||||||
|
13.92.31.129 permit
|
||||||
|
13.110.208.0/21 permit
|
||||||
|
13.110.216.0/22 permit
|
||||||
|
13.110.224.0/20 permit
|
||||||
13.111.0.0/16 permit
|
13.111.0.0/16 permit
|
||||||
13.111.0.0/22 permit
|
|
||||||
13.111.52.0/22 permit
|
|
||||||
13.111.63.0/24 permit
|
|
||||||
13.111.68.0/24 permit
|
|
||||||
13.111.72.0/22 permit
|
|
||||||
13.111.92.0/24 permit
|
|
||||||
13.111.111.0/24 permit
|
|
||||||
17.36.0.0/16 permit
|
|
||||||
17.41.0.0/16 permit
|
17.41.0.0/16 permit
|
||||||
|
17.57.155.0/24 permit
|
||||||
|
17.57.156.0/24 permit
|
||||||
17.58.0.0/16 permit
|
17.58.0.0/16 permit
|
||||||
17.110.0.0/15 permit
|
17.110.0.0/15 permit
|
||||||
17.111.110.0/23 permit
|
|
||||||
17.120.0.0/16 permit
|
|
||||||
17.133.0.0/16 permit
|
|
||||||
17.139.0.0/16 permit
|
|
||||||
17.142.0.0/15 permit
|
17.142.0.0/15 permit
|
||||||
17.151.1.0/24 permit
|
|
||||||
17.158.0.0/15 permit
|
|
||||||
17.162.0.0/15 permit
|
17.162.0.0/15 permit
|
||||||
17.164.0.0/16 permit
|
17.164.0.0/16 permit
|
||||||
17.171.37.0/24 permit
|
17.171.37.0/24 permit
|
||||||
17.172.0.0/16 permit
|
17.172.0.0/16 permit
|
||||||
17.179.168.0/23 permit
|
17.179.168.0/23 permit
|
||||||
18.194.95.56 permit
|
18.194.95.56 permit
|
||||||
18.208.124.128/25 permit
|
18.198.96.88 permit
|
||||||
|
20.47.149.138 permit
|
||||||
|
20.48.0.0/12 permit
|
||||||
|
20.52.52.2 permit
|
||||||
|
20.52.128.133 permit
|
||||||
|
20.63.210.192/28 permit
|
||||||
|
20.64.0.0/10 permit
|
||||||
|
20.94.180.64/28 permit
|
||||||
|
20.185.213.160/27 permit
|
||||||
|
20.185.213.224/27 permit
|
||||||
20.185.214.0/27 permit
|
20.185.214.0/27 permit
|
||||||
20.185.214.2 permit
|
20.185.214.2 permit
|
||||||
20.185.214.32/27 permit
|
20.185.214.32/27 permit
|
||||||
20.185.214.64/27 permit
|
20.185.214.64/27 permit
|
||||||
23.23.237.213 permit
|
20.192.0.0/10 permit
|
||||||
23.103.131.7 permit
|
23.100.85.1 permit
|
||||||
23.103.224.0/19 permit
|
23.103.224.0/19 permit
|
||||||
|
23.249.208.0/20 permit
|
||||||
|
23.251.224.0/19 permit
|
||||||
|
23.253.141.0/24 permit
|
||||||
23.253.182.0/23 permit
|
23.253.182.0/23 permit
|
||||||
23.253.182.103 permit
|
23.253.182.103 permit
|
||||||
23.253.183.145 permit
|
23.253.183.145 permit
|
||||||
@@ -68,11 +78,11 @@
|
|||||||
27.123.206.56/29 permit
|
27.123.206.56/29 permit
|
||||||
27.123.206.76/30 permit
|
27.123.206.76/30 permit
|
||||||
27.123.206.80/28 permit
|
27.123.206.80/28 permit
|
||||||
27.126.146.0/24 permit
|
34.194.25.167 permit
|
||||||
34.200.123.20 permit
|
34.194.144.120 permit
|
||||||
34.212.163.75 permit
|
34.212.163.75 permit
|
||||||
34.213.104.127 permit
|
|
||||||
34.225.212.172 permit
|
34.225.212.172 permit
|
||||||
|
34.247.168.44 permit
|
||||||
35.176.132.251 permit
|
35.176.132.251 permit
|
||||||
35.190.247.0/24 permit
|
35.190.247.0/24 permit
|
||||||
35.191.0.0/16 permit
|
35.191.0.0/16 permit
|
||||||
@@ -80,7 +90,10 @@
|
|||||||
37.218.248.47 permit
|
37.218.248.47 permit
|
||||||
37.218.249.47 permit
|
37.218.249.47 permit
|
||||||
37.218.251.62 permit
|
37.218.251.62 permit
|
||||||
|
39.156.163.64/29 permit
|
||||||
|
40.71.187.0/24 permit
|
||||||
40.76.4.15 permit
|
40.76.4.15 permit
|
||||||
|
40.77.102.222 permit
|
||||||
40.92.0.0/15 permit
|
40.92.0.0/15 permit
|
||||||
40.97.116.82 permit
|
40.97.116.82 permit
|
||||||
40.97.128.194 permit
|
40.97.128.194 permit
|
||||||
@@ -91,18 +104,20 @@
|
|||||||
40.97.161.50 permit
|
40.97.161.50 permit
|
||||||
40.97.164.146 permit
|
40.97.164.146 permit
|
||||||
40.107.0.0/16 permit
|
40.107.0.0/16 permit
|
||||||
|
40.112.65.63 permit
|
||||||
40.112.72.205 permit
|
40.112.72.205 permit
|
||||||
40.113.200.201 permit
|
40.113.200.201 permit
|
||||||
|
40.117.80.0/24 permit
|
||||||
|
40.121.71.46 permit
|
||||||
41.74.192.0/22 permit
|
41.74.192.0/22 permit
|
||||||
41.74.196.0/22 permit
|
41.74.196.0/22 permit
|
||||||
41.74.200.0/23 permit
|
41.74.200.0/23 permit
|
||||||
41.74.201.0/24 permit
|
|
||||||
41.74.204.0/23 permit
|
41.74.204.0/23 permit
|
||||||
41.74.205.0/24 permit
|
41.74.206.0/24 permit
|
||||||
42.159.163.81 permit
|
42.159.163.81 permit
|
||||||
42.159.163.82 permit
|
42.159.163.82 permit
|
||||||
42.159.163.83 permit
|
42.159.163.83 permit
|
||||||
46.19.168.0/23 permit
|
43.228.184.0/22 permit
|
||||||
46.226.48.0/21 permit
|
46.226.48.0/21 permit
|
||||||
46.228.36.37 permit
|
46.228.36.37 permit
|
||||||
46.228.36.38/31 permit
|
46.228.36.38/31 permit
|
||||||
@@ -160,26 +175,19 @@
|
|||||||
50.18.125.97 permit
|
50.18.125.97 permit
|
||||||
50.18.125.237 permit
|
50.18.125.237 permit
|
||||||
50.18.126.162 permit
|
50.18.126.162 permit
|
||||||
50.23.218.192/27 permit
|
|
||||||
50.31.32.0/19 permit
|
50.31.32.0/19 permit
|
||||||
50.31.36.197 permit
|
|
||||||
50.31.36.199 permit
|
|
||||||
50.31.36.205 permit
|
|
||||||
50.31.36.208 permit
|
|
||||||
50.31.36.213 permit
|
|
||||||
50.31.44.111 permit
|
|
||||||
50.31.57.54/31 permit
|
|
||||||
50.31.57.60 permit
|
|
||||||
50.31.57.61 permit
|
|
||||||
50.31.57.62 permit
|
|
||||||
50.31.60.1 permit
|
|
||||||
50.31.156.96/27 permit
|
50.31.156.96/27 permit
|
||||||
50.31.205.0/24 permit
|
50.31.205.0/24 permit
|
||||||
50.207.218.237 permit
|
|
||||||
51.4.71.62 permit
|
51.4.71.62 permit
|
||||||
|
51.4.72.0/24 permit
|
||||||
|
51.4.80.0/27 permit
|
||||||
|
51.5.72.0/24 permit
|
||||||
|
51.5.80.0/27 permit
|
||||||
|
51.137.58.21 permit
|
||||||
|
51.140.75.55 permit
|
||||||
|
51.144.100.179 permit
|
||||||
51.163.158.0/24 permit
|
51.163.158.0/24 permit
|
||||||
51.163.159.0/24 permit
|
51.163.159.21 permit
|
||||||
52.0.20.102 permit
|
|
||||||
52.5.230.59 permit
|
52.5.230.59 permit
|
||||||
52.27.5.72 permit
|
52.27.5.72 permit
|
||||||
52.27.28.47 permit
|
52.27.28.47 permit
|
||||||
@@ -190,10 +198,15 @@
|
|||||||
52.41.64.145 permit
|
52.41.64.145 permit
|
||||||
52.60.41.5 permit
|
52.60.41.5 permit
|
||||||
52.60.115.116 permit
|
52.60.115.116 permit
|
||||||
|
52.82.172.0/22 permit
|
||||||
|
52.94.124.0/28 permit
|
||||||
52.95.48.152/29 permit
|
52.95.48.152/29 permit
|
||||||
52.95.49.88/29 permit
|
52.95.49.88/29 permit
|
||||||
52.100.0.0/14 permit
|
52.100.0.0/14 permit
|
||||||
52.128.40.0/21 permit
|
52.119.213.144/28 permit
|
||||||
|
52.160.39.140 permit
|
||||||
|
52.165.175.144 permit
|
||||||
|
52.185.106.240/28 permit
|
||||||
52.200.59.0/24 permit
|
52.200.59.0/24 permit
|
||||||
52.205.61.79 permit
|
52.205.61.79 permit
|
||||||
52.207.191.216 permit
|
52.207.191.216 permit
|
||||||
@@ -201,26 +214,30 @@
|
|||||||
52.222.73.83 permit
|
52.222.73.83 permit
|
||||||
52.222.73.120 permit
|
52.222.73.120 permit
|
||||||
52.222.75.85 permit
|
52.222.75.85 permit
|
||||||
|
52.234.172.96/28 permit
|
||||||
|
52.236.28.240/28 permit
|
||||||
|
52.237.141.173 permit
|
||||||
|
52.244.206.214 permit
|
||||||
|
52.247.53.144 permit
|
||||||
|
52.250.107.196 permit
|
||||||
|
52.250.126.174 permit
|
||||||
|
52.251.55.143 permit
|
||||||
54.90.148.255 permit
|
54.90.148.255 permit
|
||||||
54.156.255.69 permit
|
54.156.255.69 permit
|
||||||
54.172.97.247 permit
|
54.172.97.247 permit
|
||||||
54.173.229.38 permit
|
|
||||||
54.174.52.0/24 permit
|
|
||||||
54.174.53.128/30 permit
|
|
||||||
54.174.57.0/24 permit
|
|
||||||
54.174.59.0/24 permit
|
|
||||||
54.174.60.0/23 permit
|
|
||||||
54.174.63.0/24 permit
|
|
||||||
54.186.193.102 permit
|
54.186.193.102 permit
|
||||||
|
54.191.223.5 permit
|
||||||
|
54.194.61.95 permit
|
||||||
|
54.195.113.45 permit
|
||||||
54.214.39.184 permit
|
54.214.39.184 permit
|
||||||
|
54.216.77.168 permit
|
||||||
54.240.0.0/18 permit
|
54.240.0.0/18 permit
|
||||||
54.240.40.0/25 permit
|
54.240.64.0/19 permit
|
||||||
54.240.56.128/26 permit
|
54.240.96.0/19 permit
|
||||||
54.240.63.0/25 permit
|
|
||||||
54.241.16.209 permit
|
54.241.16.209 permit
|
||||||
54.243.205.80 permit
|
|
||||||
54.244.54.130 permit
|
54.244.54.130 permit
|
||||||
54.244.242.0/24 permit
|
54.244.242.0/24 permit
|
||||||
|
54.246.232.180 permit
|
||||||
62.13.128.0/24 permit
|
62.13.128.0/24 permit
|
||||||
62.13.129.128/25 permit
|
62.13.129.128/25 permit
|
||||||
62.13.136.0/22 permit
|
62.13.136.0/22 permit
|
||||||
@@ -231,9 +248,9 @@
|
|||||||
62.13.152.0/23 permit
|
62.13.152.0/23 permit
|
||||||
62.17.146.128/26 permit
|
62.17.146.128/26 permit
|
||||||
62.140.7.0/24 permit
|
62.140.7.0/24 permit
|
||||||
62.140.10.0/24 permit
|
62.140.10.21 permit
|
||||||
|
63.32.13.159 permit
|
||||||
63.80.14.0/23 permit
|
63.80.14.0/23 permit
|
||||||
63.111.28.137 permit
|
|
||||||
63.128.21.0/24 permit
|
63.128.21.0/24 permit
|
||||||
63.143.57.128/25 permit
|
63.143.57.128/25 permit
|
||||||
63.143.59.128/25 permit
|
63.143.59.128/25 permit
|
||||||
@@ -241,9 +258,11 @@
|
|||||||
64.20.241.45 permit
|
64.20.241.45 permit
|
||||||
64.34.47.128/27 permit
|
64.34.47.128/27 permit
|
||||||
64.34.57.192/26 permit
|
64.34.57.192/26 permit
|
||||||
|
64.71.149.160/28 permit
|
||||||
64.79.155.0/24 permit
|
64.79.155.0/24 permit
|
||||||
64.79.155.192 permit
|
64.89.44.85 permit
|
||||||
64.89.45.192/30 permit
|
64.89.45.80 permit
|
||||||
|
64.89.45.194 permit
|
||||||
64.89.45.196 permit
|
64.89.45.196 permit
|
||||||
64.95.144.196 permit
|
64.95.144.196 permit
|
||||||
64.127.115.252 permit
|
64.127.115.252 permit
|
||||||
@@ -265,21 +284,21 @@
|
|||||||
64.207.219.7 permit
|
64.207.219.7 permit
|
||||||
64.207.219.8 permit
|
64.207.219.8 permit
|
||||||
64.207.219.9 permit
|
64.207.219.9 permit
|
||||||
64.207.219.10 permit
|
64.207.219.13 permit
|
||||||
64.207.219.11 permit
|
64.207.219.14 permit
|
||||||
64.207.219.12 permit
|
64.207.219.15 permit
|
||||||
64.207.219.71 permit
|
64.207.219.71 permit
|
||||||
64.207.219.72 permit
|
64.207.219.72 permit
|
||||||
64.207.219.73 permit
|
64.207.219.73 permit
|
||||||
64.207.219.74 permit
|
64.207.219.77 permit
|
||||||
64.207.219.75 permit
|
64.207.219.78 permit
|
||||||
64.207.219.76 permit
|
64.207.219.79 permit
|
||||||
64.207.219.135 permit
|
64.207.219.135 permit
|
||||||
64.207.219.136 permit
|
64.207.219.136 permit
|
||||||
64.207.219.137 permit
|
64.207.219.137 permit
|
||||||
64.207.219.138 permit
|
64.207.219.141 permit
|
||||||
64.207.219.139 permit
|
64.207.219.142 permit
|
||||||
64.207.219.140 permit
|
64.207.219.143 permit
|
||||||
64.233.160.0/19 permit
|
64.233.160.0/19 permit
|
||||||
65.38.115.76 permit
|
65.38.115.76 permit
|
||||||
65.38.115.84 permit
|
65.38.115.84 permit
|
||||||
@@ -288,7 +307,6 @@
|
|||||||
65.54.51.64/26 permit
|
65.54.51.64/26 permit
|
||||||
65.54.61.64/26 permit
|
65.54.61.64/26 permit
|
||||||
65.54.121.120/29 permit
|
65.54.121.120/29 permit
|
||||||
65.54.121.124/31 permit
|
|
||||||
65.54.190.0/24 permit
|
65.54.190.0/24 permit
|
||||||
65.54.241.0/24 permit
|
65.54.241.0/24 permit
|
||||||
65.55.29.77 permit
|
65.55.29.77 permit
|
||||||
@@ -298,7 +316,6 @@
|
|||||||
65.55.52.224/27 permit
|
65.55.52.224/27 permit
|
||||||
65.55.78.128/25 permit
|
65.55.78.128/25 permit
|
||||||
65.55.81.48/28 permit
|
65.55.81.48/28 permit
|
||||||
65.55.81.54/31 permit
|
|
||||||
65.55.90.0/24 permit
|
65.55.90.0/24 permit
|
||||||
65.55.94.0/25 permit
|
65.55.94.0/25 permit
|
||||||
65.55.111.0/24 permit
|
65.55.111.0/24 permit
|
||||||
@@ -325,9 +342,6 @@
|
|||||||
66.111.4.225 permit
|
66.111.4.225 permit
|
||||||
66.111.4.229 permit
|
66.111.4.229 permit
|
||||||
66.111.4.230 permit
|
66.111.4.230 permit
|
||||||
66.135.202.0/27 permit
|
|
||||||
66.135.215.0/24 permit
|
|
||||||
66.135.222.1 permit
|
|
||||||
66.162.193.226/31 permit
|
66.162.193.226/31 permit
|
||||||
66.163.184.0/21 permit
|
66.163.184.0/21 permit
|
||||||
66.163.184.0/24 permit
|
66.163.184.0/24 permit
|
||||||
@@ -358,7 +372,8 @@
|
|||||||
66.196.81.232/31 permit
|
66.196.81.232/31 permit
|
||||||
66.196.81.234 permit
|
66.196.81.234 permit
|
||||||
66.211.168.230/31 permit
|
66.211.168.230/31 permit
|
||||||
66.211.184.0/23 permit
|
66.211.170.86/31 permit
|
||||||
|
66.211.170.88/30 permit
|
||||||
66.218.74.64/30 permit
|
66.218.74.64/30 permit
|
||||||
66.218.74.68/31 permit
|
66.218.74.68/31 permit
|
||||||
66.218.75.112/30 permit
|
66.218.75.112/30 permit
|
||||||
@@ -420,9 +435,7 @@
|
|||||||
67.221.168.65 permit
|
67.221.168.65 permit
|
||||||
67.228.2.24/30 permit
|
67.228.2.24/30 permit
|
||||||
67.228.21.184/29 permit
|
67.228.21.184/29 permit
|
||||||
67.228.34.32/27 permit
|
|
||||||
67.228.37.4/30 permit
|
67.228.37.4/30 permit
|
||||||
67.228.50.54/31 permit
|
|
||||||
67.231.145.42 permit
|
67.231.145.42 permit
|
||||||
67.231.153.30 permit
|
67.231.153.30 permit
|
||||||
68.142.230.0/24 permit
|
68.142.230.0/24 permit
|
||||||
@@ -432,17 +445,6 @@
|
|||||||
68.142.230.72/30 permit
|
68.142.230.72/30 permit
|
||||||
68.142.230.76/31 permit
|
68.142.230.76/31 permit
|
||||||
68.142.230.78 permit
|
68.142.230.78 permit
|
||||||
68.232.131.164 permit
|
|
||||||
68.232.131.172 permit
|
|
||||||
68.232.131.183 permit
|
|
||||||
68.232.131.185 permit
|
|
||||||
68.232.143.44 permit
|
|
||||||
68.232.145.216 permit
|
|
||||||
68.232.148.56 permit
|
|
||||||
68.232.148.128 permit
|
|
||||||
68.232.148.138 permit
|
|
||||||
68.232.157.60 permit
|
|
||||||
68.232.157.143 permit
|
|
||||||
68.232.192.0/20 permit
|
68.232.192.0/20 permit
|
||||||
69.63.178.128/25 permit
|
69.63.178.128/25 permit
|
||||||
69.63.181.0/24 permit
|
69.63.181.0/24 permit
|
||||||
@@ -456,9 +458,9 @@
|
|||||||
69.171.232.0/24 permit
|
69.171.232.0/24 permit
|
||||||
69.171.244.0/23 permit
|
69.171.244.0/23 permit
|
||||||
70.37.151.128/25 permit
|
70.37.151.128/25 permit
|
||||||
|
70.42.149.0/24 permit
|
||||||
70.42.149.35 permit
|
70.42.149.35 permit
|
||||||
72.3.185.0/24 permit
|
72.3.185.0/24 permit
|
||||||
72.3.237.64/28 permit
|
|
||||||
72.14.192.0/18 permit
|
72.14.192.0/18 permit
|
||||||
72.21.192.0/19 permit
|
72.21.192.0/19 permit
|
||||||
72.21.217.142 permit
|
72.21.217.142 permit
|
||||||
@@ -523,8 +525,10 @@
|
|||||||
72.32.154.0/24 permit
|
72.32.154.0/24 permit
|
||||||
72.32.217.0/24 permit
|
72.32.217.0/24 permit
|
||||||
72.32.243.0/24 permit
|
72.32.243.0/24 permit
|
||||||
72.34.168.75 permit
|
|
||||||
72.34.168.76 permit
|
72.34.168.76 permit
|
||||||
|
72.34.168.80 permit
|
||||||
|
72.34.168.85 permit
|
||||||
|
72.34.168.86 permit
|
||||||
72.52.72.32/28 permit
|
72.52.72.32/28 permit
|
||||||
72.52.72.36 permit
|
72.52.72.36 permit
|
||||||
74.6.128.0/21 permit
|
74.6.128.0/21 permit
|
||||||
@@ -536,9 +540,6 @@
|
|||||||
74.6.133.0/24 permit
|
74.6.133.0/24 permit
|
||||||
74.6.134.0/24 permit
|
74.6.134.0/24 permit
|
||||||
74.6.135.0/24 permit
|
74.6.135.0/24 permit
|
||||||
74.63.63.115 permit
|
|
||||||
74.63.63.121 permit
|
|
||||||
74.63.194.126 permit
|
|
||||||
74.63.212.0/24 permit
|
74.63.212.0/24 permit
|
||||||
74.63.234.75 permit
|
74.63.234.75 permit
|
||||||
74.63.236.0/24 permit
|
74.63.236.0/24 permit
|
||||||
@@ -557,17 +558,9 @@
|
|||||||
74.112.67.243 permit
|
74.112.67.243 permit
|
||||||
74.125.0.0/16 permit
|
74.125.0.0/16 permit
|
||||||
74.202.227.40 permit
|
74.202.227.40 permit
|
||||||
74.208.4.192/26 permit
|
|
||||||
74.208.5.64/26 permit
|
|
||||||
74.208.122.0/26 permit
|
|
||||||
74.209.250.0/24 permit
|
74.209.250.0/24 permit
|
||||||
74.209.250.12 permit
|
74.209.250.12 permit
|
||||||
75.126.253.48 permit
|
76.223.176.0/20 permit
|
||||||
76.223.176.0/24 permit
|
|
||||||
76.223.180.0/23 permit
|
|
||||||
76.223.188.0/24 permit
|
|
||||||
76.223.189.0/24 permit
|
|
||||||
76.223.190.0/24 permit
|
|
||||||
77.238.176.0/22 permit
|
77.238.176.0/22 permit
|
||||||
77.238.176.0/24 permit
|
77.238.176.0/24 permit
|
||||||
77.238.177.0/24 permit
|
77.238.177.0/24 permit
|
||||||
@@ -590,13 +583,11 @@
|
|||||||
77.238.189.146/31 permit
|
77.238.189.146/31 permit
|
||||||
77.238.189.148/30 permit
|
77.238.189.148/30 permit
|
||||||
81.223.46.0/27 permit
|
81.223.46.0/27 permit
|
||||||
82.165.159.0/24 permit
|
|
||||||
82.165.159.0/26 permit
|
|
||||||
82.165.229.130 permit
|
|
||||||
82.165.230.22 permit
|
|
||||||
84.16.77.1 permit
|
84.16.77.1 permit
|
||||||
85.158.136.0/21 permit
|
85.158.136.0/21 permit
|
||||||
86.61.88.25 permit
|
86.61.88.25 permit
|
||||||
|
87.198.219.130 permit
|
||||||
|
87.198.219.153 permit
|
||||||
87.238.80.0/21 permit
|
87.238.80.0/21 permit
|
||||||
87.248.103.12 permit
|
87.248.103.12 permit
|
||||||
87.248.103.21 permit
|
87.248.103.21 permit
|
||||||
@@ -633,11 +624,9 @@
|
|||||||
87.248.117.201 permit
|
87.248.117.201 permit
|
||||||
87.248.117.202 permit
|
87.248.117.202 permit
|
||||||
87.248.117.205 permit
|
87.248.117.205 permit
|
||||||
|
87.252.219.254 permit
|
||||||
87.253.232.0/21 permit
|
87.253.232.0/21 permit
|
||||||
89.22.108.0/24 permit
|
89.22.108.0/24 permit
|
||||||
91.194.248.0/23 permit
|
|
||||||
91.211.240.0/22 permit
|
|
||||||
91.211.243.0/24 permit
|
|
||||||
91.220.42.0/24 permit
|
91.220.42.0/24 permit
|
||||||
94.236.119.0/26 permit
|
94.236.119.0/26 permit
|
||||||
94.245.112.0/27 permit
|
94.245.112.0/27 permit
|
||||||
@@ -649,7 +638,6 @@
|
|||||||
96.43.148.64/28 permit
|
96.43.148.64/28 permit
|
||||||
96.43.148.64/31 permit
|
96.43.148.64/31 permit
|
||||||
96.43.151.64/28 permit
|
96.43.151.64/28 permit
|
||||||
96.46.150.192/27 permit
|
|
||||||
98.136.44.181 permit
|
98.136.44.181 permit
|
||||||
98.136.44.182/31 permit
|
98.136.44.182/31 permit
|
||||||
98.136.44.184 permit
|
98.136.44.184 permit
|
||||||
@@ -1152,20 +1140,25 @@
|
|||||||
98.139.245.180/31 permit
|
98.139.245.180/31 permit
|
||||||
98.139.245.208/30 permit
|
98.139.245.208/30 permit
|
||||||
98.139.245.212/31 permit
|
98.139.245.212/31 permit
|
||||||
|
99.78.197.208/28 permit
|
||||||
|
103.2.140.0/22 permit
|
||||||
103.9.8.121 permit
|
103.9.8.121 permit
|
||||||
103.9.8.122 permit
|
103.9.8.122 permit
|
||||||
103.9.8.123 permit
|
103.9.8.123 permit
|
||||||
103.9.96.0/22 permit
|
103.9.96.0/22 permit
|
||||||
103.13.69.0/24 permit
|
103.13.69.0/24 permit
|
||||||
103.28.42.0/24 permit
|
103.47.204.0/22 permit
|
||||||
103.96.20.0/24 permit
|
103.96.21.0/24 permit
|
||||||
103.96.22.0/24 permit
|
103.96.23.0/24 permit
|
||||||
|
103.151.192.0/23 permit
|
||||||
103.237.104.0/22 permit
|
103.237.104.0/22 permit
|
||||||
104.43.243.237 permit
|
104.43.243.237 permit
|
||||||
104.47.0.0/17 permit
|
104.47.0.0/17 permit
|
||||||
104.130.96.0/28 permit
|
104.130.96.0/28 permit
|
||||||
104.130.122.0/23 permit
|
104.130.122.0/23 permit
|
||||||
|
104.214.25.77 permit
|
||||||
104.215.148.63 permit
|
104.215.148.63 permit
|
||||||
|
104.215.186.3 permit
|
||||||
104.245.209.192/26 permit
|
104.245.209.192/26 permit
|
||||||
106.10.144.64/27 permit
|
106.10.144.64/27 permit
|
||||||
106.10.144.100/31 permit
|
106.10.144.100/31 permit
|
||||||
@@ -1291,6 +1284,7 @@
|
|||||||
106.10.242.0/24 permit
|
106.10.242.0/24 permit
|
||||||
106.10.243.0/24 permit
|
106.10.243.0/24 permit
|
||||||
106.10.244.0/24 permit
|
106.10.244.0/24 permit
|
||||||
|
106.39.212.64/29 permit
|
||||||
106.50.16.0/28 permit
|
106.50.16.0/28 permit
|
||||||
108.174.0.0/24 permit
|
108.174.0.0/24 permit
|
||||||
108.174.0.215 permit
|
108.174.0.215 permit
|
||||||
@@ -1302,13 +1296,14 @@
|
|||||||
108.175.30.45 permit
|
108.175.30.45 permit
|
||||||
108.177.8.0/21 permit
|
108.177.8.0/21 permit
|
||||||
108.177.96.0/19 permit
|
108.177.96.0/19 permit
|
||||||
108.178.6.0/24 permit
|
|
||||||
109.237.142.0/24 permit
|
109.237.142.0/24 permit
|
||||||
111.221.23.128/25 permit
|
111.221.23.128/25 permit
|
||||||
111.221.26.0/27 permit
|
111.221.26.0/27 permit
|
||||||
111.221.66.0/25 permit
|
111.221.66.0/25 permit
|
||||||
111.221.69.128/25 permit
|
111.221.69.128/25 permit
|
||||||
111.221.112.0/21 permit
|
111.221.112.0/21 permit
|
||||||
|
112.19.199.64/29 permit
|
||||||
|
112.19.242.64/29 permit
|
||||||
116.214.12.0/24 permit
|
116.214.12.0/24 permit
|
||||||
116.214.12.47 permit
|
116.214.12.47 permit
|
||||||
116.214.12.48/31 permit
|
116.214.12.48/31 permit
|
||||||
@@ -1325,6 +1320,7 @@
|
|||||||
117.120.16.0/21 permit
|
117.120.16.0/21 permit
|
||||||
119.42.242.52/31 permit
|
119.42.242.52/31 permit
|
||||||
119.42.242.156 permit
|
119.42.242.156 permit
|
||||||
|
123.126.78.64/29 permit
|
||||||
124.47.150.0/24 permit
|
124.47.150.0/24 permit
|
||||||
124.47.189.0/24 permit
|
124.47.189.0/24 permit
|
||||||
124.108.96.0/24 permit
|
124.108.96.0/24 permit
|
||||||
@@ -1332,11 +1328,19 @@
|
|||||||
124.108.96.28/31 permit
|
124.108.96.28/31 permit
|
||||||
124.108.96.70/31 permit
|
124.108.96.70/31 permit
|
||||||
124.108.96.72/31 permit
|
124.108.96.72/31 permit
|
||||||
|
128.17.0.0/20 permit
|
||||||
|
128.17.64.0/20 permit
|
||||||
|
128.17.128.0/20 permit
|
||||||
|
128.17.192.0/20 permit
|
||||||
128.127.70.0/26 permit
|
128.127.70.0/26 permit
|
||||||
|
128.245.0.0/20 permit
|
||||||
|
128.245.64.0/20 permit
|
||||||
129.41.77.70 permit
|
129.41.77.70 permit
|
||||||
129.41.169.249 permit
|
129.41.169.249 permit
|
||||||
|
129.146.236.58 permit
|
||||||
|
129.153.194.228 permit
|
||||||
|
129.159.87.137 permit
|
||||||
130.61.9.72 permit
|
130.61.9.72 permit
|
||||||
130.61.68.235 permit
|
|
||||||
130.211.0.0/22 permit
|
130.211.0.0/22 permit
|
||||||
130.248.172.0/24 permit
|
130.248.172.0/24 permit
|
||||||
130.248.173.0/24 permit
|
130.248.173.0/24 permit
|
||||||
@@ -1345,8 +1349,10 @@
|
|||||||
131.253.121.0/26 permit
|
131.253.121.0/26 permit
|
||||||
131.253.121.20 permit
|
131.253.121.20 permit
|
||||||
131.253.121.52 permit
|
131.253.121.52 permit
|
||||||
132.145.11.129 permit
|
|
||||||
132.145.13.209 permit
|
132.145.13.209 permit
|
||||||
|
132.226.26.225 permit
|
||||||
|
132.226.49.32 permit
|
||||||
|
132.226.56.24 permit
|
||||||
134.170.27.8 permit
|
134.170.27.8 permit
|
||||||
134.170.113.0/26 permit
|
134.170.113.0/26 permit
|
||||||
134.170.141.64/26 permit
|
134.170.141.64/26 permit
|
||||||
@@ -1356,21 +1362,27 @@
|
|||||||
135.84.82.0/24 permit
|
135.84.82.0/24 permit
|
||||||
135.84.216.0/22 permit
|
135.84.216.0/22 permit
|
||||||
136.143.182.0/23 permit
|
136.143.182.0/23 permit
|
||||||
136.143.188.0/23 permit
|
136.143.184.0/24 permit
|
||||||
|
136.143.188.0/24 permit
|
||||||
136.147.128.0/20 permit
|
136.147.128.0/20 permit
|
||||||
136.147.135.0/24 permit
|
136.147.135.0/24 permit
|
||||||
136.147.176.0/20 permit
|
136.147.176.0/20 permit
|
||||||
136.147.176.0/24 permit
|
136.147.176.0/24 permit
|
||||||
136.147.182.0/24 permit
|
136.147.182.0/24 permit
|
||||||
|
138.91.172.26 permit
|
||||||
139.60.152.0/22 permit
|
139.60.152.0/22 permit
|
||||||
139.178.64.159 permit
|
139.178.64.159 permit
|
||||||
139.178.64.195 permit
|
139.178.64.195 permit
|
||||||
139.180.17.0/24 permit
|
|
||||||
141.193.32.0/23 permit
|
141.193.32.0/23 permit
|
||||||
|
143.55.224.0/21 permit
|
||||||
|
143.55.232.0/22 permit
|
||||||
|
143.55.236.0/22 permit
|
||||||
|
144.178.36.0/24 permit
|
||||||
|
144.178.38.0/24 permit
|
||||||
146.20.112.0/26 permit
|
146.20.112.0/26 permit
|
||||||
146.20.113.0/24 permit
|
146.20.113.0/24 permit
|
||||||
146.20.191.0/24 permit
|
146.20.191.0/24 permit
|
||||||
146.88.28.0/24 permit
|
146.20.215.0/24 permit
|
||||||
146.101.78.0/24 permit
|
146.101.78.0/24 permit
|
||||||
147.75.65.173 permit
|
147.75.65.173 permit
|
||||||
147.75.65.174 permit
|
147.75.65.174 permit
|
||||||
@@ -1384,10 +1396,7 @@
|
|||||||
148.105.0.14 permit
|
148.105.0.14 permit
|
||||||
148.105.8.0/21 permit
|
148.105.8.0/21 permit
|
||||||
149.72.0.0/16 permit
|
149.72.0.0/16 permit
|
||||||
151.101.1.140 permit
|
152.67.105.195 permit
|
||||||
151.101.65.140 permit
|
|
||||||
151.101.129.140 permit
|
|
||||||
151.101.193.140 permit
|
|
||||||
157.55.0.192/26 permit
|
157.55.0.192/26 permit
|
||||||
157.55.1.128/26 permit
|
157.55.1.128/26 permit
|
||||||
157.55.2.0/25 permit
|
157.55.2.0/25 permit
|
||||||
@@ -1397,6 +1406,7 @@
|
|||||||
157.55.61.0/24 permit
|
157.55.61.0/24 permit
|
||||||
157.55.157.128/25 permit
|
157.55.157.128/25 permit
|
||||||
157.55.225.0/25 permit
|
157.55.225.0/25 permit
|
||||||
|
157.55.254.216 permit
|
||||||
157.56.24.0/25 permit
|
157.56.24.0/25 permit
|
||||||
157.56.120.128/26 permit
|
157.56.120.128/26 permit
|
||||||
157.56.232.0/21 permit
|
157.56.232.0/21 permit
|
||||||
@@ -1405,21 +1415,26 @@
|
|||||||
157.58.196.96/29 permit
|
157.58.196.96/29 permit
|
||||||
157.58.249.3 permit
|
157.58.249.3 permit
|
||||||
157.151.208.65 permit
|
157.151.208.65 permit
|
||||||
158.247.16.0/20 permit
|
157.255.1.64/29 permit
|
||||||
|
159.92.157.0/24 permit
|
||||||
|
159.92.158.0/24 permit
|
||||||
|
159.92.159.0/24 permit
|
||||||
|
159.92.160.0/24 permit
|
||||||
|
159.92.161.0/24 permit
|
||||||
|
159.92.162.0/24 permit
|
||||||
|
159.135.132.128/25 permit
|
||||||
|
159.135.140.80/29 permit
|
||||||
159.135.224.0/20 permit
|
159.135.224.0/20 permit
|
||||||
161.38.192.0/22 permit
|
159.183.0.0/16 permit
|
||||||
161.38.196.0/22 permit
|
161.38.192.0/20 permit
|
||||||
161.71.32.0/21 permit
|
161.38.204.0/22 permit
|
||||||
|
161.71.32.0/19 permit
|
||||||
|
161.71.64.0/20 permit
|
||||||
162.208.119.181 permit
|
162.208.119.181 permit
|
||||||
162.247.216.0/22 permit
|
162.247.216.0/22 permit
|
||||||
162.248.184.121 permit
|
163.47.180.0/23 permit
|
||||||
162.248.184.122 permit
|
|
||||||
162.248.185.121 permit
|
|
||||||
162.248.185.122 permit
|
|
||||||
162.248.186.121 permit
|
|
||||||
162.248.186.122 permit
|
|
||||||
163.47.180.0/22 permit
|
|
||||||
163.114.130.16 permit
|
163.114.130.16 permit
|
||||||
|
163.114.132.120 permit
|
||||||
166.78.68.0/22 permit
|
166.78.68.0/22 permit
|
||||||
166.78.68.221 permit
|
166.78.68.221 permit
|
||||||
166.78.69.146 permit
|
166.78.69.146 permit
|
||||||
@@ -1427,16 +1442,7 @@
|
|||||||
166.78.69.170 permit
|
166.78.69.170 permit
|
||||||
166.78.71.131 permit
|
166.78.71.131 permit
|
||||||
167.89.0.0/17 permit
|
167.89.0.0/17 permit
|
||||||
167.89.2.4 permit
|
|
||||||
167.89.22.44 permit
|
|
||||||
167.89.25.84 permit
|
|
||||||
167.89.31.192/29 permit
|
|
||||||
167.89.32.5 permit
|
|
||||||
167.89.32.50 permit
|
|
||||||
167.89.46.159 permit
|
167.89.46.159 permit
|
||||||
167.89.46.185 permit
|
|
||||||
167.89.60.95 permit
|
|
||||||
167.89.62.118 permit
|
|
||||||
167.89.64.9 permit
|
167.89.64.9 permit
|
||||||
167.89.65.0 permit
|
167.89.65.0 permit
|
||||||
167.89.65.53 permit
|
167.89.65.53 permit
|
||||||
@@ -1448,22 +1454,15 @@
|
|||||||
167.89.75.164 permit
|
167.89.75.164 permit
|
||||||
167.89.101.2 permit
|
167.89.101.2 permit
|
||||||
167.89.101.192/28 permit
|
167.89.101.192/28 permit
|
||||||
167.89.107.125 permit
|
|
||||||
167.89.107.127 permit
|
|
||||||
167.89.107.129 permit
|
|
||||||
167.89.107.136 permit
|
|
||||||
167.216.129.170 permit
|
|
||||||
167.216.129.182/31 permit
|
|
||||||
167.216.129.184/29 permit
|
|
||||||
167.216.129.192/29 permit
|
|
||||||
167.216.129.200 permit
|
|
||||||
167.216.129.205 permit
|
|
||||||
167.216.129.206/31 permit
|
|
||||||
167.216.129.208/31 permit
|
|
||||||
167.216.129.210 permit
|
167.216.129.210 permit
|
||||||
|
167.216.131.180 permit
|
||||||
167.220.67.232/29 permit
|
167.220.67.232/29 permit
|
||||||
167.220.67.238 permit
|
167.220.67.238 permit
|
||||||
|
168.138.5.36 permit
|
||||||
168.245.0.0/17 permit
|
168.245.0.0/17 permit
|
||||||
|
170.10.68.0/22 permit
|
||||||
|
170.10.129.0/24 permit
|
||||||
|
170.10.133.0/24 permit
|
||||||
172.217.0.0/19 permit
|
172.217.0.0/19 permit
|
||||||
172.217.32.0/20 permit
|
172.217.32.0/20 permit
|
||||||
172.217.128.0/19 permit
|
172.217.128.0/19 permit
|
||||||
@@ -1473,8 +1472,6 @@
|
|||||||
172.253.112.0/20 permit
|
172.253.112.0/20 permit
|
||||||
173.0.84.224/27 permit
|
173.0.84.224/27 permit
|
||||||
173.0.94.244/30 permit
|
173.0.94.244/30 permit
|
||||||
173.193.132.134/31 permit
|
|
||||||
173.193.210.32/27 permit
|
|
||||||
173.194.0.0/16 permit
|
173.194.0.0/16 permit
|
||||||
173.203.79.182 permit
|
173.203.79.182 permit
|
||||||
173.203.81.39 permit
|
173.203.81.39 permit
|
||||||
@@ -1482,7 +1479,6 @@
|
|||||||
173.224.160.188 permit
|
173.224.160.188 permit
|
||||||
173.224.161.128/25 permit
|
173.224.161.128/25 permit
|
||||||
173.228.155.0/24 permit
|
173.228.155.0/24 permit
|
||||||
173.236.20.0/24 permit
|
|
||||||
174.36.84.8/29 permit
|
174.36.84.8/29 permit
|
||||||
174.36.84.16/29 permit
|
174.36.84.16/29 permit
|
||||||
174.36.84.32/29 permit
|
174.36.84.32/29 permit
|
||||||
@@ -1494,30 +1490,25 @@
|
|||||||
174.36.114.148/30 permit
|
174.36.114.148/30 permit
|
||||||
174.36.114.152/29 permit
|
174.36.114.152/29 permit
|
||||||
174.37.67.28/30 permit
|
174.37.67.28/30 permit
|
||||||
174.37.226.64/27 permit
|
|
||||||
174.129.194.241 permit
|
|
||||||
174.129.203.189 permit
|
174.129.203.189 permit
|
||||||
174.137.46.0/24 permit
|
|
||||||
176.32.105.0/24 permit
|
176.32.105.0/24 permit
|
||||||
176.32.127.0/24 permit
|
176.32.127.0/24 permit
|
||||||
178.236.10.128/26 permit
|
178.236.10.128/26 permit
|
||||||
180.189.28.0/24 permit
|
180.189.28.0/24 permit
|
||||||
182.50.76.0/22 permit
|
182.50.76.0/22 permit
|
||||||
182.50.78.64/28 permit
|
182.50.78.64/28 permit
|
||||||
184.173.105.0/24 permit
|
183.240.219.64/29 permit
|
||||||
184.173.153.0/24 permit
|
|
||||||
185.4.120.0/24 permit
|
|
||||||
185.4.122.0/24 permit
|
|
||||||
185.12.80.0/22 permit
|
185.12.80.0/22 permit
|
||||||
185.28.196.0/22 permit
|
185.28.196.0/22 permit
|
||||||
185.58.84.0/24 permit
|
185.58.84.93 permit
|
||||||
185.58.87.0/24 permit
|
185.58.85.0/24 permit
|
||||||
|
185.58.86.0/24 permit
|
||||||
185.72.128.75 permit
|
185.72.128.75 permit
|
||||||
185.72.128.76 permit
|
185.72.128.76 permit
|
||||||
|
185.72.128.80 permit
|
||||||
185.80.93.204 permit
|
185.80.93.204 permit
|
||||||
185.80.93.227 permit
|
185.80.93.227 permit
|
||||||
185.80.95.31 permit
|
185.80.95.31 permit
|
||||||
185.90.20.0/22 permit
|
|
||||||
185.189.236.0/22 permit
|
185.189.236.0/22 permit
|
||||||
185.211.120.0/22 permit
|
185.211.120.0/22 permit
|
||||||
185.250.236.0/22 permit
|
185.250.236.0/22 permit
|
||||||
@@ -1577,7 +1568,6 @@
|
|||||||
192.64.236.0/24 permit
|
192.64.236.0/24 permit
|
||||||
192.64.237.0/24 permit
|
192.64.237.0/24 permit
|
||||||
192.64.238.0/24 permit
|
192.64.238.0/24 permit
|
||||||
192.92.97.0/24 permit
|
|
||||||
192.161.144.0/20 permit
|
192.161.144.0/20 permit
|
||||||
192.162.87.0/24 permit
|
192.162.87.0/24 permit
|
||||||
192.237.158.0/23 permit
|
192.237.158.0/23 permit
|
||||||
@@ -1589,37 +1579,34 @@
|
|||||||
192.254.113.10 permit
|
192.254.113.10 permit
|
||||||
192.254.113.101 permit
|
192.254.113.101 permit
|
||||||
192.254.114.176 permit
|
192.254.114.176 permit
|
||||||
192.254.115.72 permit
|
|
||||||
192.254.118.63 permit
|
192.254.118.63 permit
|
||||||
192.254.127.96/27 permit
|
193.7.206.0/25 permit
|
||||||
|
193.7.207.0/25 permit
|
||||||
193.109.254.0/23 permit
|
193.109.254.0/23 permit
|
||||||
194.64.234.128/27 permit
|
193.122.128.100 permit
|
||||||
194.64.234.129 permit
|
194.64.234.129 permit
|
||||||
|
194.104.109.0/24 permit
|
||||||
|
194.104.111.0/24 permit
|
||||||
194.106.220.0/23 permit
|
194.106.220.0/23 permit
|
||||||
194.113.24.0/22 permit
|
|
||||||
194.154.193.192/27 permit
|
194.154.193.192/27 permit
|
||||||
195.54.172.0/23 permit
|
|
||||||
195.130.217.0/24 permit
|
195.130.217.0/24 permit
|
||||||
|
195.234.109.226 permit
|
||||||
195.245.230.0/23 permit
|
195.245.230.0/23 permit
|
||||||
198.2.128.0/18 permit
|
198.2.128.0/18 permit
|
||||||
198.2.128.0/24 permit
|
198.2.128.0/24 permit
|
||||||
198.2.132.0/22 permit
|
198.2.132.0/22 permit
|
||||||
198.2.136.0/23 permit
|
198.2.136.0/23 permit
|
||||||
|
198.2.145.0/24 permit
|
||||||
198.2.177.0/24 permit
|
198.2.177.0/24 permit
|
||||||
198.2.178.0/24 permit
|
198.2.178.0/23 permit
|
||||||
198.2.179.0/24 permit
|
|
||||||
198.2.180.0/24 permit
|
198.2.180.0/24 permit
|
||||||
198.2.186.0/23 permit
|
198.2.186.0/23 permit
|
||||||
198.21.0.0/21 permit
|
198.21.0.0/21 permit
|
||||||
198.21.3.166 permit
|
|
||||||
198.21.4.224 permit
|
|
||||||
198.37.144.0/20 permit
|
198.37.144.0/20 permit
|
||||||
198.37.145.250 permit
|
198.37.152.186 permit
|
||||||
198.37.146.118/31 permit
|
|
||||||
198.37.149.128 permit
|
|
||||||
198.37.151.26 permit
|
|
||||||
198.61.254.0/23 permit
|
198.61.254.0/23 permit
|
||||||
198.61.254.231 permit
|
198.61.254.231 permit
|
||||||
|
198.74.56.28 permit
|
||||||
198.178.234.57 permit
|
198.178.234.57 permit
|
||||||
198.245.80.0/20 permit
|
198.245.80.0/20 permit
|
||||||
198.245.81.0/24 permit
|
198.245.81.0/24 permit
|
||||||
@@ -1636,18 +1623,15 @@
|
|||||||
199.122.120.0/21 permit
|
199.122.120.0/21 permit
|
||||||
199.122.123.0/24 permit
|
199.122.123.0/24 permit
|
||||||
199.127.232.0/22 permit
|
199.127.232.0/22 permit
|
||||||
199.201.64.23 permit
|
|
||||||
199.201.65.23 permit
|
|
||||||
199.255.192.0/22 permit
|
199.255.192.0/22 permit
|
||||||
202.129.242.0/23 permit
|
202.129.242.0/23 permit
|
||||||
202.165.102.47 permit
|
202.165.102.47 permit
|
||||||
202.177.148.100 permit
|
202.177.148.100 permit
|
||||||
202.177.148.110 permit
|
202.177.148.110 permit
|
||||||
|
203.31.36.0/22 permit
|
||||||
203.32.4.25 permit
|
203.32.4.25 permit
|
||||||
203.55.21.0/24 permit
|
|
||||||
203.81.17.0/24 permit
|
203.81.17.0/24 permit
|
||||||
203.122.32.250 permit
|
203.122.32.250 permit
|
||||||
203.145.57.160/27 permit
|
|
||||||
203.188.194.32 permit
|
203.188.194.32 permit
|
||||||
203.188.194.151 permit
|
203.188.194.151 permit
|
||||||
203.188.194.203 permit
|
203.188.194.203 permit
|
||||||
@@ -1680,32 +1664,30 @@
|
|||||||
203.188.201.12/30 permit
|
203.188.201.12/30 permit
|
||||||
203.209.230.75 permit
|
203.209.230.75 permit
|
||||||
203.209.230.76/31 permit
|
203.209.230.76/31 permit
|
||||||
204.2.193.0/29 permit
|
|
||||||
204.11.168.0/21 permit
|
204.11.168.0/21 permit
|
||||||
204.13.11.48/29 permit
|
204.13.11.48/29 permit
|
||||||
204.13.11.48/30 permit
|
|
||||||
204.14.232.0/21 permit
|
204.14.232.0/21 permit
|
||||||
204.14.232.64/28 permit
|
204.14.232.64/28 permit
|
||||||
204.14.234.64/28 permit
|
204.14.234.64/28 permit
|
||||||
204.29.186.0/23 permit
|
204.29.186.0/23 permit
|
||||||
204.75.142.0/24 permit
|
|
||||||
204.79.197.212 permit
|
204.79.197.212 permit
|
||||||
204.92.114.187 permit
|
204.92.114.187 permit
|
||||||
204.92.114.203 permit
|
204.92.114.203 permit
|
||||||
204.92.114.204/31 permit
|
204.92.114.204/31 permit
|
||||||
204.141.32.0/23 permit
|
204.141.32.0/23 permit
|
||||||
204.141.42.0/23 permit
|
204.141.42.0/23 permit
|
||||||
204.153.120.0/23 permit
|
204.153.121.0/24 permit
|
||||||
|
204.232.168.0/24 permit
|
||||||
205.139.110.0/24 permit
|
205.139.110.0/24 permit
|
||||||
205.139.111.0/24 permit
|
|
||||||
205.201.128.0/20 permit
|
205.201.128.0/20 permit
|
||||||
205.201.131.128/25 permit
|
205.201.131.128/25 permit
|
||||||
205.201.134.128/25 permit
|
205.201.134.128/25 permit
|
||||||
205.201.136.0/23 permit
|
205.201.136.0/23 permit
|
||||||
205.201.137.229 permit
|
|
||||||
205.201.139.0/24 permit
|
205.201.139.0/24 permit
|
||||||
205.207.104.0/22 permit
|
205.207.104.0/22 permit
|
||||||
205.207.104.108 permit
|
205.207.104.108 permit
|
||||||
|
205.220.167.17 permit
|
||||||
|
205.220.179.17 permit
|
||||||
205.251.233.32 permit
|
205.251.233.32 permit
|
||||||
205.251.233.36 permit
|
205.251.233.36 permit
|
||||||
206.25.247.143 permit
|
206.25.247.143 permit
|
||||||
@@ -1727,6 +1709,8 @@
|
|||||||
207.46.132.128/27 permit
|
207.46.132.128/27 permit
|
||||||
207.46.198.0/25 permit
|
207.46.198.0/25 permit
|
||||||
207.46.200.0/27 permit
|
207.46.200.0/27 permit
|
||||||
|
207.46.225.107 permit
|
||||||
|
207.58.147.64/28 permit
|
||||||
207.67.38.0/24 permit
|
207.67.38.0/24 permit
|
||||||
207.67.98.192/27 permit
|
207.67.98.192/27 permit
|
||||||
207.68.176.0/26 permit
|
207.68.176.0/26 permit
|
||||||
@@ -1734,7 +1718,8 @@
|
|||||||
207.82.80.0/24 permit
|
207.82.80.0/24 permit
|
||||||
207.126.144.0/20 permit
|
207.126.144.0/20 permit
|
||||||
207.171.160.0/19 permit
|
207.171.160.0/19 permit
|
||||||
207.211.30.0/24 permit
|
207.211.30.64/26 permit
|
||||||
|
207.211.30.128/25 permit
|
||||||
207.211.31.0/25 permit
|
207.211.31.0/25 permit
|
||||||
207.211.41.113 permit
|
207.211.41.113 permit
|
||||||
207.218.90.0/24 permit
|
207.218.90.0/24 permit
|
||||||
@@ -1743,7 +1728,7 @@
|
|||||||
208.43.21.28/30 permit
|
208.43.21.28/30 permit
|
||||||
208.43.21.64/29 permit
|
208.43.21.64/29 permit
|
||||||
208.43.21.72/30 permit
|
208.43.21.72/30 permit
|
||||||
208.43.239.136/30 permit
|
208.46.212.80 permit
|
||||||
208.46.212.208/31 permit
|
208.46.212.208/31 permit
|
||||||
208.46.212.210 permit
|
208.46.212.210 permit
|
||||||
208.64.132.0/22 permit
|
208.64.132.0/22 permit
|
||||||
@@ -1773,13 +1758,13 @@
|
|||||||
208.71.42.212/31 permit
|
208.71.42.212/31 permit
|
||||||
208.71.42.214 permit
|
208.71.42.214 permit
|
||||||
208.72.249.240/29 permit
|
208.72.249.240/29 permit
|
||||||
208.74.204.0/22 permit
|
|
||||||
208.74.204.9 permit
|
208.74.204.9 permit
|
||||||
208.75.120.0/22 permit
|
208.75.120.0/22 permit
|
||||||
208.75.122.246 permit
|
208.75.122.246 permit
|
||||||
208.82.236.96/28 permit
|
208.82.237.96/29 permit
|
||||||
208.82.237.96/28 permit
|
208.82.237.104/31 permit
|
||||||
208.82.238.96/28 permit
|
208.82.238.96/29 permit
|
||||||
|
208.82.238.104/31 permit
|
||||||
208.85.50.137 permit
|
208.85.50.137 permit
|
||||||
208.117.48.0/20 permit
|
208.117.48.0/20 permit
|
||||||
208.185.229.45 permit
|
208.185.229.45 permit
|
||||||
@@ -1792,10 +1777,10 @@
|
|||||||
209.67.98.59 permit
|
209.67.98.59 permit
|
||||||
209.85.128.0/17 permit
|
209.85.128.0/17 permit
|
||||||
212.4.136.0/26 permit
|
212.4.136.0/26 permit
|
||||||
212.25.240.75 permit
|
212.25.240.80 permit
|
||||||
212.25.240.76 permit
|
|
||||||
212.25.240.83 permit
|
212.25.240.83 permit
|
||||||
212.25.240.84 permit
|
212.25.240.84/31 permit
|
||||||
|
212.25.240.88 permit
|
||||||
212.82.96.0/24 permit
|
212.82.96.0/24 permit
|
||||||
212.82.96.32/27 permit
|
212.82.96.32/27 permit
|
||||||
212.82.96.64/29 permit
|
212.82.96.64/29 permit
|
||||||
@@ -1836,13 +1821,8 @@
|
|||||||
212.82.111.228/31 permit
|
212.82.111.228/31 permit
|
||||||
212.82.111.230 permit
|
212.82.111.230 permit
|
||||||
212.123.28.40 permit
|
212.123.28.40 permit
|
||||||
212.227.15.0/24 permit
|
213.167.75.0/25 permit
|
||||||
212.227.15.0/25 permit
|
213.167.81.0/25 permit
|
||||||
212.227.17.0/27 permit
|
|
||||||
212.227.126.128/25 permit
|
|
||||||
213.165.64.0/23 permit
|
|
||||||
213.167.75.0/24 permit
|
|
||||||
213.167.81.0/24 permit
|
|
||||||
213.199.128.139 permit
|
213.199.128.139 permit
|
||||||
213.199.128.145 permit
|
213.199.128.145 permit
|
||||||
213.199.138.181 permit
|
213.199.138.181 permit
|
||||||
@@ -1851,6 +1831,7 @@
|
|||||||
213.199.177.0/26 permit
|
213.199.177.0/26 permit
|
||||||
216.17.150.242 permit
|
216.17.150.242 permit
|
||||||
216.17.150.251 permit
|
216.17.150.251 permit
|
||||||
|
216.22.15.224/27 permit
|
||||||
216.24.224.0/20 permit
|
216.24.224.0/20 permit
|
||||||
216.39.60.0/23 permit
|
216.39.60.0/23 permit
|
||||||
216.39.60.154/31 permit
|
216.39.60.154/31 permit
|
||||||
@@ -1877,17 +1858,9 @@
|
|||||||
216.39.62.60/31 permit
|
216.39.62.60/31 permit
|
||||||
216.39.62.136/29 permit
|
216.39.62.136/29 permit
|
||||||
216.39.62.144/31 permit
|
216.39.62.144/31 permit
|
||||||
216.46.168.197 permit
|
216.46.168.0/24 permit
|
||||||
216.46.168.222 permit
|
|
||||||
216.52.185.88/29 permit
|
|
||||||
216.58.192.0/19 permit
|
216.58.192.0/19 permit
|
||||||
216.66.217.240/29 permit
|
216.66.217.240/29 permit
|
||||||
216.71.96.0/22 permit
|
|
||||||
216.71.152.175 permit
|
|
||||||
216.71.152.207 permit
|
|
||||||
216.71.154.29 permit
|
|
||||||
216.71.155.88 permit
|
|
||||||
216.71.155.89 permit
|
|
||||||
216.74.162.13 permit
|
216.74.162.13 permit
|
||||||
216.74.162.14 permit
|
216.74.162.14 permit
|
||||||
216.82.240.0/20 permit
|
216.82.240.0/20 permit
|
||||||
@@ -1897,9 +1870,6 @@
|
|||||||
216.109.114.0/24 permit
|
216.109.114.0/24 permit
|
||||||
216.109.114.32/27 permit
|
216.109.114.32/27 permit
|
||||||
216.109.114.64/29 permit
|
216.109.114.64/29 permit
|
||||||
216.113.160.0/24 permit
|
|
||||||
216.113.172.0/25 permit
|
|
||||||
216.113.175.0/24 permit
|
|
||||||
216.128.126.97 permit
|
216.128.126.97 permit
|
||||||
216.136.162.65 permit
|
216.136.162.65 permit
|
||||||
216.136.162.120/29 permit
|
216.136.162.120/29 permit
|
||||||
@@ -1909,14 +1879,13 @@
|
|||||||
216.203.33.178/31 permit
|
216.203.33.178/31 permit
|
||||||
216.205.24.0/24 permit
|
216.205.24.0/24 permit
|
||||||
216.239.32.0/19 permit
|
216.239.32.0/19 permit
|
||||||
217.72.192.64/26 permit
|
|
||||||
217.72.192.248/29 permit
|
|
||||||
217.72.207.0/27 permit
|
|
||||||
217.77.141.52 permit
|
217.77.141.52 permit
|
||||||
217.77.141.59 permit
|
217.77.141.59 permit
|
||||||
217.175.193.0/24 permit
|
222.73.195.64/29 permit
|
||||||
217.175.194.0/23 permit
|
223.165.113.0/24 permit
|
||||||
217.175.196.0/24 permit
|
223.165.115.0/24 permit
|
||||||
|
223.165.118.0/23 permit
|
||||||
|
223.165.120.0/23 permit
|
||||||
2001:4860:4000::/36 permit
|
2001:4860:4000::/36 permit
|
||||||
2404:6800:4000::/36 permit
|
2404:6800:4000::/36 permit
|
||||||
2607:f8b0:4000::/36 permit
|
2607:f8b0:4000::/36 permit
|
||||||
@@ -1925,6 +1894,7 @@
|
|||||||
2620:109:c006:104::215 permit
|
2620:109:c006:104::215 permit
|
||||||
2620:109:c006:104::/64 permit
|
2620:109:c006:104::/64 permit
|
||||||
2620:109:c00d:104::/64 permit
|
2620:109:c00d:104::/64 permit
|
||||||
|
2620:10d:c090:450::120 permit
|
||||||
2620:10d:c091:450::16 permit
|
2620:10d:c091:450::16 permit
|
||||||
2620:119:50c0:207::215 permit
|
2620:119:50c0:207::215 permit
|
||||||
2620:119:50c0:207::/64 permit
|
2620:119:50c0:207::/64 permit
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
rules {
|
|
||||||
"LONG" {
|
|
||||||
train {
|
|
||||||
max_trains = 200;
|
|
||||||
max_usages = 20;
|
|
||||||
max_iterations = 25;
|
|
||||||
learning_rate = 0.01,
|
|
||||||
}
|
|
||||||
symbol_spam = "NEURAL_SPAM_LONG";
|
|
||||||
symbol_ham = "NEURAL_HAM_LONG";
|
|
||||||
ann_expire = 45d;
|
|
||||||
}
|
|
||||||
"SHORT" {
|
|
||||||
train {
|
|
||||||
max_trains = 100;
|
|
||||||
max_usages = 10;
|
|
||||||
max_iterations = 15;
|
|
||||||
learning_rate = 0.01,
|
|
||||||
}
|
|
||||||
symbol_spam = "NEURAL_SPAM_SHORT";
|
|
||||||
symbol_ham = "NEURAL_HAM_SHORT";
|
|
||||||
ann_expire = 7d;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,18 +0,0 @@
|
|||||||
symbols = {
|
|
||||||
"NEURAL_SPAM_LONG" {
|
|
||||||
weight = 3.7; # sample weight
|
|
||||||
description = "Neural network spam (long)";
|
|
||||||
}
|
|
||||||
"NEURAL_HAM_LONG" {
|
|
||||||
weight = -4.0; # sample weight
|
|
||||||
description = "Neural network ham (long)";
|
|
||||||
}
|
|
||||||
"NEURAL_SPAM_SHORT" {
|
|
||||||
weight = 2.5; # sample weight
|
|
||||||
description = "Neural network spam (short)";
|
|
||||||
}
|
|
||||||
"NEURAL_HAM_SHORT" {
|
|
||||||
weight = -2.0; # sample weight
|
|
||||||
description = "Neural network ham (short)";
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,61 +0,0 @@
|
|||||||
-- Thanks to https://raw.githubusercontent.com/fatalbanana
|
|
||||||
|
|
||||||
local lua_maps = require 'lua_maps'
|
|
||||||
local rspamd_regexp = require 'rspamd_regexp'
|
|
||||||
local rspamd_util = require 'rspamd_util'
|
|
||||||
|
|
||||||
local ivm_sendgrid_ids = lua_maps.map_add_from_ucl(
|
|
||||||
'https://www.invaluement.com/spdata/sendgrid-id-dnsbl.txt',
|
|
||||||
'set',
|
|
||||||
'Invaluement Service Provider DNSBL: Sendgrid IDs'
|
|
||||||
)
|
|
||||||
|
|
||||||
local ivm_sendgrid_envfromdomains = lua_maps.map_add_from_ucl(
|
|
||||||
'https://www.invaluement.com/spdata/sendgrid-envelopefromdomain-dnsbl.txt',
|
|
||||||
'set',
|
|
||||||
'Invaluement Service Provider DNSBL: Sendgrid envelope domains'
|
|
||||||
)
|
|
||||||
|
|
||||||
local cb_id = rspamd_config:register_symbol({
|
|
||||||
name = 'IVM_SENDGRID',
|
|
||||||
callback = function(task)
|
|
||||||
-- Is it Sendgrid?
|
|
||||||
local sg_hdr = task:get_header('X-SG-EID')
|
|
||||||
if not sg_hdr then return end
|
|
||||||
|
|
||||||
-- Get original envelope from
|
|
||||||
local env_from = task:get_from{'smtp', 'orig'}
|
|
||||||
if not env_from then return end
|
|
||||||
|
|
||||||
-- Check normalised domain in domains list
|
|
||||||
if ivm_sendgrid_envfromdomains and ivm_sendgrid_envfromdomains:get_key(rspamd_util.get_tld(env_from[1].domain)) then
|
|
||||||
task:insert_result('IVM_SENDGRID_DOMAIN', 1.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Check ID in ID list
|
|
||||||
local lp_re = rspamd_regexp.create_cached([[^bounces\+(\d+)-]])
|
|
||||||
local res = lp_re:search(env_from[1].user, true, true)
|
|
||||||
if not res then return end
|
|
||||||
if ivm_sendgrid_ids and ivm_sendgrid_ids:get_key(res[1][2]) then
|
|
||||||
task:insert_result('IVM_SENDGRID_ID', 1.0)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
description = 'Invaluement Service Provider DNSBL: Sendgrid',
|
|
||||||
type = 'callback',
|
|
||||||
})
|
|
||||||
|
|
||||||
rspamd_config:register_symbol({
|
|
||||||
name = 'IVM_SENDGRID_DOMAIN',
|
|
||||||
parent = cb_id,
|
|
||||||
group = 'ivmspdnsbl',
|
|
||||||
score = 8.0,
|
|
||||||
type = 'virtual',
|
|
||||||
})
|
|
||||||
|
|
||||||
rspamd_config:register_symbol({
|
|
||||||
name = 'IVM_SENDGRID_ID',
|
|
||||||
parent = cb_id,
|
|
||||||
group = 'ivmspdnsbl',
|
|
||||||
score = 8.0,
|
|
||||||
type = 'virtual',
|
|
||||||
})
|
|
@@ -39,7 +39,7 @@
|
|||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
// Begin Swagger UI call region
|
// Begin Swagger UI call region
|
||||||
const ui = SwaggerUIBundle({
|
const ui = SwaggerUIBundle({
|
||||||
url: "/api/openapi.yaml",
|
urls: [{url: "/api/openapi.yaml", name: "mailcow API"}],
|
||||||
dom_id: '#swagger-ui',
|
dom_id: '#swagger-ui',
|
||||||
deepLinking: true,
|
deepLinking: true,
|
||||||
presets: [
|
presets: [
|
||||||
|
@@ -209,10 +209,17 @@ paths:
|
|||||||
- app_passwd
|
- app_passwd
|
||||||
- add
|
- add
|
||||||
- active: "1"
|
- active: "1"
|
||||||
app_name: emclient
|
username: info@domain.tld
|
||||||
|
app_name: wordpress
|
||||||
app_passwd: keyleudecticidechothistishownsan31
|
app_passwd: keyleudecticidechothistishownsan31
|
||||||
app_passwd2: keyleudecticidechothistishownsan31
|
app_passwd2: keyleudecticidechothistishownsan31
|
||||||
username: hello@mailcow.email
|
protocols:
|
||||||
|
- imap_access
|
||||||
|
- dav_access
|
||||||
|
- smtp_access
|
||||||
|
- eas_access
|
||||||
|
- pop3_access
|
||||||
|
- sieve_access
|
||||||
msg: app_passwd_added
|
msg: app_passwd_added
|
||||||
type: success
|
type: success
|
||||||
schema:
|
schema:
|
||||||
@@ -249,6 +256,13 @@ paths:
|
|||||||
app_name: wordpress
|
app_name: wordpress
|
||||||
app_passwd: keyleudecticidechothistishownsan31
|
app_passwd: keyleudecticidechothistishownsan31
|
||||||
app_passwd2: keyleudecticidechothistishownsan31
|
app_passwd2: keyleudecticidechothistishownsan31
|
||||||
|
protocols:
|
||||||
|
- imap_access
|
||||||
|
- dav_access
|
||||||
|
- smtp_access
|
||||||
|
- eas_access
|
||||||
|
- pop3_access
|
||||||
|
- sieve_access
|
||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
description: is alias active or not
|
description: is alias active or not
|
||||||
@@ -497,6 +511,7 @@ paths:
|
|||||||
relay_all_recipients: "0"
|
relay_all_recipients: "0"
|
||||||
rl_frame: s
|
rl_frame: s
|
||||||
rl_value: "10"
|
rl_value: "10"
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
- null
|
- null
|
||||||
msg:
|
msg:
|
||||||
- domain_added
|
- domain_added
|
||||||
@@ -544,6 +559,7 @@ paths:
|
|||||||
rl_frame: s
|
rl_frame: s
|
||||||
rl_value: "10"
|
rl_value: "10"
|
||||||
restart_sogo: "10"
|
restart_sogo: "10"
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
description: is domain active or not
|
description: is domain active or not
|
||||||
@@ -1010,6 +1026,7 @@ paths:
|
|||||||
force_pw_update: "1"
|
force_pw_update: "1"
|
||||||
tls_enforce_in: "1"
|
tls_enforce_in: "1"
|
||||||
tls_enforce_out: "1"
|
tls_enforce_out: "1"
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
- null
|
- null
|
||||||
msg:
|
msg:
|
||||||
- mailbox_added
|
- mailbox_added
|
||||||
@@ -1054,6 +1071,7 @@ paths:
|
|||||||
force_pw_update: "1"
|
force_pw_update: "1"
|
||||||
tls_enforce_in: "1"
|
tls_enforce_in: "1"
|
||||||
tls_enforce_out: "1"
|
tls_enforce_out: "1"
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
description: is mailbox active or not
|
description: is mailbox active or not
|
||||||
@@ -2716,6 +2734,140 @@ paths:
|
|||||||
type: object
|
type: object
|
||||||
type: object
|
type: object
|
||||||
summary: Delete Transport Maps
|
summary: Delete Transport Maps
|
||||||
|
"/api/v1/delete/mailbox/tag/{mailbox}":
|
||||||
|
post:
|
||||||
|
parameters:
|
||||||
|
- description: name of mailbox
|
||||||
|
in: path
|
||||||
|
name: mailbox
|
||||||
|
example: info@domain.tld
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"401":
|
||||||
|
$ref: "#/components/responses/Unauthorized"
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
examples:
|
||||||
|
response:
|
||||||
|
value:
|
||||||
|
- log:
|
||||||
|
- mailbox
|
||||||
|
- delete
|
||||||
|
- tags_mailbox
|
||||||
|
- tags:
|
||||||
|
- tag1
|
||||||
|
- tag2
|
||||||
|
mailbox: info@domain.tld
|
||||||
|
- null
|
||||||
|
msg:
|
||||||
|
- mailbox_modified
|
||||||
|
- info@domain.tld
|
||||||
|
type: success
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
log:
|
||||||
|
description: contains request object
|
||||||
|
items: {}
|
||||||
|
type: array
|
||||||
|
msg:
|
||||||
|
items: {}
|
||||||
|
type: array
|
||||||
|
type:
|
||||||
|
enum:
|
||||||
|
- success
|
||||||
|
- danger
|
||||||
|
- error
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
description: OK
|
||||||
|
headers: {}
|
||||||
|
tags:
|
||||||
|
- Mailboxes
|
||||||
|
description: You can delete one or more mailbox tags.
|
||||||
|
operationId: Delete mailbox tags
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
example:
|
||||||
|
- tag1
|
||||||
|
- tag2
|
||||||
|
properties:
|
||||||
|
items:
|
||||||
|
description: contains list of mailboxes you want to delete
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
summary: Delete mailbox tags
|
||||||
|
"/api/v1/delete/domain/tag/{domain}":
|
||||||
|
post:
|
||||||
|
parameters:
|
||||||
|
- description: name of domain
|
||||||
|
in: path
|
||||||
|
name: domain
|
||||||
|
example: domain.tld
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"401":
|
||||||
|
$ref: "#/components/responses/Unauthorized"
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
examples:
|
||||||
|
response:
|
||||||
|
value:
|
||||||
|
- log:
|
||||||
|
- mailbox
|
||||||
|
- delete
|
||||||
|
- tags_domain
|
||||||
|
- tags:
|
||||||
|
- tag1
|
||||||
|
- tag2
|
||||||
|
domain: domain.tld
|
||||||
|
- null
|
||||||
|
msg:
|
||||||
|
- domain_modified
|
||||||
|
- domain.tld
|
||||||
|
type: success
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
log:
|
||||||
|
description: contains request object
|
||||||
|
items: {}
|
||||||
|
type: array
|
||||||
|
msg:
|
||||||
|
items: {}
|
||||||
|
type: array
|
||||||
|
type:
|
||||||
|
enum:
|
||||||
|
- success
|
||||||
|
- danger
|
||||||
|
- error
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
description: OK
|
||||||
|
headers: {}
|
||||||
|
tags:
|
||||||
|
- Domains
|
||||||
|
description: You can delete one or more domain tags.
|
||||||
|
operationId: Delete domain tags
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
example:
|
||||||
|
- tag1
|
||||||
|
- tag2
|
||||||
|
properties:
|
||||||
|
items:
|
||||||
|
description: contains list of domains you want to delete
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
summary: Delete domain tags
|
||||||
/api/v1/edit/alias:
|
/api/v1/edit/alias:
|
||||||
post:
|
post:
|
||||||
responses:
|
responses:
|
||||||
@@ -2865,6 +3017,7 @@ paths:
|
|||||||
quota: "10240"
|
quota: "10240"
|
||||||
relay_all_recipients: "0"
|
relay_all_recipients: "0"
|
||||||
relayhost: "2"
|
relayhost: "2"
|
||||||
|
tags: ["tag3", "tag4"]
|
||||||
items: domain.tld
|
items: domain.tld
|
||||||
properties:
|
properties:
|
||||||
attr:
|
attr:
|
||||||
@@ -3019,6 +3172,7 @@ paths:
|
|||||||
sogo_access: "1"
|
sogo_access: "1"
|
||||||
username:
|
username:
|
||||||
- info@domain.tld
|
- info@domain.tld
|
||||||
|
tags: ["tag3", "tag4"]
|
||||||
- null
|
- null
|
||||||
msg:
|
msg:
|
||||||
- mailbox_modified
|
- mailbox_modified
|
||||||
@@ -3066,6 +3220,7 @@ paths:
|
|||||||
- domain3.tld
|
- domain3.tld
|
||||||
- "*"
|
- "*"
|
||||||
sogo_access: "1"
|
sogo_access: "1"
|
||||||
|
tags: ["tag3", "tag4"]
|
||||||
items:
|
items:
|
||||||
- info@domain.tld
|
- info@domain.tld
|
||||||
properties:
|
properties:
|
||||||
@@ -3793,6 +3948,11 @@ paths:
|
|||||||
- all
|
- all
|
||||||
- mailcow.tld
|
- mailcow.tld
|
||||||
type: string
|
type: string
|
||||||
|
- description: comma seperated list of tags to filter by
|
||||||
|
example: "tag1,tag2"
|
||||||
|
in: query
|
||||||
|
name: tags
|
||||||
|
required: false
|
||||||
- description: e.g. api-key-string
|
- description: e.g. api-key-string
|
||||||
example: api-key-string
|
example: api-key-string
|
||||||
in: header
|
in: header
|
||||||
@@ -3831,6 +3991,7 @@ paths:
|
|||||||
relay_all_recipients: "0"
|
relay_all_recipients: "0"
|
||||||
relayhost: "0"
|
relayhost: "0"
|
||||||
rl: false
|
rl: false
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
- active: "1"
|
- active: "1"
|
||||||
aliases_in_domain: 0
|
aliases_in_domain: 0
|
||||||
aliases_left: 400
|
aliases_left: 400
|
||||||
@@ -3853,6 +4014,7 @@ paths:
|
|||||||
relay_all_recipients: "0"
|
relay_all_recipients: "0"
|
||||||
relayhost: "0"
|
relayhost: "0"
|
||||||
rl: false
|
rl: false
|
||||||
|
tags: ["tag3", "tag4"]
|
||||||
description: OK
|
description: OK
|
||||||
headers: {}
|
headers: {}
|
||||||
tags:
|
tags:
|
||||||
@@ -4345,6 +4507,11 @@ paths:
|
|||||||
- all
|
- all
|
||||||
- user@domain.tld
|
- user@domain.tld
|
||||||
type: string
|
type: string
|
||||||
|
- description: comma seperated list of tags to filter by
|
||||||
|
example: "tag1,tag2"
|
||||||
|
in: query
|
||||||
|
name: tags
|
||||||
|
required: false
|
||||||
- description: e.g. api-key-string
|
- description: e.g. api-key-string
|
||||||
example: api-key-string
|
example: api-key-string
|
||||||
in: header
|
in: header
|
||||||
@@ -4382,6 +4549,7 @@ paths:
|
|||||||
rl: false
|
rl: false
|
||||||
spam_aliases: 0
|
spam_aliases: 0
|
||||||
username: info@doman3.tld
|
username: info@doman3.tld
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
description: OK
|
description: OK
|
||||||
headers: {}
|
headers: {}
|
||||||
tags:
|
tags:
|
||||||
@@ -5072,6 +5240,27 @@ paths:
|
|||||||
of used storage.
|
of used storage.
|
||||||
operationId: Get vmail status
|
operationId: Get vmail status
|
||||||
summary: Get vmail status
|
summary: Get vmail status
|
||||||
|
/api/v1/get/status/version:
|
||||||
|
get:
|
||||||
|
responses:
|
||||||
|
"401":
|
||||||
|
$ref: "#/components/responses/Unauthorized"
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
examples:
|
||||||
|
response:
|
||||||
|
value:
|
||||||
|
version: "2022-04"
|
||||||
|
description: OK
|
||||||
|
headers: {}
|
||||||
|
tags:
|
||||||
|
- Status
|
||||||
|
description: >-
|
||||||
|
Using this endpoint you can get the current running release of this
|
||||||
|
instance.
|
||||||
|
operationId: Get version status
|
||||||
|
summary: Get version status
|
||||||
/api/v1/get/syncjobs/all/no_log:
|
/api/v1/get/syncjobs/all/no_log:
|
||||||
get:
|
get:
|
||||||
responses:
|
responses:
|
||||||
|
@@ -68,7 +68,7 @@ if (empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW'])) {
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
$login_role = check_login($login_user, $login_pass, true);
|
$login_role = check_login($login_user, $login_pass, array('eas' => TRUE));
|
||||||
|
|
||||||
if ($login_role === "user") {
|
if ($login_role === "user") {
|
||||||
header("Content-Type: application/xml");
|
header("Content-Type: application/xml");
|
||||||
|
@@ -207,6 +207,7 @@ legend {
|
|||||||
}
|
}
|
||||||
.footer .version {
|
.footer .version {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
.slave-info {
|
.slave-info {
|
||||||
padding: 15px 0px 15px 15px;
|
padding: 15px 0px 15px 15px;
|
||||||
@@ -231,6 +232,9 @@ table.footable>tbody>tr.footable-empty>td {
|
|||||||
font-style:italic;
|
font-style:italic;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
table>tbody>tr>td>span.footable-toggle {
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
.navbar-nav > li {
|
.navbar-nav > li {
|
||||||
font-size: 1rem !important;
|
font-size: 1rem !important;
|
||||||
}
|
}
|
||||||
@@ -255,3 +259,41 @@ code {
|
|||||||
.flag-icon {
|
.flag-icon {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tag-box {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
.tag-badge {
|
||||||
|
transition: 200ms linear;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
.tag-badge.btn-badge {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.tag-badge .bi {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.tag-badge.btn-badge:hover {
|
||||||
|
filter: brightness(0.9);
|
||||||
|
}
|
||||||
|
.tag-input {
|
||||||
|
margin-left: 10px;
|
||||||
|
border: 0;
|
||||||
|
flex: 1;
|
||||||
|
height: 24px;
|
||||||
|
min-width: 150px;
|
||||||
|
}
|
||||||
|
.tag-input:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.tag-add {
|
||||||
|
padding: 0 5px 0 5px;
|
||||||
|
align-items: center;
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -54,6 +54,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
|||||||
'rl' => $rl,
|
'rl' => $rl,
|
||||||
'rlyhosts' => $rlyhosts,
|
'rlyhosts' => $rlyhosts,
|
||||||
'dkim' => dkim('details', $domain),
|
'dkim' => dkim('details', $domain),
|
||||||
|
'domain_details' => $result,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
elseif (isset($_GET['oauth2client']) &&
|
elseif (isset($_GET['oauth2client']) &&
|
||||||
@@ -99,6 +100,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
|||||||
'rlyhosts' => $rlyhosts,
|
'rlyhosts' => $rlyhosts,
|
||||||
'sender_acl_handles' => mailbox('get', 'sender_acl_handles', $mailbox),
|
'sender_acl_handles' => mailbox('get', 'sender_acl_handles', $mailbox),
|
||||||
'user_acls' => acl('get', 'user', $mailbox),
|
'user_acls' => acl('get', 'user', $mailbox),
|
||||||
|
'mailbox_details' => $result
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
elseif (isset($_GET['relayhost']) && is_numeric($_GET["relayhost"]) && !empty($_GET["relayhost"])) {
|
elseif (isset($_GET['relayhost']) && is_numeric($_GET["relayhost"]) && !empty($_GET["relayhost"])) {
|
||||||
|
@@ -197,7 +197,7 @@ function dkim($_action, $_data = null, $privkey = false) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
dkim('delete', (array)$domain);
|
dkim('delete', array('domains' => $domain));
|
||||||
$redis->hSet('DKIM_PUB_KEYS', $domain, $pem_public_key);
|
$redis->hSet('DKIM_PUB_KEYS', $domain, $pem_public_key);
|
||||||
$redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);
|
$redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);
|
||||||
$redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, $private_key_normalized);
|
$redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, $private_key_normalized);
|
||||||
|
@@ -336,9 +336,34 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$mins_interval = $_data['mins_interval'];
|
$mins_interval = $_data['mins_interval'];
|
||||||
$enc1 = $_data['enc1'];
|
$enc1 = $_data['enc1'];
|
||||||
$custom_params = (empty(trim($_data['custom_params']))) ? '' : trim($_data['custom_params']);
|
$custom_params = (empty(trim($_data['custom_params']))) ? '' : trim($_data['custom_params']);
|
||||||
// Workaround, fixme
|
|
||||||
if (strpos($custom_params, 'pipemess')) {
|
// validate custom params
|
||||||
$custom_params = '';
|
foreach (explode(' -', $custom_params) as $param){
|
||||||
|
if (str_contains($param, ' ')) {
|
||||||
|
// bad char
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'bad character SPACE'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract option
|
||||||
|
if (str_contains($param, '=')) $param = explode('=', $param)[0];
|
||||||
|
// remove first char if first char is -
|
||||||
|
if ($param[0] == '-') $param = ltrim($param, $param[0]);
|
||||||
|
|
||||||
|
// check if param is whitelisted
|
||||||
|
if (!in_array(strtolower($param), $GLOBALS["IMAPSYNC_OPTIONS"]["whitelist"])){
|
||||||
|
// bad option
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'bad option '. $param
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (empty($subfolder2)) {
|
if (empty($subfolder2)) {
|
||||||
$subfolder2 = "";
|
$subfolder2 = "";
|
||||||
@@ -443,16 +468,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),
|
||||||
'msg' => 'access_denied'
|
'msg' => 'access_denied'
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
|
$domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
|
||||||
$description = $_data['description'];
|
$description = $_data['description'];
|
||||||
if (empty($description)) {
|
if (empty($description)) $description = $domain;
|
||||||
$description = $domain;
|
$tags = (array)$_data['tags'];
|
||||||
}
|
|
||||||
$aliases = (int)$_data['aliases'];
|
$aliases = (int)$_data['aliases'];
|
||||||
$mailboxes = (int)$_data['mailboxes'];
|
$mailboxes = (int)$_data['mailboxes'];
|
||||||
$defquota = (int)$_data['defquota'];
|
$defquota = (int)$_data['defquota'];
|
||||||
@@ -545,10 +569,12 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain");
|
$stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':domain' => '%@' . $domain
|
':domain' => '%@' . $domain
|
||||||
));
|
));
|
||||||
|
// save domain
|
||||||
$stmt = $pdo->prepare("INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `defquota`, `maxquota`, `quota`, `backupmx`, `gal`, `active`, `relay_unknown_only`, `relay_all_recipients`)
|
$stmt = $pdo->prepare("INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `defquota`, `maxquota`, `quota`, `backupmx`, `gal`, `active`, `relay_unknown_only`, `relay_all_recipients`)
|
||||||
VALUES (:domain, :description, :aliases, :mailboxes, :defquota, :maxquota, :quota, :backupmx, :gal, :active, :relay_unknown_only, :relay_all_recipients)");
|
VALUES (:domain, :description, :aliases, :mailboxes, :defquota, :maxquota, :quota, :backupmx, :gal, :active, :relay_unknown_only, :relay_all_recipients)");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
@@ -565,6 +591,24 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':relay_unknown_only' => $relay_unknown_only,
|
':relay_unknown_only' => $relay_unknown_only,
|
||||||
':relay_all_recipients' => $relay_all_recipients
|
':relay_all_recipients' => $relay_all_recipients
|
||||||
));
|
));
|
||||||
|
// save tags
|
||||||
|
foreach($tags as $index => $tag){
|
||||||
|
if (empty($tag)) continue;
|
||||||
|
if ($index > $GLOBALS['TAGGING_LIMIT']) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'warning',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare("INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => $domain,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$redis->hSet('DOMAIN_MAP', $domain, 1);
|
$redis->hSet('DOMAIN_MAP', $domain, 1);
|
||||||
}
|
}
|
||||||
@@ -580,7 +624,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain));
|
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain));
|
||||||
}
|
}
|
||||||
if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
|
if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
|
||||||
dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $domain));
|
if (!empty($redis->hGet('DKIM_SELECTORS', $domain))) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'success',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'domain_add_dkim_available'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $domain));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!empty($restart_sogo)) {
|
if (!empty($restart_sogo)) {
|
||||||
$restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true);
|
$restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true);
|
||||||
@@ -910,7 +963,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain));
|
ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain));
|
||||||
}
|
}
|
||||||
if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
|
if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {
|
||||||
dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $alias_domain));
|
if (!empty($redis->hGet('DKIM_SELECTORS', $alias_domain))) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'success',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'domain_add_dkim_available'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $alias_domain));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
@@ -942,6 +1004,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$password = $_data['password'];
|
$password = $_data['password'];
|
||||||
$password2 = $_data['password2'];
|
$password2 = $_data['password2'];
|
||||||
$name = ltrim(rtrim($_data['name'], '>'), '<');
|
$name = ltrim(rtrim($_data['name'], '>'), '<');
|
||||||
|
$tags = $_data['tags'];
|
||||||
$quota_m = intval($_data['quota']);
|
$quota_m = intval($_data['quota']);
|
||||||
if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0) {
|
if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
@@ -1103,6 +1166,23 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':username' => $username
|
':username' => $username
|
||||||
));
|
));
|
||||||
|
// save tags
|
||||||
|
foreach($tags as $index => $tag){
|
||||||
|
if (empty($tag)) continue;
|
||||||
|
if ($index > $GLOBALS['TAGGING_LIMIT']) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'warning',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':username' => $username,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
|
$stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
|
||||||
VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
|
VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
|
||||||
$stmt->execute(array(':username' => $username));
|
$stmt->execute(array(':username' => $username));
|
||||||
@@ -1709,8 +1789,34 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (strpos($custom_params, 'pipemess')) {
|
|
||||||
$custom_params = '';
|
// validate custom params
|
||||||
|
foreach (explode(' -', $custom_params) as $param){
|
||||||
|
if (str_contains($param, ' ')) {
|
||||||
|
// bad char
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'bad character SPACE'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract option
|
||||||
|
if (str_contains($param, '=')) $param = explode('=', $param)[0];
|
||||||
|
// remove first char if first char is -
|
||||||
|
if ($param[0] == '-') $param = ltrim($param, $param[0]);
|
||||||
|
|
||||||
|
// check if param is whitelisted
|
||||||
|
if (!in_array(strtolower($param), $GLOBALS["IMAPSYNC_OPTIONS"]["whitelist"])){
|
||||||
|
// bad option
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'bad option '. $param
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (empty($subfolder2)) {
|
if (empty($subfolder2)) {
|
||||||
$subfolder2 = "";
|
$subfolder2 = "";
|
||||||
@@ -2146,6 +2252,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$gal = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];
|
$gal = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];
|
||||||
$description = (!empty($_data['description']) && isset($_SESSION['acl']['domain_desc']) && $_SESSION['acl']['domain_desc'] == "1") ? $_data['description'] : $is_now['description'];
|
$description = (!empty($_data['description']) && isset($_SESSION['acl']['domain_desc']) && $_SESSION['acl']['domain_desc'] == "1") ? $_data['description'] : $is_now['description'];
|
||||||
(int)$relayhost = (isset($_data['relayhost']) && isset($_SESSION['acl']['domain_relayhost']) && $_SESSION['acl']['domain_relayhost'] == "1") ? intval($_data['relayhost']) : intval($is_now['relayhost']);
|
(int)$relayhost = (isset($_data['relayhost']) && isset($_SESSION['acl']['domain_relayhost']) && $_SESSION['acl']['domain_relayhost'] == "1") ? intval($_data['relayhost']) : intval($is_now['relayhost']);
|
||||||
|
$tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
@@ -2155,6 +2262,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = $pdo->prepare("UPDATE `domain` SET
|
$stmt = $pdo->prepare("UPDATE `domain` SET
|
||||||
`description` = :description,
|
`description` = :description,
|
||||||
`gal` = :gal
|
`gal` = :gal
|
||||||
@@ -2164,6 +2272,24 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':gal' => $gal,
|
':gal' => $gal,
|
||||||
':domain' => $domain
|
':domain' => $domain
|
||||||
));
|
));
|
||||||
|
// save tags
|
||||||
|
foreach($tags as $index => $tag){
|
||||||
|
if (empty($tag)) continue;
|
||||||
|
if ($index > $GLOBALS['TAGGING_LIMIT']) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'warning',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare("INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => $domain,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
@@ -2185,6 +2311,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$maxquota = (!empty($_data['maxquota'])) ? $_data['maxquota'] : ($is_now['max_quota_for_mbox'] / 1048576);
|
$maxquota = (!empty($_data['maxquota'])) ? $_data['maxquota'] : ($is_now['max_quota_for_mbox'] / 1048576);
|
||||||
$quota = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['max_quota_for_domain'] / 1048576);
|
$quota = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['max_quota_for_domain'] / 1048576);
|
||||||
$description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
|
$description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
|
||||||
|
$tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
||||||
if ($relay_all_recipients == '1') {
|
if ($relay_all_recipients == '1') {
|
||||||
$backupmx = '1';
|
$backupmx = '1';
|
||||||
}
|
}
|
||||||
@@ -2283,6 +2410,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = $pdo->prepare("UPDATE `domain` SET
|
$stmt = $pdo->prepare("UPDATE `domain` SET
|
||||||
`relay_all_recipients` = :relay_all_recipients,
|
`relay_all_recipients` = :relay_all_recipients,
|
||||||
`relay_unknown_only` = :relay_unknown_only,
|
`relay_unknown_only` = :relay_unknown_only,
|
||||||
@@ -2312,6 +2440,24 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':description' => $description,
|
':description' => $description,
|
||||||
':domain' => $domain
|
':domain' => $domain
|
||||||
));
|
));
|
||||||
|
// save tags
|
||||||
|
foreach($tags as $index => $tag){
|
||||||
|
if (empty($tag)) continue;
|
||||||
|
if ($index > $GLOBALS['TAGGING_LIMIT']) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'warning',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare("INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => $domain,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
@@ -2360,6 +2506,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$quota_b = $quota_m * 1048576;
|
$quota_b = $quota_m * 1048576;
|
||||||
$password = (!empty($_data['password'])) ? $_data['password'] : null;
|
$password = (!empty($_data['password'])) ? $_data['password'] : null;
|
||||||
$password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
$password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
||||||
|
$tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
@@ -2636,6 +2783,24 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':relayhost' => $relayhost,
|
':relayhost' => $relayhost,
|
||||||
':username' => $username
|
':username' => $username
|
||||||
));
|
));
|
||||||
|
// save tags
|
||||||
|
foreach($tags as $index => $tag){
|
||||||
|
if (empty($tag)) continue;
|
||||||
|
if ($index > $GLOBALS['TAGGING_LIMIT']) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'warning',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':username' => $username,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
@@ -2851,10 +3016,34 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
break;
|
break;
|
||||||
case 'mailboxes':
|
case 'mailboxes':
|
||||||
$mailboxes = array();
|
$mailboxes = array();
|
||||||
if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
|
if (isset($_extra) && is_array($_extra) && isset($_data)) {
|
||||||
return false;
|
// get by domain and tags
|
||||||
|
$tags = is_array($_extra) ? $_extra : array();
|
||||||
|
|
||||||
|
$sql = "";
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$sql = $sql."SELECT DISTINCT `username` FROM `tags_mailbox` WHERE `username` LIKE ? AND `tag_name` LIKE ?"; // distinct, avoid duplicates
|
||||||
|
if ($key === array_key_last($tags)) break;
|
||||||
|
$sql = $sql.' UNION DISTINCT '; // combine querys with union - distinct, avoid duplicates
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepend domain to array
|
||||||
|
$params = array();
|
||||||
|
foreach ($tags as $key => $val){
|
||||||
|
array_push($params, '%'.$_data.'%');
|
||||||
|
array_push($params, '%'.$val.'%');
|
||||||
|
}
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute($params);
|
||||||
|
|
||||||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while($row = array_shift($rows)) {
|
||||||
|
if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], explode('@', $row['username'])[1]))
|
||||||
|
$mailboxes[] = $row['username'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
|
elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
|
||||||
|
// get by domain
|
||||||
$stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND `domain` = :domain");
|
$stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND `domain` = :domain");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':domain' => $_data,
|
':domain' => $_data,
|
||||||
@@ -3348,20 +3537,46 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
|
if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("SELECT `domain` FROM `domain`
|
|
||||||
WHERE (`domain` IN (
|
if (isset($_extra) && is_array($_extra)){
|
||||||
SELECT `domain` from `domain_admins`
|
// get by tags
|
||||||
WHERE (`active`='1' AND `username` = :username))
|
$tags = is_array($_extra) ? $_extra : array();
|
||||||
)
|
// add % as prefix and suffix to every element for relative searching
|
||||||
OR 'admin'= :role");
|
$tags = array_map(function($x){ return '%'.$x.'%'; }, $tags);
|
||||||
$stmt->execute(array(
|
$sql = "";
|
||||||
':username' => $_SESSION['mailcow_cc_username'],
|
foreach ($tags as $key => $tag) {
|
||||||
':role' => $_SESSION['mailcow_cc_role'],
|
$sql = $sql."SELECT DISTINCT `domain` FROM `tags_domain` WHERE `tag_name` LIKE ?"; // distinct, avoid duplicates
|
||||||
));
|
if ($key === array_key_last($tags)) break;
|
||||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$sql = $sql.' UNION DISTINCT '; // combine querys with union - distinct, avoid duplicates
|
||||||
while($row = array_shift($rows)) {
|
}
|
||||||
$domains[] = $row['domain'];
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute($tags);
|
||||||
|
|
||||||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while($row = array_shift($rows)) {
|
||||||
|
if ($_SESSION['mailcow_cc_role'] == "admin")
|
||||||
|
$domains[] = $row['domain'];
|
||||||
|
elseif (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['domain']))
|
||||||
|
$domains[] = $row['domain'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// get all
|
||||||
|
$stmt = $pdo->prepare("SELECT `domain` FROM `domain`
|
||||||
|
WHERE (`domain` IN (
|
||||||
|
SELECT `domain` from `domain_admins`
|
||||||
|
WHERE (`active`='1' AND `username` = :username))
|
||||||
|
)
|
||||||
|
OR 'admin'= :role");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':username' => $_SESSION['mailcow_cc_username'],
|
||||||
|
':role' => $_SESSION['mailcow_cc_role'],
|
||||||
|
));
|
||||||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while($row = array_shift($rows)) {
|
||||||
|
$domains[] = $row['domain'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $domains;
|
return $domains;
|
||||||
break;
|
break;
|
||||||
case 'domain_details':
|
case 'domain_details':
|
||||||
@@ -3478,6 +3693,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$domain_admins = $stmt->fetch(PDO::FETCH_ASSOC);
|
$domain_admins = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
(isset($domain_admins['domain_admins'])) ? $domaindata['domain_admins'] = $domain_admins['domain_admins'] : $domaindata['domain_admins'] = "-";
|
(isset($domain_admins['domain_admins'])) ? $domaindata['domain_admins'] = $domain_admins['domain_admins'] : $domaindata['domain_admins'] = "-";
|
||||||
}
|
}
|
||||||
|
$stmt = $pdo->prepare("SELECT `tag_name`
|
||||||
|
FROM `tags_domain` WHERE `domain`= :domain");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => $_data
|
||||||
|
));
|
||||||
|
$tags = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while ($tag = array_shift($tags)) {
|
||||||
|
$domaindata['tags'][] = $tag['tag_name'];
|
||||||
|
}
|
||||||
|
|
||||||
return $domaindata;
|
return $domaindata;
|
||||||
break;
|
break;
|
||||||
case 'mailbox_details':
|
case 'mailbox_details':
|
||||||
@@ -3613,6 +3838,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
}
|
}
|
||||||
$mailboxdata['is_relayed'] = $row['backupmx'];
|
$mailboxdata['is_relayed'] = $row['backupmx'];
|
||||||
}
|
}
|
||||||
|
$stmt = $pdo->prepare("SELECT `tag_name`
|
||||||
|
FROM `tags_mailbox` WHERE `username`= :username");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':username' => $_data
|
||||||
|
));
|
||||||
|
$tags = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while ($tag = array_shift($tags)) {
|
||||||
|
$mailboxdata['tags'][] = $tag['tag_name'];
|
||||||
|
}
|
||||||
|
|
||||||
return $mailboxdata;
|
return $mailboxdata;
|
||||||
break;
|
break;
|
||||||
@@ -4054,6 +4288,10 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':alias_domain' => $alias_domain,
|
':alias_domain' => $alias_domain,
|
||||||
));
|
));
|
||||||
|
$stmt = $pdo->prepare("DELETE FROM `spamalias` WHERE `address` LIKE :domain");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => '%@'.$alias_domain,
|
||||||
|
));
|
||||||
$stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `local_dest` = :alias_domain");
|
$stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `local_dest` = :alias_domain");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':alias_domain' => $alias_domain,
|
':alias_domain' => $alias_domain,
|
||||||
@@ -4338,6 +4576,108 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'tags_domain':
|
||||||
|
if (!is_array($_data['domain'])) {
|
||||||
|
$domains = array();
|
||||||
|
$domains[] = $_data['domain'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$domains = $_data['domain'];
|
||||||
|
}
|
||||||
|
$tags = $_data['tags'];
|
||||||
|
if (!is_array($tags)) $tags = array();
|
||||||
|
|
||||||
|
|
||||||
|
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'access_denied'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$wasModified = false;
|
||||||
|
foreach ($domains as $domain) {
|
||||||
|
if (!is_valid_domain_name($domain)) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'domain_invalid'
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($tags as $tag){
|
||||||
|
// delete tag
|
||||||
|
$wasModified = true;
|
||||||
|
$stmt = $pdo->prepare("DELETE FROM `tags_domain` WHERE `domain` = :domain AND `tag_name` = :tag_name");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':domain' => $domain,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$wasModified) return false;
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'success',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('domain_modified', $domain)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'tags_mailbox':
|
||||||
|
if (!is_array($_data['username'])) {
|
||||||
|
$usernames = array();
|
||||||
|
$usernames[] = $_data['username'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$usernames = $_data['username'];
|
||||||
|
}
|
||||||
|
$tags = $_data['tags'];
|
||||||
|
if (!is_array($tags)) $tags = array();
|
||||||
|
|
||||||
|
$wasModified = false;
|
||||||
|
foreach ($usernames as $username) {
|
||||||
|
if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'email invalid'
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_now = mailbox('get', 'mailbox_details', $username);
|
||||||
|
$domain = $is_now['domain'];
|
||||||
|
if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'danger',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => 'access_denied'
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete tags
|
||||||
|
foreach($tags as $tag){
|
||||||
|
$wasModified = true;
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare("DELETE FROM `tags_mailbox` WHERE `username` = :username AND `tag_name` = :tag_name");
|
||||||
|
$stmt->execute(array(
|
||||||
|
':username' => $username,
|
||||||
|
':tag_name' => $tag,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$wasModified) return false;
|
||||||
|
$_SESSION['return'][] = array(
|
||||||
|
'type' => 'success',
|
||||||
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
|
'msg' => array('mailbox_modified', $username)
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@ function init_db_schema() {
|
|||||||
try {
|
try {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
|
|
||||||
$db_version = "18012022_1020";
|
$db_version = "18062022_1153";
|
||||||
|
|
||||||
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
||||||
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
||||||
@@ -23,35 +23,35 @@ function init_db_schema() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$views = array(
|
$views = array(
|
||||||
"grouped_mail_aliases" => "CREATE VIEW grouped_mail_aliases (username, aliases) AS
|
"grouped_mail_aliases" => "CREATE VIEW grouped_mail_aliases (username, aliases) AS
|
||||||
SELECT goto, IFNULL(GROUP_CONCAT(address ORDER BY address SEPARATOR ' '), '') AS address FROM alias
|
SELECT goto, IFNULL(GROUP_CONCAT(address ORDER BY address SEPARATOR ' '), '') AS address FROM alias
|
||||||
WHERE address!=goto
|
WHERE address!=goto
|
||||||
AND active = '1'
|
AND active = '1'
|
||||||
AND sogo_visible = '1'
|
AND sogo_visible = '1'
|
||||||
AND address NOT LIKE '@%'
|
AND address NOT LIKE '@%'
|
||||||
GROUP BY goto;",
|
GROUP BY goto;",
|
||||||
// START
|
// START
|
||||||
// Unused at the moment - we cannot allow to show a foreign mailbox as sender address in SOGo, as SOGo does not like this
|
// Unused at the moment - we cannot allow to show a foreign mailbox as sender address in SOGo, as SOGo does not like this
|
||||||
// We need to create delegation in SOGo AND set a sender_acl in mailcow to allow to send as user X
|
// We need to create delegation in SOGo AND set a sender_acl in mailcow to allow to send as user X
|
||||||
"grouped_sender_acl" => "CREATE VIEW grouped_sender_acl (username, send_as_acl) AS
|
"grouped_sender_acl" => "CREATE VIEW grouped_sender_acl (username, send_as_acl) AS
|
||||||
SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
|
SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
|
||||||
WHERE send_as NOT LIKE '@%'
|
WHERE send_as NOT LIKE '@%'
|
||||||
GROUP BY logged_in_as;",
|
GROUP BY logged_in_as;",
|
||||||
// END
|
// END
|
||||||
"grouped_sender_acl_external" => "CREATE VIEW grouped_sender_acl_external (username, send_as_acl) AS
|
"grouped_sender_acl_external" => "CREATE VIEW grouped_sender_acl_external (username, send_as_acl) AS
|
||||||
SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
|
SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
|
||||||
WHERE send_as NOT LIKE '@%' AND external = '1'
|
WHERE send_as NOT LIKE '@%' AND external = '1'
|
||||||
GROUP BY logged_in_as;",
|
GROUP BY logged_in_as;",
|
||||||
"grouped_domain_alias_address" => "CREATE VIEW grouped_domain_alias_address (username, ad_alias) AS
|
"grouped_domain_alias_address" => "CREATE VIEW grouped_domain_alias_address (username, ad_alias) AS
|
||||||
SELECT username, IFNULL(GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ' '), '') AS ad_alias FROM mailbox
|
SELECT username, IFNULL(GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ' '), '') AS ad_alias FROM mailbox
|
||||||
LEFT OUTER JOIN alias_domain ON target_domain=domain
|
LEFT OUTER JOIN alias_domain ON target_domain=domain
|
||||||
GROUP BY username;",
|
GROUP BY username;",
|
||||||
"sieve_before" => "CREATE VIEW sieve_before (id, username, script_name, script_data) AS
|
"sieve_before" => "CREATE VIEW sieve_before (id, username, script_name, script_data) AS
|
||||||
SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
|
SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
|
||||||
WHERE filter_type = 'prefilter';",
|
WHERE filter_type = 'prefilter';",
|
||||||
"sieve_after" => "CREATE VIEW sieve_after (id, username, script_name, script_data) AS
|
"sieve_after" => "CREATE VIEW sieve_after (id, username, script_name, script_data) AS
|
||||||
SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
|
SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
|
||||||
WHERE filter_type = 'postfilter';"
|
WHERE filter_type = 'postfilter';"
|
||||||
);
|
);
|
||||||
|
|
||||||
$tables = array(
|
$tables = array(
|
||||||
@@ -251,6 +251,26 @@ function init_db_schema() {
|
|||||||
),
|
),
|
||||||
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
||||||
),
|
),
|
||||||
|
"tags_domain" => array(
|
||||||
|
"cols" => array(
|
||||||
|
"tag_name" => "VARCHAR(255) NOT NULL",
|
||||||
|
"domain" => "VARCHAR(255) NOT NULL"
|
||||||
|
),
|
||||||
|
"keys" => array(
|
||||||
|
"fkey" => array(
|
||||||
|
"fk_tags_domain" => array(
|
||||||
|
"col" => "domain",
|
||||||
|
"ref" => "domain.domain",
|
||||||
|
"delete" => "CASCADE",
|
||||||
|
"update" => "NO ACTION"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"unique" => array(
|
||||||
|
"tag_name" => array("tag_name", "domain")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
||||||
|
),
|
||||||
"tls_policy_override" => array(
|
"tls_policy_override" => array(
|
||||||
"cols" => array(
|
"cols" => array(
|
||||||
"id" => "INT NOT NULL AUTO_INCREMENT",
|
"id" => "INT NOT NULL AUTO_INCREMENT",
|
||||||
@@ -325,6 +345,26 @@ function init_db_schema() {
|
|||||||
),
|
),
|
||||||
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
||||||
),
|
),
|
||||||
|
"tags_mailbox" => array(
|
||||||
|
"cols" => array(
|
||||||
|
"tag_name" => "VARCHAR(255) NOT NULL",
|
||||||
|
"username" => "VARCHAR(255) NOT NULL"
|
||||||
|
),
|
||||||
|
"keys" => array(
|
||||||
|
"fkey" => array(
|
||||||
|
"fk_tags_mailbox" => array(
|
||||||
|
"col" => "username",
|
||||||
|
"ref" => "mailbox.username",
|
||||||
|
"delete" => "CASCADE",
|
||||||
|
"update" => "NO ACTION"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"unique" => array(
|
||||||
|
"tag_name" => array("tag_name", "username")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
|
||||||
|
),
|
||||||
"sieve_filters" => array(
|
"sieve_filters" => array(
|
||||||
"cols" => array(
|
"cols" => array(
|
||||||
"id" => "INT NOT NULL AUTO_INCREMENT",
|
"id" => "INT NOT NULL AUTO_INCREMENT",
|
||||||
@@ -400,7 +440,7 @@ function init_db_schema() {
|
|||||||
"spam_score" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"spam_score" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
"spam_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"spam_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
"delimiter_action" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"delimiter_action" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
"syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"syncjobs" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
"sogo_profile_reset" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
"sogo_profile_reset" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"pushover" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"pushover" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
@@ -864,7 +904,7 @@ function init_db_schema() {
|
|||||||
"sogo_sessions_folder" => array(
|
"sogo_sessions_folder" => array(
|
||||||
"cols" => array(
|
"cols" => array(
|
||||||
"c_id" => "VARCHAR(255) NOT NULL",
|
"c_id" => "VARCHAR(255) NOT NULL",
|
||||||
"c_value" => "VARCHAR(255) NOT NULL",
|
"c_value" => "VARCHAR(4096) NOT NULL",
|
||||||
"c_creationdate" => "INT(11) NOT NULL",
|
"c_creationdate" => "INT(11) NOT NULL",
|
||||||
"c_lastseen" => "INT(11) NOT NULL"
|
"c_lastseen" => "INT(11) NOT NULL"
|
||||||
),
|
),
|
||||||
@@ -1188,7 +1228,16 @@ function init_db_schema() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mitigate imapsync pipemess issue
|
// Mitigate imapsync pipemess issue
|
||||||
$pdo->query("UPDATE `imapsync` SET `custom_params` = '' WHERE `custom_params` LIKE '%pipemess%';");
|
$pdo->query("UPDATE `imapsync` SET `custom_params` = ''
|
||||||
|
WHERE `custom_params` LIKE '%pipemess%'
|
||||||
|
OR custom_params LIKE '%skipmess%'
|
||||||
|
OR custom_params LIKE '%delete2foldersonly%'
|
||||||
|
OR custom_params LIKE '%delete2foldersbutnot%'
|
||||||
|
OR custom_params LIKE '%regexflag%'
|
||||||
|
OR custom_params LIKE '%pipemess%'
|
||||||
|
OR custom_params LIKE '%regextrans2%'
|
||||||
|
OR custom_params LIKE '%maxlinelengthcmd%';");
|
||||||
|
|
||||||
|
|
||||||
// Migrate webauthn tfa
|
// Migrate webauthn tfa
|
||||||
$stmt = $pdo->query("ALTER TABLE `tfa` MODIFY COLUMN `authmech` ENUM('yubi_otp', 'u2f', 'hotp', 'totp', 'webauthn')");
|
$stmt = $pdo->query("ALTER TABLE `tfa` MODIFY COLUMN `authmech` ENUM('yubi_otp', 'u2f', 'hotp', 'totp', 'webauthn')");
|
||||||
|
432
data/web/inc/lib/composer.lock
generated
432
data/web/inc/lib/composer.lock
generated
@@ -62,35 +62,40 @@
|
|||||||
"oauth",
|
"oauth",
|
||||||
"oauth2"
|
"oauth2"
|
||||||
],
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/bshaffer/oauth2-server-php/issues",
|
||||||
|
"source": "https://github.com/bshaffer/oauth2-server-php/tree/master"
|
||||||
|
},
|
||||||
"time": "2018-12-04T00:29:32+00:00"
|
"time": "2018-12-04T00:29:32+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ddeboer/imap",
|
"name": "ddeboer/imap",
|
||||||
"version": "1.12.1",
|
"version": "1.13.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ddeboer/imap.git",
|
"url": "https://github.com/ddeboer/imap.git",
|
||||||
"reference": "dbed05ca67b93509345a820b2859de10c48948fb"
|
"reference": "8b772d04b1deadb5df13782fb78c4b648f77496e"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ddeboer/imap/zipball/dbed05ca67b93509345a820b2859de10c48948fb",
|
"url": "https://api.github.com/repos/ddeboer/imap/zipball/8b772d04b1deadb5df13782fb78c4b648f77496e",
|
||||||
"reference": "dbed05ca67b93509345a820b2859de10c48948fb",
|
"reference": "8b772d04b1deadb5df13782fb78c4b648f77496e",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"ext-imap": "*",
|
"ext-imap": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"php": "^7.4 || ^8.0"
|
"php": "^8.0.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^2.18.6",
|
"friendsofphp/php-cs-fixer": "^v3.4.0",
|
||||||
"laminas/laminas-mail": "^2.14.0",
|
"laminas/laminas-mail": "^2.15.1",
|
||||||
"phpstan/phpstan": "^0.12.84",
|
"malukenho/mcbumpface": "^1.1.5",
|
||||||
"phpstan/phpstan-phpunit": "^0.12.18",
|
"phpstan/phpstan": "^1.3.3",
|
||||||
"phpstan/phpstan-strict-rules": "^0.12.9",
|
"phpstan/phpstan-phpunit": "^1.0.0",
|
||||||
"phpunit/phpunit": "^9.5.4"
|
"phpstan/phpstan-strict-rules": "^1.1.0",
|
||||||
|
"phpunit/phpunit": "^9.5.11"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -124,7 +129,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/ddeboer/imap/issues",
|
"issues": "https://github.com/ddeboer/imap/issues",
|
||||||
"source": "https://github.com/ddeboer/imap/tree/1.12.1"
|
"source": "https://github.com/ddeboer/imap/tree/1.13.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -136,35 +141,35 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-04-27T08:38:46+00:00"
|
"time": "2022-01-10T10:53:05+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "directorytree/ldaprecord",
|
"name": "directorytree/ldaprecord",
|
||||||
"version": "v2.6.3",
|
"version": "v2.10.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/DirectoryTree/LdapRecord.git",
|
"url": "https://github.com/DirectoryTree/LdapRecord.git",
|
||||||
"reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a"
|
"reference": "bf512d9af7a7b0e2ed7a666ab29cefdd027bee88"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/5c93ec6d1ef458290825a8b0a148946dce7c1e7a",
|
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/bf512d9af7a7b0e2ed7a666ab29cefdd027bee88",
|
||||||
"reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a",
|
"reference": "bf512d9af7a7b0e2ed7a666ab29cefdd027bee88",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-ldap": "*",
|
"ext-ldap": "*",
|
||||||
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0",
|
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
|
||||||
"nesbot/carbon": "^1.0|^2.0",
|
"nesbot/carbon": "^1.0|^2.0",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"psr/log": "^1.0",
|
"psr/log": "*",
|
||||||
"psr/simple-cache": "^1.0",
|
"psr/simple-cache": "^1.0|^2.0",
|
||||||
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0"
|
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"phpunit/phpunit": "^8.0",
|
"phpunit/phpunit": "^9.0",
|
||||||
"spatie/ray": "^1.24"
|
"spatie/ray": "^1.24"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@@ -209,31 +214,31 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-08-05T21:52:43+00:00"
|
"time": "2022-02-25T16:00:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/contracts",
|
"name": "illuminate/contracts",
|
||||||
"version": "v8.53.1",
|
"version": "v9.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/contracts.git",
|
"url": "https://github.com/illuminate/contracts.git",
|
||||||
"reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb"
|
"reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/504a34286a1b4c5421c43087d6bd4e176138f6fb",
|
"url": "https://api.github.com/repos/illuminate/contracts/zipball/bf4b3c254c49d28157645d01e4883b5951b1e1d0",
|
||||||
"reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb",
|
"reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.3|^8.0",
|
"php": "^8.0.2",
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.1.1|^2.0.1",
|
||||||
"psr/simple-cache": "^1.0"
|
"psr/simple-cache": "^1.0|^2.0|^3.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "8.x-dev"
|
"dev-master": "9.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -257,7 +262,7 @@
|
|||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2021-08-03T14:03:47+00:00"
|
"time": "2022-02-22T14:45:39+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "matthiasmullie/minify",
|
"name": "matthiasmullie/minify",
|
||||||
@@ -384,6 +389,10 @@
|
|||||||
"paths",
|
"paths",
|
||||||
"relative"
|
"relative"
|
||||||
],
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/matthiasmullie/path-converter/issues",
|
||||||
|
"source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3"
|
||||||
|
},
|
||||||
"time": "2019-02-05T23:41:09+00:00"
|
"time": "2019-02-05T23:41:09+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -438,16 +447,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "2.51.1",
|
"version": "2.57.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||||
"reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922"
|
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922",
|
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||||
"reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922",
|
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -455,15 +464,16 @@
|
|||||||
"php": "^7.1.8 || ^8.0",
|
"php": "^7.1.8 || ^8.0",
|
||||||
"symfony/polyfill-mbstring": "^1.0",
|
"symfony/polyfill-mbstring": "^1.0",
|
||||||
"symfony/polyfill-php80": "^1.16",
|
"symfony/polyfill-php80": "^1.16",
|
||||||
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
|
"symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"doctrine/dbal": "^2.0 || ^3.0",
|
||||||
"doctrine/orm": "^2.7",
|
"doctrine/orm": "^2.7",
|
||||||
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
|
"friendsofphp/php-cs-fixer": "^3.0",
|
||||||
"kylekatarnls/multi-tester": "^2.0",
|
"kylekatarnls/multi-tester": "^2.0",
|
||||||
"phpmd/phpmd": "^2.9",
|
"phpmd/phpmd": "^2.9",
|
||||||
"phpstan/extension-installer": "^1.0",
|
"phpstan/extension-installer": "^1.0",
|
||||||
"phpstan/phpstan": "^0.12.54",
|
"phpstan/phpstan": "^0.12.54 || ^1.0",
|
||||||
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
|
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
|
||||||
"squizlabs/php_codesniffer": "^3.4"
|
"squizlabs/php_codesniffer": "^3.4"
|
||||||
},
|
},
|
||||||
@@ -515,6 +525,7 @@
|
|||||||
"time"
|
"time"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
|
"docs": "https://carbon.nesbot.com/docs",
|
||||||
"issues": "https://github.com/briannesbitt/Carbon/issues",
|
"issues": "https://github.com/briannesbitt/Carbon/issues",
|
||||||
"source": "https://github.com/briannesbitt/Carbon"
|
"source": "https://github.com/briannesbitt/Carbon"
|
||||||
},
|
},
|
||||||
@@ -528,7 +539,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-28T13:16:28+00:00"
|
"time": "2022-02-13T18:13:33+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/random_compat",
|
"name": "paragonie/random_compat",
|
||||||
@@ -673,16 +684,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpmailer/phpmailer",
|
"name": "phpmailer/phpmailer",
|
||||||
"version": "v6.5.0",
|
"version": "v6.6.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c"
|
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c",
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1",
|
||||||
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c",
|
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -694,10 +705,12 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||||
"doctrine/annotations": "^1.2",
|
"doctrine/annotations": "^1.2",
|
||||||
|
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||||
|
"php-parallel-lint/php-parallel-lint": "^1.3.1",
|
||||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||||
"roave/security-advisories": "dev-latest",
|
"roave/security-advisories": "dev-latest",
|
||||||
"squizlabs/php_codesniffer": "^3.5.6",
|
"squizlabs/php_codesniffer": "^3.6.2",
|
||||||
"yoast/phpunit-polyfills": "^0.2.0"
|
"yoast/phpunit-polyfills": "^1.0.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||||
@@ -737,7 +750,7 @@
|
|||||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.0"
|
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -745,26 +758,31 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-06-16T14:33:43+00:00"
|
"time": "2022-02-28T15:31:21+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.1.1",
|
"version": "2.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Psr\\Container\\": "src/"
|
"Psr\\Container\\": "src/"
|
||||||
@@ -791,36 +809,36 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/php-fig/container/issues",
|
"issues": "https://github.com/php-fig/container/issues",
|
||||||
"source": "https://github.com/php-fig/container/tree/1.1.1"
|
"source": "https://github.com/php-fig/container/tree/2.0.2"
|
||||||
},
|
},
|
||||||
"time": "2021-03-05T17:36:06+00:00"
|
"time": "2021-11-05T16:47:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
"version": "1.1.4",
|
"version": "3.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/log.git",
|
"url": "https://github.com/php-fig/log.git",
|
||||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.1.x-dev"
|
"dev-master": "3.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Psr\\Log\\": "Psr/Log/"
|
"Psr\\Log\\": "src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
@@ -841,31 +859,31 @@
|
|||||||
"psr-3"
|
"psr-3"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/log/tree/1.1.4"
|
"source": "https://github.com/php-fig/log/tree/3.0.0"
|
||||||
},
|
},
|
||||||
"time": "2021-05-03T11:20:27+00:00"
|
"time": "2021-07-14T16:46:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/simple-cache",
|
"name": "psr/simple-cache",
|
||||||
"version": "1.0.1",
|
"version": "2.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/simple-cache.git",
|
"url": "https://github.com/php-fig/simple-cache.git",
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
|
"reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/8707bf3cea6f710bf6ef05491234e3ab06f6432a",
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
"reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -880,7 +898,7 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interfaces for simple caching",
|
"description": "Common interfaces for simple caching",
|
||||||
@@ -892,22 +910,22 @@
|
|||||||
"simple-cache"
|
"simple-cache"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/simple-cache/tree/master"
|
"source": "https://github.com/php-fig/simple-cache/tree/2.0.0"
|
||||||
},
|
},
|
||||||
"time": "2017-10-23T01:57:42+00:00"
|
"time": "2021-10-29T13:22:09+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "robthree/twofactorauth",
|
"name": "robthree/twofactorauth",
|
||||||
"version": "1.8.0",
|
"version": "1.8.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobThree/TwoFactorAuth.git",
|
"url": "https://github.com/RobThree/TwoFactorAuth.git",
|
||||||
"reference": "30a38627ae1e7c9399dae67e265063cd6ec5276c"
|
"reference": "5afcb45282f1c75562a48d479ecd1732c9bdb11b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/30a38627ae1e7c9399dae67e265063cd6ec5276c",
|
"url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/5afcb45282f1c75562a48d479ecd1732c9bdb11b",
|
||||||
"reference": "30a38627ae1e7c9399dae67e265063cd6ec5276c",
|
"reference": "5afcb45282f1c75562a48d479ecd1732c9bdb11b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -964,7 +982,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-03-09T18:24:05+00:00"
|
"time": "2021-10-20T12:19:55+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "soundasleep/html2text",
|
"name": "soundasleep/html2text",
|
||||||
@@ -1014,92 +1032,33 @@
|
|||||||
"php",
|
"php",
|
||||||
"text"
|
"text"
|
||||||
],
|
],
|
||||||
|
"support": {
|
||||||
|
"email": "support@jevon.org",
|
||||||
|
"issues": "https://github.com/soundasleep/html2text/issues",
|
||||||
|
"source": "https://github.com/soundasleep/html2text/tree/master"
|
||||||
|
},
|
||||||
"time": "2017-04-19T22:01:50+00:00"
|
"time": "2017-04-19T22:01:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/deprecation-contracts",
|
|
||||||
"version": "v2.4.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "2.4-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/contracts",
|
|
||||||
"url": "https://github.com/symfony/contracts"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"function.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "A generic function and convention to trigger deprecation notices",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2021-03-23T23:28:01+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-ctype",
|
"name": "symfony/polyfill-ctype",
|
||||||
"version": "v1.23.0",
|
"version": "v1.24.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-ctype": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-ctype": "For best performance"
|
"ext-ctype": "For best performance"
|
||||||
},
|
},
|
||||||
@@ -1114,12 +1073,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Ctype\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Ctype\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
@@ -1144,7 +1103,7 @@
|
|||||||
"portable"
|
"portable"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1160,25 +1119,28 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-02-19T12:13:01+00:00"
|
"time": "2021-10-20T20:35:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.23.1",
|
"version": "v1.24.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "For best performance"
|
"ext-mbstring": "For best performance"
|
||||||
},
|
},
|
||||||
@@ -1193,12 +1155,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
@@ -1224,7 +1186,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1240,20 +1202,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-05-27T12:26:48+00:00"
|
"time": "2021-11-30T18:21:41+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.23.1",
|
"version": "v1.24.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
|
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
|
||||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1270,12 +1232,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php80\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php80\\": ""
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"Resources/stubs"
|
"Resources/stubs"
|
||||||
]
|
]
|
||||||
@@ -1307,7 +1269,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
|
"source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1323,50 +1285,50 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-28T13:41:28+00:00"
|
"time": "2021-09-13T13:58:33+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/translation",
|
"name": "symfony/translation",
|
||||||
"version": "v5.3.4",
|
"version": "v6.0.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/translation.git",
|
"url": "https://github.com/symfony/translation.git",
|
||||||
"reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1"
|
"reference": "e69501c71107cc3146b32aaa45f4edd0c3427875"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1",
|
"url": "https://api.github.com/repos/symfony/translation/zipball/e69501c71107cc3146b32aaa45f4edd0c3427875",
|
||||||
"reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1",
|
"reference": "e69501c71107cc3146b32aaa45f4edd0c3427875",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=8.0.2",
|
||||||
"symfony/deprecation-contracts": "^2.1",
|
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0",
|
||||||
"symfony/polyfill-php80": "^1.16",
|
"symfony/translation-contracts": "^2.3|^3.0"
|
||||||
"symfony/translation-contracts": "^2.3"
|
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"symfony/config": "<4.4",
|
"symfony/config": "<5.4",
|
||||||
"symfony/dependency-injection": "<5.0",
|
"symfony/console": "<5.4",
|
||||||
"symfony/http-kernel": "<5.0",
|
"symfony/dependency-injection": "<5.4",
|
||||||
"symfony/twig-bundle": "<5.0",
|
"symfony/http-kernel": "<5.4",
|
||||||
"symfony/yaml": "<4.4"
|
"symfony/twig-bundle": "<5.4",
|
||||||
|
"symfony/yaml": "<5.4"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"symfony/translation-implementation": "2.3"
|
"symfony/translation-implementation": "2.3|3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/log": "^1|^2|^3",
|
"psr/log": "^1|^2|^3",
|
||||||
"symfony/config": "^4.4|^5.0",
|
"symfony/config": "^5.4|^6.0",
|
||||||
"symfony/console": "^4.4|^5.0",
|
"symfony/console": "^5.4|^6.0",
|
||||||
"symfony/dependency-injection": "^5.0",
|
"symfony/dependency-injection": "^5.4|^6.0",
|
||||||
"symfony/finder": "^4.4|^5.0",
|
"symfony/finder": "^5.4|^6.0",
|
||||||
"symfony/http-kernel": "^5.0",
|
"symfony/http-client-contracts": "^1.1|^2.0|^3.0",
|
||||||
"symfony/intl": "^4.4|^5.0",
|
"symfony/http-kernel": "^5.4|^6.0",
|
||||||
|
"symfony/intl": "^5.4|^6.0",
|
||||||
"symfony/polyfill-intl-icu": "^1.21",
|
"symfony/polyfill-intl-icu": "^1.21",
|
||||||
"symfony/service-contracts": "^1.1.2|^2",
|
"symfony/service-contracts": "^1.1.2|^2|^3",
|
||||||
"symfony/yaml": "^4.4|^5.0"
|
"symfony/yaml": "^5.4|^6.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"psr/log-implementation": "To use logging capability in translator",
|
"psr/log-implementation": "To use logging capability in translator",
|
||||||
@@ -1402,7 +1364,7 @@
|
|||||||
"description": "Provides tools to internationalize your application",
|
"description": "Provides tools to internationalize your application",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/translation/tree/v5.3.4"
|
"source": "https://github.com/symfony/translation/tree/v6.0.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1418,24 +1380,24 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-25T09:39:16+00:00"
|
"time": "2022-02-09T15:52:48+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/translation-contracts",
|
"name": "symfony/translation-contracts",
|
||||||
"version": "v2.4.0",
|
"version": "v3.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/translation-contracts.git",
|
"url": "https://github.com/symfony/translation-contracts.git",
|
||||||
"reference": "95c812666f3e91db75385749fe219c5e494c7f95"
|
"reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
|
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
|
||||||
"reference": "95c812666f3e91db75385749fe219c5e494c7f95",
|
"reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5"
|
"php": ">=8.0.2"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"symfony/translation-implementation": ""
|
"symfony/translation-implementation": ""
|
||||||
@@ -1443,7 +1405,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "2.4-dev"
|
"dev-main": "3.0-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/contracts",
|
"name": "symfony/contracts",
|
||||||
@@ -1480,7 +1442,7 @@
|
|||||||
"standards"
|
"standards"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
|
"source": "https://github.com/symfony/translation-contracts/tree/v3.0.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1496,35 +1458,35 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-03-23T23:28:01+00:00"
|
"time": "2021-09-07T12:43:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-dumper",
|
"name": "symfony/var-dumper",
|
||||||
"version": "v5.3.6",
|
"version": "v6.0.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/var-dumper.git",
|
"url": "https://github.com/symfony/var-dumper.git",
|
||||||
"reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0"
|
"reference": "60d6a756d5f485df5e6e40b337334848f79f61ce"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0",
|
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/60d6a756d5f485df5e6e40b337334848f79f61ce",
|
||||||
"reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0",
|
"reference": "60d6a756d5f485df5e6e40b337334848f79f61ce",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=8.0.2",
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0"
|
||||||
"symfony/polyfill-php80": "^1.16"
|
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"phpunit/phpunit": "<5.4.3",
|
"phpunit/phpunit": "<5.4.3",
|
||||||
"symfony/console": "<4.4"
|
"symfony/console": "<5.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"symfony/console": "^4.4|^5.0",
|
"symfony/console": "^5.4|^6.0",
|
||||||
"symfony/process": "^4.4|^5.0",
|
"symfony/process": "^5.4|^6.0",
|
||||||
|
"symfony/uid": "^5.4|^6.0",
|
||||||
"twig/twig": "^2.13|^3.0.4"
|
"twig/twig": "^2.13|^3.0.4"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
@@ -1568,7 +1530,7 @@
|
|||||||
"dump"
|
"dump"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/var-dumper/tree/v5.3.6"
|
"source": "https://github.com/symfony/var-dumper/tree/v6.0.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1584,25 +1546,25 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-27T01:56:02+00:00"
|
"time": "2022-02-21T17:15:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "tightenco/collect",
|
"name": "tightenco/collect",
|
||||||
"version": "v8.34.0",
|
"version": "v8.83.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/tighten/collect.git",
|
"url": "https://github.com/tighten/collect.git",
|
||||||
"reference": "b069783ab0c547bb894ebcf8e7f6024bb401f9d2"
|
"reference": "d9c66d586ec2d216d8a31283d73f8df1400cc722"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/tighten/collect/zipball/b069783ab0c547bb894ebcf8e7f6024bb401f9d2",
|
"url": "https://api.github.com/repos/tighten/collect/zipball/d9c66d586ec2d216d8a31283d73f8df1400cc722",
|
||||||
"reference": "b069783ab0c547bb894ebcf8e7f6024bb401f9d2",
|
"reference": "d9c66d586ec2d216d8a31283d73f8df1400cc722",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2|^8.0",
|
"php": "^7.3|^8.0",
|
||||||
"symfony/var-dumper": "^3.4 || ^4.0 || ^5.0"
|
"symfony/var-dumper": "^3.4 || ^4.0 || ^5.0 || ^6.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
@@ -1636,22 +1598,22 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/tighten/collect/issues",
|
"issues": "https://github.com/tighten/collect/issues",
|
||||||
"source": "https://github.com/tighten/collect/tree/v8.34.0"
|
"source": "https://github.com/tighten/collect/tree/v8.83.2"
|
||||||
},
|
},
|
||||||
"time": "2021-03-29T21:29:00+00:00"
|
"time": "2022-02-16T16:15:54+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.3.2",
|
"version": "v3.3.8",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "21578f00e83d4a82ecfa3d50752b609f13de6790"
|
"reference": "972d8604a92b7054828b539f2febb0211dd5945c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/21578f00e83d4a82ecfa3d50752b609f13de6790",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
|
||||||
"reference": "21578f00e83d4a82ecfa3d50752b609f13de6790",
|
"reference": "972d8604a92b7054828b539f2febb0211dd5945c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1661,7 +1623,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.0",
|
||||||
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
|
"symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -1702,7 +1664,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v3.3.2"
|
"source": "https://github.com/twigphp/Twig/tree/v3.3.8"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1714,7 +1676,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-05-16T12:14:13+00:00"
|
"time": "2022-02-04T06:59:48+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "yubico/u2flib-server",
|
"name": "yubico/u2flib-server",
|
||||||
@@ -1751,6 +1713,10 @@
|
|||||||
],
|
],
|
||||||
"description": "Library for U2F implementation",
|
"description": "Library for U2F implementation",
|
||||||
"homepage": "https://developers.yubico.com/php-u2flib-server",
|
"homepage": "https://developers.yubico.com/php-u2flib-server",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/Yubico/php-u2flib-server/issues",
|
||||||
|
"source": "https://github.com/Yubico/php-u2flib-server/tree/1.0.2"
|
||||||
|
},
|
||||||
"time": "2018-09-07T08:16:44+00:00"
|
"time": "2018-09-07T08:16:44+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -1762,5 +1728,5 @@
|
|||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": [],
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.1.0"
|
"plugin-api-version": "2.2.0"
|
||||||
}
|
}
|
||||||
|
1
data/web/inc/lib/vendor/bin/carbon
vendored
1
data/web/inc/lib/vendor/bin/carbon
vendored
@@ -1 +0,0 @@
|
|||||||
../nesbot/carbon/bin/carbon
|
|
97
data/web/inc/lib/vendor/bin/carbon
vendored
Executable file
97
data/web/inc/lib/vendor/bin/carbon
vendored
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy PHP file generated by Composer
|
||||||
|
*
|
||||||
|
* This file includes the referenced bin path (../nesbot/carbon/bin/carbon)
|
||||||
|
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||||
|
*
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer;
|
||||||
|
|
||||||
|
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 80000) {
|
||||||
|
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class BinProxyWrapper
|
||||||
|
{
|
||||||
|
private $handle;
|
||||||
|
private $position;
|
||||||
|
|
||||||
|
public function stream_open($path, $mode, $options, &$opened_path)
|
||||||
|
{
|
||||||
|
// get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution
|
||||||
|
$opened_path = substr($path, 21);
|
||||||
|
$opened_path = realpath($opened_path) ?: $opened_path;
|
||||||
|
$this->handle = fopen($opened_path, $mode);
|
||||||
|
$this->position = 0;
|
||||||
|
|
||||||
|
// remove all traces of this stream wrapper once it has been used
|
||||||
|
stream_wrapper_unregister('composer-bin-proxy');
|
||||||
|
|
||||||
|
return (bool) $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_read($count)
|
||||||
|
{
|
||||||
|
$data = fread($this->handle, $count);
|
||||||
|
|
||||||
|
if ($this->position === 0) {
|
||||||
|
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->position += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_cast($castAs)
|
||||||
|
{
|
||||||
|
return $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_close()
|
||||||
|
{
|
||||||
|
fclose($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_lock($operation)
|
||||||
|
{
|
||||||
|
return $operation ? flock($this->handle, $operation) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_tell()
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_eof()
|
||||||
|
{
|
||||||
|
return feof($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_stat()
|
||||||
|
{
|
||||||
|
return fstat($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_set_option($option, $arg1, $arg2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\BinProxyWrapper')) {
|
||||||
|
include("composer-bin-proxy://" . __DIR__ . '/..'.'/nesbot/carbon/bin/carbon');
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include __DIR__ . '/..'.'/nesbot/carbon/bin/carbon';
|
1
data/web/inc/lib/vendor/bin/minifycss
vendored
1
data/web/inc/lib/vendor/bin/minifycss
vendored
@@ -1 +0,0 @@
|
|||||||
../matthiasmullie/minify/bin/minifycss
|
|
97
data/web/inc/lib/vendor/bin/minifycss
vendored
Executable file
97
data/web/inc/lib/vendor/bin/minifycss
vendored
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy PHP file generated by Composer
|
||||||
|
*
|
||||||
|
* This file includes the referenced bin path (../matthiasmullie/minify/bin/minifycss)
|
||||||
|
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||||
|
*
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer;
|
||||||
|
|
||||||
|
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 80000) {
|
||||||
|
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class BinProxyWrapper
|
||||||
|
{
|
||||||
|
private $handle;
|
||||||
|
private $position;
|
||||||
|
|
||||||
|
public function stream_open($path, $mode, $options, &$opened_path)
|
||||||
|
{
|
||||||
|
// get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution
|
||||||
|
$opened_path = substr($path, 21);
|
||||||
|
$opened_path = realpath($opened_path) ?: $opened_path;
|
||||||
|
$this->handle = fopen($opened_path, $mode);
|
||||||
|
$this->position = 0;
|
||||||
|
|
||||||
|
// remove all traces of this stream wrapper once it has been used
|
||||||
|
stream_wrapper_unregister('composer-bin-proxy');
|
||||||
|
|
||||||
|
return (bool) $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_read($count)
|
||||||
|
{
|
||||||
|
$data = fread($this->handle, $count);
|
||||||
|
|
||||||
|
if ($this->position === 0) {
|
||||||
|
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->position += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_cast($castAs)
|
||||||
|
{
|
||||||
|
return $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_close()
|
||||||
|
{
|
||||||
|
fclose($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_lock($operation)
|
||||||
|
{
|
||||||
|
return $operation ? flock($this->handle, $operation) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_tell()
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_eof()
|
||||||
|
{
|
||||||
|
return feof($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_stat()
|
||||||
|
{
|
||||||
|
return fstat($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_set_option($option, $arg1, $arg2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\BinProxyWrapper')) {
|
||||||
|
include("composer-bin-proxy://" . __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifycss');
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifycss';
|
1
data/web/inc/lib/vendor/bin/minifyjs
vendored
1
data/web/inc/lib/vendor/bin/minifyjs
vendored
@@ -1 +0,0 @@
|
|||||||
../matthiasmullie/minify/bin/minifyjs
|
|
97
data/web/inc/lib/vendor/bin/minifyjs
vendored
Executable file
97
data/web/inc/lib/vendor/bin/minifyjs
vendored
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy PHP file generated by Composer
|
||||||
|
*
|
||||||
|
* This file includes the referenced bin path (../matthiasmullie/minify/bin/minifyjs)
|
||||||
|
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||||
|
*
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer;
|
||||||
|
|
||||||
|
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 80000) {
|
||||||
|
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class BinProxyWrapper
|
||||||
|
{
|
||||||
|
private $handle;
|
||||||
|
private $position;
|
||||||
|
|
||||||
|
public function stream_open($path, $mode, $options, &$opened_path)
|
||||||
|
{
|
||||||
|
// get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution
|
||||||
|
$opened_path = substr($path, 21);
|
||||||
|
$opened_path = realpath($opened_path) ?: $opened_path;
|
||||||
|
$this->handle = fopen($opened_path, $mode);
|
||||||
|
$this->position = 0;
|
||||||
|
|
||||||
|
// remove all traces of this stream wrapper once it has been used
|
||||||
|
stream_wrapper_unregister('composer-bin-proxy');
|
||||||
|
|
||||||
|
return (bool) $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_read($count)
|
||||||
|
{
|
||||||
|
$data = fread($this->handle, $count);
|
||||||
|
|
||||||
|
if ($this->position === 0) {
|
||||||
|
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->position += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_cast($castAs)
|
||||||
|
{
|
||||||
|
return $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_close()
|
||||||
|
{
|
||||||
|
fclose($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_lock($operation)
|
||||||
|
{
|
||||||
|
return $operation ? flock($this->handle, $operation) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_tell()
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_eof()
|
||||||
|
{
|
||||||
|
return feof($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_stat()
|
||||||
|
{
|
||||||
|
return fstat($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_set_option($option, $arg1, $arg2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\BinProxyWrapper')) {
|
||||||
|
include("composer-bin-proxy://" . __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifyjs');
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifyjs';
|
1
data/web/inc/lib/vendor/bin/var-dump-server
vendored
1
data/web/inc/lib/vendor/bin/var-dump-server
vendored
@@ -1 +0,0 @@
|
|||||||
../symfony/var-dumper/Resources/bin/var-dump-server
|
|
97
data/web/inc/lib/vendor/bin/var-dump-server
vendored
Executable file
97
data/web/inc/lib/vendor/bin/var-dump-server
vendored
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy PHP file generated by Composer
|
||||||
|
*
|
||||||
|
* This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
|
||||||
|
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||||
|
*
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer;
|
||||||
|
|
||||||
|
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 80000) {
|
||||||
|
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class BinProxyWrapper
|
||||||
|
{
|
||||||
|
private $handle;
|
||||||
|
private $position;
|
||||||
|
|
||||||
|
public function stream_open($path, $mode, $options, &$opened_path)
|
||||||
|
{
|
||||||
|
// get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution
|
||||||
|
$opened_path = substr($path, 21);
|
||||||
|
$opened_path = realpath($opened_path) ?: $opened_path;
|
||||||
|
$this->handle = fopen($opened_path, $mode);
|
||||||
|
$this->position = 0;
|
||||||
|
|
||||||
|
// remove all traces of this stream wrapper once it has been used
|
||||||
|
stream_wrapper_unregister('composer-bin-proxy');
|
||||||
|
|
||||||
|
return (bool) $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_read($count)
|
||||||
|
{
|
||||||
|
$data = fread($this->handle, $count);
|
||||||
|
|
||||||
|
if ($this->position === 0) {
|
||||||
|
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->position += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_cast($castAs)
|
||||||
|
{
|
||||||
|
return $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_close()
|
||||||
|
{
|
||||||
|
fclose($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_lock($operation)
|
||||||
|
{
|
||||||
|
return $operation ? flock($this->handle, $operation) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_tell()
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_eof()
|
||||||
|
{
|
||||||
|
return feof($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_stat()
|
||||||
|
{
|
||||||
|
return fstat($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_set_option($option, $arg1, $arg2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\BinProxyWrapper')) {
|
||||||
|
include("composer-bin-proxy://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';
|
113
data/web/inc/lib/vendor/composer/ClassLoader.php
vendored
113
data/web/inc/lib/vendor/composer/ClassLoader.php
vendored
@@ -42,30 +42,75 @@ namespace Composer\Autoload;
|
|||||||
*/
|
*/
|
||||||
class ClassLoader
|
class ClassLoader
|
||||||
{
|
{
|
||||||
|
/** @var ?string */
|
||||||
private $vendorDir;
|
private $vendorDir;
|
||||||
|
|
||||||
// PSR-4
|
// PSR-4
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array<string, int>>
|
||||||
|
*/
|
||||||
private $prefixLengthsPsr4 = array();
|
private $prefixLengthsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array<int, string>>
|
||||||
|
*/
|
||||||
private $prefixDirsPsr4 = array();
|
private $prefixDirsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, string>
|
||||||
|
*/
|
||||||
private $fallbackDirsPsr4 = array();
|
private $fallbackDirsPsr4 = array();
|
||||||
|
|
||||||
// PSR-0
|
// PSR-0
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array<string, string[]>>
|
||||||
|
*/
|
||||||
private $prefixesPsr0 = array();
|
private $prefixesPsr0 = array();
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, string>
|
||||||
|
*/
|
||||||
private $fallbackDirsPsr0 = array();
|
private $fallbackDirsPsr0 = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
private $useIncludePath = false;
|
private $useIncludePath = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string[]
|
||||||
|
* @psalm-var array<string, string>
|
||||||
|
*/
|
||||||
private $classMap = array();
|
private $classMap = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
private $classMapAuthoritative = false;
|
private $classMapAuthoritative = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool[]
|
||||||
|
* @psalm-var array<string, bool>
|
||||||
|
*/
|
||||||
private $missingClasses = array();
|
private $missingClasses = array();
|
||||||
|
|
||||||
|
/** @var ?string */
|
||||||
private $apcuPrefix;
|
private $apcuPrefix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var self[]
|
||||||
|
*/
|
||||||
private static $registeredLoaders = array();
|
private static $registeredLoaders = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ?string $vendorDir
|
||||||
|
*/
|
||||||
public function __construct($vendorDir = null)
|
public function __construct($vendorDir = null)
|
||||||
{
|
{
|
||||||
$this->vendorDir = $vendorDir;
|
$this->vendorDir = $vendorDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
public function getPrefixes()
|
public function getPrefixes()
|
||||||
{
|
{
|
||||||
if (!empty($this->prefixesPsr0)) {
|
if (!empty($this->prefixesPsr0)) {
|
||||||
@@ -75,28 +120,47 @@ class ClassLoader
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return array<string, array<int, string>>
|
||||||
|
*/
|
||||||
public function getPrefixesPsr4()
|
public function getPrefixesPsr4()
|
||||||
{
|
{
|
||||||
return $this->prefixDirsPsr4;
|
return $this->prefixDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return array<string, string>
|
||||||
|
*/
|
||||||
public function getFallbackDirs()
|
public function getFallbackDirs()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr0;
|
return $this->fallbackDirsPsr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return array<string, string>
|
||||||
|
*/
|
||||||
public function getFallbackDirsPsr4()
|
public function getFallbackDirsPsr4()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr4;
|
return $this->fallbackDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[] Array of classname => path
|
||||||
|
* @psalm-return array<string, string>
|
||||||
|
*/
|
||||||
public function getClassMap()
|
public function getClassMap()
|
||||||
{
|
{
|
||||||
return $this->classMap;
|
return $this->classMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $classMap Class to filename map
|
* @param string[] $classMap Class to filename map
|
||||||
|
* @psalm-param array<string, string> $classMap
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function addClassMap(array $classMap)
|
public function addClassMap(array $classMap)
|
||||||
{
|
{
|
||||||
@@ -111,9 +175,11 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-0 directories for a given prefix, either
|
* Registers a set of PSR-0 directories for a given prefix, either
|
||||||
* appending or prepending to the ones previously set for this prefix.
|
* appending or prepending to the ones previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param array|string $paths The PSR-0 root directories
|
* @param string[]|string $paths The PSR-0 root directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function add($prefix, $paths, $prepend = false)
|
public function add($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
@@ -156,11 +222,13 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-4 directories for a given namespace, either
|
* Registers a set of PSR-4 directories for a given namespace, either
|
||||||
* appending or prepending to the ones previously set for this namespace.
|
* appending or prepending to the ones previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param array|string $paths The PSR-4 base directories
|
* @param string[]|string $paths The PSR-4 base directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function addPsr4($prefix, $paths, $prepend = false)
|
public function addPsr4($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
@@ -204,8 +272,10 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-0 directories for a given prefix,
|
* Registers a set of PSR-0 directories for a given prefix,
|
||||||
* replacing any others previously set for this prefix.
|
* replacing any others previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param array|string $paths The PSR-0 base directories
|
* @param string[]|string $paths The PSR-0 base directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function set($prefix, $paths)
|
public function set($prefix, $paths)
|
||||||
{
|
{
|
||||||
@@ -220,10 +290,12 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-4 directories for a given namespace,
|
* Registers a set of PSR-4 directories for a given namespace,
|
||||||
* replacing any others previously set for this namespace.
|
* replacing any others previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param array|string $paths The PSR-4 base directories
|
* @param string[]|string $paths The PSR-4 base directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setPsr4($prefix, $paths)
|
public function setPsr4($prefix, $paths)
|
||||||
{
|
{
|
||||||
@@ -243,6 +315,8 @@ class ClassLoader
|
|||||||
* Turns on searching the include path for class files.
|
* Turns on searching the include path for class files.
|
||||||
*
|
*
|
||||||
* @param bool $useIncludePath
|
* @param bool $useIncludePath
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setUseIncludePath($useIncludePath)
|
public function setUseIncludePath($useIncludePath)
|
||||||
{
|
{
|
||||||
@@ -265,6 +339,8 @@ class ClassLoader
|
|||||||
* that have not been registered with the class map.
|
* that have not been registered with the class map.
|
||||||
*
|
*
|
||||||
* @param bool $classMapAuthoritative
|
* @param bool $classMapAuthoritative
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||||
{
|
{
|
||||||
@@ -285,6 +361,8 @@ class ClassLoader
|
|||||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||||
*
|
*
|
||||||
* @param string|null $apcuPrefix
|
* @param string|null $apcuPrefix
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setApcuPrefix($apcuPrefix)
|
public function setApcuPrefix($apcuPrefix)
|
||||||
{
|
{
|
||||||
@@ -305,6 +383,8 @@ class ClassLoader
|
|||||||
* Registers this instance as an autoloader.
|
* Registers this instance as an autoloader.
|
||||||
*
|
*
|
||||||
* @param bool $prepend Whether to prepend the autoloader or not
|
* @param bool $prepend Whether to prepend the autoloader or not
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function register($prepend = false)
|
public function register($prepend = false)
|
||||||
{
|
{
|
||||||
@@ -324,6 +404,8 @@ class ClassLoader
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregisters this instance as an autoloader.
|
* Unregisters this instance as an autoloader.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function unregister()
|
public function unregister()
|
||||||
{
|
{
|
||||||
@@ -403,6 +485,11 @@ class ClassLoader
|
|||||||
return self::$registeredLoaders;
|
return self::$registeredLoaders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $class
|
||||||
|
* @param string $ext
|
||||||
|
* @return string|false
|
||||||
|
*/
|
||||||
private function findFileWithExtension($class, $ext)
|
private function findFileWithExtension($class, $ext)
|
||||||
{
|
{
|
||||||
// PSR-4 lookup
|
// PSR-4 lookup
|
||||||
@@ -474,6 +561,10 @@ class ClassLoader
|
|||||||
* Scope isolated include.
|
* Scope isolated include.
|
||||||
*
|
*
|
||||||
* Prevents access to $this/self from included files.
|
* Prevents access to $this/self from included files.
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @return void
|
||||||
|
* @private
|
||||||
*/
|
*/
|
||||||
function includeFile($file)
|
function includeFile($file)
|
||||||
{
|
{
|
||||||
|
@@ -20,12 +20,25 @@ use Composer\Semver\VersionParser;
|
|||||||
*
|
*
|
||||||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||||
*
|
*
|
||||||
* To require it's presence, you can require `composer-runtime-api ^2.0`
|
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||||
*/
|
*/
|
||||||
class InstalledVersions
|
class InstalledVersions
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var mixed[]|null
|
||||||
|
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
|
||||||
|
*/
|
||||||
private static $installed;
|
private static $installed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool|null
|
||||||
|
*/
|
||||||
private static $canGetVendors;
|
private static $canGetVendors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||||
|
*/
|
||||||
private static $installedByVendor = array();
|
private static $installedByVendor = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -228,7 +241,7 @@ class InstalledVersions
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
|
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
|
||||||
*/
|
*/
|
||||||
public static function getRootPackage()
|
public static function getRootPackage()
|
||||||
{
|
{
|
||||||
@@ -242,7 +255,7 @@ class InstalledVersions
|
|||||||
*
|
*
|
||||||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
||||||
* @return array[]
|
* @return array[]
|
||||||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
|
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
|
||||||
*/
|
*/
|
||||||
public static function getRawData()
|
public static function getRawData()
|
||||||
{
|
{
|
||||||
@@ -265,7 +278,7 @@ class InstalledVersions
|
|||||||
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
||||||
*
|
*
|
||||||
* @return array[]
|
* @return array[]
|
||||||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||||
*/
|
*/
|
||||||
public static function getAllRawData()
|
public static function getAllRawData()
|
||||||
{
|
{
|
||||||
@@ -288,7 +301,7 @@ class InstalledVersions
|
|||||||
* @param array[] $data A vendor/composer/installed.php data set
|
* @param array[] $data A vendor/composer/installed.php data set
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
|
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
|
||||||
*/
|
*/
|
||||||
public static function reload($data)
|
public static function reload($data)
|
||||||
{
|
{
|
||||||
@@ -298,7 +311,7 @@ class InstalledVersions
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array[]
|
* @return array[]
|
||||||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||||
*/
|
*/
|
||||||
private static function getInstalled()
|
private static function getInstalled()
|
||||||
{
|
{
|
||||||
|
@@ -7,10 +7,9 @@ $baseDir = dirname($vendorDir);
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||||
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
|
||||||
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
|
|
||||||
'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',
|
|
||||||
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
||||||
|
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
||||||
|
'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',
|
||||||
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||||
'fe62ba7e10580d903cc46d808b5961a4' => $vendorDir . '/tightenco/collect/src/Collect/Support/helpers.php',
|
'fe62ba7e10580d903cc46d808b5961a4' => $vendorDir . '/tightenco/collect/src/Collect/Support/helpers.php',
|
||||||
'caf31cc6ec7cf2241cb6f12c226c3846' => $vendorDir . '/tightenco/collect/src/Collect/Support/alias.php',
|
'caf31cc6ec7cf2241cb6f12c226c3846' => $vendorDir . '/tightenco/collect/src/Collect/Support/alias.php',
|
||||||
|
@@ -16,7 +16,7 @@ return array(
|
|||||||
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
|
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
|
||||||
'RobThree\\Auth\\' => array($vendorDir . '/robthree/twofactorauth/lib'),
|
'RobThree\\Auth\\' => array($vendorDir . '/robthree/twofactorauth/lib'),
|
||||||
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
||||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
||||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
'PhpMimeMailParser\\' => array($vendorDir . '/php-mime-mail-parser/php-mime-mail-parser/src'),
|
'PhpMimeMailParser\\' => array($vendorDir . '/php-mime-mail-parser/php-mime-mail-parser/src'),
|
||||||
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
||||||
|
@@ -65,11 +65,16 @@ class ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $fileIdentifier
|
||||||
|
* @param string $file
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
function composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file)
|
function composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file)
|
||||||
{
|
{
|
||||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||||
require $file;
|
|
||||||
|
|
||||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||||
|
|
||||||
|
require $file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,10 +8,9 @@ class ComposerStaticInit873464e4bd965a3168f133248b1b218b
|
|||||||
{
|
{
|
||||||
public static $files = array (
|
public static $files = array (
|
||||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||||
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
|
||||||
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
|
|
||||||
'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',
|
|
||||||
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
||||||
|
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
||||||
|
'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',
|
||||||
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||||
'fe62ba7e10580d903cc46d808b5961a4' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/helpers.php',
|
'fe62ba7e10580d903cc46d808b5961a4' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/helpers.php',
|
||||||
'caf31cc6ec7cf2241cb6f12c226c3846' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/alias.php',
|
'caf31cc6ec7cf2241cb6f12c226c3846' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/alias.php',
|
||||||
@@ -115,7 +114,7 @@ class ComposerStaticInit873464e4bd965a3168f133248b1b218b
|
|||||||
),
|
),
|
||||||
'Psr\\Log\\' =>
|
'Psr\\Log\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
|
0 => __DIR__ . '/..' . '/psr/log/src',
|
||||||
),
|
),
|
||||||
'Psr\\Container\\' =>
|
'Psr\\Container\\' =>
|
||||||
array (
|
array (
|
||||||
|
450
data/web/inc/lib/vendor/composer/installed.json
vendored
450
data/web/inc/lib/vendor/composer/installed.json
vendored
@@ -63,34 +63,35 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ddeboer/imap",
|
"name": "ddeboer/imap",
|
||||||
"version": "1.12.1",
|
"version": "1.13.1",
|
||||||
"version_normalized": "1.12.1.0",
|
"version_normalized": "1.13.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ddeboer/imap.git",
|
"url": "https://github.com/ddeboer/imap.git",
|
||||||
"reference": "dbed05ca67b93509345a820b2859de10c48948fb"
|
"reference": "8b772d04b1deadb5df13782fb78c4b648f77496e"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ddeboer/imap/zipball/dbed05ca67b93509345a820b2859de10c48948fb",
|
"url": "https://api.github.com/repos/ddeboer/imap/zipball/8b772d04b1deadb5df13782fb78c4b648f77496e",
|
||||||
"reference": "dbed05ca67b93509345a820b2859de10c48948fb",
|
"reference": "8b772d04b1deadb5df13782fb78c4b648f77496e",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"ext-imap": "*",
|
"ext-imap": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"php": "^7.4 || ^8.0"
|
"php": "^8.0.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^2.18.6",
|
"friendsofphp/php-cs-fixer": "^v3.4.0",
|
||||||
"laminas/laminas-mail": "^2.14.0",
|
"laminas/laminas-mail": "^2.15.1",
|
||||||
"phpstan/phpstan": "^0.12.84",
|
"malukenho/mcbumpface": "^1.1.5",
|
||||||
"phpstan/phpstan-phpunit": "^0.12.18",
|
"phpstan/phpstan": "^1.3.3",
|
||||||
"phpstan/phpstan-strict-rules": "^0.12.9",
|
"phpstan/phpstan-phpunit": "^1.0.0",
|
||||||
"phpunit/phpunit": "^9.5.4"
|
"phpstan/phpstan-strict-rules": "^1.1.0",
|
||||||
|
"phpunit/phpunit": "^9.5.11"
|
||||||
},
|
},
|
||||||
"time": "2021-04-27T08:38:46+00:00",
|
"time": "2022-01-10T10:53:05+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -124,7 +125,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/ddeboer/imap/issues",
|
"issues": "https://github.com/ddeboer/imap/issues",
|
||||||
"source": "https://github.com/ddeboer/imap/tree/1.12.1"
|
"source": "https://github.com/ddeboer/imap/tree/1.13.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -140,35 +141,35 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "directorytree/ldaprecord",
|
"name": "directorytree/ldaprecord",
|
||||||
"version": "v2.6.3",
|
"version": "v2.10.1",
|
||||||
"version_normalized": "2.6.3.0",
|
"version_normalized": "2.10.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/DirectoryTree/LdapRecord.git",
|
"url": "https://github.com/DirectoryTree/LdapRecord.git",
|
||||||
"reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a"
|
"reference": "bf512d9af7a7b0e2ed7a666ab29cefdd027bee88"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/5c93ec6d1ef458290825a8b0a148946dce7c1e7a",
|
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/bf512d9af7a7b0e2ed7a666ab29cefdd027bee88",
|
||||||
"reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a",
|
"reference": "bf512d9af7a7b0e2ed7a666ab29cefdd027bee88",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-ldap": "*",
|
"ext-ldap": "*",
|
||||||
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0",
|
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
|
||||||
"nesbot/carbon": "^1.0|^2.0",
|
"nesbot/carbon": "^1.0|^2.0",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"psr/log": "^1.0",
|
"psr/log": "*",
|
||||||
"psr/simple-cache": "^1.0",
|
"psr/simple-cache": "^1.0|^2.0",
|
||||||
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0"
|
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"phpunit/phpunit": "^8.0",
|
"phpunit/phpunit": "^9.0",
|
||||||
"spatie/ray": "^1.24"
|
"spatie/ray": "^1.24"
|
||||||
},
|
},
|
||||||
"time": "2021-08-05T21:52:43+00:00",
|
"time": "2022-02-25T16:00:51+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -216,29 +217,29 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/contracts",
|
"name": "illuminate/contracts",
|
||||||
"version": "v8.53.1",
|
"version": "v9.3.0",
|
||||||
"version_normalized": "8.53.1.0",
|
"version_normalized": "9.3.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/contracts.git",
|
"url": "https://github.com/illuminate/contracts.git",
|
||||||
"reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb"
|
"reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/504a34286a1b4c5421c43087d6bd4e176138f6fb",
|
"url": "https://api.github.com/repos/illuminate/contracts/zipball/bf4b3c254c49d28157645d01e4883b5951b1e1d0",
|
||||||
"reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb",
|
"reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.3|^8.0",
|
"php": "^8.0.2",
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.1.1|^2.0.1",
|
||||||
"psr/simple-cache": "^1.0"
|
"psr/simple-cache": "^1.0|^2.0|^3.0"
|
||||||
},
|
},
|
||||||
"time": "2021-08-03T14:03:47+00:00",
|
"time": "2022-02-22T14:45:39+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "8.x-dev"
|
"dev-master": "9.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
@@ -453,17 +454,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "2.51.1",
|
"version": "2.57.0",
|
||||||
"version_normalized": "2.51.1.0",
|
"version_normalized": "2.57.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||||
"reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922"
|
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922",
|
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||||
"reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922",
|
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -471,19 +472,20 @@
|
|||||||
"php": "^7.1.8 || ^8.0",
|
"php": "^7.1.8 || ^8.0",
|
||||||
"symfony/polyfill-mbstring": "^1.0",
|
"symfony/polyfill-mbstring": "^1.0",
|
||||||
"symfony/polyfill-php80": "^1.16",
|
"symfony/polyfill-php80": "^1.16",
|
||||||
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
|
"symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"doctrine/dbal": "^2.0 || ^3.0",
|
||||||
"doctrine/orm": "^2.7",
|
"doctrine/orm": "^2.7",
|
||||||
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
|
"friendsofphp/php-cs-fixer": "^3.0",
|
||||||
"kylekatarnls/multi-tester": "^2.0",
|
"kylekatarnls/multi-tester": "^2.0",
|
||||||
"phpmd/phpmd": "^2.9",
|
"phpmd/phpmd": "^2.9",
|
||||||
"phpstan/extension-installer": "^1.0",
|
"phpstan/extension-installer": "^1.0",
|
||||||
"phpstan/phpstan": "^0.12.54",
|
"phpstan/phpstan": "^0.12.54 || ^1.0",
|
||||||
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
|
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
|
||||||
"squizlabs/php_codesniffer": "^3.4"
|
"squizlabs/php_codesniffer": "^3.4"
|
||||||
},
|
},
|
||||||
"time": "2021-07-28T13:16:28+00:00",
|
"time": "2022-02-13T18:13:33+00:00",
|
||||||
"bin": [
|
"bin": [
|
||||||
"bin/carbon"
|
"bin/carbon"
|
||||||
],
|
],
|
||||||
@@ -533,6 +535,7 @@
|
|||||||
"time"
|
"time"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
|
"docs": "https://carbon.nesbot.com/docs",
|
||||||
"issues": "https://github.com/briannesbitt/Carbon/issues",
|
"issues": "https://github.com/briannesbitt/Carbon/issues",
|
||||||
"source": "https://github.com/briannesbitt/Carbon"
|
"source": "https://github.com/briannesbitt/Carbon"
|
||||||
},
|
},
|
||||||
@@ -697,17 +700,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpmailer/phpmailer",
|
"name": "phpmailer/phpmailer",
|
||||||
"version": "v6.5.0",
|
"version": "v6.6.0",
|
||||||
"version_normalized": "6.5.0.0",
|
"version_normalized": "6.6.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c"
|
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c",
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1",
|
||||||
"reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c",
|
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -719,10 +722,12 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||||
"doctrine/annotations": "^1.2",
|
"doctrine/annotations": "^1.2",
|
||||||
|
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||||
|
"php-parallel-lint/php-parallel-lint": "^1.3.1",
|
||||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||||
"roave/security-advisories": "dev-latest",
|
"roave/security-advisories": "dev-latest",
|
||||||
"squizlabs/php_codesniffer": "^3.5.6",
|
"squizlabs/php_codesniffer": "^3.6.2",
|
||||||
"yoast/phpunit-polyfills": "^0.2.0"
|
"yoast/phpunit-polyfills": "^1.0.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||||
@@ -732,7 +737,7 @@
|
|||||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||||
},
|
},
|
||||||
"time": "2021-06-16T14:33:43+00:00",
|
"time": "2022-02-28T15:31:21+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -764,7 +769,7 @@
|
|||||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.0"
|
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -776,24 +781,29 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.1.1",
|
"version": "2.0.2",
|
||||||
"version_normalized": "1.1.1.0",
|
"version_normalized": "2.0.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"time": "2021-03-05T17:36:06+00:00",
|
"time": "2021-11-05T16:47:00+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -821,39 +831,39 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/php-fig/container/issues",
|
"issues": "https://github.com/php-fig/container/issues",
|
||||||
"source": "https://github.com/php-fig/container/tree/1.1.1"
|
"source": "https://github.com/php-fig/container/tree/2.0.2"
|
||||||
},
|
},
|
||||||
"install-path": "../psr/container"
|
"install-path": "../psr/container"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
"version": "1.1.4",
|
"version": "3.0.0",
|
||||||
"version_normalized": "1.1.4.0",
|
"version_normalized": "3.0.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/log.git",
|
"url": "https://github.com/php-fig/log.git",
|
||||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"time": "2021-05-03T11:20:27+00:00",
|
"time": "2021-07-14T16:46:02+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.1.x-dev"
|
"dev-master": "3.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Psr\\Log\\": "Psr/Log/"
|
"Psr\\Log\\": "src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
@@ -874,33 +884,33 @@
|
|||||||
"psr-3"
|
"psr-3"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/log/tree/1.1.4"
|
"source": "https://github.com/php-fig/log/tree/3.0.0"
|
||||||
},
|
},
|
||||||
"install-path": "../psr/log"
|
"install-path": "../psr/log"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/simple-cache",
|
"name": "psr/simple-cache",
|
||||||
"version": "1.0.1",
|
"version": "2.0.0",
|
||||||
"version_normalized": "1.0.1.0",
|
"version_normalized": "2.0.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/simple-cache.git",
|
"url": "https://github.com/php-fig/simple-cache.git",
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
|
"reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/8707bf3cea6f710bf6ef05491234e3ab06f6432a",
|
||||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
"reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"time": "2017-10-23T01:57:42+00:00",
|
"time": "2021-10-29T13:22:09+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
@@ -916,7 +926,7 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interfaces for simple caching",
|
"description": "Common interfaces for simple caching",
|
||||||
@@ -928,23 +938,23 @@
|
|||||||
"simple-cache"
|
"simple-cache"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/simple-cache/tree/master"
|
"source": "https://github.com/php-fig/simple-cache/tree/2.0.0"
|
||||||
},
|
},
|
||||||
"install-path": "../psr/simple-cache"
|
"install-path": "../psr/simple-cache"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "robthree/twofactorauth",
|
"name": "robthree/twofactorauth",
|
||||||
"version": "1.8.0",
|
"version": "1.8.1",
|
||||||
"version_normalized": "1.8.0.0",
|
"version_normalized": "1.8.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobThree/TwoFactorAuth.git",
|
"url": "https://github.com/RobThree/TwoFactorAuth.git",
|
||||||
"reference": "30a38627ae1e7c9399dae67e265063cd6ec5276c"
|
"reference": "5afcb45282f1c75562a48d479ecd1732c9bdb11b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/30a38627ae1e7c9399dae67e265063cd6ec5276c",
|
"url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/5afcb45282f1c75562a48d479ecd1732c9bdb11b",
|
||||||
"reference": "30a38627ae1e7c9399dae67e265063cd6ec5276c",
|
"reference": "5afcb45282f1c75562a48d479ecd1732c9bdb11b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -958,7 +968,7 @@
|
|||||||
"bacon/bacon-qr-code": "Needed for BaconQrCodeProvider provider",
|
"bacon/bacon-qr-code": "Needed for BaconQrCodeProvider provider",
|
||||||
"endroid/qr-code": "Needed for EndroidQrCodeProvider"
|
"endroid/qr-code": "Needed for EndroidQrCodeProvider"
|
||||||
},
|
},
|
||||||
"time": "2021-03-09T18:24:05+00:00",
|
"time": "2021-10-20T12:19:55+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1058,98 +1068,31 @@
|
|||||||
],
|
],
|
||||||
"install-path": "../soundasleep/html2text"
|
"install-path": "../soundasleep/html2text"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/deprecation-contracts",
|
|
||||||
"version": "v2.4.0",
|
|
||||||
"version_normalized": "2.4.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1"
|
|
||||||
},
|
|
||||||
"time": "2021-03-23T23:28:01+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "2.4-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/contracts",
|
|
||||||
"url": "https://github.com/symfony/contracts"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"function.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "A generic function and convention to trigger deprecation notices",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"install-path": "../symfony/deprecation-contracts"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-ctype",
|
"name": "symfony/polyfill-ctype",
|
||||||
"version": "v1.23.0",
|
"version": "v1.24.0",
|
||||||
"version_normalized": "1.23.0.0",
|
"version_normalized": "1.24.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-ctype": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-ctype": "For best performance"
|
"ext-ctype": "For best performance"
|
||||||
},
|
},
|
||||||
"time": "2021-02-19T12:13:01+00:00",
|
"time": "2021-10-20T20:35:02+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -1162,12 +1105,12 @@
|
|||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Ctype\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Ctype\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
@@ -1192,7 +1135,7 @@
|
|||||||
"portable"
|
"portable"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1212,26 +1155,29 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.23.1",
|
"version": "v1.24.0",
|
||||||
"version_normalized": "1.23.1.0",
|
"version_normalized": "1.24.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "For best performance"
|
"ext-mbstring": "For best performance"
|
||||||
},
|
},
|
||||||
"time": "2021-05-27T12:26:48+00:00",
|
"time": "2021-11-30T18:21:41+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -1244,12 +1190,12 @@
|
|||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
@@ -1275,7 +1221,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1295,23 +1241,23 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.23.1",
|
"version": "v1.24.0",
|
||||||
"version_normalized": "1.23.1.0",
|
"version_normalized": "1.24.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
|
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
|
||||||
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
|
"reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
"time": "2021-07-28T13:41:28+00:00",
|
"time": "2021-09-13T13:58:33+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -1324,12 +1270,12 @@
|
|||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php80\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php80\\": ""
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"Resources/stubs"
|
"Resources/stubs"
|
||||||
]
|
]
|
||||||
@@ -1361,7 +1307,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
|
"source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1381,54 +1327,54 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/translation",
|
"name": "symfony/translation",
|
||||||
"version": "v5.3.4",
|
"version": "v6.0.5",
|
||||||
"version_normalized": "5.3.4.0",
|
"version_normalized": "6.0.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/translation.git",
|
"url": "https://github.com/symfony/translation.git",
|
||||||
"reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1"
|
"reference": "e69501c71107cc3146b32aaa45f4edd0c3427875"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1",
|
"url": "https://api.github.com/repos/symfony/translation/zipball/e69501c71107cc3146b32aaa45f4edd0c3427875",
|
||||||
"reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1",
|
"reference": "e69501c71107cc3146b32aaa45f4edd0c3427875",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=8.0.2",
|
||||||
"symfony/deprecation-contracts": "^2.1",
|
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0",
|
||||||
"symfony/polyfill-php80": "^1.16",
|
"symfony/translation-contracts": "^2.3|^3.0"
|
||||||
"symfony/translation-contracts": "^2.3"
|
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"symfony/config": "<4.4",
|
"symfony/config": "<5.4",
|
||||||
"symfony/dependency-injection": "<5.0",
|
"symfony/console": "<5.4",
|
||||||
"symfony/http-kernel": "<5.0",
|
"symfony/dependency-injection": "<5.4",
|
||||||
"symfony/twig-bundle": "<5.0",
|
"symfony/http-kernel": "<5.4",
|
||||||
"symfony/yaml": "<4.4"
|
"symfony/twig-bundle": "<5.4",
|
||||||
|
"symfony/yaml": "<5.4"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"symfony/translation-implementation": "2.3"
|
"symfony/translation-implementation": "2.3|3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/log": "^1|^2|^3",
|
"psr/log": "^1|^2|^3",
|
||||||
"symfony/config": "^4.4|^5.0",
|
"symfony/config": "^5.4|^6.0",
|
||||||
"symfony/console": "^4.4|^5.0",
|
"symfony/console": "^5.4|^6.0",
|
||||||
"symfony/dependency-injection": "^5.0",
|
"symfony/dependency-injection": "^5.4|^6.0",
|
||||||
"symfony/finder": "^4.4|^5.0",
|
"symfony/finder": "^5.4|^6.0",
|
||||||
"symfony/http-kernel": "^5.0",
|
"symfony/http-client-contracts": "^1.1|^2.0|^3.0",
|
||||||
"symfony/intl": "^4.4|^5.0",
|
"symfony/http-kernel": "^5.4|^6.0",
|
||||||
|
"symfony/intl": "^5.4|^6.0",
|
||||||
"symfony/polyfill-intl-icu": "^1.21",
|
"symfony/polyfill-intl-icu": "^1.21",
|
||||||
"symfony/service-contracts": "^1.1.2|^2",
|
"symfony/service-contracts": "^1.1.2|^2|^3",
|
||||||
"symfony/yaml": "^4.4|^5.0"
|
"symfony/yaml": "^5.4|^6.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"psr/log-implementation": "To use logging capability in translator",
|
"psr/log-implementation": "To use logging capability in translator",
|
||||||
"symfony/config": "",
|
"symfony/config": "",
|
||||||
"symfony/yaml": ""
|
"symfony/yaml": ""
|
||||||
},
|
},
|
||||||
"time": "2021-07-25T09:39:16+00:00",
|
"time": "2022-02-09T15:52:48+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1459,7 +1405,7 @@
|
|||||||
"description": "Provides tools to internationalize your application",
|
"description": "Provides tools to internationalize your application",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/translation/tree/v5.3.4"
|
"source": "https://github.com/symfony/translation/tree/v6.0.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1479,30 +1425,30 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/translation-contracts",
|
"name": "symfony/translation-contracts",
|
||||||
"version": "v2.4.0",
|
"version": "v3.0.0",
|
||||||
"version_normalized": "2.4.0.0",
|
"version_normalized": "3.0.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/translation-contracts.git",
|
"url": "https://github.com/symfony/translation-contracts.git",
|
||||||
"reference": "95c812666f3e91db75385749fe219c5e494c7f95"
|
"reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
|
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
|
||||||
"reference": "95c812666f3e91db75385749fe219c5e494c7f95",
|
"reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5"
|
"php": ">=8.0.2"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"symfony/translation-implementation": ""
|
"symfony/translation-implementation": ""
|
||||||
},
|
},
|
||||||
"time": "2021-03-23T23:28:01+00:00",
|
"time": "2021-09-07T12:43:40+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "2.4-dev"
|
"dev-main": "3.0-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/contracts",
|
"name": "symfony/contracts",
|
||||||
@@ -1540,7 +1486,7 @@
|
|||||||
"standards"
|
"standards"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
|
"source": "https://github.com/symfony/translation-contracts/tree/v3.0.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1560,32 +1506,32 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-dumper",
|
"name": "symfony/var-dumper",
|
||||||
"version": "v5.3.6",
|
"version": "v6.0.5",
|
||||||
"version_normalized": "5.3.6.0",
|
"version_normalized": "6.0.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/var-dumper.git",
|
"url": "https://github.com/symfony/var-dumper.git",
|
||||||
"reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0"
|
"reference": "60d6a756d5f485df5e6e40b337334848f79f61ce"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0",
|
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/60d6a756d5f485df5e6e40b337334848f79f61ce",
|
||||||
"reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0",
|
"reference": "60d6a756d5f485df5e6e40b337334848f79f61ce",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=8.0.2",
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0"
|
||||||
"symfony/polyfill-php80": "^1.16"
|
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"phpunit/phpunit": "<5.4.3",
|
"phpunit/phpunit": "<5.4.3",
|
||||||
"symfony/console": "<4.4"
|
"symfony/console": "<5.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"symfony/console": "^4.4|^5.0",
|
"symfony/console": "^5.4|^6.0",
|
||||||
"symfony/process": "^4.4|^5.0",
|
"symfony/process": "^5.4|^6.0",
|
||||||
|
"symfony/uid": "^5.4|^6.0",
|
||||||
"twig/twig": "^2.13|^3.0.4"
|
"twig/twig": "^2.13|^3.0.4"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
@@ -1593,7 +1539,7 @@
|
|||||||
"ext-intl": "To show region name in time zone dump",
|
"ext-intl": "To show region name in time zone dump",
|
||||||
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
|
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
|
||||||
},
|
},
|
||||||
"time": "2021-07-27T01:56:02+00:00",
|
"time": "2022-02-21T17:15:17+00:00",
|
||||||
"bin": [
|
"bin": [
|
||||||
"Resources/bin/var-dump-server"
|
"Resources/bin/var-dump-server"
|
||||||
],
|
],
|
||||||
@@ -1631,7 +1577,7 @@
|
|||||||
"dump"
|
"dump"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/var-dumper/tree/v5.3.6"
|
"source": "https://github.com/symfony/var-dumper/tree/v6.0.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1651,29 +1597,29 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "tightenco/collect",
|
"name": "tightenco/collect",
|
||||||
"version": "v8.34.0",
|
"version": "v8.83.2",
|
||||||
"version_normalized": "8.34.0.0",
|
"version_normalized": "8.83.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/tighten/collect.git",
|
"url": "https://github.com/tighten/collect.git",
|
||||||
"reference": "b069783ab0c547bb894ebcf8e7f6024bb401f9d2"
|
"reference": "d9c66d586ec2d216d8a31283d73f8df1400cc722"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/tighten/collect/zipball/b069783ab0c547bb894ebcf8e7f6024bb401f9d2",
|
"url": "https://api.github.com/repos/tighten/collect/zipball/d9c66d586ec2d216d8a31283d73f8df1400cc722",
|
||||||
"reference": "b069783ab0c547bb894ebcf8e7f6024bb401f9d2",
|
"reference": "d9c66d586ec2d216d8a31283d73f8df1400cc722",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2|^8.0",
|
"php": "^7.3|^8.0",
|
||||||
"symfony/var-dumper": "^3.4 || ^4.0 || ^5.0"
|
"symfony/var-dumper": "^3.4 || ^4.0 || ^5.0 || ^6.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"nesbot/carbon": "^2.23.0",
|
"nesbot/carbon": "^2.23.0",
|
||||||
"phpunit/phpunit": "^8.3"
|
"phpunit/phpunit": "^8.3"
|
||||||
},
|
},
|
||||||
"time": "2021-03-29T21:29:00+00:00",
|
"time": "2022-02-16T16:15:54+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1702,23 +1648,23 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/tighten/collect/issues",
|
"issues": "https://github.com/tighten/collect/issues",
|
||||||
"source": "https://github.com/tighten/collect/tree/v8.34.0"
|
"source": "https://github.com/tighten/collect/tree/v8.83.2"
|
||||||
},
|
},
|
||||||
"install-path": "../tightenco/collect"
|
"install-path": "../tightenco/collect"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.3.2",
|
"version": "v3.3.8",
|
||||||
"version_normalized": "3.3.2.0",
|
"version_normalized": "3.3.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "21578f00e83d4a82ecfa3d50752b609f13de6790"
|
"reference": "972d8604a92b7054828b539f2febb0211dd5945c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/21578f00e83d4a82ecfa3d50752b609f13de6790",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
|
||||||
"reference": "21578f00e83d4a82ecfa3d50752b609f13de6790",
|
"reference": "972d8604a92b7054828b539f2febb0211dd5945c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1728,9 +1674,9 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.0",
|
||||||
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
|
"symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
|
||||||
},
|
},
|
||||||
"time": "2021-05-16T12:14:13+00:00",
|
"time": "2022-02-04T06:59:48+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -1771,7 +1717,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v3.3.2"
|
"source": "https://github.com/twigphp/Twig/tree/v3.3.8"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
125
data/web/inc/lib/vendor/composer/installed.php
vendored
125
data/web/inc/lib/vendor/composer/installed.php
vendored
@@ -1,22 +1,22 @@
|
|||||||
<?php return array(
|
<?php return array(
|
||||||
'root' => array(
|
'root' => array(
|
||||||
'pretty_version' => 'dev-master',
|
'pretty_version' => '1.0.0+no-version-set',
|
||||||
'version' => 'dev-master',
|
'version' => '1.0.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '1c2923a4ddd7f89b3cf38c9594db289b7dd756d3',
|
'reference' => NULL,
|
||||||
'name' => '__root__',
|
'name' => '__root__',
|
||||||
'dev' => true,
|
'dev' => true,
|
||||||
),
|
),
|
||||||
'versions' => array(
|
'versions' => array(
|
||||||
'__root__' => array(
|
'__root__' => array(
|
||||||
'pretty_version' => 'dev-master',
|
'pretty_version' => '1.0.0+no-version-set',
|
||||||
'version' => 'dev-master',
|
'version' => '1.0.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '1c2923a4ddd7f89b3cf38c9594db289b7dd756d3',
|
'reference' => NULL,
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'bshaffer/oauth2-server-php' => array(
|
'bshaffer/oauth2-server-php' => array(
|
||||||
@@ -29,21 +29,21 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'ddeboer/imap' => array(
|
'ddeboer/imap' => array(
|
||||||
'pretty_version' => '1.12.1',
|
'pretty_version' => '1.13.1',
|
||||||
'version' => '1.12.1.0',
|
'version' => '1.13.1.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../ddeboer/imap',
|
'install_path' => __DIR__ . '/../ddeboer/imap',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'dbed05ca67b93509345a820b2859de10c48948fb',
|
'reference' => '8b772d04b1deadb5df13782fb78c4b648f77496e',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'directorytree/ldaprecord' => array(
|
'directorytree/ldaprecord' => array(
|
||||||
'pretty_version' => 'v2.6.3',
|
'pretty_version' => 'v2.10.1',
|
||||||
'version' => '2.6.3.0',
|
'version' => '2.10.1.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../directorytree/ldaprecord',
|
'install_path' => __DIR__ . '/../directorytree/ldaprecord',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '5c93ec6d1ef458290825a8b0a148946dce7c1e7a',
|
'reference' => 'bf512d9af7a7b0e2ed7a666ab29cefdd027bee88',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'exorus/php-mime-mail-parser' => array(
|
'exorus/php-mime-mail-parser' => array(
|
||||||
@@ -53,12 +53,12 @@
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
'illuminate/contracts' => array(
|
'illuminate/contracts' => array(
|
||||||
'pretty_version' => 'v8.53.1',
|
'pretty_version' => 'v9.3.0',
|
||||||
'version' => '8.53.1.0',
|
'version' => '9.3.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../illuminate/contracts',
|
'install_path' => __DIR__ . '/../illuminate/contracts',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '504a34286a1b4c5421c43087d6bd4e176138f6fb',
|
'reference' => 'bf4b3c254c49d28157645d01e4883b5951b1e1d0',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'matthiasmullie/minify' => array(
|
'matthiasmullie/minify' => array(
|
||||||
@@ -95,12 +95,12 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'nesbot/carbon' => array(
|
'nesbot/carbon' => array(
|
||||||
'pretty_version' => '2.51.1',
|
'pretty_version' => '2.57.0',
|
||||||
'version' => '2.51.1.0',
|
'version' => '2.57.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../nesbot/carbon',
|
'install_path' => __DIR__ . '/../nesbot/carbon',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922',
|
'reference' => '4a54375c21eea4811dbd1149fe6b246517554e78',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'paragonie/random_compat' => array(
|
'paragonie/random_compat' => array(
|
||||||
@@ -122,48 +122,48 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'phpmailer/phpmailer' => array(
|
'phpmailer/phpmailer' => array(
|
||||||
'pretty_version' => 'v6.5.0',
|
'pretty_version' => 'v6.6.0',
|
||||||
'version' => '6.5.0.0',
|
'version' => '6.6.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c',
|
'reference' => 'e43bac82edc26ca04b36143a48bde1c051cfd5b1',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'psr/container' => array(
|
'psr/container' => array(
|
||||||
'pretty_version' => '1.1.1',
|
'pretty_version' => '2.0.2',
|
||||||
'version' => '1.1.1.0',
|
'version' => '2.0.2.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../psr/container',
|
'install_path' => __DIR__ . '/../psr/container',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
|
'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'psr/log' => array(
|
'psr/log' => array(
|
||||||
'pretty_version' => '1.1.4',
|
'pretty_version' => '3.0.0',
|
||||||
'version' => '1.1.4.0',
|
'version' => '3.0.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../psr/log',
|
'install_path' => __DIR__ . '/../psr/log',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
|
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'psr/simple-cache' => array(
|
'psr/simple-cache' => array(
|
||||||
'pretty_version' => '1.0.1',
|
'pretty_version' => '2.0.0',
|
||||||
'version' => '1.0.1.0',
|
'version' => '2.0.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../psr/simple-cache',
|
'install_path' => __DIR__ . '/../psr/simple-cache',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
|
'reference' => '8707bf3cea6f710bf6ef05491234e3ab06f6432a',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'robthree/twofactorauth' => array(
|
'robthree/twofactorauth' => array(
|
||||||
'pretty_version' => '1.8.0',
|
'pretty_version' => '1.8.1',
|
||||||
'version' => '1.8.0.0',
|
'version' => '1.8.1.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../robthree/twofactorauth',
|
'install_path' => __DIR__ . '/../robthree/twofactorauth',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '30a38627ae1e7c9399dae67e265063cd6ec5276c',
|
'reference' => '5afcb45282f1c75562a48d479ecd1732c9bdb11b',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'soundasleep/html2text' => array(
|
'soundasleep/html2text' => array(
|
||||||
@@ -175,91 +175,82 @@
|
|||||||
'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad',
|
'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/deprecation-contracts' => array(
|
|
||||||
'pretty_version' => 'v2.4.0',
|
|
||||||
'version' => '2.4.0.0',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
|
|
||||||
'aliases' => array(),
|
|
||||||
'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627',
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/polyfill-ctype' => array(
|
'symfony/polyfill-ctype' => array(
|
||||||
'pretty_version' => 'v1.23.0',
|
'pretty_version' => 'v1.24.0',
|
||||||
'version' => '1.23.0.0',
|
'version' => '1.24.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
|
'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce',
|
'reference' => '30885182c981ab175d4d034db0f6f469898070ab',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/polyfill-mbstring' => array(
|
'symfony/polyfill-mbstring' => array(
|
||||||
'pretty_version' => 'v1.23.1',
|
'pretty_version' => 'v1.24.0',
|
||||||
'version' => '1.23.1.0',
|
'version' => '1.24.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6',
|
'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/polyfill-php80' => array(
|
'symfony/polyfill-php80' => array(
|
||||||
'pretty_version' => 'v1.23.1',
|
'pretty_version' => 'v1.24.0',
|
||||||
'version' => '1.23.1.0',
|
'version' => '1.24.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be',
|
'reference' => '57b712b08eddb97c762a8caa32c84e037892d2e9',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/translation' => array(
|
'symfony/translation' => array(
|
||||||
'pretty_version' => 'v5.3.4',
|
'pretty_version' => 'v6.0.5',
|
||||||
'version' => '5.3.4.0',
|
'version' => '6.0.5.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/translation',
|
'install_path' => __DIR__ . '/../symfony/translation',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'd89ad7292932c2699cbe4af98d72c5c6bbc504c1',
|
'reference' => 'e69501c71107cc3146b32aaa45f4edd0c3427875',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/translation-contracts' => array(
|
'symfony/translation-contracts' => array(
|
||||||
'pretty_version' => 'v2.4.0',
|
'pretty_version' => 'v3.0.0',
|
||||||
'version' => '2.4.0.0',
|
'version' => '3.0.0.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/translation-contracts',
|
'install_path' => __DIR__ . '/../symfony/translation-contracts',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '95c812666f3e91db75385749fe219c5e494c7f95',
|
'reference' => '1b6ea5a7442af5a12dba3dbd6d71034b5b234e77',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'symfony/translation-implementation' => array(
|
'symfony/translation-implementation' => array(
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
'provided' => array(
|
'provided' => array(
|
||||||
0 => '2.3',
|
0 => '2.3|3.0',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'symfony/var-dumper' => array(
|
'symfony/var-dumper' => array(
|
||||||
'pretty_version' => 'v5.3.6',
|
'pretty_version' => 'v6.0.5',
|
||||||
'version' => '5.3.6.0',
|
'version' => '6.0.5.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0',
|
'reference' => '60d6a756d5f485df5e6e40b337334848f79f61ce',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'tightenco/collect' => array(
|
'tightenco/collect' => array(
|
||||||
'pretty_version' => 'v8.34.0',
|
'pretty_version' => 'v8.83.2',
|
||||||
'version' => '8.34.0.0',
|
'version' => '8.83.2.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../tightenco/collect',
|
'install_path' => __DIR__ . '/../tightenco/collect',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'b069783ab0c547bb894ebcf8e7f6024bb401f9d2',
|
'reference' => 'd9c66d586ec2d216d8a31283d73f8df1400cc722',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'twig/twig' => array(
|
'twig/twig' => array(
|
||||||
'pretty_version' => 'v3.3.2',
|
'pretty_version' => 'v3.3.8',
|
||||||
'version' => '3.3.2.0',
|
'version' => '3.3.8.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../twig/twig',
|
'install_path' => __DIR__ . '/../twig/twig',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '21578f00e83d4a82ecfa3d50752b609f13de6790',
|
'reference' => '972d8604a92b7054828b539f2febb0211dd5945c',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'yubico/u2flib-server' => array(
|
'yubico/u2flib-server' => array(
|
||||||
|
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
$issues = array();
|
$issues = array();
|
||||||
|
|
||||||
if (!(PHP_VERSION_ID >= 70400)) {
|
if (!(PHP_VERSION_ID >= 80002)) {
|
||||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
|
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.2". You are running ' . PHP_VERSION . '.';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($issues) {
|
if ($issues) {
|
||||||
|
73
data/web/inc/lib/vendor/ddeboer/imap/.php-cs-fixer.php
vendored
Normal file
73
data/web/inc/lib/vendor/ddeboer/imap/.php-cs-fixer.php
vendored
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
return (new PhpCsFixer\Config())
|
||||||
|
->setRiskyAllowed(true)
|
||||||
|
->setRules([
|
||||||
|
'@DoctrineAnnotation' => true,
|
||||||
|
'@Symfony' => true,
|
||||||
|
'@Symfony:risky' => true,
|
||||||
|
'@PHPUnit75Migration:risky' => true,
|
||||||
|
'@PHP71Migration' => true,
|
||||||
|
'@PHP70Migration:risky' => true, // @TODO with next major version
|
||||||
|
'align_multiline_comment' => ['comment_type' => 'all_multiline'],
|
||||||
|
'array_indentation' => true,
|
||||||
|
'array_syntax' => ['syntax' => 'short'],
|
||||||
|
'binary_operator_spaces' => ['default' => 'align_single_space'],
|
||||||
|
'blank_line_before_statement' => true,
|
||||||
|
'class_definition' => ['single_item_single_line' => true],
|
||||||
|
'compact_nullable_typehint' => true,
|
||||||
|
'concat_space' => ['spacing' => 'one'],
|
||||||
|
'echo_tag_syntax' => ['format' => 'long'],
|
||||||
|
'error_suppression' => false,
|
||||||
|
'escape_implicit_backslashes' => true,
|
||||||
|
'explicit_indirect_variable' => true,
|
||||||
|
'explicit_string_variable' => true,
|
||||||
|
'fully_qualified_strict_types' => true,
|
||||||
|
'heredoc_to_nowdoc' => true,
|
||||||
|
'list_syntax' => ['syntax' => 'long'],
|
||||||
|
'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
|
||||||
|
'method_chaining_indentation' => true,
|
||||||
|
'multiline_comment_opening_closing' => true,
|
||||||
|
'multiline_whitespace_before_semicolons' => ['strategy' => 'new_line_for_chained_calls'],
|
||||||
|
'native_constant_invocation' => true,
|
||||||
|
'native_function_invocation' => ['include' => ['@internal']],
|
||||||
|
'no_alternative_syntax' => true,
|
||||||
|
'no_break_comment' => true,
|
||||||
|
'no_extra_blank_lines' => ['tokens' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block']],
|
||||||
|
'no_null_property_initialization' => true,
|
||||||
|
'no_php4_constructor' => true,
|
||||||
|
'no_superfluous_elseif' => true,
|
||||||
|
'no_unneeded_curly_braces' => true,
|
||||||
|
'no_unneeded_final_method' => true,
|
||||||
|
'no_unreachable_default_argument_value' => true,
|
||||||
|
'no_useless_else' => true,
|
||||||
|
'no_useless_return' => true,
|
||||||
|
'ordered_imports' => true,
|
||||||
|
'php_unit_method_casing' => true,
|
||||||
|
'php_unit_set_up_tear_down_visibility' => true,
|
||||||
|
'php_unit_strict' => true,
|
||||||
|
'php_unit_test_annotation' => true,
|
||||||
|
'php_unit_test_case_static_method_calls' => true,
|
||||||
|
'php_unit_test_class_requires_covers' => false,
|
||||||
|
'phpdoc_add_missing_param_annotation' => true,
|
||||||
|
'phpdoc_order' => true,
|
||||||
|
'phpdoc_order_by_value' => true,
|
||||||
|
'phpdoc_types_order' => true,
|
||||||
|
'random_api_migration' => true,
|
||||||
|
'semicolon_after_instruction' => true,
|
||||||
|
'simplified_null_return' => true,
|
||||||
|
'single_line_comment_style' => true,
|
||||||
|
'single_line_throw' => false,
|
||||||
|
'space_after_semicolon' => true,
|
||||||
|
'static_lambda' => true,
|
||||||
|
'strict_comparison' => true,
|
||||||
|
'string_line_ending' => true,
|
||||||
|
])
|
||||||
|
->setFinder(
|
||||||
|
PhpCsFixer\Finder::create()
|
||||||
|
->in(__DIR__ . '/src')
|
||||||
|
->in(__DIR__ . '/tests')
|
||||||
|
)
|
||||||
|
;
|
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ddeboer/imap",
|
"name": "ddeboer/imap",
|
||||||
"description": "Object-oriented IMAP for PHP",
|
"description": "Object-oriented IMAP for PHP",
|
||||||
|
"license": "MIT",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"email",
|
"email",
|
||||||
"mail",
|
"mail",
|
||||||
"imap"
|
"imap"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "David de Boer",
|
"name": "David de Boer",
|
||||||
@@ -22,18 +22,19 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.4 || ^8.0",
|
"php": "^8.0.1",
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"ext-imap": "*",
|
"ext-imap": "*",
|
||||||
"ext-mbstring": "*"
|
"ext-mbstring": "*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^2.18.6",
|
"friendsofphp/php-cs-fixer": "^v3.4.0",
|
||||||
"laminas/laminas-mail": "^2.14.0",
|
"laminas/laminas-mail": "^2.15.1",
|
||||||
"phpstan/phpstan": "^0.12.84",
|
"malukenho/mcbumpface": "^1.1.5",
|
||||||
"phpstan/phpstan-phpunit": "^0.12.18",
|
"phpstan/phpstan": "^1.3.3",
|
||||||
"phpstan/phpstan-strict-rules": "^0.12.9",
|
"phpstan/phpstan-phpunit": "^1.0.0",
|
||||||
"phpunit/phpunit": "^9.5.4"
|
"phpstan/phpstan-strict-rules": "^1.1.0",
|
||||||
|
"phpunit/phpunit": "^9.5.11"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -44,5 +45,10 @@
|
|||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Ddeboer\\Imap\\Tests\\": "tests/"
|
"Ddeboer\\Imap\\Tests\\": "tests/"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"allow-plugins": {
|
||||||
|
"malukenho/mcbumpface": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -117,6 +117,7 @@ final class Connection implements ConnectionInterface
|
|||||||
return new Mailbox($this->resource, $name, $this->mailboxNames[$name]);
|
return new Mailbox($this->resource, $name, $this->mailboxNames[$name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function count()
|
public function count()
|
||||||
{
|
{
|
||||||
$return = \imap_num_msg($this->resource->getStream());
|
$return = \imap_num_msg($this->resource->getStream());
|
||||||
|
@@ -6,6 +6,7 @@ namespace Ddeboer\Imap;
|
|||||||
|
|
||||||
use Ddeboer\Imap\Exception\InvalidResourceException;
|
use Ddeboer\Imap\Exception\InvalidResourceException;
|
||||||
use Ddeboer\Imap\Exception\ReopenMailboxException;
|
use Ddeboer\Imap\Exception\ReopenMailboxException;
|
||||||
|
use IMAP\Connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An imap resource stream.
|
* An imap resource stream.
|
||||||
@@ -22,7 +23,7 @@ final class ImapResource implements ImapResourceInterface
|
|||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param resource $resource
|
* @param Connection|resource $resource
|
||||||
*/
|
*/
|
||||||
public function __construct($resource, MailboxInterface $mailbox = null)
|
public function __construct($resource, MailboxInterface $mailbox = null)
|
||||||
{
|
{
|
||||||
@@ -32,7 +33,10 @@ final class ImapResource implements ImapResourceInterface
|
|||||||
|
|
||||||
public function getStream()
|
public function getStream()
|
||||||
{
|
{
|
||||||
if (false === \is_resource($this->resource) || 'imap' !== \get_resource_type($this->resource)) {
|
if (
|
||||||
|
!$this->resource instanceof Connection
|
||||||
|
&& (false === \is_resource($this->resource) || 'imap' !== \get_resource_type($this->resource))
|
||||||
|
) {
|
||||||
throw new InvalidResourceException('Supplied resource is not a valid imap resource');
|
throw new InvalidResourceException('Supplied resource is not a valid imap resource');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,8 +59,14 @@ final class ImapResource implements ImapResourceInterface
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\set_error_handler(static function (): bool {
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
\imap_reopen($this->resource, $this->mailbox->getFullEncodedName());
|
\imap_reopen($this->resource, $this->mailbox->getFullEncodedName());
|
||||||
|
|
||||||
|
\restore_error_handler();
|
||||||
|
|
||||||
if (self::isMailboxOpen($this->mailbox, $this->resource)) {
|
if (self::isMailboxOpen($this->mailbox, $this->resource)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -64,6 +64,7 @@ final class Mailbox implements MailboxInterface
|
|||||||
return $this->info->delimiter;
|
return $this->info->delimiter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function count()
|
public function count()
|
||||||
{
|
{
|
||||||
$return = \imap_num_msg($this->resource->getStream());
|
$return = \imap_num_msg($this->resource->getStream());
|
||||||
|
@@ -268,6 +268,7 @@ abstract class AbstractPart implements PartInterface
|
|||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function current()
|
final public function current()
|
||||||
{
|
{
|
||||||
$this->lazyParseStructure();
|
$this->lazyParseStructure();
|
||||||
@@ -275,11 +276,13 @@ abstract class AbstractPart implements PartInterface
|
|||||||
return $this->parts[$this->key];
|
return $this->parts[$this->key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function getChildren()
|
final public function getChildren()
|
||||||
{
|
{
|
||||||
return $this->current();
|
return $this->current();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function hasChildren()
|
final public function hasChildren()
|
||||||
{
|
{
|
||||||
$this->lazyParseStructure();
|
$this->lazyParseStructure();
|
||||||
@@ -290,21 +293,25 @@ abstract class AbstractPart implements PartInterface
|
|||||||
/**
|
/**
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function key()
|
final public function key()
|
||||||
{
|
{
|
||||||
return $this->key;
|
return $this->key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function next()
|
final public function next()
|
||||||
{
|
{
|
||||||
++$this->key;
|
++$this->key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function rewind()
|
final public function rewind()
|
||||||
{
|
{
|
||||||
$this->key = 0;
|
$this->key = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
final public function valid()
|
final public function valid()
|
||||||
{
|
{
|
||||||
$this->lazyParseStructure();
|
$this->lazyParseStructure();
|
||||||
|
@@ -19,6 +19,7 @@ final class EmailAddress
|
|||||||
$this->mailbox = $mailbox;
|
$this->mailbox = $mailbox;
|
||||||
$this->hostname = $hostname;
|
$this->hostname = $hostname;
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
|
$this->address = null;
|
||||||
|
|
||||||
if (null !== $hostname) {
|
if (null !== $hostname) {
|
||||||
$this->address = $mailbox . '@' . $hostname;
|
$this->address = $mailbox . '@' . $hostname;
|
||||||
|
@@ -9,7 +9,7 @@ use Ddeboer\Imap\Message\PartInterface;
|
|||||||
/**
|
/**
|
||||||
* @extends \Iterator<MessageInterface>
|
* @extends \Iterator<MessageInterface>
|
||||||
*/
|
*/
|
||||||
interface MessageIteratorInterface extends \Iterator
|
interface MessageIteratorInterface extends \Iterator, \Countable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Get current message.
|
* Get current message.
|
||||||
|
@@ -13,7 +13,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest]
|
os: [ubuntu-latest, windows-latest]
|
||||||
php: [8.0, 7.4, 7.3]
|
php: [8.1, 8.0, 7.4, 7.3]
|
||||||
|
|
||||||
name: ${{ matrix.os }} - P${{ matrix.php }}
|
name: ${{ matrix.os }} - P${{ matrix.php }}
|
||||||
|
|
||||||
@@ -39,3 +39,40 @@ jobs:
|
|||||||
|
|
||||||
- name: Execute tests
|
- name: Execute tests
|
||||||
run: vendor/bin/phpunit
|
run: vendor/bin/phpunit
|
||||||
|
|
||||||
|
run-analysis:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
name: Static code analysis (PHP ${{ matrix.php }})
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
php: [8.0]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.composer/cache/files
|
||||||
|
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
extensions: ldap, json
|
||||||
|
coverage: none
|
||||||
|
tools: psalm
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer update --prefer-dist --no-interaction
|
||||||
|
|
||||||
|
- name: Run Psalm
|
||||||
|
run: psalm
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
vendor
|
vendor
|
||||||
composer.lock
|
composer.lock
|
||||||
|
psalm.phar
|
||||||
.php_cs.cache
|
.php_cs.cache
|
||||||
.phpunit.result.cache
|
.phpunit.result.cache
|
||||||
.php-cs-fixer.cache
|
.php-cs-fixer.cache
|
@@ -1,4 +1,8 @@
|
|||||||
preset: laravel
|
preset: laravel
|
||||||
enabled:
|
enabled:
|
||||||
- phpdoc_align
|
- phpdoc_align
|
||||||
|
- phpdoc_separation
|
||||||
- unalign_double_arrow
|
- unalign_double_arrow
|
||||||
|
disabled:
|
||||||
|
- laravel_phpdoc_alignment
|
||||||
|
- laravel_phpdoc_separation
|
||||||
|
@@ -32,19 +32,21 @@
|
|||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"ext-ldap": "*",
|
"ext-ldap": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"psr/log": "^1.0",
|
"psr/log": "*",
|
||||||
"psr/simple-cache": "^1.0",
|
"psr/simple-cache": "^1.0|^2.0",
|
||||||
"nesbot/carbon": "^1.0|^2.0",
|
"nesbot/carbon": "^1.0|^2.0",
|
||||||
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0",
|
"tightenco/collect": "^5.6|^6.0|^7.0|^8.0",
|
||||||
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0"
|
"illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^8.0",
|
"phpunit/phpunit": "^9.0",
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"spatie/ray": "^1.24"
|
"spatie/ray": "^1.24"
|
||||||
},
|
},
|
||||||
"archive": {
|
"archive": {
|
||||||
"exclude": ["/tests"]
|
"exclude": [
|
||||||
|
"/tests"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@@ -92,3 +92,13 @@ We've all been there -- accidentally deleting a user or group in Active Director
|
|||||||
<p align="center">If you discover a security vulnerability within LdapRecord, please send an e-mail to Steve Bauman via <a href="mailto:steven_bauman@outlook.com">steven_bauman@outlook.com</a>.</p>
|
<p align="center">If you discover a security vulnerability within LdapRecord, please send an e-mail to Steve Bauman via <a href="mailto:steven_bauman@outlook.com">steven_bauman@outlook.com</a>.</p>
|
||||||
|
|
||||||
<p align="center">All security vulnerabilities will be promptly addressed.</p>
|
<p align="center">All security vulnerabilities will be promptly addressed.</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<h3 align="center">Credits</h3>
|
||||||
|
|
||||||
|
<p align="center">This package is directly inspired from <a href="https://laravel.com/docs/eloquent">Laravel's Eloquent</a>, and most features are direct ports to an LDAP equivalent.</p>
|
||||||
|
|
||||||
|
<p align="center">I am forever grateful for the work <a href="https://github.com/taylorotwell">Taylor Otwell</a> has produced.</p>
|
||||||
|
|
||||||
|
<p align="center">If you can, support his work by purchasing a <a href="https://github.com/sponsors/taylorotwell">sponsorship</a>, or one of his many Laravel based services.</p>
|
||||||
|
@@ -54,10 +54,10 @@ class Guard
|
|||||||
* @param string $password
|
* @param string $password
|
||||||
* @param bool $stayBound
|
* @param bool $stayBound
|
||||||
*
|
*
|
||||||
|
* @return bool
|
||||||
|
*
|
||||||
* @throws UsernameRequiredException
|
* @throws UsernameRequiredException
|
||||||
* @throws PasswordRequiredException
|
* @throws PasswordRequiredException
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
*/
|
||||||
public function attempt($username, $password, $stayBound = false)
|
public function attempt($username, $password, $stayBound = false)
|
||||||
{
|
{
|
||||||
|
@@ -124,9 +124,9 @@ class DomainConfiguration
|
|||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $key
|
||||||
*
|
*
|
||||||
* @throws ConfigurationException When the option specified does not exist.
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws ConfigurationException When the option specified does not exist.
|
||||||
*/
|
*/
|
||||||
public function get($key)
|
public function get($key)
|
||||||
{
|
{
|
||||||
@@ -155,9 +155,9 @@ class DomainConfiguration
|
|||||||
* @param string $key
|
* @param string $key
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws ConfigurationException When an option value given is an invalid type.
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws ConfigurationException When an option value given is an invalid type.
|
||||||
*/
|
*/
|
||||||
protected function validate($key, $value)
|
protected function validate($key, $value)
|
||||||
{
|
{
|
||||||
|
@@ -49,9 +49,9 @@ abstract class Validator
|
|||||||
/**
|
/**
|
||||||
* Validate the configuration value.
|
* Validate the configuration value.
|
||||||
*
|
*
|
||||||
* @throws ConfigurationException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws ConfigurationException
|
||||||
*/
|
*/
|
||||||
public function validate()
|
public function validate()
|
||||||
{
|
{
|
||||||
@@ -65,9 +65,9 @@ abstract class Validator
|
|||||||
/**
|
/**
|
||||||
* Throw a configuration exception.
|
* Throw a configuration exception.
|
||||||
*
|
*
|
||||||
* @throws ConfigurationException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws ConfigurationException
|
||||||
*/
|
*/
|
||||||
protected function fail()
|
protected function fail()
|
||||||
{
|
{
|
||||||
|
@@ -111,9 +111,9 @@ class Connection
|
|||||||
*
|
*
|
||||||
* @param array $config
|
* @param array $config
|
||||||
*
|
*
|
||||||
* @throws Configuration\ConfigurationException
|
|
||||||
*
|
|
||||||
* @return $this
|
* @return $this
|
||||||
|
*
|
||||||
|
* @throws Configuration\ConfigurationException
|
||||||
*/
|
*/
|
||||||
public function setConfiguration($config = [])
|
public function setConfiguration($config = [])
|
||||||
{
|
{
|
||||||
@@ -241,10 +241,10 @@ class Connection
|
|||||||
* @param string|null $username
|
* @param string|null $username
|
||||||
* @param string|null $password
|
* @param string|null $password
|
||||||
*
|
*
|
||||||
|
* @return Connection
|
||||||
|
*
|
||||||
* @throws Auth\BindException
|
* @throws Auth\BindException
|
||||||
* @throws LdapRecordException
|
* @throws LdapRecordException
|
||||||
*
|
|
||||||
* @return Connection
|
|
||||||
*/
|
*/
|
||||||
public function connect($username = null, $password = null)
|
public function connect($username = null, $password = null)
|
||||||
{
|
{
|
||||||
@@ -274,10 +274,10 @@ class Connection
|
|||||||
/**
|
/**
|
||||||
* Reconnect to the LDAP server.
|
* Reconnect to the LDAP server.
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws Auth\BindException
|
* @throws Auth\BindException
|
||||||
* @throws ConnectionException
|
* @throws ConnectionException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function reconnect()
|
public function reconnect()
|
||||||
{
|
{
|
||||||
@@ -385,9 +385,9 @@ class Connection
|
|||||||
*
|
*
|
||||||
* @param Closure $operation
|
* @param Closure $operation
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function runOperationCallback(Closure $operation)
|
protected function runOperationCallback(Closure $operation)
|
||||||
{
|
{
|
||||||
@@ -442,9 +442,9 @@ class Connection
|
|||||||
* @param LdapRecordException $e
|
* @param LdapRecordException $e
|
||||||
* @param Closure $operation
|
* @param Closure $operation
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function tryAgainIfCausedByLostConnection(LdapRecordException $e, Closure $operation)
|
protected function tryAgainIfCausedByLostConnection(LdapRecordException $e, Closure $operation)
|
||||||
{
|
{
|
||||||
@@ -463,9 +463,9 @@ class Connection
|
|||||||
*
|
*
|
||||||
* @param Closure $operation
|
* @param Closure $operation
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function retry(Closure $operation)
|
protected function retry(Closure $operation)
|
||||||
{
|
{
|
||||||
@@ -486,9 +486,9 @@ class Connection
|
|||||||
* @param LdapRecordException $e
|
* @param LdapRecordException $e
|
||||||
* @param Closure $operation
|
* @param Closure $operation
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function retryOnNextHost(LdapRecordException $e, Closure $operation)
|
protected function retryOnNextHost(LdapRecordException $e, Closure $operation)
|
||||||
{
|
{
|
||||||
|
@@ -149,9 +149,9 @@ class ConnectionManager
|
|||||||
*
|
*
|
||||||
* @param string|null $name
|
* @param string|null $name
|
||||||
*
|
*
|
||||||
* @throws ContainerException If the given connection does not exist.
|
|
||||||
*
|
|
||||||
* @return Connection
|
* @return Connection
|
||||||
|
*
|
||||||
|
* @throws ContainerException If the given connection does not exist.
|
||||||
*/
|
*/
|
||||||
public function get($name = null)
|
public function get($name = null)
|
||||||
{
|
{
|
||||||
|
@@ -39,11 +39,14 @@ class Logger
|
|||||||
{
|
{
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case $event instanceof AuthEvent:
|
case $event instanceof AuthEvent:
|
||||||
return $this->auth($event);
|
$this->auth($event);
|
||||||
|
break;
|
||||||
case $event instanceof ModelEvent:
|
case $event instanceof ModelEvent:
|
||||||
return $this->model($event);
|
$this->model($event);
|
||||||
|
break;
|
||||||
case $event instanceof QueryEvent:
|
case $event instanceof QueryEvent:
|
||||||
return $this->query($event);
|
$this->query($event);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
113
data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/NullDispatcher.php
vendored
Normal file
113
data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/NullDispatcher.php
vendored
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace LdapRecord\Events;
|
||||||
|
|
||||||
|
class NullDispatcher implements DispatcherInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The underlying dispatcher instance.
|
||||||
|
*
|
||||||
|
* @var DispatcherInterface
|
||||||
|
*/
|
||||||
|
protected $dispatcher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param DispatcherInterface $dispatcher
|
||||||
|
*/
|
||||||
|
public function __construct(DispatcherInterface $dispatcher)
|
||||||
|
{
|
||||||
|
$this->dispatcher = $dispatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register an event listener with the dispatcher.
|
||||||
|
*
|
||||||
|
* @param string|array $events
|
||||||
|
* @param mixed $listener
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function listen($events, $listener)
|
||||||
|
{
|
||||||
|
$this->dispatcher->listen($events, $listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a given event has listeners.
|
||||||
|
*
|
||||||
|
* @param string $eventName
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function hasListeners($eventName)
|
||||||
|
{
|
||||||
|
return $this->dispatcher->hasListeners($eventName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire an event until the first non-null response is returned.
|
||||||
|
*
|
||||||
|
* @param string|object $event
|
||||||
|
* @param mixed $payload
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function until($event, $payload = [])
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire an event and call the listeners.
|
||||||
|
*
|
||||||
|
* @param string|object $event
|
||||||
|
* @param mixed $payload
|
||||||
|
* @param bool $halt
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function fire($event, $payload = [], $halt = false)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire an event and call the listeners.
|
||||||
|
*
|
||||||
|
* @param string|object $event
|
||||||
|
* @param mixed $payload
|
||||||
|
* @param bool $halt
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function dispatch($event, $payload = [], $halt = false)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all of the listeners for a given event name.
|
||||||
|
*
|
||||||
|
* @param string $eventName
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getListeners($eventName)
|
||||||
|
{
|
||||||
|
return $this->dispatcher->getListeners($eventName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a set of listeners from the dispatcher.
|
||||||
|
*
|
||||||
|
* @param string $event
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function forget($event)
|
||||||
|
{
|
||||||
|
$this->dispatcher->forget($event);
|
||||||
|
}
|
||||||
|
}
|
@@ -150,19 +150,21 @@ trait HandlesConnection
|
|||||||
*
|
*
|
||||||
* @param Closure $operation
|
* @param Closure $operation
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function executeFailableOperation(Closure $operation)
|
protected function executeFailableOperation(Closure $operation)
|
||||||
{
|
{
|
||||||
// If some older versions of PHP, errors are reported instead of throwing
|
// If some older versions of PHP, errors are reported instead of throwing
|
||||||
// exceptions, which could be a signifcant detriment to our application.
|
// exceptions, which could be a significant detriment to our application.
|
||||||
// Here, we will enforce these operations to throw exceptions instead.
|
// Here, we will enforce these operations to throw exceptions instead.
|
||||||
set_error_handler(function ($severity, $message, $file, $line) {
|
set_error_handler(function (int $severity, string $message, string $file, int $line): bool {
|
||||||
if (! $this->shouldBypassError($message)) {
|
if (! $this->shouldBypassError($message)) {
|
||||||
throw new ErrorException($message, $severity, $severity, $file, $line);
|
throw new ErrorException($message, $severity, $severity, $file, $line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
namespace LdapRecord;
|
namespace LdapRecord;
|
||||||
|
|
||||||
|
use LDAP\Connection as RawLdapConnection;
|
||||||
|
|
||||||
|
/** @psalm-suppress UndefinedClass */
|
||||||
class Ldap implements LdapInterface
|
class Ldap implements LdapInterface
|
||||||
{
|
{
|
||||||
use HandlesConnection, DetectsErrors;
|
use HandlesConnection, DetectsErrors;
|
||||||
@@ -104,7 +107,7 @@ class Ldap implements LdapInterface
|
|||||||
public function getLastError()
|
public function getLastError()
|
||||||
{
|
{
|
||||||
if (! $this->connection) {
|
if (! $this->connection) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ldap_error($this->connection);
|
return ldap_error($this->connection);
|
||||||
@@ -116,7 +119,7 @@ class Ldap implements LdapInterface
|
|||||||
public function getDetailedError()
|
public function getDetailedError()
|
||||||
{
|
{
|
||||||
if (! $number = $this->errNo()) {
|
if (! $number = $this->errNo()) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->getOption(LDAP_OPT_DIAGNOSTIC_MESSAGE, $message);
|
$this->getOption(LDAP_OPT_DIAGNOSTIC_MESSAGE, $message);
|
||||||
@@ -202,7 +205,9 @@ class Ldap implements LdapInterface
|
|||||||
*/
|
*/
|
||||||
public function close()
|
public function close()
|
||||||
{
|
{
|
||||||
$result = is_resource($this->connection) ? @ldap_close($this->connection) : false;
|
$result = (is_resource($this->connection) || $this->connection instanceof RawLdapConnection)
|
||||||
|
? @ldap_close($this->connection)
|
||||||
|
: false;
|
||||||
|
|
||||||
$this->connection = null;
|
$this->connection = null;
|
||||||
$this->bound = false;
|
$this->bound = false;
|
||||||
@@ -214,7 +219,7 @@ class Ldap implements LdapInterface
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = [])
|
public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = [])
|
||||||
{
|
{
|
||||||
return $this->executeFailableOperation(function () use (
|
return $this->executeFailableOperation(function () use (
|
||||||
$dn,
|
$dn,
|
||||||
@@ -235,7 +240,7 @@ class Ldap implements LdapInterface
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function listing($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = [])
|
public function listing($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = [])
|
||||||
{
|
{
|
||||||
return $this->executeFailableOperation(function () use (
|
return $this->executeFailableOperation(function () use (
|
||||||
$dn,
|
$dn,
|
||||||
@@ -256,7 +261,7 @@ class Ldap implements LdapInterface
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = [])
|
public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = [])
|
||||||
{
|
{
|
||||||
return $this->executeFailableOperation(function () use (
|
return $this->executeFailableOperation(function () use (
|
||||||
$dn,
|
$dn,
|
||||||
|
@@ -156,7 +156,7 @@ interface LdapInterface
|
|||||||
/**
|
/**
|
||||||
* Return detailed information about an error.
|
* Return detailed information about an error.
|
||||||
*
|
*
|
||||||
* Returns false when there was a successful last request.
|
* Returns null when there was a successful last request.
|
||||||
*
|
*
|
||||||
* Returns DetailedError when there was an error.
|
* Returns DetailedError when there was an error.
|
||||||
*
|
*
|
||||||
@@ -202,9 +202,9 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @see http://php.net/manual/en/function.ldap-start-tls.php
|
* @see http://php.net/manual/en/function.ldap-start-tls.php
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function startTLS();
|
public function startTLS();
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @return resource
|
* @return resource
|
||||||
*/
|
*/
|
||||||
public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = []);
|
public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = []);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a single level search on the current connection.
|
* Performs a single level search on the current connection.
|
||||||
@@ -265,7 +265,7 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @return resource
|
* @return resource
|
||||||
*/
|
*/
|
||||||
public function listing($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = []);
|
public function listing($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = []);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads an entry on the current connection.
|
* Reads an entry on the current connection.
|
||||||
@@ -283,7 +283,7 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @return resource
|
* @return resource
|
||||||
*/
|
*/
|
||||||
public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = null, $serverControls = []);
|
public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0, $deref = LDAP_DEREF_NEVER, $serverControls = []);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract information from an LDAP result.
|
* Extract information from an LDAP result.
|
||||||
@@ -292,10 +292,10 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @param resource $result
|
* @param resource $result
|
||||||
* @param int $errorCode
|
* @param int $errorCode
|
||||||
* @param string $dn
|
* @param ?string $dn
|
||||||
* @param string $errorMessage
|
* @param ?string $errorMessage
|
||||||
* @param array $referrals
|
* @param ?array $referrals
|
||||||
* @param array $serverControls
|
* @param ?array $serverControls
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
@@ -310,9 +310,9 @@ interface LdapInterface
|
|||||||
* @param string $username
|
* @param string $username
|
||||||
* @param string $password
|
* @param string $password
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function bind($username, $password);
|
public function bind($username, $password);
|
||||||
|
|
||||||
@@ -324,9 +324,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $entry
|
* @param array $entry
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function add($dn, array $entry);
|
public function add($dn, array $entry);
|
||||||
|
|
||||||
@@ -337,9 +337,9 @@ interface LdapInterface
|
|||||||
*
|
*
|
||||||
* @param string $dn
|
* @param string $dn
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function delete($dn);
|
public function delete($dn);
|
||||||
|
|
||||||
@@ -353,9 +353,9 @@ interface LdapInterface
|
|||||||
* @param string $newParent
|
* @param string $newParent
|
||||||
* @param bool $deleteOldRdn
|
* @param bool $deleteOldRdn
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function rename($dn, $newRdn, $newParent, $deleteOldRdn = false);
|
public function rename($dn, $newRdn, $newParent, $deleteOldRdn = false);
|
||||||
|
|
||||||
@@ -367,9 +367,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $entry
|
* @param array $entry
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function modify($dn, array $entry);
|
public function modify($dn, array $entry);
|
||||||
|
|
||||||
@@ -381,9 +381,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $values
|
* @param array $values
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function modifyBatch($dn, array $values);
|
public function modifyBatch($dn, array $values);
|
||||||
|
|
||||||
@@ -395,9 +395,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $entry
|
* @param array $entry
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function modAdd($dn, array $entry);
|
public function modAdd($dn, array $entry);
|
||||||
|
|
||||||
@@ -409,9 +409,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $entry
|
* @param array $entry
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function modReplace($dn, array $entry);
|
public function modReplace($dn, array $entry);
|
||||||
|
|
||||||
@@ -423,9 +423,9 @@ interface LdapInterface
|
|||||||
* @param string $dn
|
* @param string $dn
|
||||||
* @param array $entry
|
* @param array $entry
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function modDelete($dn, array $entry);
|
public function modDelete($dn, array $entry);
|
||||||
|
|
||||||
|
@@ -78,7 +78,7 @@ class Entry extends BaseEntry implements ActiveDirectory
|
|||||||
*/
|
*/
|
||||||
public function isDeleted()
|
public function isDeleted()
|
||||||
{
|
{
|
||||||
return strtoupper($this->getFirstAttribute('isDeleted')) === 'TRUE';
|
return strtoupper((string) $this->getFirstAttribute('isDeleted')) === 'TRUE';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,9 +86,9 @@ class Entry extends BaseEntry implements ActiveDirectory
|
|||||||
*
|
*
|
||||||
* @param string|null $newParentDn
|
* @param string|null $newParentDn
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function restore($newParentDn = null)
|
public function restore($newParentDn = null)
|
||||||
{
|
{
|
||||||
@@ -109,10 +109,9 @@ class Entry extends BaseEntry implements ActiveDirectory
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$this->save([
|
$this->setRawAttribute('distinguishedname', $newDn);
|
||||||
'isDeleted' => null,
|
|
||||||
'distinguishedName' => $newDn,
|
$this->save(['isDeleted' => null]);
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,9 +119,9 @@ class Entry extends BaseEntry implements ActiveDirectory
|
|||||||
*
|
*
|
||||||
* @param string|null $connection
|
* @param string|null $connection
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\Models\ModelNotFoundException
|
|
||||||
*
|
|
||||||
* @return static
|
* @return static
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\Models\ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
public static function getRootDse($connection = null)
|
public static function getRootDse($connection = null)
|
||||||
{
|
{
|
||||||
|
@@ -63,7 +63,7 @@ class Group extends Entry
|
|||||||
*/
|
*/
|
||||||
public function getRidAttribute()
|
public function getRidAttribute()
|
||||||
{
|
{
|
||||||
$objectSidComponents = explode('-', $this->getConvertedSid());
|
$objectSidComponents = explode('-', (string) $this->getConvertedSid());
|
||||||
|
|
||||||
return [end($objectSidComponents)];
|
return [end($objectSidComponents)];
|
||||||
}
|
}
|
||||||
|
@@ -15,9 +15,9 @@ class InConfigurationContext implements Scope
|
|||||||
* @param Builder $query
|
* @param Builder $query
|
||||||
* @param Model $model
|
* @param Model $model
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\Models\ModelNotFoundException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\Models\ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
public function apply(Builder $query, Model $model)
|
public function apply(Builder $query, Model $model)
|
||||||
{
|
{
|
||||||
@@ -29,9 +29,9 @@ class InConfigurationContext implements Scope
|
|||||||
*
|
*
|
||||||
* @param Model $model
|
* @param Model $model
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\Models\ModelNotFoundException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\Models\ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
protected function getConfigurationNamingContext(Model $model)
|
protected function getConfigurationNamingContext(Model $model)
|
||||||
{
|
{
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace LdapRecord\Models\ActiveDirectory;
|
namespace LdapRecord\Models\ActiveDirectory;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Contracts\Auth\Authenticatable;
|
use Illuminate\Contracts\Auth\Authenticatable;
|
||||||
use LdapRecord\Models\ActiveDirectory\Concerns\HasPrimaryGroup;
|
use LdapRecord\Models\ActiveDirectory\Concerns\HasPrimaryGroup;
|
||||||
use LdapRecord\Models\ActiveDirectory\Scopes\RejectComputerObjectClass;
|
use LdapRecord\Models\ActiveDirectory\Scopes\RejectComputerObjectClass;
|
||||||
@@ -117,4 +118,42 @@ class User extends Entry implements Authenticatable
|
|||||||
{
|
{
|
||||||
return $query->whereHas('msExchMailboxGuid');
|
return $query->whereHas('msExchMailboxGuid');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scopes the query to users having a lockout value set.
|
||||||
|
*
|
||||||
|
* @param Builder $query
|
||||||
|
*
|
||||||
|
* @return Builder
|
||||||
|
*/
|
||||||
|
public function scopeWhereHasLockout(Builder $query)
|
||||||
|
{
|
||||||
|
return $query->where('lockoutTime', '>=', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user is locked out using the domains LockoutDuration group policy value.
|
||||||
|
*
|
||||||
|
* @see https://ldapwiki.com/wiki/Active%20Directory%20Account%20Lockout
|
||||||
|
* @see https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/account-lockout-duration
|
||||||
|
*
|
||||||
|
* @param string|int $localTimezone
|
||||||
|
* @param int|null $durationInMinutes
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isLockedOut($localTimezone, $durationInMinutes = null)
|
||||||
|
{
|
||||||
|
$time = $this->getFirstAttribute('lockouttime');
|
||||||
|
|
||||||
|
if (! $time instanceof Carbon) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_int($localTimezone)
|
||||||
|
? $time->addMinutes($localTimezone)
|
||||||
|
: $time->setTimezone($localTimezone)->addMinutes($durationInMinutes ?: 0);
|
||||||
|
|
||||||
|
return ! $time->isPast();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -53,14 +53,14 @@ class AccountControl
|
|||||||
/**
|
/**
|
||||||
* The account control flag values.
|
* The account control flag values.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array<int, int>
|
||||||
*/
|
*/
|
||||||
protected $values = [];
|
protected $values = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param int $flag
|
* @param ?int $flag
|
||||||
*/
|
*/
|
||||||
public function __construct($flag = null)
|
public function __construct($flag = null)
|
||||||
{
|
{
|
||||||
@@ -431,7 +431,7 @@ class AccountControl
|
|||||||
/**
|
/**
|
||||||
* Get the account control flag values.
|
* Get the account control flag values.
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array<int, int>
|
||||||
*/
|
*/
|
||||||
public function getValues()
|
public function getValues()
|
||||||
{
|
{
|
||||||
@@ -441,7 +441,7 @@ class AccountControl
|
|||||||
/**
|
/**
|
||||||
* Set the account control values.
|
* Set the account control values.
|
||||||
*
|
*
|
||||||
* @param array $flags
|
* @param array<int, int> $flags
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
@@ -12,7 +12,7 @@ class DistinguishedName
|
|||||||
/**
|
/**
|
||||||
* The underlying raw value.
|
* The underlying raw value.
|
||||||
*
|
*
|
||||||
* @var string|null
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $value;
|
protected $value;
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ class DistinguishedName
|
|||||||
*/
|
*/
|
||||||
public function __construct($value = null)
|
public function __construct($value = null)
|
||||||
{
|
{
|
||||||
$this->value = trim($value);
|
$this->value = trim((string) $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,6 +72,18 @@ class DistinguishedName
|
|||||||
return new static($value);
|
return new static($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the given value is a valid distinguished name.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isValid($value)
|
||||||
|
{
|
||||||
|
return ! static::make($value)->isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Explode a distinguished name into relative distinguished names.
|
* Explode a distinguished name into relative distinguished names.
|
||||||
*
|
*
|
||||||
@@ -81,19 +93,19 @@ class DistinguishedName
|
|||||||
*/
|
*/
|
||||||
public static function explode($dn)
|
public static function explode($dn)
|
||||||
{
|
{
|
||||||
$dn = ldap_explode_dn($dn, $withoutAttributes = false);
|
$components = ldap_explode_dn($dn, (int) $withoutAttributes = false);
|
||||||
|
|
||||||
if (! is_array($dn)) {
|
if (! is_array($components)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! array_key_exists('count', $dn)) {
|
if (! array_key_exists('count', $components)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($dn['count']);
|
unset($components['count']);
|
||||||
|
|
||||||
return $dn;
|
return $components;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -310,6 +322,18 @@ class DistinguishedName
|
|||||||
return implode(',', $components) ?: null;
|
return implode(',', $components) ?: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the distinguished name is empty.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isEmpty()
|
||||||
|
{
|
||||||
|
return empty(
|
||||||
|
array_filter($this->values())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the current distinguished name is a parent of the given child.
|
* Determine if the current distinguished name is a parent of the given child.
|
||||||
*
|
*
|
||||||
|
@@ -236,7 +236,7 @@ class DistinguishedNameBuilder
|
|||||||
/**
|
/**
|
||||||
* Build the distinguished name from the components.
|
* Build the distinguished name from the components.
|
||||||
*
|
*
|
||||||
* @return $this
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function build()
|
protected function build()
|
||||||
{
|
{
|
||||||
|
@@ -34,7 +34,7 @@ class EscapedValue
|
|||||||
*/
|
*/
|
||||||
public function __construct($value, $ignore = '', $flags = 0)
|
public function __construct($value, $ignore = '', $flags = 0)
|
||||||
{
|
{
|
||||||
$this->value = $value;
|
$this->value = (string) $value;
|
||||||
$this->ignore = $ignore;
|
$this->ignore = $ignore;
|
||||||
$this->flags = $flags;
|
$this->flags = $flags;
|
||||||
}
|
}
|
||||||
@@ -59,6 +59,16 @@ class EscapedValue
|
|||||||
return ldap_escape($this->value, $this->ignore, $this->flags);
|
return ldap_escape($this->value, $this->ignore, $this->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the raw (unescaped) value.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function raw()
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the characters to exclude from being escaped.
|
* Set the characters to exclude from being escaped.
|
||||||
*
|
*
|
||||||
|
@@ -244,9 +244,9 @@ class Password
|
|||||||
*
|
*
|
||||||
* @param int $type
|
* @param int $type
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*
|
|
||||||
* @return array
|
* @return array
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
protected static function makeCryptPrefixAndLength($type)
|
protected static function makeCryptPrefixAndLength($type)
|
||||||
{
|
{
|
||||||
@@ -297,9 +297,9 @@ class Password
|
|||||||
/**
|
/**
|
||||||
* Attempt to retrieve a salt from the encrypted password.
|
* Attempt to retrieve a salt from the encrypted password.
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public static function getSalt($encryptedPassword)
|
public static function getSalt($encryptedPassword)
|
||||||
{
|
{
|
||||||
@@ -321,9 +321,9 @@ class Password
|
|||||||
*
|
*
|
||||||
* @param string $method
|
* @param string $method
|
||||||
*
|
*
|
||||||
* @throws \ReflectionException
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws \ReflectionException
|
||||||
*/
|
*/
|
||||||
public static function hashMethodRequiresSalt($method): bool
|
public static function hashMethodRequiresSalt($method): bool
|
||||||
{
|
{
|
||||||
|
@@ -61,9 +61,9 @@ class Timestamp
|
|||||||
*
|
*
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return float|string
|
* @return float|string
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function fromDateTime($value)
|
public function fromDateTime($value)
|
||||||
{
|
{
|
||||||
@@ -121,9 +121,9 @@ class Timestamp
|
|||||||
*
|
*
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return Carbon|false
|
* @return Carbon|false
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function toDateTime($value)
|
public function toDateTime($value)
|
||||||
{
|
{
|
||||||
@@ -155,7 +155,7 @@ class Timestamp
|
|||||||
*
|
*
|
||||||
* @param string $value
|
* @param string $value
|
||||||
*
|
*
|
||||||
* @return DateTime|bool
|
* @return DateTime|false
|
||||||
*/
|
*/
|
||||||
protected function convertLdapTimeToDateTime($value)
|
protected function convertLdapTimeToDateTime($value)
|
||||||
{
|
{
|
||||||
@@ -184,7 +184,7 @@ class Timestamp
|
|||||||
*
|
*
|
||||||
* @param string $value
|
* @param string $value
|
||||||
*
|
*
|
||||||
* @return DateTime|bool
|
* @return DateTime|false
|
||||||
*/
|
*/
|
||||||
protected function convertWindowsTimeToDateTime($value)
|
protected function convertWindowsTimeToDateTime($value)
|
||||||
{
|
{
|
||||||
@@ -213,9 +213,9 @@ class Timestamp
|
|||||||
*
|
*
|
||||||
* @param int $value
|
* @param int $value
|
||||||
*
|
*
|
||||||
* @throws \Exception
|
* @return DateTime|false
|
||||||
*
|
*
|
||||||
* @return DateTime|bool
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
protected function convertWindowsIntegerTimeToDateTime($value)
|
protected function convertWindowsIntegerTimeToDateTime($value)
|
||||||
{
|
{
|
||||||
|
@@ -31,6 +31,7 @@ trait CanAuthenticate
|
|||||||
*/
|
*/
|
||||||
public function getAuthPassword()
|
public function getAuthPassword()
|
||||||
{
|
{
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,6 +41,7 @@ trait CanAuthenticate
|
|||||||
*/
|
*/
|
||||||
public function getRememberToken()
|
public function getRememberToken()
|
||||||
{
|
{
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,5 +62,6 @@ trait CanAuthenticate
|
|||||||
*/
|
*/
|
||||||
public function getRememberTokenName()
|
public function getRememberTokenName()
|
||||||
{
|
{
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -238,26 +238,28 @@ trait HasAttributes
|
|||||||
* Returns the models attribute by its key.
|
* Returns the models attribute by its key.
|
||||||
*
|
*
|
||||||
* @param int|string $key
|
* @param int|string $key
|
||||||
|
* @param mixed $default
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getAttribute($key)
|
public function getAttribute($key, $default = null)
|
||||||
{
|
{
|
||||||
if (! $key) {
|
if (! $key) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getAttributeValue($key);
|
return $this->getAttributeValue($key, $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an attributes value.
|
* Get an attributes value.
|
||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $key
|
||||||
|
* @param mixed $default
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getAttributeValue($key)
|
public function getAttributeValue($key, $default = null)
|
||||||
{
|
{
|
||||||
$key = $this->normalizeAttributeKey($key);
|
$key = $this->normalizeAttributeKey($key);
|
||||||
$value = $this->getAttributeFromArray($key);
|
$value = $this->getAttributeFromArray($key);
|
||||||
@@ -274,7 +276,7 @@ trait HasAttributes
|
|||||||
return $this->castAttribute($key, $value);
|
return $this->castAttribute($key, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return is_null($value) ? $default : $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -311,9 +313,9 @@ trait HasAttributes
|
|||||||
* @param string $type
|
* @param string $type
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return float|string
|
* @return float|string
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function fromDateTime($type, $value)
|
public function fromDateTime($type, $value)
|
||||||
{
|
{
|
||||||
@@ -326,9 +328,9 @@ trait HasAttributes
|
|||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
* @param string $type
|
* @param string $type
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return Carbon|false
|
* @return Carbon|false
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function asDateTime($value, $type)
|
public function asDateTime($value, $type)
|
||||||
{
|
{
|
||||||
@@ -686,13 +688,14 @@ trait HasAttributes
|
|||||||
* Returns the first attribute by the specified key.
|
* Returns the first attribute by the specified key.
|
||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $key
|
||||||
|
* @param mixed $default
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getFirstAttribute($key)
|
public function getFirstAttribute($key, $default = null)
|
||||||
{
|
{
|
||||||
return Arr::first(
|
return Arr::first(
|
||||||
Arr::wrap($this->getAttribute($key))
|
Arr::wrap($this->getAttribute($key, $default)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -707,10 +710,10 @@ trait HasAttributes
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set an attribute value by the specified key and sub-key.
|
* Set an attribute value by the specified key.
|
||||||
*
|
*
|
||||||
* @param mixed $key
|
* @param string $key
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @return $this
|
* @return $this
|
||||||
*/
|
*/
|
||||||
@@ -737,6 +740,23 @@ trait HasAttributes
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an attribute on the model. No checking is done.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $value
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setRawAttribute($key, $value)
|
||||||
|
{
|
||||||
|
$key = $this->normalizeAttributeKey($key);
|
||||||
|
|
||||||
|
$this->attributes[$key] = Arr::wrap($value);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the models first attribute value.
|
* Set the models first attribute value.
|
||||||
*
|
*
|
||||||
|
@@ -3,10 +3,39 @@
|
|||||||
namespace LdapRecord\Models\Concerns;
|
namespace LdapRecord\Models\Concerns;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
|
use LdapRecord\Events\NullDispatcher;
|
||||||
use LdapRecord\Models\Events\Event;
|
use LdapRecord\Models\Events\Event;
|
||||||
|
|
||||||
trait HasEvents
|
trait HasEvents
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Execute the callback without raising any events.
|
||||||
|
*
|
||||||
|
* @param Closure $callback
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected static function withoutEvents(Closure $callback)
|
||||||
|
{
|
||||||
|
$container = static::getConnectionContainer();
|
||||||
|
|
||||||
|
$dispatcher = $container->getEventDispatcher();
|
||||||
|
|
||||||
|
if ($dispatcher) {
|
||||||
|
$container->setEventDispatcher(
|
||||||
|
new NullDispatcher($dispatcher)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $callback();
|
||||||
|
} finally {
|
||||||
|
if ($dispatcher) {
|
||||||
|
$container->setEventDispatcher($dispatcher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires the specified model event.
|
* Fires the specified model event.
|
||||||
*
|
*
|
||||||
|
@@ -14,9 +14,9 @@ trait HasGlobalScopes
|
|||||||
* @param Scope|Closure|string $scope
|
* @param Scope|Closure|string $scope
|
||||||
* @param Closure|null $implementation
|
* @param Closure|null $implementation
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public static function addGlobalScope($scope, Closure $implementation = null)
|
public static function addGlobalScope($scope, Closure $implementation = null)
|
||||||
{
|
{
|
||||||
|
@@ -159,9 +159,9 @@ trait HasPassword
|
|||||||
* @param string $password
|
* @param string $password
|
||||||
* @param string $salt
|
* @param string $salt
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function getHashedPassword($method, $password, $salt = null)
|
protected function getHashedPassword($method, $password, $salt = null)
|
||||||
{
|
{
|
||||||
@@ -179,9 +179,9 @@ trait HasPassword
|
|||||||
/**
|
/**
|
||||||
* Validates that the current LDAP connection is secure.
|
* Validates that the current LDAP connection is secure.
|
||||||
*
|
*
|
||||||
* @throws ConnectionException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws ConnectionException
|
||||||
*/
|
*/
|
||||||
protected function validateSecureConnection()
|
protected function validateSecureConnection()
|
||||||
{
|
{
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace LdapRecord\Models;
|
namespace LdapRecord\Models;
|
||||||
|
|
||||||
use ArrayAccess;
|
use ArrayAccess;
|
||||||
|
use Illuminate\Contracts\Support\Arrayable;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use JsonSerializable;
|
use JsonSerializable;
|
||||||
use LdapRecord\Connection;
|
use LdapRecord\Connection;
|
||||||
@@ -17,7 +18,7 @@ use LdapRecord\Support\Arr;
|
|||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
|
|
||||||
/** @mixin Builder */
|
/** @mixin Builder */
|
||||||
abstract class Model implements ArrayAccess, JsonSerializable
|
abstract class Model implements ArrayAccess, Arrayable, JsonSerializable
|
||||||
{
|
{
|
||||||
use EscapesValues;
|
use EscapesValues;
|
||||||
use Concerns\HasEvents;
|
use Concerns\HasEvents;
|
||||||
@@ -28,7 +29,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
use Concerns\HasRelationships;
|
use Concerns\HasRelationships;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the model exists in the LDAP directory.
|
* Indicates if the model exists in the directory.
|
||||||
*
|
*
|
||||||
* @var bool
|
* @var bool
|
||||||
*/
|
*/
|
||||||
@@ -63,7 +64,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
protected $in;
|
protected $in;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The object classes of the LDAP model.
|
* The object classes of the model.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
@@ -77,7 +78,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
protected static $container;
|
protected static $container;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The LDAP connection name for the model.
|
* The connection name for the model.
|
||||||
*
|
*
|
||||||
* @var string|null
|
* @var string|null
|
||||||
*/
|
*/
|
||||||
@@ -138,7 +139,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "booting" method of the model.
|
* The "boot" method of the model.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@@ -204,7 +205,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @param string $dn
|
* @param string $dn
|
||||||
*
|
*
|
||||||
* @return static
|
* @return $this
|
||||||
*/
|
*/
|
||||||
public function setDn($dn)
|
public function setDn($dn)
|
||||||
{
|
{
|
||||||
@@ -214,7 +215,31 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the LDAP connection for the model.
|
* A mutator for setting the models distinguished name.
|
||||||
|
*
|
||||||
|
* @param string $dn
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setDnAttribute($dn)
|
||||||
|
{
|
||||||
|
return $this->setRawAttribute('dn', $dn)->setDn($dn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mutator for setting the models distinguished name.
|
||||||
|
*
|
||||||
|
* @param string $dn
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setDistinguishedNameAttribute($dn)
|
||||||
|
{
|
||||||
|
return $this->setRawAttribute('distinguishedname', $dn)->setDn($dn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the connection for the model.
|
||||||
*
|
*
|
||||||
* @return Connection
|
* @return Connection
|
||||||
*/
|
*/
|
||||||
@@ -275,6 +300,18 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
return static::query()->select($attributes)->paginate();
|
return static::query()->select($attributes)->paginate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a new model instance.
|
||||||
|
*
|
||||||
|
* @param array $attributes
|
||||||
|
*
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public static function make($attributes = [])
|
||||||
|
{
|
||||||
|
return new static($attributes);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Begin querying the model.
|
* Begin querying the model.
|
||||||
*
|
*
|
||||||
@@ -501,6 +538,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function offsetExists($offset)
|
public function offsetExists($offset)
|
||||||
{
|
{
|
||||||
return ! is_null($this->getAttribute($offset));
|
return ! is_null($this->getAttribute($offset));
|
||||||
@@ -513,6 +551,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function offsetGet($offset)
|
public function offsetGet($offset)
|
||||||
{
|
{
|
||||||
return $this->getAttribute($offset);
|
return $this->getAttribute($offset);
|
||||||
@@ -526,6 +565,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function offsetSet($offset, $value)
|
public function offsetSet($offset, $value)
|
||||||
{
|
{
|
||||||
$this->setAttribute($offset, $value);
|
$this->setAttribute($offset, $value);
|
||||||
@@ -538,6 +578,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
public function offsetUnset($offset)
|
public function offsetUnset($offset)
|
||||||
{
|
{
|
||||||
unset($this->attributes[$offset]);
|
unset($this->attributes[$offset]);
|
||||||
@@ -568,15 +609,26 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the object into something JSON serializable.
|
* Convert the model to its JSON encodeable array form.
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function jsonSerialize()
|
public function toArray()
|
||||||
{
|
{
|
||||||
return $this->attributesToArray();
|
return $this->attributesToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the model's attributes into JSON encodeable values.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
|
public function jsonSerialize()
|
||||||
|
{
|
||||||
|
return $this->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts extra attributes for JSON serialization.
|
* Converts extra attributes for JSON serialization.
|
||||||
*
|
*
|
||||||
@@ -615,17 +667,31 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Determine if two models have the same distinguished name and belong to the same connection.
|
* Determine if two models have the same distinguished name and belong to the same connection.
|
||||||
*
|
*
|
||||||
* @param static $model
|
* @param Model|null $model
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function is(self $model)
|
public function is($model)
|
||||||
{
|
{
|
||||||
return $this->dn == $model->getDn() && $this->getConnectionName() == $model->getConnectionName();
|
return ! is_null($model)
|
||||||
|
&& $this->dn == $model->getDn()
|
||||||
|
&& $this->getConnectionName() == $model->getConnectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hydrate a new collection of models from LDAP search results.
|
* Determine if two models are not the same.
|
||||||
|
*
|
||||||
|
* @param Model|null $model
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isNot($model)
|
||||||
|
{
|
||||||
|
return ! $this->is($model);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hydrate a new collection of models from search results.
|
||||||
*
|
*
|
||||||
* @param array $records
|
* @param array $records
|
||||||
*
|
*
|
||||||
@@ -714,9 +780,9 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @param array|BatchModification $mod
|
* @param array|BatchModification $mod
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*
|
|
||||||
* @return $this
|
* @return $this
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public function addModification($mod = [])
|
public function addModification($mod = [])
|
||||||
{
|
{
|
||||||
@@ -818,7 +884,7 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Get the model's object GUID key.
|
* Get the model's object GUID key.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getObjectGuidKey()
|
public function getObjectGuidKey()
|
||||||
{
|
{
|
||||||
@@ -942,14 +1008,30 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the model to the directory without raising any events.
|
||||||
|
*
|
||||||
|
* @param array $attributes
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
|
*/
|
||||||
|
public function saveQuietly(array $attributes = [])
|
||||||
|
{
|
||||||
|
static::withoutEvents(function () use ($attributes) {
|
||||||
|
$this->save($attributes);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the model to the directory.
|
* Save the model to the directory.
|
||||||
*
|
*
|
||||||
* @param array $attributes The attributes to update or create for the current entry.
|
* @param array $attributes The attributes to update or create for the current entry.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function save(array $attributes = [])
|
public function save(array $attributes = [])
|
||||||
{
|
{
|
||||||
@@ -967,9 +1049,9 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Inserts the model into the directory.
|
* Inserts the model into the directory.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function performInsert()
|
protected function performInsert()
|
||||||
{
|
{
|
||||||
@@ -1009,9 +1091,9 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Updates the model in the directory.
|
* Updates the model in the directory.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function performUpdate()
|
protected function performUpdate()
|
||||||
{
|
{
|
||||||
@@ -1035,9 +1117,9 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @param array $attributes The attributes for the new entry.
|
* @param array $attributes The attributes for the new entry.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return Model
|
* @return Model
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public static function create(array $attributes = [])
|
public static function create(array $attributes = [])
|
||||||
{
|
{
|
||||||
@@ -1054,14 +1136,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
* @param string $attribute The attribute to create
|
* @param string $attribute The attribute to create
|
||||||
* @param mixed $value The value of the new attribute
|
* @param mixed $value The value of the new attribute
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function createAttribute($attribute, $value)
|
public function createAttribute($attribute, $value)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
$this->newQuery()->insertAttributes($this->dn, [$attribute => (array) $value]);
|
$this->newQuery()->insertAttributes($this->dn, [$attribute => (array) $value]);
|
||||||
|
|
||||||
@@ -1073,14 +1155,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @param array $attributes The attributes to update for the current entry.
|
* @param array $attributes The attributes to update for the current entry.
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function update(array $attributes = [])
|
public function update(array $attributes = [])
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
$this->save($attributes);
|
$this->save($attributes);
|
||||||
}
|
}
|
||||||
@@ -1091,14 +1173,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
* @param string $attribute The attribute to modify
|
* @param string $attribute The attribute to modify
|
||||||
* @param mixed $value The new value for the attribute
|
* @param mixed $value The new value for the attribute
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function updateAttribute($attribute, $value)
|
public function updateAttribute($attribute, $value)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
$this->newQuery()->updateAttributes($this->dn, [$attribute => (array) $value]);
|
$this->newQuery()->updateAttributes($this->dn, [$attribute => (array) $value]);
|
||||||
|
|
||||||
@@ -1111,9 +1193,9 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
* @param Collection|array|string $dns
|
* @param Collection|array|string $dns
|
||||||
* @param bool $recursive
|
* @param bool $recursive
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return int
|
* @return int
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public static function destroy($dns, $recursive = false)
|
public static function destroy($dns, $recursive = false)
|
||||||
{
|
{
|
||||||
@@ -1144,14 +1226,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* @param bool $recursive Whether to recursively delete leaf nodes (models that are children).
|
* @param bool $recursive Whether to recursively delete leaf nodes (models that are children).
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function delete($recursive = false)
|
public function delete($recursive = false)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
$this->fireModelEvent(new Events\Deleting($this));
|
$this->fireModelEvent(new Events\Deleting($this));
|
||||||
|
|
||||||
@@ -1172,18 +1254,17 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Deletes leaf nodes that are attached to the model.
|
* Deletes leaf nodes that are attached to the model.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @return void
|
||||||
*
|
*
|
||||||
* @return Collection
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function deleteLeafNodes()
|
protected function deleteLeafNodes()
|
||||||
{
|
{
|
||||||
return $this->newQueryWithoutScopes()
|
$this->newQueryWithoutScopes()
|
||||||
->in($this->dn)
|
->in($this->dn)
|
||||||
->listing()
|
->listing()
|
||||||
->paginate()
|
->chunk(250, function ($models) {
|
||||||
->each(function (self $model) {
|
$models->each->delete($recursive = true);
|
||||||
$model->delete($recursive = true);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1200,14 +1281,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
*
|
*
|
||||||
* ["memberuid" => []]
|
* ["memberuid" => []]
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function deleteAttribute($attributes)
|
public function deleteAttribute($attributes)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
$attributes = $this->makeDeletableAttributes($attributes);
|
$attributes = $this->makeDeletableAttributes($attributes);
|
||||||
|
|
||||||
@@ -1261,15 +1342,15 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
* @param static|string $newParentDn The new parent of the current model.
|
* @param static|string $newParentDn The new parent of the current model.
|
||||||
* @param bool $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.
|
* @param bool $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws UnexpectedValueException
|
* @throws UnexpectedValueException
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function move($newParentDn, $deleteOldRdn = true)
|
public function move($newParentDn, $deleteOldRdn = true)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
if (! $rdn = $this->getRdn()) {
|
if (! $rdn = $this->getRdn()) {
|
||||||
throw new UnexpectedValueException('Current model does not contain an RDN to move.');
|
throw new UnexpectedValueException('Current model does not contain an RDN to move.');
|
||||||
@@ -1285,14 +1366,14 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
* @param static|string|null $newParentDn The models new parent distinguished name (if moving). Leave this null if you are only renaming. Example: "ou=MovedUsers,dc=acme,dc=org"
|
* @param static|string|null $newParentDn The models new parent distinguished name (if moving). Leave this null if you are only renaming. Example: "ou=MovedUsers,dc=acme,dc=org"
|
||||||
* @param bool|true $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.
|
* @param bool|true $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.
|
||||||
*
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
* @throws ModelDoesNotExistException
|
* @throws ModelDoesNotExistException
|
||||||
* @throws \LdapRecord\LdapRecordException
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function rename($rdn, $newParentDn = null, $deleteOldRdn = true)
|
public function rename($rdn, $newParentDn = null, $deleteOldRdn = true)
|
||||||
{
|
{
|
||||||
$this->validateExistence();
|
$this->requireExistence();
|
||||||
|
|
||||||
if ($newParentDn instanceof self) {
|
if ($newParentDn instanceof self) {
|
||||||
$newParentDn = $newParentDn->getDn();
|
$newParentDn = $newParentDn->getDn();
|
||||||
@@ -1312,6 +1393,13 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the RDN we have been given is empty when parsed, we must
|
||||||
|
// have been given a string, with no attribute. In this case,
|
||||||
|
// we will create a new RDN using the current DN's head.
|
||||||
|
if ($this->newDn($rdn)->isEmpty()) {
|
||||||
|
$rdn = $this->getUpdateableRdn($rdn);
|
||||||
|
}
|
||||||
|
|
||||||
$this->fireModelEvent(new Renaming($this, $rdn, $newParentDn));
|
$this->fireModelEvent(new Renaming($this, $rdn, $newParentDn));
|
||||||
|
|
||||||
$this->newQuery()->rename($this->dn, $rdn, $newParentDn, $deleteOldRdn);
|
$this->newQuery()->rename($this->dn, $rdn, $newParentDn, $deleteOldRdn);
|
||||||
@@ -1337,6 +1425,18 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
$this->wasRecentlyRenamed = true;
|
$this->wasRecentlyRenamed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an updateable RDN for the model.
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUpdateableRdn($name)
|
||||||
|
{
|
||||||
|
return $this->getCreatableRdn($name, $this->newDn($this->dn)->head());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a distinguished name that is creatable for the model.
|
* Get a distinguished name that is creatable for the model.
|
||||||
*
|
*
|
||||||
@@ -1426,13 +1526,13 @@ abstract class Model implements ArrayAccess, JsonSerializable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates that the current model exists.
|
* Throw an exception if the model does not exist.
|
||||||
*
|
|
||||||
* @throws ModelDoesNotExistException
|
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws ModelDoesNotExistException
|
||||||
*/
|
*/
|
||||||
protected function validateExistence()
|
protected function requireExistence()
|
||||||
{
|
{
|
||||||
if (! $this->exists || is_null($this->dn)) {
|
if (! $this->exists || is_null($this->dn)) {
|
||||||
throw ModelDoesNotExistException::forModel($this);
|
throw ModelDoesNotExistException::forModel($this);
|
||||||
|
@@ -284,9 +284,9 @@ class HasMany extends OneToMany
|
|||||||
*
|
*
|
||||||
* @param string $model
|
* @param string $model
|
||||||
*
|
*
|
||||||
* @throws ModelNotFoundException
|
|
||||||
*
|
|
||||||
* @return Model
|
* @return Model
|
||||||
|
*
|
||||||
|
* @throws ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
protected function getForeignModelByValueOrFail($model)
|
protected function getForeignModelByValueOrFail($model)
|
||||||
{
|
{
|
||||||
@@ -309,9 +309,9 @@ class HasMany extends OneToMany
|
|||||||
* @param string|array $bypass
|
* @param string|array $bypass
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws LdapRecordException
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws LdapRecordException
|
||||||
*/
|
*/
|
||||||
protected function attemptFailableOperation($operation, $bypass, $value)
|
protected function attemptFailableOperation($operation, $bypass, $value)
|
||||||
{
|
{
|
||||||
|
@@ -27,9 +27,9 @@ class HasOne extends Relation
|
|||||||
*
|
*
|
||||||
* @param Model|string $model
|
* @param Model|string $model
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return Model|string
|
* @return Model|string
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function attach($model)
|
public function attach($model)
|
||||||
{
|
{
|
||||||
@@ -45,9 +45,9 @@ class HasOne extends Relation
|
|||||||
/**
|
/**
|
||||||
* Detach the related model from the parent.
|
* Detach the related model from the parent.
|
||||||
*
|
*
|
||||||
* @throws \LdapRecord\LdapRecordException
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws \LdapRecord\LdapRecordException
|
||||||
*/
|
*/
|
||||||
public function detach()
|
public function detach()
|
||||||
{
|
{
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user