]>
source.dussan.org Git - nextcloud-server.git/log
provokateurin [Sun, 15 Sep 2024 13:23:43 +0000 (15:23 +0200)]
fix(S3ConfigTrait): Allow proxy field to take false
Signed-off-by: provokateurin <kate@provokateurin.de>
Kate [Sun, 15 Sep 2024 17:00:24 +0000 (19:00 +0200)]
Merge pull request #48027 from nextcloud/backport/48014/stable30
Kate [Sun, 15 Sep 2024 16:50:54 +0000 (18:50 +0200)]
Merge pull request #48025 from nextcloud/backport/48017/stable30
John Molakvoæ [Sun, 15 Sep 2024 16:50:35 +0000 (18:50 +0200)]
Merge pull request #48021 from nextcloud/backport/48015/stable30
provokateurin [Sun, 15 Sep 2024 13:27:37 +0000 (15:27 +0200)]
fix(Tags): Return boolean for userHasTags()
Signed-off-by: provokateurin <kate@provokateurin.de>
provokateurin [Sun, 15 Sep 2024 13:23:10 +0000 (15:23 +0200)]
fix(Comment): Initialize childrenCount as integer
Signed-off-by: provokateurin <kate@provokateurin.de>
provokateurin [Sun, 15 Sep 2024 13:24:22 +0000 (15:24 +0200)]
fix(Storage\Local): Do not call getSourcePath() on SplFileInfo
Signed-off-by: provokateurin <kate@provokateurin.de>
Côme Chilliet [Sun, 15 Sep 2024 07:45:00 +0000 (09:45 +0200)]
Merge pull request #47981 from nextcloud/backport/47971/stable30
[stable30] fix: Do not try to set HTTP response code on already closed connection
Nextcloud bot [Sun, 15 Sep 2024 00:26:46 +0000 (00:26 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Ferdinand Thiessen [Sat, 14 Sep 2024 20:52:01 +0000 (22:52 +0200)]
Merge pull request #47923 from nextcloud/backport/47527/stable30
[stable30] fix(files_external): Handling in SFTP UI for custom ports
Côme Chilliet [Sat, 14 Sep 2024 12:20:49 +0000 (14:20 +0200)]
fix: Do not try to set HTTP response code on already closed connection
This avoids a PHP warning in the logs about trying to set the response
code while the output already started. It’s useless to try to print an
error page anyway in this situation because the connection was closed
already.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
John Molakvoæ [Sat, 14 Sep 2024 18:29:11 +0000 (20:29 +0200)]
Merge pull request #47976 from nextcloud/backport/47968/stable30
Git'Fellow [Sat, 14 Sep 2024 09:21:17 +0000 (11:21 +0200)]
fix(files_external): Check key exists before accessing it
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Kate [Sat, 14 Sep 2024 12:30:01 +0000 (14:30 +0200)]
Merge pull request #47957 from nextcloud/backport/47954/stable30
Nextcloud bot [Sat, 14 Sep 2024 00:21:28 +0000 (00:21 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Kate [Fri, 13 Sep 2024 20:08:35 +0000 (22:08 +0200)]
Merge pull request #47951 from nextcloud/backport/47945/stable30
provokateurin [Fri, 13 Sep 2024 16:13:44 +0000 (18:13 +0200)]
fix(files): Adjust Cache::searchQuery() parameter name to match interface
Signed-off-by: provokateurin <kate@provokateurin.de>
nextcloud-command [Fri, 13 Sep 2024 15:33:42 +0000 (15:33 +0000)]
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
John Molakvoæ (skjnldsv) [Fri, 13 Sep 2024 11:57:30 +0000 (13:57 +0200)]
fix(files_external): broken credentials dialog
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Nextcloud bot [Fri, 13 Sep 2024 00:20:54 +0000 (00:20 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Benjamin Gaussorgues [Thu, 12 Sep 2024 18:58:53 +0000 (20:58 +0200)]
Merge pull request #47926 from nextcloud/release/30.0.0
Benjamin Gaussorgues [Thu, 12 Sep 2024 14:21:07 +0000 (16:21 +0200)]
build(hub): 30.0.0
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
Josh Richards [Tue, 27 Aug 2024 13:01:12 +0000 (09:01 -0400)]
fix: custom port handling in UI for SFTP
Signed-off-by: Josh Richards <josh.t.richards@gmail.com>
Benjamin Gaussorgues [Thu, 12 Sep 2024 12:44:24 +0000 (14:44 +0200)]
Merge pull request #47890 from nextcloud/release/30.0.0_rc5
Julius Knorr [Thu, 12 Sep 2024 11:16:05 +0000 (13:16 +0200)]
Merge pull request #47915 from nextcloud/backport/47913/stable30
[stable30] fix: Add whiteboard to education and public sector bundle
Andy Scherzinger [Thu, 12 Sep 2024 09:23:31 +0000 (11:23 +0200)]
Merge pull request #47882 from nextcloud/backport/47294/stable30
[stable30] fix(files): Sort tree views correctly by natural order
Julius Knorr [Thu, 12 Sep 2024 07:08:46 +0000 (09:08 +0200)]
fix: Add whiteboard to education and public sector bundle
Signed-off-by: Julius Knorr <jus@bitgrid.net>
Andy Scherzinger [Thu, 12 Sep 2024 08:41:56 +0000 (10:41 +0200)]
Merge pull request #47897 from nextcloud/backport/47586/stable30
[stable30] fix(theming): Add migration to restore primary color after separating primary and background
Andy Scherzinger [Thu, 12 Sep 2024 08:40:43 +0000 (10:40 +0200)]
Merge pull request #47912 from nextcloud/backport/47906/stable30
[stable30] chore: Update trashbin retention documentation with exceeded quota details
Christopher Ng [Wed, 11 Sep 2024 18:57:31 +0000 (11:57 -0700)]
chore: Update trashbin retention documentation with exceeded quota details
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Nextcloud bot [Thu, 12 Sep 2024 00:20:27 +0000 (00:20 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Ferdinand Thiessen [Mon, 9 Sep 2024 15:42:01 +0000 (17:42 +0200)]
fix: Adjust types of IQueryBuilder to properly allow joining with sub-query
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Ferdinand Thiessen [Mon, 2 Sep 2024 11:24:20 +0000 (13:24 +0200)]
fix: Use migration instead of repair step for restoring custom color
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Ferdinand Thiessen [Sun, 1 Sep 2024 11:16:49 +0000 (13:16 +0200)]
chore: Use `IAppConfig` instead of `IConfig->getAppValue`
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Ferdinand Thiessen [Wed, 28 Aug 2024 18:14:28 +0000 (20:14 +0200)]
fix: Add repair step to restore primary color after separating primary and background
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Ferdinand Thiessen [Mon, 2 Sep 2024 13:31:41 +0000 (15:31 +0200)]
fix(theming): Allow to specify a userId manually in BackgroundService
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Benjamin Gaussorgues [Wed, 11 Sep 2024 09:39:52 +0000 (11:39 +0200)]
build(hub): 30.0.0 RC5
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
Nextcloud bot [Wed, 11 Sep 2024 00:21:20 +0000 (00:21 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
nextcloud-command [Tue, 10 Sep 2024 21:31:07 +0000 (21:31 +0000)]
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Christopher Ng [Mon, 9 Sep 2024 23:11:43 +0000 (16:11 -0700)]
fix(files): Render folders in natural sort order
- Nodes are returned from the endpoint in an undefined order
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Christopher Ng [Mon, 9 Sep 2024 23:11:43 +0000 (16:11 -0700)]
fix(files): Sort tree views correctly by natural order
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Christopher Ng [Mon, 9 Sep 2024 23:11:43 +0000 (16:11 -0700)]
chore(deps): Bump `@nextcloud/files` to v3.9.0
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Andy Scherzinger [Tue, 10 Sep 2024 19:06:25 +0000 (21:06 +0200)]
Merge pull request #47810 from nextcloud/backport/47649/stable30
[stable30] fix: Fix inaccessible content on public pages due to overlapping footer
Andy Scherzinger [Tue, 10 Sep 2024 18:58:06 +0000 (20:58 +0200)]
Merge pull request #47874 from nextcloud/backport/47853/stable30
[stable30] fix: make swift connect exception message more informative
Julius Knorr [Tue, 10 Sep 2024 14:56:54 +0000 (16:56 +0200)]
Merge pull request #47863 from nextcloud/backport/47860/stable30
[stable30] fix: Only write once to template instead of create/copy
Robin Appelman [Mon, 9 Sep 2024 15:15:01 +0000 (17:15 +0200)]
fix: make swift connect exception message more informative
Signed-off-by: Robin Appelman <robin@icewind.nl>
Joas Schilling [Tue, 10 Sep 2024 14:19:32 +0000 (16:19 +0200)]
Merge pull request #47839 from nextcloud/backport/47640/stable30
[stable30] fix: Run migration sql as statement so that the primary db node is used
Stephan Orbaugh [Tue, 10 Sep 2024 11:31:11 +0000 (13:31 +0200)]
Merge pull request #47851 from nextcloud/backport/47807/stable30
[stable30] fix(files_sharing): password checkbox and labels in link share
Stephan Orbaugh [Tue, 10 Sep 2024 09:47:34 +0000 (11:47 +0200)]
Merge pull request #47842 from nextcloud/backport/47805/stable30
[stable30] fix: Replace conflicting tags in `xml_exception` template
Julius Knorr [Tue, 10 Sep 2024 07:43:42 +0000 (09:43 +0200)]
fix: Only write once to template instead of create/copy
Signed-off-by: Julius Knorr <jus@bitgrid.net>
Andy Scherzinger [Tue, 10 Sep 2024 07:45:01 +0000 (09:45 +0200)]
Merge pull request #47855 from nextcloud/backport/47845/stable30
[stable30] Add an endpoint to remove all webhook registrations from an app
Nextcloud bot [Tue, 10 Sep 2024 00:37:37 +0000 (00:37 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Grigorii K. Shartsev [Mon, 9 Sep 2024 21:42:13 +0000 (23:42 +0200)]
chore(assets): Recompile assets
Signed-off-by: Grigorii K. Shartsev <me@shgk.me>
Grigorii K. Shartsev [Fri, 6 Sep 2024 14:48:05 +0000 (16:48 +0200)]
fix(files_sharing): add accessible labels in link share creation
Signed-off-by: Grigorii K. Shartsev <me@shgk.me>
Côme Chilliet [Mon, 9 Sep 2024 12:50:52 +0000 (14:50 +0200)]
chore(webhook_listeners): Update openapi.json
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Côme Chilliet [Mon, 9 Sep 2024 12:41:20 +0000 (14:41 +0200)]
feat(webhook_listeners): Add API endpoint to remove all registrations from an AppAPI app
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Côme Chilliet [Mon, 9 Sep 2024 12:39:41 +0000 (14:39 +0200)]
feat(webhook_listeners): Add mapper method to remove all registrations from a given AppAPI id
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Grigorii K. Shartsev [Fri, 6 Sep 2024 14:47:08 +0000 (16:47 +0200)]
fix(files_sharing): checkbox for password in link share is not shown
Signed-off-by: Grigorii K. Shartsev <me@shgk.me>
Ferdinand Thiessen [Fri, 6 Sep 2024 14:49:33 +0000 (16:49 +0200)]
fix: Replace conflicting tags in `xml_exception` template
The `<?xml` tag is interpreted as PHP short tags, so this causes errors.
Instead just print that part of the template.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Julius Härtl [Fri, 30 Aug 2024 13:45:50 +0000 (15:45 +0200)]
fix: Run migration sql as statement so that the primary db node is used
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Nextcloud bot [Mon, 9 Sep 2024 00:23:33 +0000 (00:23 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Nextcloud bot [Sun, 8 Sep 2024 00:36:42 +0000 (00:36 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Nextcloud bot [Sat, 7 Sep 2024 00:37:06 +0000 (00:37 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
nextcloud-command [Fri, 6 Sep 2024 22:58:07 +0000 (22:58 +0000)]
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Christopher Ng [Fri, 6 Sep 2024 22:43:13 +0000 (15:43 -0700)]
chore: compile scss
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Christopher Ng [Fri, 6 Sep 2024 22:43:13 +0000 (15:43 -0700)]
fix: Fix inaccessible content on public pages due to overlapping footer
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Nextcloud bot [Fri, 6 Sep 2024 00:25:17 +0000 (00:25 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Andy Scherzinger [Thu, 5 Sep 2024 20:29:13 +0000 (22:29 +0200)]
Merge pull request #47787 from nextcloud/backport/47770/stable30
[stable30] fix(dav): Always respond custom error page on exceptions
Louis Chemineau [Thu, 5 Sep 2024 14:17:32 +0000 (16:17 +0200)]
fix(dav): Always respond custom error page on exceptions
Signed-off-by: Louis Chemineau <louis@chmn.me>
Arthur Schiwon [Thu, 5 Sep 2024 18:14:24 +0000 (20:14 +0200)]
Merge pull request #47757 from nextcloud/release/30.0.0_rc4
30.0.0 RC4
Arthur Schiwon [Thu, 5 Sep 2024 18:11:50 +0000 (20:11 +0200)]
Merge pull request #47775 from nextcloud/backport/46255/stable30
[stable30] fix: add option to remove the webroot for setup checks and don't chec…
Arthur Schiwon [Thu, 5 Sep 2024 18:04:40 +0000 (20:04 +0200)]
Merge pull request #47781 from nextcloud/backport/47519/stable30
[stable30] feat(transfer-ownership): Correctly react to encrypted files
Arthur Schiwon [Thu, 5 Sep 2024 18:03:46 +0000 (20:03 +0200)]
Merge pull request #47778 from nextcloud/backport/47769/stable30
[stable30] fix: Use sha256 to hash arguments of background jobs
Côme Chilliet [Tue, 3 Sep 2024 07:46:36 +0000 (09:46 +0200)]
fix(transfer-ownership): Improve comments according to code review
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Côme Chilliet [Tue, 27 Aug 2024 10:53:38 +0000 (12:53 +0200)]
feat(transfer-ownership): Correctly react to encrypted files
For E2EE encrypted files, we abort the transfer.
For SSE encrypted files, we abort only if not using master key.
Also fixed the check for when the path to a single file is used.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Louis Chemineau [Wed, 28 Aug 2024 15:46:00 +0000 (17:46 +0200)]
fix: Migrate existing bg jobs to use sha256
Signed-off-by: Louis Chemineau <louis@chmn.me>
Louis Chemineau [Wed, 28 Aug 2024 15:03:53 +0000 (17:03 +0200)]
fix: Use sha256 to hash arguments of background jobs
This is to prevent collision as we are sometime hashing user input, yet using that hash to target the background job in the database.
Signed-off-by: Louis Chemineau <louis@chmn.me>
Côme Chilliet [Thu, 5 Sep 2024 09:54:45 +0000 (11:54 +0200)]
fix(setupchecks): Test overwrite.cli url first, then generated one, and
trusted domains as last fallback.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Daniel Kesselberg [Tue, 2 Jul 2024 18:34:07 +0000 (20:34 +0200)]
fix: add option to remove the webroot for setup checks and don't check trusted_domains.
1) The checks for well-known urls should always run against the root domain and therefore the option to remove the webroot.
2) For trusted domains, the available protocol is unknown, and thus some guesswork would be needed to make that work. I've decided for now to not consider them anymore to reduce false-positives.
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Arthur Schiwon [Thu, 5 Sep 2024 08:49:06 +0000 (10:49 +0200)]
Merge pull request #47484 from nextcloud/backport/46013/stable30
[stable30] fix: write object to the correct urn when moving from another storage to object store
Andy Scherzinger [Thu, 5 Sep 2024 07:23:33 +0000 (09:23 +0200)]
Merge pull request #47753 from nextcloud/backport/47745/stable30
[stable30] fix(files): undefined displayname for outdated `@nextcloud/files`<3.6.0 apps
Andy Scherzinger [Thu, 5 Sep 2024 07:18:52 +0000 (09:18 +0200)]
Merge pull request #47764 from nextcloud/backport/47754/stable30
[stable30] fix(appstore): Cache apps.json also on dev instances
Marcel Müller [Wed, 4 Sep 2024 19:13:29 +0000 (21:13 +0200)]
fix(appstore): Cache apps.json also on dev instances
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
nextcloud-command [Wed, 4 Sep 2024 21:52:59 +0000 (21:52 +0000)]
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
skjnldsv [Wed, 4 Sep 2024 14:42:18 +0000 (16:42 +0200)]
fix(files): undefined displayname for outdated `@nextcloud/files`<3.6.0 apps
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Nextcloud bot [Thu, 5 Sep 2024 00:23:58 +0000 (00:23 +0000)]
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
Robin Appelman [Thu, 20 Jun 2024 13:57:59 +0000 (15:57 +0200)]
fix: write object to the correct urn when moving from another storage to object store
Signed-off-by: Robin Appelman <robin@icewind.nl>
Andy Scherzinger [Wed, 4 Sep 2024 21:12:26 +0000 (23:12 +0200)]
Merge pull request #47733 from nextcloud/backport/46859/stable30
[stable30] Fix status check and saving of external storages
Andy Scherzinger [Wed, 4 Sep 2024 21:11:18 +0000 (23:11 +0200)]
Merge pull request #47751 from nextcloud/backport/47417/stable30
[stable30] fix(files): Create non-existent parents of mountpoints
Arthur Schiwon [Wed, 4 Sep 2024 21:03:18 +0000 (23:03 +0200)]
build(hub): 30.0.0 RC4
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
provokateurin [Thu, 22 Aug 2024 10:04:31 +0000 (12:04 +0200)]
fix(files): Create non-existent parents of mountpoints
Signed-off-by: provokateurin <kate@provokateurin.de>
John Molakvoæ [Wed, 4 Sep 2024 16:08:18 +0000 (18:08 +0200)]
Merge pull request #47748 from nextcloud/backport/47738/stable30
nextcloud-command [Wed, 4 Sep 2024 14:33:03 +0000 (14:33 +0000)]
chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
skjnldsv [Wed, 4 Sep 2024 12:10:37 +0000 (14:10 +0200)]
fix(files): undefined sidebar
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Daniel Calviño Sánchez [Wed, 21 Aug 2024 19:26:23 +0000 (21:26 +0200)]
fix: Hide status tooltip in row to add a new mount point
The row to add a new mount point is cloned when a new mountpoint is
added, so it is expected that it includes a status span. However, it
should not be displayed in that row, only in the cloned row when its
status is updated.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Daniel Calviño Sánchez [Tue, 30 Jul 2024 01:05:27 +0000 (03:05 +0200)]
fix: Fix unmodified placeholder replacing the actual value when updating
When updating global storages and user storages a property is not
updated by "StoragesService::updateStorage()" if the value matches the
unmodified placeholder. However, userglobal storages are not updated
through the "StoragesService"; as only the authentication mechanism is
updated it is directly done with "saveBackendOptions()" in
"IUserProvided" or "UserGlobalAuth". Due to this the unmodified
placeholder value needs to be explicitly checked in those cases and
replaced by the actual value (note that in this case it is not possible
to just skip updating a specific property).
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez [Tue, 30 Jul 2024 01:04:40 +0000 (03:04 +0200)]
test: Add integration tests for saving external userglobal storages
As the external storage uses the Nextcloud server itself the number of
workers of the PHP process running the Nextcloud server had to be
increased. Otherwise if a request is sent for the external storage while
handling a request from the integration tests a deadlock would occur.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez [Mon, 29 Jul 2024 10:21:13 +0000 (12:21 +0200)]
fix: Reset selected backend when adding a new storage
As a new storage is added by selecting a backend the selected backend
needs to be reset. Otherwise it is not possible to add another storage
with the same backend.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez [Mon, 29 Jul 2024 10:20:18 +0000 (12:20 +0200)]
fix: Add missing translation for UI string
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez [Mon, 29 Jul 2024 10:18:12 +0000 (12:18 +0200)]
fix: Restore default status tooltip when no status message is provided
If the status is updated but no explicit message is provided (for
example, if the status check succeeded) the default tooltip (from the
template) is now set to prevent a mismatch between the status and the
tooltip (for example, if the configuration is fixed after a failed
status check).
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>