Compare commits

..

44 commits

Author SHA1 Message Date
tflidd
79ae3e9235
Merge pull request #261 from ervee/patch-1
Make NC30 compatible
2025-03-10 17:43:58 +01:00
dependabot[bot]
6d4405ecff
Merge pull request #262 from nextcloud/dependabot/composer/symfony/process-5.4.46 2024-11-06 20:51:23 +00:00
dependabot[bot]
2884c6e749
Bump symfony/process from 5.4.7 to 5.4.46
Bumps [symfony/process](https://github.com/symfony/process) from 5.4.7 to 5.4.46.
- [Release notes](https://github.com/symfony/process/releases)
- [Changelog](https://github.com/symfony/process/blob/7.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/process/compare/v5.4.7...v5.4.46)

---
updated-dependencies:
- dependency-name: symfony/process
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-06 20:47:58 +00:00
Ralf
47e8099502
Make NC30 compatible
Make the app compatible with Nextcloud 30

Signed-off-by: Ralf <ervee@moskovic.org>
2024-10-28 20:18:45 +01:00
Joas Schilling
412e397069
Merge pull request #258 from nextcloud/ci/noid/update-workflow-109
ci: Update workflows
2024-09-10 11:48:12 +02:00
Joas Schilling
8b18c65014
ci: Update workflows
[skip-ci]

Signed-off-by: Joas Schilling <coding@schilljs.com>
2024-09-10 11:47:58 +02:00
Andy Scherzinger
514a7c5ed3
Merge pull request #257 from nextcloud/feat/workflow-auto-update-dependabot-approve-merge.yml
chore(CI): Updating dependabot-approve-merge.yml workflow from template
2024-09-02 16:15:09 +02:00
Nextcloud bot
6eb024359c chore(CI): Updating dependabot-approve-merge.yml workflow from template
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-02 10:59:35 +00:00
Jonas Sulzer
06bef5554d
Merge pull request #256 from nextcloud/rlz/3.4.0
🚀 RELEASE: v3.4.0
2024-07-28 10:34:04 +02:00
Jonas Sulzer
5b70ef00bb
Merge pull request #249 from nextcloud/fix/user-count
🐛 FIX: wrong user count
2024-07-28 10:33:01 +02:00
Jonas Sulzer
955c884a6b
🚀 RELEASE: v3.4.0
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2024-07-25 14:03:30 +02:00
Jonas Sulzer
a3da95fdaf
Merge pull request #255 from nextcloud/automated/update-workflows/default
chore: update workflows from templates
2024-07-21 17:06:48 +02:00
skjnldsv
7b92009000 chore: update workflows from templates
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2024-07-13 12:17:28 +02:00
Jonas Sulzer
3d850aa615
Merge pull request #251 from nextcloud/feat/workflow-auto-update-dependabot-approve-merge.yml
Updating dependabot-approve-merge.yml workflow from template
2024-04-27 08:16:07 +02:00
Nextcloud bot
3777fe3331 Updating dependabot-approve-merge.yml workflow from template
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-26 18:17:26 +00:00
Jonas Sulzer
b27d85a783
Merge pull request #228 from BjoKaSH/imap_log_failure_reason
Distinguish wrong credentials from other problems (IMAP)
2024-04-02 11:35:38 +02:00
Jonas Sulzer
e45b03e5b8
Merge pull request #221 from jensb/patch-1
Update README.md, add warning about fail2ban-like tools
2024-04-02 11:31:01 +02:00
Jonas Sulzer
f1430569ce
Merge pull request #229 from BjoKaSH/fix_imap_out_of_bound
Fix out-of-bound array access (IMAP)
2024-04-02 11:29:44 +02:00
Jonas Sulzer
6186795698
Merge pull request #242 from nextcloud/automated/update-workflows/default
chore: update workflows from templates
2024-04-02 11:09:40 +02:00
Jonas Sulzer
af6bf33e57
Merge pull request #248 from nextcloud/rlz/3.3.0
🚀 RELEASE: v3.3.0
2024-04-02 10:29:03 +02:00
Jonas Sulzer
0ea46a1730
🐛 FIX: wrong user count
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2024-03-30 01:25:04 +01:00
Jonas Sulzer
285a810b88
👌 IMPROVE: rephrase recommendation about bruteforce protection
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2024-03-30 00:13:15 +01:00
Jonas Sulzer
ada0fbcf52
🚀 RELEASE: v3.3.0
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2024-03-30 00:02:27 +01:00
skjnldsv
09dba5689e chore: update workflows from templates
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2024-03-08 22:02:25 +01:00
Côme Chilliet
d0e609438e
Merge pull request #238 from pierrecorsini/patch-1
Wrong class name corrected with : `\OCA\UserExternal\WebDavAuth' inst…
2024-02-29 10:07:03 +01:00
John Molakvoæ
320c90ce89
Merge pull request #241 from Glandos/patch-1 2024-02-28 11:18:07 +01:00
Glandos
430a0e6384
Add support for NC 28
Signed-off-by: Glandos <bugs-github@antipoul.fr>
2023-12-22 12:52:40 +01:00
Bjoern Kahl
69483900d1 Distinguish wrong credentials from other problems (IMAP)
Verifying login data can fail for a number of reasons like temporary
connection failure to the IMAP server, Internal problems of the IMAP
server, or actually wrong username / password combination.

This change logs the reason for login failures, helping server admins to
diagnose login problems and better support their users.

Ideally, we would have an option to pass the reason upwards, so the
NextCloud login system can show appropriate errors to users attempting
to login.

Signed-off-by: Bjoern Kahl <mls@bjoern-kahl.de>
2023-11-25 21:49:19 +01:00
Bjoern Kahl
8fd2a5d06a Fix out-of-bound array access (IMAP)
The IMAP method allows user names with or without a domain part.  For
user names without a domain part, it still tries to access the (then
non-existing) domain, resulting in "Error: Undefined array key 1 at
.../nextcloud/apps/user_external/lib/IMAP.php#85" log messages.

Signed-off-by: Bjoern Kahl <mls@bjoern-kahl.de>
2023-11-25 21:46:26 +01:00
Pierre CORSINI
1aa72d73bc
Wrong class name corrected with : \OCA\UserExternal\WebDavAuth' instead of WebDAVAuth`
Signed-off-by: Pierre CORSINI <50719398+pierrecorsini@users.noreply.github.com>
2023-10-01 22:59:27 +01:00
John Molakvoæ
455726df6a
Merge pull request #234 from nextcloud/feat/27 2023-06-13 16:09:15 +02:00
John Molakvoæ
3ae18e6199
chore: min is 25, max is 27
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
2023-06-13 16:04:08 +02:00
violoncello.ch
14abc962d7
Merge pull request #232 from nextcloud/automated/update-workflows
chore: update workflows from templates
2023-06-03 12:03:28 +02:00
John Molakvoæ
9957e7f38b
chore: update workflows from templates
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
2023-06-01 18:33:02 +02:00
violoncello.ch
216a5e8441
Merge pull request #230 from nextcloud/automated/update-workflows
chore: update workflows from templates
2023-05-28 14:49:39 +02:00
John Molakvoæ
23129291f4
chore: update workflows from templates
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
2023-05-28 14:04:07 +02:00
jensb
f30f950b57
Update README.md, add warning about fail2ban-like tools
Signed-off-by: jensb <jens-github@spamfreemail.de>
2023-03-14 18:59:52 +01:00
Côme Chilliet
9090251e8e
Merge pull request #217 from Glandos/patch-1
Trim doesn't accept null anymore
2023-01-24 10:26:02 +01:00
Glandos
5e5c330a7c
Trim doesn't accept null anymore
Fix #203 

Signed-off-by: Glandos <bugs-github@antipoul.fr>
2023-01-19 00:02:03 +01:00
violoncello.ch
ff044910e1
Merge pull request #214 from nextcloud/changelog
update changelog
2023-01-17 15:31:57 +01:00
violoncello.ch
e5b2b2e988
Merge pull request #164 from tem-hth/master
Examine error code returned by curl handle instead of return value from curl_exec. Using the return value from curl_exec resulted in failure on new mailboxes that did not contain any mail.
2022-12-27 21:40:28 +01:00
Jonas Sulzer
73a7e4794b
👌 IMPROVE: update changelog
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2022-12-27 21:37:02 +01:00
Tem Ogunfiditimi
1fbc471efe
Examine error code returned by curl handle instead of return value from curl_exec. Using the return value from curl_exec resulted in failure on new mailboxes that did not contain any mail.
Signed-off-by: Tem Ogunfiditimi <tem@episof.com>

Changed comparison to identical check

Signed-off-by: Tem Ogunfiditmi <tem@episof.com>
Signed-off-by: Tem Ogunfiditimi <tem@episof.com>
2022-12-27 21:36:59 +01:00
Jonas Sulzer
2a9c7ce4b7
👌 IMPROVE: update changelog
Signed-off-by: Jonas Sulzer <jonas@violoncello.ch>
2022-12-27 20:46:23 +01:00
13 changed files with 205 additions and 144 deletions

View file

@ -2,6 +2,9 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Build and publish app release
@ -9,9 +12,6 @@ on:
release:
types: [published]
env:
PHP_VERSION: 7.4
jobs:
build_and_publish:
runs-on: ubuntu-latest
@ -21,59 +21,67 @@ jobs:
steps:
- name: Check actor permission
uses: skjnldsv/check-actor-permission@v2
uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0
with:
require: write
- name: Set app env
run: |
# Split and keep last
# Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
path: ${{ env.APP_NAME }}
- name: Get appinfo data
id: appinfo
uses: skjnldsv/xpath-action@master
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master
with:
filename: ${{ env.APP_NAME }}/appinfo/info.xml
expression: "//info//dependencies//nextcloud/@min-version"
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@v1.2
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
id: versions
# Continue if no package.json
continue-on-error: true
with:
path: ${{ env.APP_NAME }}
fallbackNode: "^12"
fallbackNpm: "^6"
fallbackNode: '^20'
fallbackNpm: '^10'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@v3
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
- name: Set up php ${{ env.PHP_VERSION }}
uses: shivammathur/setup-php@v2
- name: Get php version
id: php-versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
with:
php-version: ${{ env.PHP_VERSION }}
filename: ${{ env.APP_NAME }}/appinfo/info.xml
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2.31.0
with:
php-version: ${{ steps.php-versions.outputs.php-min }}
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check composer.json
id: check_composer
uses: andstor/file-existence-action@v1
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: "${{ env.APP_NAME }}/composer.json"
@ -86,22 +94,24 @@ jobs:
- name: Build ${{ env.APP_NAME }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
env:
NODE_ENV: production
run: |
cd ${{ env.APP_NAME }}
npm ci
npm run build
npm run build --if-present
- name: Check Krankerl config
id: krankerl
uses: andstor/file-existence-action@v1
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: ${{ env.APP_NAME }}/krankerl.toml
- name: Install Krankerl
if: steps.krankerl.outputs.files_exists == 'true'
run: |
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.13.0/krankerl_0.13.0_amd64.deb
sudo dpkg -i krankerl_0.13.0_amd64.deb
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
sudo dpkg -i krankerl_0.14.0_amd64.deb
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl
if: steps.krankerl.outputs.files_exists == 'true'
@ -119,14 +129,15 @@ jobs:
continue-on-error: true
id: server-checkout
run: |
NCVERSION=${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}
NCVERSION='${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}'
wget --quiet https://download.nextcloud.com/server/releases/latest-$NCVERSION.zip
unzip latest-$NCVERSION.zip
- name: Checkout server master fallback
uses: actions/checkout@v3
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
if: ${{ steps.server-checkout.outcome != 'success' }}
with:
submodules: true
repository: nextcloud/server
path: nextcloud
@ -137,7 +148,7 @@ jobs:
tar -xvf ${{ env.APP_NAME }}.tar.gz
cd ../../../
# Setting up keys
echo "${{ secrets.APP_PRIVATE_KEY }}" > ${{ env.APP_NAME }}.key
echo '${{ secrets.APP_PRIVATE_KEY }}' > ${{ env.APP_NAME }}.key
wget --quiet "https://github.com/nextcloud/app-certificate-requests/raw/master/${{ env.APP_NAME }}/${{ env.APP_NAME }}.crt"
# Signing
php nextcloud/occ integrity:sign-app --privateKey=../${{ env.APP_NAME }}.key --certificate=../${{ env.APP_NAME }}.crt --path=../${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}
@ -146,7 +157,7 @@ jobs:
tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }}
- name: Attach tarball to github release
uses: svenstaro/upload-release-action@v2
uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # v2
id: attach_to_release
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
@ -156,7 +167,7 @@ jobs:
overwrite: true
- name: Upload app to Nextcloud appstore
uses: nextcloud-releases/nextcloud-appstore-push-action@v1
uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1
with:
app_name: ${{ env.APP_NAME }}
appstore_token: ${{ secrets.APPSTORE_TOKEN }}

View file

@ -1,51 +0,0 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Rebase command
on:
issue_comment:
types: created
permissions:
contents: read
jobs:
rebase:
runs-on: ubuntu-latest
permissions:
contents: none
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@v2
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
- name: Checkout the latest code
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.7
env:
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@v2
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"

View file

@ -2,6 +2,9 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Dependabot
@ -15,22 +18,32 @@ on:
permissions:
contents: read
concurrency:
group: dependabot-approve-merge-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
auto-approve-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]' || github.actor == 'renovate[bot]'
runs-on: ubuntu-latest-low
permissions:
# for hmarr/auto-approve-action to approve PRs
pull-requests: write
pull-requests: write
steps:
# Github actions bot approve
- uses: hmarr/auto-approve-action@v2
- name: Disabled on forks
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
run: |
echo 'Can not approve PRs from forks'
exit 1
# GitHub actions bot approve
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Nextcloud bot approve and merge request
- uses: ahmadnassri/action-dependabot-auto-merge@v2
- uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a # v2
with:
target: minor
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}

View file

@ -2,19 +2,35 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Pull request checks
name: Block fixup and squash commits
on: pull_request
on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]
permissions:
contents: read
concurrency:
group: fixup-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
commit-message-check:
if: github.event.pull_request.draft == false
permissions:
pull-requests: write
name: Block fixup and squash commits
runs-on: ubuntu-latest
runs-on: ubuntu-latest-low
steps:
- name: Run check
uses: xt0rted/block-autosquash-commits-action@v2
uses: skjnldsv/block-fixup-merge-action@c138ea99e45e186567b64cf065ce90f7158c236a # v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -2,31 +2,35 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Lint
name: Lint info.xml
on:
pull_request:
push:
branches:
- main
- master
- stable*
on: pull_request
permissions:
contents: read
concurrency:
group: lint-info-xml-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
xml-linters:
runs-on: ubuntu-latest
runs-on: ubuntu-latest-low
name: info.xml lint
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Download schema
run: wget https://raw.githubusercontent.com/nextcloud/appstore/master/nextcloudappstore/api/v1/release/info.xsd
- name: Lint info.xml
uses: ChristophWurst/xmllint-action@v1
uses: ChristophWurst/xmllint-action@36f2a302f84f8c83fceea0b9c59e1eb4a616d3c1 # v1.2
with:
xml-file: ./appinfo/info.xml
xml-schema-file: ./info.xsd

View file

@ -2,15 +2,18 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Lint
name: Lint php-cs
on: pull_request
permissions:
contents: read
concurrency:
concurrency:
group: lint-php-cs-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
@ -22,13 +25,21 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Set up php
uses: shivammathur/setup-php@v2
- name: Get php version
id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
- name: Set up php${{ steps.versions.outputs.php-available }}
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2.31.0
with:
php-version: "7.4"
php-version: ${{ steps.versions.outputs.php-available }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
coverage: none
ini-file: development
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: composer i

View file

@ -2,42 +2,55 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Lint
name: Lint php
on:
pull_request:
push:
branches:
- main
- master
- stable*
on: pull_request
permissions:
contents: read
concurrency:
concurrency:
group: lint-php-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
matrix:
runs-on: ubuntu-latest-low
outputs:
php-versions: ${{ steps.versions.outputs.php-versions }}
steps:
- name: Checkout app
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get version matrix
id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0
php-lint:
runs-on: ubuntu-latest
needs: matrix
strategy:
matrix:
php-versions: ["7.4", "8.0", "8.1"]
php-versions: ${{fromJson(needs.matrix.outputs.php-versions)}}
name: php-lint
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2.31.0
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
coverage: none
ini-file: development
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Lint
run: composer run lint
@ -45,7 +58,7 @@ jobs:
summary:
permissions:
contents: none
runs-on: ubuntu-latest
runs-on: ubuntu-latest-low
needs: php-lint
if: always()

View file

@ -4,7 +4,31 @@ Starting from v3.0.0, all notable changes to this project will be documented in
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [3.4.0] -
- Fix out-of-bound array access in IMAP backend
[#229](https://github.com/nextcloud/user_external/pull/229) @BjoKaSH
- Distinguish wrong credentials from other problems in logging output for IMAP backend
[#228](https://github.com/nextcloud/user_external/pull/228) @BjoKaSH
- 🐛 FIX: wrong user count
[#249](https://github.com/nextcloud/user_external/pull/249)
- Make compatible with Nextcloud 29
[#256](https://github.com/nextcloud/user_external/pull/256)
## [3.3.0] - 2024-03-30
- Fix wrong capitalisation of `WebDavAuth` class name in readme
[#238](https://github.com/nextcloud/user_external/pull/238) @pierrecorsini
- Mark compatible with Nextcloud 28
[#241](https://github.com/nextcloud/user_external/pull/241) @Glandos
## [3.2.0] - 2023-06-13
- Fix IMAP authentication on empty mailboxes
[#164](https://github.com/nextcloud/user_external/pull/164) @tem-hth
- Trim doesn't accept null anymore
[#217](https://github.com/nextcloud/user_external/pull/217) @Glandos
## [3.1.0] - 2022-12-27
- Support for Nextcloud 25
[#212](https://github.com/nextcloud/user_external/pull/212) @michael-dev
## [3.0.0] - 2022-04-26
### Breaking Changes

View file

@ -18,6 +18,8 @@ If something does not work, check the log file at `nextcloud/data/nextcloud.log`
**⚠⚠ Warning:** If you are using more than one backend or especially one backend more often than once, make sure that you still have resp. get unique `uid`s in the database. ⚠⚠
**⚠⚠ Warning:** If you are using tools like fail2ban (https://www.fail2ban.org) to protect your authentication source (e.g. IMAP server), be sure to disable it for the host that runs `user_external`. Otherwise a single user failing to login too many times can practically DoS your whole Nextcloud installation because `fail2ban` will then block the Nextcloud IP address. ⚠⚠
Instead, make sure the bruteforce protection app for Nextcloud is installed and configured correctly.
FTP
---
@ -131,7 +133,7 @@ Add the following to your `config.php`:
'user_backends' => array(
array(
'class' => '\OCA\UserExternal\WebDAVAuth',
'class' => '\OCA\UserExternal\WebDavAuth',
'arguments' => array('https://example.com/webdav'),
),
),

View file

@ -16,7 +16,7 @@
Read the [documentation](https://github.com/nextcloud/user_external#readme) to learn how to configure it!
]]></description>
<version>3.1.0</version>
<version>3.5.0</version>
<licence>agpl</licence>
<author>Robin Appelman</author>
<namespace>UserExternal</namespace>
@ -33,6 +33,6 @@ Read the [documentation](https://github.com/nextcloud/user_external#readme) to l
<bugs>https://github.com/nextcloud/user_external/issues</bugs>
<repository type="git">https://github.com/nextcloud/user_external.git</repository>
<dependencies>
<nextcloud min-version="22" max-version="25" />
<nextcloud min-version="25" max-version="30" />
</dependencies>
</info>

31
composer.lock generated
View file

@ -3707,26 +3707,23 @@
},
{
"name": "symfony/polyfill-php80",
"version": "v1.25.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3770,7 +3767,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@ -3786,7 +3783,7 @@
"type": "tidelift"
}
],
"time": "2022-03-04T08:16:47+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php81",
@ -3869,16 +3866,16 @@
},
{
"name": "symfony/process",
"version": "v5.4.7",
"version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb"
"reference": "01906871cb9b5e3cf872863b91aba4ec9767daf4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb",
"reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb",
"url": "https://api.github.com/repos/symfony/process/zipball/01906871cb9b5e3cf872863b91aba4ec9767daf4",
"reference": "01906871cb9b5e3cf872863b91aba4ec9767daf4",
"shasum": ""
},
"require": {
@ -3911,7 +3908,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v5.4.7"
"source": "https://github.com/symfony/process/tree/v5.4.46"
},
"funding": [
{
@ -3927,7 +3924,7 @@
"type": "tidelift"
}
],
"time": "2022-03-18T16:18:52+00:00"
"time": "2024-11-06T09:18:28+00:00"
},
{
"name": "symfony/service-contracts",
@ -4279,5 +4276,5 @@
"platform-overrides": {
"php": "7.3"
},
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View file

@ -66,7 +66,7 @@ abstract class Base extends \OC\User\Backend {
$user = $result->fetch();
$result->closeCursor();
$displayName = trim($user['displayname'], ' ');
$displayName = trim($user['displayname'] ?? '', ' ');
if (!empty($displayName)) {
return $displayName;
} else {
@ -216,7 +216,7 @@ abstract class Base extends \OC\User\Backend {
/**
* Count the number of users.
*
* @return int|bool The number of users on success false on failure
* @return int the number of users
*/
public function countUsers() {
$connection = \OC::$server->getDatabaseConnection();
@ -228,6 +228,6 @@ abstract class Base extends \OC\User\Backend {
$users = $result->fetchColumn();
$result->closeCursor();
return $users > 0;
return $users;
}
}

View file

@ -82,7 +82,7 @@ class IMAP extends Base {
}
$groups = [];
if ($this->groupDomain && $pieces[1]) {
if ((count($pieces) > 1) && $this->groupDomain && $pieces[1]) {
$groups[] = $pieces[1];
}
@ -98,16 +98,37 @@ class IMAP extends Base {
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'CAPABILITY');
$canconnect = curl_exec($ch);
curl_exec($ch);
$errorcode = curl_errno($ch);
if ($canconnect) {
if ($errorcode === 0) {
curl_close($ch);
$uid = mb_strtolower($uid);
$this->storeUser($uid, $groups);
return $uid;
} elseif ($errorcode === CURLE_COULDNT_CONNECT ||
$errorcode === CURLE_SSL_CONNECT_ERROR ||
$errorcode === 28) {
# This is not defined in PHP-8.x
# 28: CURLE_OPERATION_TIMEDOUT
\OC::$server->getLogger()->error(
'ERROR: Could not connect to imap server via curl: ' . curl_strerror($errorcode),
['app' => 'user_external']
);
} elseif ($errorcode === 9 ||
$errorcode === 67 ||
$errorcode === 94) {
# These are not defined in PHP-8.x
# 9: CURLE_REMOTE_ACCESS_DENIED
# 67: CURLE_LOGIN_DENIED
# 94: CURLE_AUTH_ERROR)
\OC::$server->getLogger()->error(
'ERROR: IMAP Login failed via curl: ' . curl_strerror($errorcode),
['app' => 'user_external']
);
} else {
\OC::$server->getLogger()->error(
'ERROR: Could not connect to imap server via curl: '.curl_error($ch),
'ERROR: IMAP server returned an error: ' . $errorcode . ' / ' . curl_strerror($errorcode),
['app' => 'user_external']
);
}